diff --git a/.changeset/tricky-gifts-live.md b/.changeset/tricky-gifts-live.md new file mode 100644 index 00000000000..46c209616ee --- /dev/null +++ b/.changeset/tricky-gifts-live.md @@ -0,0 +1,11 @@ +--- +"@thirdweb-dev/service-utils": minor +"@thirdweb-dev/storage": minor +"@thirdweb-dev/wallets": minor +"@thirdweb-dev/chains": minor +"thirdweb": minor +"@thirdweb-dev/sdk": minor +--- + +CLI will now use an OAuth like login flow to authenticate the device with the wallet on the dashboard. +Any actions performed by the CLI will be linked to your account / wallet on the dashboard, including but not limited to tracking your usage, and billing as needed. diff --git a/packages/chains/src/index.ts b/packages/chains/src/index.ts index 12f1d54f77e..07e676e6e38 100644 --- a/packages/chains/src/index.ts +++ b/packages/chains/src/index.ts @@ -2030,2030 +2030,2030 @@ export const allChains: Chain[] = [c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, type ChainsById = { 1: typeof c1, -2: typeof c2, -3: typeof c3, -4: typeof c4, -5: typeof c5, -6: typeof c6, -7: typeof c7, -8: typeof c8, -9: typeof c9, -10: typeof c10, -11: typeof c11, -12: typeof c12, -13: typeof c13, -14: typeof c14, -15: typeof c15, -16: typeof c16, -17: typeof c17, -18: typeof c18, -19: typeof c19, -20: typeof c20, -21: typeof c21, -22: typeof c22, -23: typeof c23, -24: typeof c24, -25: typeof c25, -26: typeof c26, -27: typeof c27, -28: typeof c28, -29: typeof c29, -30: typeof c30, -31: typeof c31, -32: typeof c32, -33: typeof c33, -34: typeof c34, -35: typeof c35, -36: typeof c36, -38: typeof c38, -39: typeof c39, -40: typeof c40, -41: typeof c41, -42: typeof c42, -43: typeof c43, -44: typeof c44, -45: typeof c45, -46: typeof c46, -48: typeof c48, -49: typeof c49, -50: typeof c50, -51: typeof c51, -52: typeof c52, -53: typeof c53, -54: typeof c54, -55: typeof c55, -56: typeof c56, -57: typeof c57, -58: typeof c58, -60: typeof c60, -61: typeof c61, -62: typeof c62, -63: typeof c63, -64: typeof c64, -65: typeof c65, -66: typeof c66, -67: typeof c67, -68: typeof c68, -69: typeof c69, -70: typeof c70, -71: typeof c71, -72: typeof c72, -73: typeof c73, -74: typeof c74, -75: typeof c75, -76: typeof c76, -77: typeof c77, -78: typeof c78, -79: typeof c79, -80: typeof c80, -81: typeof c81, -82: typeof c82, -83: typeof c83, -84: typeof c84, -85: typeof c85, -86: typeof c86, -87: typeof c87, -88: typeof c88, -89: typeof c89, -90: typeof c90, -91: typeof c91, -92: typeof c92, -93: typeof c93, -94: typeof c94, -95: typeof c95, -96: typeof c96, -97: typeof c97, -98: typeof c98, -99: typeof c99, -100: typeof c100, -101: typeof c101, -102: typeof c102, -104: typeof c104, -105: typeof c105, -106: typeof c106, -107: typeof c107, -108: typeof c108, -110: typeof c110, -111: typeof c111, -112: typeof c112, -113: typeof c113, -114: typeof c114, -117: typeof c117, -118: typeof c118, -119: typeof c119, -120: typeof c120, -121: typeof c121, -122: typeof c122, -123: typeof c123, -124: typeof c124, -125: typeof c125, -126: typeof c126, -127: typeof c127, -128: typeof c128, -134: typeof c134, -135: typeof c135, -136: typeof c136, -137: typeof c137, -138: typeof c138, -139: typeof c139, -141: typeof c141, -142: typeof c142, -144: typeof c144, -150: typeof c150, -155: typeof c155, -156: typeof c156, -160: typeof c160, -161: typeof c161, -162: typeof c162, -163: typeof c163, -165: typeof c165, -167: typeof c167, -168: typeof c168, -170: typeof c170, -172: typeof c172, -180: typeof c180, -186: typeof c186, -188: typeof c188, -189: typeof c189, -193: typeof c193, -195: typeof c195, -196: typeof c196, -197: typeof c197, -198: typeof c198, -199: typeof c199, -200: typeof c200, -201: typeof c201, -204: typeof c204, -208: typeof c208, -210: typeof c210, -211: typeof c211, -212: typeof c212, -217: typeof c217, -225: typeof c225, -226: typeof c226, -230: typeof c230, -236: typeof c236, -242: typeof c242, -246: typeof c246, -248: typeof c248, -250: typeof c250, -256: typeof c256, -258: typeof c258, -259: typeof c259, -262: typeof c262, -269: typeof c269, -271: typeof c271, -274: typeof c274, -280: typeof c280, -288: typeof c288, -295: typeof c295, -296: typeof c296, -297: typeof c297, -298: typeof c298, -301: typeof c301, -303: typeof c303, -311: typeof c311, -313: typeof c313, -314: typeof c314, -321: typeof c321, -322: typeof c322, -324: typeof c324, -333: typeof c333, -335: typeof c335, -336: typeof c336, -338: typeof c338, -345: typeof c345, -361: typeof c361, -363: typeof c363, -364: typeof c364, -365: typeof c365, -369: typeof c369, -371: typeof c371, -385: typeof c385, -400: typeof c400, -401: typeof c401, -411: typeof c411, -416: typeof c416, -418: typeof c418, -420: typeof c420, -424: typeof c424, -427: typeof c427, -443: typeof c443, -444: typeof c444, -456: typeof c456, -499: typeof c499, -500: typeof c500, -501: typeof c501, -512: typeof c512, -513: typeof c513, -516: typeof c516, -520: typeof c520, -529: typeof c529, -530: typeof c530, -534: typeof c534, -542: typeof c542, -555: typeof c555, -558: typeof c558, -568: typeof c568, -570: typeof c570, -592: typeof c592, -595: typeof c595, -596: typeof c596, -597: typeof c597, -599: typeof c599, -600: typeof c600, -601: typeof c601, -614: typeof c614, -634: typeof c634, -647: typeof c647, -648: typeof c648, -666: typeof c666, -667: typeof c667, -686: typeof c686, -700: typeof c700, -707: typeof c707, -708: typeof c708, -719: typeof c719, -721: typeof c721, -741: typeof c741, -742: typeof c742, -766: typeof c766, -776: typeof c776, -777: typeof c777, -786: typeof c786, -787: typeof c787, -788: typeof c788, -789: typeof c789, -800: typeof c800, -803: typeof c803, -808: typeof c808, -813: typeof c813, -818: typeof c818, -820: typeof c820, -841: typeof c841, -842: typeof c842, -859: typeof c859, -868: typeof c868, -876: typeof c876, -877: typeof c877, -880: typeof c880, -888: typeof c888, -900: typeof c900, -901: typeof c901, -902: typeof c902, -903: typeof c903, -909: typeof c909, -910: typeof c910, -917: typeof c917, -942: typeof c942, -943: typeof c943, -956: typeof c956, -970: typeof c970, -971: typeof c971, -972: typeof c972, -977: typeof c977, -980: typeof c980, -985: typeof c985, -989: typeof c989, -990: typeof c990, -997: typeof c997, -998: typeof c998, -1000: typeof c1000, -1001: typeof c1001, -1004: typeof c1004, -1007: typeof c1007, -1008: typeof c1008, -1010: typeof c1010, -1012: typeof c1012, -1022: typeof c1022, -1023: typeof c1023, -1024: typeof c1024, -1028: typeof c1028, -1030: typeof c1030, -1031: typeof c1031, -1038: typeof c1038, -1039: typeof c1039, -1072: typeof c1072, -1079: typeof c1079, -1080: typeof c1080, -1088: typeof c1088, -1099: typeof c1099, -1101: typeof c1101, -1111: typeof c1111, -1112: typeof c1112, -1115: typeof c1115, -1116: typeof c1116, -1117: typeof c1117, -1130: typeof c1130, -1131: typeof c1131, -1138: typeof c1138, -1139: typeof c1139, -1140: typeof c1140, -1149: typeof c1149, -1170: typeof c1170, -1177: typeof c1177, -1197: typeof c1197, -1201: typeof c1201, -1202: typeof c1202, -1213: typeof c1213, -1214: typeof c1214, -1229: typeof c1229, -1230: typeof c1230, -1231: typeof c1231, -1234: typeof c1234, -1243: typeof c1243, -1244: typeof c1244, -1246: typeof c1246, -1252: typeof c1252, -1280: typeof c1280, -1284: typeof c1284, -1285: typeof c1285, -1287: typeof c1287, -1288: typeof c1288, -1291: typeof c1291, -1294: typeof c1294, -1297: typeof c1297, -1311: typeof c1311, -1314: typeof c1314, -1319: typeof c1319, -1320: typeof c1320, -1338: typeof c1338, -1339: typeof c1339, -1353: typeof c1353, -1369: typeof c1369, -1379: typeof c1379, -1388: typeof c1388, -1392: typeof c1392, -1433: typeof c1433, -1440: typeof c1440, -1442: typeof c1442, -1452: typeof c1452, -1455: typeof c1455, -1501: typeof c1501, -1506: typeof c1506, -1507: typeof c1507, -1515: typeof c1515, -1559: typeof c1559, -1618: typeof c1618, -1620: typeof c1620, -1657: typeof c1657, -1663: typeof c1663, -1688: typeof c1688, -1701: typeof c1701, -1707: typeof c1707, -1708: typeof c1708, -1718: typeof c1718, -1773: typeof c1773, -1777: typeof c1777, -1804: typeof c1804, -1807: typeof c1807, -1818: typeof c1818, -1819: typeof c1819, -1856: typeof c1856, -1875: typeof c1875, -1881: typeof c1881, -1890: typeof c1890, -1891: typeof c1891, -1898: typeof c1898, -1907: typeof c1907, -1908: typeof c1908, -1945: typeof c1945, -1951: typeof c1951, -1954: typeof c1954, -1967: typeof c1967, -1969: typeof c1969, -1970: typeof c1970, -1971: typeof c1971, -1975: typeof c1975, -1984: typeof c1984, -1987: typeof c1987, -1994: typeof c1994, -1995: typeof c1995, -2000: typeof c2000, -2001: typeof c2001, -2002: typeof c2002, -2008: typeof c2008, -2009: typeof c2009, -2016: typeof c2016, -2018: typeof c2018, -2019: typeof c2019, -2020: typeof c2020, -2021: typeof c2021, -2022: typeof c2022, -2023: typeof c2023, -2025: typeof c2025, -2031: typeof c2031, -2032: typeof c2032, -2037: typeof c2037, -2043: typeof c2043, -2044: typeof c2044, -2047: typeof c2047, -2048: typeof c2048, -2077: typeof c2077, -2088: typeof c2088, -2089: typeof c2089, -2100: typeof c2100, -2101: typeof c2101, -2109: typeof c2109, -2122: typeof c2122, -2124: typeof c2124, -2138: typeof c2138, -2151: typeof c2151, -2152: typeof c2152, -2153: typeof c2153, -2154: typeof c2154, -2199: typeof c2199, -2202: typeof c2202, -2203: typeof c2203, -2213: typeof c2213, -2221: typeof c2221, -2222: typeof c2222, -2223: typeof c2223, -2300: typeof c2300, -2309: typeof c2309, -2323: typeof c2323, -2330: typeof c2330, -2332: typeof c2332, -2358: typeof c2358, -2399: typeof c2399, -2400: typeof c2400, -2415: typeof c2415, -2484: typeof c2484, -2559: typeof c2559, -2569: typeof c2569, -2606: typeof c2606, -2611: typeof c2611, -2612: typeof c2612, -2613: typeof c2613, -2625: typeof c2625, -2888: typeof c2888, -2999: typeof c2999, -3000: typeof c3000, -3001: typeof c3001, -3003: typeof c3003, -3011: typeof c3011, -3031: typeof c3031, -3068: typeof c3068, -3306: typeof c3306, -3331: typeof c3331, -3333: typeof c3333, -3334: typeof c3334, -3400: typeof c3400, -3434: typeof c3434, -3500: typeof c3500, -3501: typeof c3501, -3601: typeof c3601, -3602: typeof c3602, -3636: typeof c3636, -3637: typeof c3637, -3666: typeof c3666, -3690: typeof c3690, -3693: typeof c3693, -3698: typeof c3698, -3699: typeof c3699, -3701: typeof c3701, -3737: typeof c3737, -3797: typeof c3797, -3888: typeof c3888, -3889: typeof c3889, -3912: typeof c3912, -3939: typeof c3939, -3966: typeof c3966, -3967: typeof c3967, -3999: typeof c3999, -4000: typeof c4000, -4001: typeof c4001, -4002: typeof c4002, -4051: typeof c4051, -4061: typeof c4061, -4062: typeof c4062, -4090: typeof c4090, -4096: typeof c4096, -4099: typeof c4099, -4102: typeof c4102, -4141: typeof c4141, -4181: typeof c4181, -4201: typeof c4201, -4242: typeof c4242, -4328: typeof c4328, -4337: typeof c4337, -4444: typeof c4444, -4460: typeof c4460, -4689: typeof c4689, -4690: typeof c4690, -4759: typeof c4759, -4777: typeof c4777, -4918: typeof c4918, -4919: typeof c4919, -4999: typeof c4999, -5000: typeof c5000, -5001: typeof c5001, -5002: typeof c5002, -5005: typeof c5005, -5165: typeof c5165, -5177: typeof c5177, -5197: typeof c5197, -5234: typeof c5234, -5315: typeof c5315, -5551: typeof c5551, -5553: typeof c5553, -5555: typeof c5555, -5616: typeof c5616, -5678: typeof c5678, -5700: typeof c5700, -5729: typeof c5729, -5758: typeof c5758, -5777: typeof c5777, -5851: typeof c5851, -5869: typeof c5869, -6065: typeof c6065, -6066: typeof c6066, -6102: typeof c6102, -6118: typeof c6118, -6119: typeof c6119, -6502: typeof c6502, -6552: typeof c6552, -6565: typeof c6565, -6626: typeof c6626, -6688: typeof c6688, -6789: typeof c6789, -6969: typeof c6969, -6999: typeof c6999, -7000: typeof c7000, -7001: typeof c7001, -7027: typeof c7027, -7070: typeof c7070, -7171: typeof c7171, -7331: typeof c7331, -7332: typeof c7332, -7341: typeof c7341, -7484: typeof c7484, -7518: typeof c7518, -7575: typeof c7575, -7576: typeof c7576, -7668: typeof c7668, -7672: typeof c7672, -7700: typeof c7700, -7701: typeof c7701, -7771: typeof c7771, -7777: typeof c7777, -7878: typeof c7878, -7895: typeof c7895, -7979: typeof c7979, -8000: typeof c8000, -8001: typeof c8001, -8029: typeof c8029, -8080: typeof c8080, -8082: typeof c8082, -8086: typeof c8086, -8098: typeof c8098, -8131: typeof c8131, -8132: typeof c8132, -8133: typeof c8133, -8134: typeof c8134, -8135: typeof c8135, -8136: typeof c8136, -8181: typeof c8181, -8217: typeof c8217, -8272: typeof c8272, -8285: typeof c8285, -8387: typeof c8387, -8453: typeof c8453, -8654: typeof c8654, -8655: typeof c8655, -8723: typeof c8723, -8724: typeof c8724, -8738: typeof c8738, -8768: typeof c8768, -8848: typeof c8848, -8880: typeof c8880, -8881: typeof c8881, -8882: typeof c8882, -8883: typeof c8883, -8888: typeof c8888, -8889: typeof c8889, -8898: typeof c8898, -8899: typeof c8899, -8989: typeof c8989, -8995: typeof c8995, -9000: typeof c9000, -9001: typeof c9001, -9012: typeof c9012, -9100: typeof c9100, -9223: typeof c9223, -9339: typeof c9339, -9527: typeof c9527, -9528: typeof c9528, -9559: typeof c9559, -9700: typeof c9700, -9728: typeof c9728, -9768: typeof c9768, -9779: typeof c9779, -9790: typeof c9790, -9792: typeof c9792, -9818: typeof c9818, -9819: typeof c9819, -9977: typeof c9977, -9996: typeof c9996, -9997: typeof c9997, -9999: typeof c9999, -10000: typeof c10000, -10001: typeof c10001, -10024: typeof c10024, -10081: typeof c10081, -10086: typeof c10086, -10101: typeof c10101, -10200: typeof c10200, -10201: typeof c10201, -10243: typeof c10243, -10248: typeof c10248, -10507: typeof c10507, -10508: typeof c10508, -10823: typeof c10823, -10946: typeof c10946, -10947: typeof c10947, -11110: typeof c11110, -11111: typeof c11111, -11115: typeof c11115, -11119: typeof c11119, -11235: typeof c11235, -11437: typeof c11437, -11612: typeof c11612, -11888: typeof c11888, -12009: typeof c12009, -12051: typeof c12051, -12052: typeof c12052, -12123: typeof c12123, -12306: typeof c12306, -12321: typeof c12321, -12345: typeof c12345, -12715: typeof c12715, -13000: typeof c13000, -13308: typeof c13308, -13337: typeof c13337, -13381: typeof c13381, -13812: typeof c13812, -14000: typeof c14000, -14853: typeof c14853, -15551: typeof c15551, -15555: typeof c15555, -15557: typeof c15557, -16000: typeof c16000, -16001: typeof c16001, -16507: typeof c16507, -16688: typeof c16688, -16718: typeof c16718, -16888: typeof c16888, -17000: typeof c17000, -17180: typeof c17180, -17777: typeof c17777, -18000: typeof c18000, -18122: typeof c18122, -18159: typeof c18159, -18686: typeof c18686, -19011: typeof c19011, -19845: typeof c19845, -20001: typeof c20001, -20729: typeof c20729, -20736: typeof c20736, -21337: typeof c21337, -21816: typeof c21816, -22023: typeof c22023, -22040: typeof c22040, -22776: typeof c22776, -23006: typeof c23006, -23118: typeof c23118, -23294: typeof c23294, -23295: typeof c23295, -24484: typeof c24484, -24734: typeof c24734, -25888: typeof c25888, -25925: typeof c25925, -26026: typeof c26026, -26600: typeof c26600, -26863: typeof c26863, -28528: typeof c28528, -30067: typeof c30067, -31102: typeof c31102, -31223: typeof c31223, -31224: typeof c31224, -31337: typeof c31337, -32520: typeof c32520, -32659: typeof c32659, -32769: typeof c32769, -33101: typeof c33101, -33333: typeof c33333, -35011: typeof c35011, -35441: typeof c35441, -35443: typeof c35443, -39797: typeof c39797, -39815: typeof c39815, -41500: typeof c41500, -42069: typeof c42069, -42161: typeof c42161, -42170: typeof c42170, -42220: typeof c42220, -42261: typeof c42261, -42262: typeof c42262, -42888: typeof c42888, -43110: typeof c43110, -43113: typeof c43113, -43114: typeof c43114, -43288: typeof c43288, -44444: typeof c44444, -44787: typeof c44787, -45000: typeof c45000, -46688: typeof c46688, -47805: typeof c47805, -49049: typeof c49049, -49088: typeof c49088, -49797: typeof c49797, -50001: typeof c50001, -50021: typeof c50021, -51178: typeof c51178, -51712: typeof c51712, -53935: typeof c53935, -54211: typeof c54211, -54321: typeof c54321, -55004: typeof c55004, -55555: typeof c55555, -55556: typeof c55556, -56288: typeof c56288, -56789: typeof c56789, -57000: typeof c57000, -58008: typeof c58008, -59140: typeof c59140, -60000: typeof c60000, -60001: typeof c60001, -60002: typeof c60002, -60103: typeof c60103, -61800: typeof c61800, -61803: typeof c61803, -61916: typeof c61916, -62320: typeof c62320, -62621: typeof c62621, -63000: typeof c63000, -63001: typeof c63001, -65450: typeof c65450, -67588: typeof c67588, -69420: typeof c69420, -70000: typeof c70000, -70001: typeof c70001, -70002: typeof c70002, -70103: typeof c70103, -71111: typeof c71111, -71393: typeof c71393, -71401: typeof c71401, -71402: typeof c71402, -73799: typeof c73799, -73927: typeof c73927, -75000: typeof c75000, -77612: typeof c77612, -77777: typeof c77777, -78110: typeof c78110, -78281: typeof c78281, -79879: typeof c79879, -80001: typeof c80001, -81341: typeof c81341, -81342: typeof c81342, -81343: typeof c81343, -81351: typeof c81351, -81352: typeof c81352, -81353: typeof c81353, -81361: typeof c81361, -81362: typeof c81362, -81363: typeof c81363, -84531: typeof c84531, -84886: typeof c84886, -85449: typeof c85449, -88880: typeof c88880, -90210: typeof c90210, -91002: typeof c91002, -92001: typeof c92001, -96970: typeof c96970, -99099: typeof c99099, -99998: typeof c99998, -99999: typeof c99999, -100000: typeof c100000, -100001: typeof c100001, -100002: typeof c100002, -100003: typeof c100003, -100004: typeof c100004, -100005: typeof c100005, -100006: typeof c100006, -100007: typeof c100007, -100008: typeof c100008, -100009: typeof c100009, -100010: typeof c100010, -101010: typeof c101010, -103090: typeof c103090, -108801: typeof c108801, -110000: typeof c110000, -110001: typeof c110001, -110002: typeof c110002, -110003: typeof c110003, -110004: typeof c110004, -110005: typeof c110005, -110006: typeof c110006, -110007: typeof c110007, -110008: typeof c110008, -111000: typeof c111000, -111111: typeof c111111, -112358: typeof c112358, -123456: typeof c123456, -131419: typeof c131419, -142857: typeof c142857, -167005: typeof c167005, -167006: typeof c167006, -188881: typeof c188881, -200101: typeof c200101, -200202: typeof c200202, -200625: typeof c200625, -201018: typeof c201018, -201030: typeof c201030, -201804: typeof c201804, -202020: typeof c202020, -202624: typeof c202624, -210425: typeof c210425, -220315: typeof c220315, -221230: typeof c221230, -221231: typeof c221231, -224168: typeof c224168, -230315: typeof c230315, -234666: typeof c234666, -246529: typeof c246529, -246785: typeof c246785, -247253: typeof c247253, -256256: typeof c256256, -266256: typeof c266256, -271271: typeof c271271, -281121: typeof c281121, -314159: typeof c314159, -330844: typeof c330844, -333331: typeof c333331, -333777: typeof c333777, -333888: typeof c333888, -333999: typeof c333999, -355113: typeof c355113, -373737: typeof c373737, -381931: typeof c381931, -381932: typeof c381932, -404040: typeof c404040, -420420: typeof c420420, -420666: typeof c420666, -420692: typeof c420692, -421611: typeof c421611, -421613: typeof c421613, -424242: typeof c424242, -431140: typeof c431140, -432201: typeof c432201, -432204: typeof c432204, -444900: typeof c444900, -471100: typeof c471100, -474142: typeof c474142, -512512: typeof c512512, -513100: typeof c513100, -534351: typeof c534351, -534352: typeof c534352, -534353: typeof c534353, -534849: typeof c534849, -535037: typeof c535037, -641230: typeof c641230, -651940: typeof c651940, -666666: typeof c666666, -751230: typeof c751230, -761412: typeof c761412, -800001: typeof c800001, -827431: typeof c827431, -846000: typeof c846000, -888888: typeof c888888, -900000: typeof c900000, -910000: typeof c910000, -920000: typeof c920000, -920001: typeof c920001, -923018: typeof c923018, -955305: typeof c955305, -1313114: typeof c1313114, -1313500: typeof c1313500, -1337702: typeof c1337702, -1337802: typeof c1337802, -1337803: typeof c1337803, -2021398: typeof c2021398, -2099156: typeof c2099156, -2206132: typeof c2206132, -3141592: typeof c3141592, -3441005: typeof c3441005, -4000003: typeof c4000003, -4281033: typeof c4281033, -5167003: typeof c5167003, -5555555: typeof c5555555, -5555558: typeof c5555558, -7225878: typeof c7225878, -7355310: typeof c7355310, -7668378: typeof c7668378, -7762959: typeof c7762959, -7777777: typeof c7777777, -8007736: typeof c8007736, -8794598: typeof c8794598, -8888881: typeof c8888881, -8888888: typeof c8888888, -10067275: typeof c10067275, -10101010: typeof c10101010, -11155111: typeof c11155111, -13371337: typeof c13371337, -14288640: typeof c14288640, -16658437: typeof c16658437, -18289463: typeof c18289463, -20180430: typeof c20180430, -20181205: typeof c20181205, -20201022: typeof c20201022, -22052002: typeof c22052002, -27082017: typeof c27082017, -27082022: typeof c27082022, -28945486: typeof c28945486, -29032022: typeof c29032022, -31415926: typeof c31415926, -35855456: typeof c35855456, -43214913: typeof c43214913, -61717561: typeof c61717561, -65010000: typeof c65010000, -65100000: typeof c65100000, -88888888: typeof c88888888, -99415706: typeof c99415706, -192837465: typeof c192837465, -222000222: typeof c222000222, -245022926: typeof c245022926, -245022934: typeof c245022934, -245022940: typeof c245022940, -278611351: typeof c278611351, -311752642: typeof c311752642, -333000333: typeof c333000333, -344106930: typeof c344106930, -356256156: typeof c356256156, -486217935: typeof c486217935, -503129905: typeof c503129905, -1122334455: typeof c1122334455, -1146703430: typeof c1146703430, -1273227453: typeof c1273227453, -1313161554: typeof c1313161554, -1313161555: typeof c1313161555, -1313161556: typeof c1313161556, -1351057110: typeof c1351057110, -1380996178: typeof c1380996178, -1482601649: typeof c1482601649, -1564830818: typeof c1564830818, -1666600000: typeof c1666600000, -1666600001: typeof c1666600001, -1666600002: typeof c1666600002, -1666600003: typeof c1666600003, -1666700000: typeof c1666700000, -1666700001: typeof c1666700001, -1666900000: typeof c1666900000, -1666900001: typeof c1666900001, -2021121117: typeof c2021121117, -2046399126: typeof c2046399126, -2863311531: typeof c2863311531, -3125659152: typeof c3125659152, -4216137055: typeof c4216137055, -11297108099: typeof c11297108099, -11297108109: typeof c11297108109, -111222333444: typeof c111222333444, -197710212030: typeof c197710212030, -197710212031: typeof c197710212031, -383414847825: typeof c383414847825, -666301171999: typeof c666301171999, -6022140761023: typeof c6022140761023, -1337: typeof c1337, -1440001: typeof c1440001, -1582: typeof c1582, -331769: typeof c331769, -331771: typeof c331771, -37: typeof c37, -408: typeof c408, -47: typeof c47, -47279324479: typeof c47279324479, -5611: typeof c5611, -59144: typeof c59144, -8081: typeof c8081, -88882: typeof c88882, -88888: typeof c88888, -91003: typeof c91003, -919: typeof c919, -999: typeof c999 + 2: typeof c2, + 3: typeof c3, + 4: typeof c4, + 5: typeof c5, + 6: typeof c6, + 7: typeof c7, + 8: typeof c8, + 9: typeof c9, + 10: typeof c10, + 11: typeof c11, + 12: typeof c12, + 13: typeof c13, + 14: typeof c14, + 15: typeof c15, + 16: typeof c16, + 17: typeof c17, + 18: typeof c18, + 19: typeof c19, + 20: typeof c20, + 21: typeof c21, + 22: typeof c22, + 23: typeof c23, + 24: typeof c24, + 25: typeof c25, + 26: typeof c26, + 27: typeof c27, + 28: typeof c28, + 29: typeof c29, + 30: typeof c30, + 31: typeof c31, + 32: typeof c32, + 33: typeof c33, + 34: typeof c34, + 35: typeof c35, + 36: typeof c36, + 38: typeof c38, + 39: typeof c39, + 40: typeof c40, + 41: typeof c41, + 42: typeof c42, + 43: typeof c43, + 44: typeof c44, + 45: typeof c45, + 46: typeof c46, + 48: typeof c48, + 49: typeof c49, + 50: typeof c50, + 51: typeof c51, + 52: typeof c52, + 53: typeof c53, + 54: typeof c54, + 55: typeof c55, + 56: typeof c56, + 57: typeof c57, + 58: typeof c58, + 60: typeof c60, + 61: typeof c61, + 62: typeof c62, + 63: typeof c63, + 64: typeof c64, + 65: typeof c65, + 66: typeof c66, + 67: typeof c67, + 68: typeof c68, + 69: typeof c69, + 70: typeof c70, + 71: typeof c71, + 72: typeof c72, + 73: typeof c73, + 74: typeof c74, + 75: typeof c75, + 76: typeof c76, + 77: typeof c77, + 78: typeof c78, + 79: typeof c79, + 80: typeof c80, + 81: typeof c81, + 82: typeof c82, + 83: typeof c83, + 84: typeof c84, + 85: typeof c85, + 86: typeof c86, + 87: typeof c87, + 88: typeof c88, + 89: typeof c89, + 90: typeof c90, + 91: typeof c91, + 92: typeof c92, + 93: typeof c93, + 94: typeof c94, + 95: typeof c95, + 96: typeof c96, + 97: typeof c97, + 98: typeof c98, + 99: typeof c99, + 100: typeof c100, + 101: typeof c101, + 102: typeof c102, + 104: typeof c104, + 105: typeof c105, + 106: typeof c106, + 107: typeof c107, + 108: typeof c108, + 110: typeof c110, + 111: typeof c111, + 112: typeof c112, + 113: typeof c113, + 114: typeof c114, + 117: typeof c117, + 118: typeof c118, + 119: typeof c119, + 120: typeof c120, + 121: typeof c121, + 122: typeof c122, + 123: typeof c123, + 124: typeof c124, + 125: typeof c125, + 126: typeof c126, + 127: typeof c127, + 128: typeof c128, + 134: typeof c134, + 135: typeof c135, + 136: typeof c136, + 137: typeof c137, + 138: typeof c138, + 139: typeof c139, + 141: typeof c141, + 142: typeof c142, + 144: typeof c144, + 150: typeof c150, + 155: typeof c155, + 156: typeof c156, + 160: typeof c160, + 161: typeof c161, + 162: typeof c162, + 163: typeof c163, + 165: typeof c165, + 167: typeof c167, + 168: typeof c168, + 170: typeof c170, + 172: typeof c172, + 180: typeof c180, + 186: typeof c186, + 188: typeof c188, + 189: typeof c189, + 193: typeof c193, + 195: typeof c195, + 196: typeof c196, + 197: typeof c197, + 198: typeof c198, + 199: typeof c199, + 200: typeof c200, + 201: typeof c201, + 204: typeof c204, + 208: typeof c208, + 210: typeof c210, + 211: typeof c211, + 212: typeof c212, + 217: typeof c217, + 225: typeof c225, + 226: typeof c226, + 230: typeof c230, + 236: typeof c236, + 242: typeof c242, + 246: typeof c246, + 248: typeof c248, + 250: typeof c250, + 256: typeof c256, + 258: typeof c258, + 259: typeof c259, + 262: typeof c262, + 269: typeof c269, + 271: typeof c271, + 274: typeof c274, + 280: typeof c280, + 288: typeof c288, + 295: typeof c295, + 296: typeof c296, + 297: typeof c297, + 298: typeof c298, + 301: typeof c301, + 303: typeof c303, + 311: typeof c311, + 313: typeof c313, + 314: typeof c314, + 321: typeof c321, + 322: typeof c322, + 324: typeof c324, + 333: typeof c333, + 335: typeof c335, + 336: typeof c336, + 338: typeof c338, + 345: typeof c345, + 361: typeof c361, + 363: typeof c363, + 364: typeof c364, + 365: typeof c365, + 369: typeof c369, + 371: typeof c371, + 385: typeof c385, + 400: typeof c400, + 401: typeof c401, + 411: typeof c411, + 416: typeof c416, + 418: typeof c418, + 420: typeof c420, + 424: typeof c424, + 427: typeof c427, + 443: typeof c443, + 444: typeof c444, + 456: typeof c456, + 499: typeof c499, + 500: typeof c500, + 501: typeof c501, + 512: typeof c512, + 513: typeof c513, + 516: typeof c516, + 520: typeof c520, + 529: typeof c529, + 530: typeof c530, + 534: typeof c534, + 542: typeof c542, + 555: typeof c555, + 558: typeof c558, + 568: typeof c568, + 570: typeof c570, + 592: typeof c592, + 595: typeof c595, + 596: typeof c596, + 597: typeof c597, + 599: typeof c599, + 600: typeof c600, + 601: typeof c601, + 614: typeof c614, + 634: typeof c634, + 647: typeof c647, + 648: typeof c648, + 666: typeof c666, + 667: typeof c667, + 686: typeof c686, + 700: typeof c700, + 707: typeof c707, + 708: typeof c708, + 719: typeof c719, + 721: typeof c721, + 741: typeof c741, + 742: typeof c742, + 766: typeof c766, + 776: typeof c776, + 777: typeof c777, + 786: typeof c786, + 787: typeof c787, + 788: typeof c788, + 789: typeof c789, + 800: typeof c800, + 803: typeof c803, + 808: typeof c808, + 813: typeof c813, + 818: typeof c818, + 820: typeof c820, + 841: typeof c841, + 842: typeof c842, + 859: typeof c859, + 868: typeof c868, + 876: typeof c876, + 877: typeof c877, + 880: typeof c880, + 888: typeof c888, + 900: typeof c900, + 901: typeof c901, + 902: typeof c902, + 903: typeof c903, + 909: typeof c909, + 910: typeof c910, + 917: typeof c917, + 942: typeof c942, + 943: typeof c943, + 956: typeof c956, + 970: typeof c970, + 971: typeof c971, + 972: typeof c972, + 977: typeof c977, + 980: typeof c980, + 985: typeof c985, + 989: typeof c989, + 990: typeof c990, + 997: typeof c997, + 998: typeof c998, + 1000: typeof c1000, + 1001: typeof c1001, + 1004: typeof c1004, + 1007: typeof c1007, + 1008: typeof c1008, + 1010: typeof c1010, + 1012: typeof c1012, + 1022: typeof c1022, + 1023: typeof c1023, + 1024: typeof c1024, + 1028: typeof c1028, + 1030: typeof c1030, + 1031: typeof c1031, + 1038: typeof c1038, + 1039: typeof c1039, + 1072: typeof c1072, + 1079: typeof c1079, + 1080: typeof c1080, + 1088: typeof c1088, + 1099: typeof c1099, + 1101: typeof c1101, + 1111: typeof c1111, + 1112: typeof c1112, + 1115: typeof c1115, + 1116: typeof c1116, + 1117: typeof c1117, + 1130: typeof c1130, + 1131: typeof c1131, + 1138: typeof c1138, + 1139: typeof c1139, + 1140: typeof c1140, + 1149: typeof c1149, + 1170: typeof c1170, + 1177: typeof c1177, + 1197: typeof c1197, + 1201: typeof c1201, + 1202: typeof c1202, + 1213: typeof c1213, + 1214: typeof c1214, + 1229: typeof c1229, + 1230: typeof c1230, + 1231: typeof c1231, + 1234: typeof c1234, + 1243: typeof c1243, + 1244: typeof c1244, + 1246: typeof c1246, + 1252: typeof c1252, + 1280: typeof c1280, + 1284: typeof c1284, + 1285: typeof c1285, + 1287: typeof c1287, + 1288: typeof c1288, + 1291: typeof c1291, + 1294: typeof c1294, + 1297: typeof c1297, + 1311: typeof c1311, + 1314: typeof c1314, + 1319: typeof c1319, + 1320: typeof c1320, + 1338: typeof c1338, + 1339: typeof c1339, + 1353: typeof c1353, + 1369: typeof c1369, + 1379: typeof c1379, + 1388: typeof c1388, + 1392: typeof c1392, + 1433: typeof c1433, + 1440: typeof c1440, + 1442: typeof c1442, + 1452: typeof c1452, + 1455: typeof c1455, + 1501: typeof c1501, + 1506: typeof c1506, + 1507: typeof c1507, + 1515: typeof c1515, + 1559: typeof c1559, + 1618: typeof c1618, + 1620: typeof c1620, + 1657: typeof c1657, + 1663: typeof c1663, + 1688: typeof c1688, + 1701: typeof c1701, + 1707: typeof c1707, + 1708: typeof c1708, + 1718: typeof c1718, + 1773: typeof c1773, + 1777: typeof c1777, + 1804: typeof c1804, + 1807: typeof c1807, + 1818: typeof c1818, + 1819: typeof c1819, + 1856: typeof c1856, + 1875: typeof c1875, + 1881: typeof c1881, + 1890: typeof c1890, + 1891: typeof c1891, + 1898: typeof c1898, + 1907: typeof c1907, + 1908: typeof c1908, + 1945: typeof c1945, + 1951: typeof c1951, + 1954: typeof c1954, + 1967: typeof c1967, + 1969: typeof c1969, + 1970: typeof c1970, + 1971: typeof c1971, + 1975: typeof c1975, + 1984: typeof c1984, + 1987: typeof c1987, + 1994: typeof c1994, + 1995: typeof c1995, + 2000: typeof c2000, + 2001: typeof c2001, + 2002: typeof c2002, + 2008: typeof c2008, + 2009: typeof c2009, + 2016: typeof c2016, + 2018: typeof c2018, + 2019: typeof c2019, + 2020: typeof c2020, + 2021: typeof c2021, + 2022: typeof c2022, + 2023: typeof c2023, + 2025: typeof c2025, + 2031: typeof c2031, + 2032: typeof c2032, + 2037: typeof c2037, + 2043: typeof c2043, + 2044: typeof c2044, + 2047: typeof c2047, + 2048: typeof c2048, + 2077: typeof c2077, + 2088: typeof c2088, + 2089: typeof c2089, + 2100: typeof c2100, + 2101: typeof c2101, + 2109: typeof c2109, + 2122: typeof c2122, + 2124: typeof c2124, + 2138: typeof c2138, + 2151: typeof c2151, + 2152: typeof c2152, + 2153: typeof c2153, + 2154: typeof c2154, + 2199: typeof c2199, + 2202: typeof c2202, + 2203: typeof c2203, + 2213: typeof c2213, + 2221: typeof c2221, + 2222: typeof c2222, + 2223: typeof c2223, + 2300: typeof c2300, + 2309: typeof c2309, + 2323: typeof c2323, + 2330: typeof c2330, + 2332: typeof c2332, + 2358: typeof c2358, + 2399: typeof c2399, + 2400: typeof c2400, + 2415: typeof c2415, + 2484: typeof c2484, + 2559: typeof c2559, + 2569: typeof c2569, + 2606: typeof c2606, + 2611: typeof c2611, + 2612: typeof c2612, + 2613: typeof c2613, + 2625: typeof c2625, + 2888: typeof c2888, + 2999: typeof c2999, + 3000: typeof c3000, + 3001: typeof c3001, + 3003: typeof c3003, + 3011: typeof c3011, + 3031: typeof c3031, + 3068: typeof c3068, + 3306: typeof c3306, + 3331: typeof c3331, + 3333: typeof c3333, + 3334: typeof c3334, + 3400: typeof c3400, + 3434: typeof c3434, + 3500: typeof c3500, + 3501: typeof c3501, + 3601: typeof c3601, + 3602: typeof c3602, + 3636: typeof c3636, + 3637: typeof c3637, + 3666: typeof c3666, + 3690: typeof c3690, + 3693: typeof c3693, + 3698: typeof c3698, + 3699: typeof c3699, + 3701: typeof c3701, + 3737: typeof c3737, + 3797: typeof c3797, + 3888: typeof c3888, + 3889: typeof c3889, + 3912: typeof c3912, + 3939: typeof c3939, + 3966: typeof c3966, + 3967: typeof c3967, + 3999: typeof c3999, + 4000: typeof c4000, + 4001: typeof c4001, + 4002: typeof c4002, + 4051: typeof c4051, + 4061: typeof c4061, + 4062: typeof c4062, + 4090: typeof c4090, + 4096: typeof c4096, + 4099: typeof c4099, + 4102: typeof c4102, + 4141: typeof c4141, + 4181: typeof c4181, + 4201: typeof c4201, + 4242: typeof c4242, + 4328: typeof c4328, + 4337: typeof c4337, + 4444: typeof c4444, + 4460: typeof c4460, + 4689: typeof c4689, + 4690: typeof c4690, + 4759: typeof c4759, + 4777: typeof c4777, + 4918: typeof c4918, + 4919: typeof c4919, + 4999: typeof c4999, + 5000: typeof c5000, + 5001: typeof c5001, + 5002: typeof c5002, + 5005: typeof c5005, + 5165: typeof c5165, + 5177: typeof c5177, + 5197: typeof c5197, + 5234: typeof c5234, + 5315: typeof c5315, + 5551: typeof c5551, + 5553: typeof c5553, + 5555: typeof c5555, + 5616: typeof c5616, + 5678: typeof c5678, + 5700: typeof c5700, + 5729: typeof c5729, + 5758: typeof c5758, + 5777: typeof c5777, + 5851: typeof c5851, + 5869: typeof c5869, + 6065: typeof c6065, + 6066: typeof c6066, + 6102: typeof c6102, + 6118: typeof c6118, + 6119: typeof c6119, + 6502: typeof c6502, + 6552: typeof c6552, + 6565: typeof c6565, + 6626: typeof c6626, + 6688: typeof c6688, + 6789: typeof c6789, + 6969: typeof c6969, + 6999: typeof c6999, + 7000: typeof c7000, + 7001: typeof c7001, + 7027: typeof c7027, + 7070: typeof c7070, + 7171: typeof c7171, + 7331: typeof c7331, + 7332: typeof c7332, + 7341: typeof c7341, + 7484: typeof c7484, + 7518: typeof c7518, + 7575: typeof c7575, + 7576: typeof c7576, + 7668: typeof c7668, + 7672: typeof c7672, + 7700: typeof c7700, + 7701: typeof c7701, + 7771: typeof c7771, + 7777: typeof c7777, + 7878: typeof c7878, + 7895: typeof c7895, + 7979: typeof c7979, + 8000: typeof c8000, + 8001: typeof c8001, + 8029: typeof c8029, + 8080: typeof c8080, + 8082: typeof c8082, + 8086: typeof c8086, + 8098: typeof c8098, + 8131: typeof c8131, + 8132: typeof c8132, + 8133: typeof c8133, + 8134: typeof c8134, + 8135: typeof c8135, + 8136: typeof c8136, + 8181: typeof c8181, + 8217: typeof c8217, + 8272: typeof c8272, + 8285: typeof c8285, + 8387: typeof c8387, + 8453: typeof c8453, + 8654: typeof c8654, + 8655: typeof c8655, + 8723: typeof c8723, + 8724: typeof c8724, + 8738: typeof c8738, + 8768: typeof c8768, + 8848: typeof c8848, + 8880: typeof c8880, + 8881: typeof c8881, + 8882: typeof c8882, + 8883: typeof c8883, + 8888: typeof c8888, + 8889: typeof c8889, + 8898: typeof c8898, + 8899: typeof c8899, + 8989: typeof c8989, + 8995: typeof c8995, + 9000: typeof c9000, + 9001: typeof c9001, + 9012: typeof c9012, + 9100: typeof c9100, + 9223: typeof c9223, + 9339: typeof c9339, + 9527: typeof c9527, + 9528: typeof c9528, + 9559: typeof c9559, + 9700: typeof c9700, + 9728: typeof c9728, + 9768: typeof c9768, + 9779: typeof c9779, + 9790: typeof c9790, + 9792: typeof c9792, + 9818: typeof c9818, + 9819: typeof c9819, + 9977: typeof c9977, + 9996: typeof c9996, + 9997: typeof c9997, + 9999: typeof c9999, + 10000: typeof c10000, + 10001: typeof c10001, + 10024: typeof c10024, + 10081: typeof c10081, + 10086: typeof c10086, + 10101: typeof c10101, + 10200: typeof c10200, + 10201: typeof c10201, + 10243: typeof c10243, + 10248: typeof c10248, + 10507: typeof c10507, + 10508: typeof c10508, + 10823: typeof c10823, + 10946: typeof c10946, + 10947: typeof c10947, + 11110: typeof c11110, + 11111: typeof c11111, + 11115: typeof c11115, + 11119: typeof c11119, + 11235: typeof c11235, + 11437: typeof c11437, + 11612: typeof c11612, + 11888: typeof c11888, + 12009: typeof c12009, + 12051: typeof c12051, + 12052: typeof c12052, + 12123: typeof c12123, + 12306: typeof c12306, + 12321: typeof c12321, + 12345: typeof c12345, + 12715: typeof c12715, + 13000: typeof c13000, + 13308: typeof c13308, + 13337: typeof c13337, + 13381: typeof c13381, + 13812: typeof c13812, + 14000: typeof c14000, + 14853: typeof c14853, + 15551: typeof c15551, + 15555: typeof c15555, + 15557: typeof c15557, + 16000: typeof c16000, + 16001: typeof c16001, + 16507: typeof c16507, + 16688: typeof c16688, + 16718: typeof c16718, + 16888: typeof c16888, + 17000: typeof c17000, + 17180: typeof c17180, + 17777: typeof c17777, + 18000: typeof c18000, + 18122: typeof c18122, + 18159: typeof c18159, + 18686: typeof c18686, + 19011: typeof c19011, + 19845: typeof c19845, + 20001: typeof c20001, + 20729: typeof c20729, + 20736: typeof c20736, + 21337: typeof c21337, + 21816: typeof c21816, + 22023: typeof c22023, + 22040: typeof c22040, + 22776: typeof c22776, + 23006: typeof c23006, + 23118: typeof c23118, + 23294: typeof c23294, + 23295: typeof c23295, + 24484: typeof c24484, + 24734: typeof c24734, + 25888: typeof c25888, + 25925: typeof c25925, + 26026: typeof c26026, + 26600: typeof c26600, + 26863: typeof c26863, + 28528: typeof c28528, + 30067: typeof c30067, + 31102: typeof c31102, + 31223: typeof c31223, + 31224: typeof c31224, + 31337: typeof c31337, + 32520: typeof c32520, + 32659: typeof c32659, + 32769: typeof c32769, + 33101: typeof c33101, + 33333: typeof c33333, + 35011: typeof c35011, + 35441: typeof c35441, + 35443: typeof c35443, + 39797: typeof c39797, + 39815: typeof c39815, + 41500: typeof c41500, + 42069: typeof c42069, + 42161: typeof c42161, + 42170: typeof c42170, + 42220: typeof c42220, + 42261: typeof c42261, + 42262: typeof c42262, + 42888: typeof c42888, + 43110: typeof c43110, + 43113: typeof c43113, + 43114: typeof c43114, + 43288: typeof c43288, + 44444: typeof c44444, + 44787: typeof c44787, + 45000: typeof c45000, + 46688: typeof c46688, + 47805: typeof c47805, + 49049: typeof c49049, + 49088: typeof c49088, + 49797: typeof c49797, + 50001: typeof c50001, + 50021: typeof c50021, + 51178: typeof c51178, + 51712: typeof c51712, + 53935: typeof c53935, + 54211: typeof c54211, + 54321: typeof c54321, + 55004: typeof c55004, + 55555: typeof c55555, + 55556: typeof c55556, + 56288: typeof c56288, + 56789: typeof c56789, + 57000: typeof c57000, + 58008: typeof c58008, + 59140: typeof c59140, + 60000: typeof c60000, + 60001: typeof c60001, + 60002: typeof c60002, + 60103: typeof c60103, + 61800: typeof c61800, + 61803: typeof c61803, + 61916: typeof c61916, + 62320: typeof c62320, + 62621: typeof c62621, + 63000: typeof c63000, + 63001: typeof c63001, + 65450: typeof c65450, + 67588: typeof c67588, + 69420: typeof c69420, + 70000: typeof c70000, + 70001: typeof c70001, + 70002: typeof c70002, + 70103: typeof c70103, + 71111: typeof c71111, + 71393: typeof c71393, + 71401: typeof c71401, + 71402: typeof c71402, + 73799: typeof c73799, + 73927: typeof c73927, + 75000: typeof c75000, + 77612: typeof c77612, + 77777: typeof c77777, + 78110: typeof c78110, + 78281: typeof c78281, + 79879: typeof c79879, + 80001: typeof c80001, + 81341: typeof c81341, + 81342: typeof c81342, + 81343: typeof c81343, + 81351: typeof c81351, + 81352: typeof c81352, + 81353: typeof c81353, + 81361: typeof c81361, + 81362: typeof c81362, + 81363: typeof c81363, + 84531: typeof c84531, + 84886: typeof c84886, + 85449: typeof c85449, + 88880: typeof c88880, + 90210: typeof c90210, + 91002: typeof c91002, + 92001: typeof c92001, + 96970: typeof c96970, + 99099: typeof c99099, + 99998: typeof c99998, + 99999: typeof c99999, + 100000: typeof c100000, + 100001: typeof c100001, + 100002: typeof c100002, + 100003: typeof c100003, + 100004: typeof c100004, + 100005: typeof c100005, + 100006: typeof c100006, + 100007: typeof c100007, + 100008: typeof c100008, + 100009: typeof c100009, + 100010: typeof c100010, + 101010: typeof c101010, + 103090: typeof c103090, + 108801: typeof c108801, + 110000: typeof c110000, + 110001: typeof c110001, + 110002: typeof c110002, + 110003: typeof c110003, + 110004: typeof c110004, + 110005: typeof c110005, + 110006: typeof c110006, + 110007: typeof c110007, + 110008: typeof c110008, + 111000: typeof c111000, + 111111: typeof c111111, + 112358: typeof c112358, + 123456: typeof c123456, + 131419: typeof c131419, + 142857: typeof c142857, + 167005: typeof c167005, + 167006: typeof c167006, + 188881: typeof c188881, + 200101: typeof c200101, + 200202: typeof c200202, + 200625: typeof c200625, + 201018: typeof c201018, + 201030: typeof c201030, + 201804: typeof c201804, + 202020: typeof c202020, + 202624: typeof c202624, + 210425: typeof c210425, + 220315: typeof c220315, + 221230: typeof c221230, + 221231: typeof c221231, + 224168: typeof c224168, + 230315: typeof c230315, + 234666: typeof c234666, + 246529: typeof c246529, + 246785: typeof c246785, + 247253: typeof c247253, + 256256: typeof c256256, + 266256: typeof c266256, + 271271: typeof c271271, + 281121: typeof c281121, + 314159: typeof c314159, + 330844: typeof c330844, + 333331: typeof c333331, + 333777: typeof c333777, + 333888: typeof c333888, + 333999: typeof c333999, + 355113: typeof c355113, + 373737: typeof c373737, + 381931: typeof c381931, + 381932: typeof c381932, + 404040: typeof c404040, + 420420: typeof c420420, + 420666: typeof c420666, + 420692: typeof c420692, + 421611: typeof c421611, + 421613: typeof c421613, + 424242: typeof c424242, + 431140: typeof c431140, + 432201: typeof c432201, + 432204: typeof c432204, + 444900: typeof c444900, + 471100: typeof c471100, + 474142: typeof c474142, + 512512: typeof c512512, + 513100: typeof c513100, + 534351: typeof c534351, + 534352: typeof c534352, + 534353: typeof c534353, + 534849: typeof c534849, + 535037: typeof c535037, + 641230: typeof c641230, + 651940: typeof c651940, + 666666: typeof c666666, + 751230: typeof c751230, + 761412: typeof c761412, + 800001: typeof c800001, + 827431: typeof c827431, + 846000: typeof c846000, + 888888: typeof c888888, + 900000: typeof c900000, + 910000: typeof c910000, + 920000: typeof c920000, + 920001: typeof c920001, + 923018: typeof c923018, + 955305: typeof c955305, + 1313114: typeof c1313114, + 1313500: typeof c1313500, + 1337702: typeof c1337702, + 1337802: typeof c1337802, + 1337803: typeof c1337803, + 2021398: typeof c2021398, + 2099156: typeof c2099156, + 2206132: typeof c2206132, + 3141592: typeof c3141592, + 3441005: typeof c3441005, + 4000003: typeof c4000003, + 4281033: typeof c4281033, + 5167003: typeof c5167003, + 5555555: typeof c5555555, + 5555558: typeof c5555558, + 7225878: typeof c7225878, + 7355310: typeof c7355310, + 7668378: typeof c7668378, + 7762959: typeof c7762959, + 7777777: typeof c7777777, + 8007736: typeof c8007736, + 8794598: typeof c8794598, + 8888881: typeof c8888881, + 8888888: typeof c8888888, + 10067275: typeof c10067275, + 10101010: typeof c10101010, + 11155111: typeof c11155111, + 13371337: typeof c13371337, + 14288640: typeof c14288640, + 16658437: typeof c16658437, + 18289463: typeof c18289463, + 20180430: typeof c20180430, + 20181205: typeof c20181205, + 20201022: typeof c20201022, + 22052002: typeof c22052002, + 27082017: typeof c27082017, + 27082022: typeof c27082022, + 28945486: typeof c28945486, + 29032022: typeof c29032022, + 31415926: typeof c31415926, + 35855456: typeof c35855456, + 43214913: typeof c43214913, + 61717561: typeof c61717561, + 65010000: typeof c65010000, + 65100000: typeof c65100000, + 88888888: typeof c88888888, + 99415706: typeof c99415706, + 192837465: typeof c192837465, + 222000222: typeof c222000222, + 245022926: typeof c245022926, + 245022934: typeof c245022934, + 245022940: typeof c245022940, + 278611351: typeof c278611351, + 311752642: typeof c311752642, + 333000333: typeof c333000333, + 344106930: typeof c344106930, + 356256156: typeof c356256156, + 486217935: typeof c486217935, + 503129905: typeof c503129905, + 1122334455: typeof c1122334455, + 1146703430: typeof c1146703430, + 1273227453: typeof c1273227453, + 1313161554: typeof c1313161554, + 1313161555: typeof c1313161555, + 1313161556: typeof c1313161556, + 1351057110: typeof c1351057110, + 1380996178: typeof c1380996178, + 1482601649: typeof c1482601649, + 1564830818: typeof c1564830818, + 1666600000: typeof c1666600000, + 1666600001: typeof c1666600001, + 1666600002: typeof c1666600002, + 1666600003: typeof c1666600003, + 1666700000: typeof c1666700000, + 1666700001: typeof c1666700001, + 1666900000: typeof c1666900000, + 1666900001: typeof c1666900001, + 2021121117: typeof c2021121117, + 2046399126: typeof c2046399126, + 2863311531: typeof c2863311531, + 3125659152: typeof c3125659152, + 4216137055: typeof c4216137055, + 11297108099: typeof c11297108099, + 11297108109: typeof c11297108109, + 111222333444: typeof c111222333444, + 197710212030: typeof c197710212030, + 197710212031: typeof c197710212031, + 383414847825: typeof c383414847825, + 666301171999: typeof c666301171999, + 6022140761023: typeof c6022140761023, + 1337: typeof c1337, + 1440001: typeof c1440001, + 1582: typeof c1582, + 331769: typeof c331769, + 331771: typeof c331771, + 37: typeof c37, + 408: typeof c408, + 47: typeof c47, + 47279324479: typeof c47279324479, + 5611: typeof c5611, + 59144: typeof c59144, + 8081: typeof c8081, + 88882: typeof c88882, + 88888: typeof c88888, + 91003: typeof c91003, + 919: typeof c919, + 999: typeof c999 }; type ChainIdsBySlug = { "ethereum": 1, -"expanse-network": 2, -"ropsten": 3, -"rinkeby": 4, -"goerli": 5, -"ethereum-classic-testnet-kotti": 6, -"thaichain": 7, -"ubiq": 8, -"ubiq-network-testnet": 9, -"optimism": 10, -"metadium": 11, -"metadium-testnet": 12, -"diode-testnet-staging": 13, -"flare": 14, -"diode-prenet": 15, -"flare-testnet-coston": 16, -"thaichain-2-0-thaifi": 17, -"thundercore-testnet": 18, -"songbird-canary-network": 19, -"elastos-smart-chain": 20, -"elastos-smart-chain-testnet": 21, -"ela-did-sidechain": 22, -"ela-did-sidechain-testnet": 23, -"kardiachain": 24, -"cronos": 25, -"genesis-l1-testnet": 26, -"shibachain": 27, -"boba-network-rinkeby-testnet": 28, -"genesis-l1": 29, -"rsk": 30, -"rsk-testnet": 31, -"gooddata-testnet": 32, -"gooddata": 33, -"dithereum-testnet": 34, -"tbwg-chain": 35, -"dxchain": 36, -"valorbit": 38, -"unicorn-ultra-testnet": 39, -"telos-evm": 40, -"telos-evm-testnet": 41, -"lukso": 42, -"darwinia-pangolin-testnet": 43, -"darwinia-crab-network": 44, -"darwinia-pangoro-testnet": 45, -"darwinia-network": 46, -"ennothem-proterozoic": 48, -"ennothem-testnet-pioneer": 49, -"xinfin-xdc-network": 50, -"xdc-apothem-network": 51, -"coinex-smart-chain": 52, -"coinex-smart-chain-testnet": 53, -"openpiece": 54, -"zyx": 55, -"binance": 56, -"syscoin": 57, -"ontology": 58, -"gochain": 60, -"ethereum-classic": 61, -"ethereum-classic-testnet-morden": 62, -"ethereum-classic-testnet-mordor": 63, -"ellaism": 64, -"okexchain-testnet": 65, -"okxchain": 66, -"dbchain-testnet": 67, -"soterone": 68, -"optimism-kovan": 69, -"hoo-smart-chain": 70, -"conflux-espace-testnet": 71, -"dxchain-testnet": 72, -"fncy": 73, -"idchain": 74, -"decimal-smart-chain": 75, -"mix": 76, -"poa-network-sokol": 77, -"primuschain": 78, -"zenith": 79, -"genechain": 80, -"japan-open-chain": 81, -"meter": 82, -"meter-testnet": 83, -"linqto-devnet": 84, -"gatechain-testnet": 85, -"gatechain": 86, -"nova-network": 87, -"tomochain": 88, -"tomochain-testnet": 89, -"garizon-stage0": 90, -"garizon-stage1": 91, -"garizon-stage2": 92, -"garizon-stage3": 93, -"swissdlt": 94, -"camdl": 95, -"bitkub-chain": 96, -"binance-testnet": 97, -"six-protocol": 98, -"poa-network-core": 99, -"gnosis": 100, -"etherinc": 101, -"web3games-testnet": 102, -"kaiba-lightning-chain-testnet": 104, -"web3games-devnet": 105, -"velas-evm": 106, -"nebula-testnet": 107, -"thundercore": 108, -"proton-testnet": 110, -"etherlite-chain": 111, -"coinbit": 112, -"dehvo": 113, -"flare-testnet-coston2": 114, -"uptick": 117, -"arcology-testnet": 118, -"enuls": 119, -"enuls-testnet": 120, -"realchain": 121, -"fuse": 122, -"fuse-sparknet": 123, -"decentralized-web": 124, -"oychain-testnet": 125, -"oychain": 126, -"factory-127": 127, -"huobi-eco-chain": 128, -"iexec-sidechain": 134, -"alyx-chain-testnet": 135, -"deamchain": 136, -"polygon": 137, -"defi-oracle-meta": 138, -"woopchain": 139, -"openpiece-testnet": 141, -"dax-chain": 142, -"phi-network-v2": 144, -"six-protocol-testnet": 150, -"tenet-testnet": 155, -"oeblock-testnet": 156, -"armonia-eva-chain": 160, -"armonia-eva-chain-testnet": 161, -"lightstreams-testnet": 162, -"lightstreams": 163, -"omni-testnet": 165, -"atoshi-testnet": 167, -"aioz-network": 168, -"hoo-smart-chain-testnet": 170, -"latam-blockchain-resil-testnet": 172, -"ame-chain": 180, -"seele": 186, -"bmc": 188, -"bmc-testnet": 189, -"crypto-emergency": 193, -"okbchain-testnet": 195, -"okbchain": 196, -"neutrinos-testnet": 197, -"bitchain": 198, -"bittorrent-chain": 199, -"arbitrum-on-xdai": 200, -"moac-testnet": 201, -"opbnb": 204, -"structx": 208, -"bitnet": 210, -"freight-trust-network": 211, -"map-makalu": 212, -"siriusnet-v2": 217, -"lachain": 225, -"lachain-testnet": 226, -"swapdex": 230, -"deamchain-testnet": 236, -"plinga": 242, -"energy-web-chain": 246, -"oasys": 248, -"fantom": 250, -"huobi-eco-chain-testnet": 256, -"setheum": 258, -"neonlink": 259, -"sur-blockchain-network": 262, -"high-performance-blockchain": 269, -"egoncoin": 271, -"lachain-lachain": 274, -"zksync-era-testnet": 280, -"boba-network": 288, -"hedera": 295, -"hedera-testnet": 296, -"hedera-previewnet": 297, -"hedera-localnet": 298, -"bobaopera": 301, -"neurochain-testnet": 303, -"omax": 311, -"neurochain": 313, -"filecoin": 314, -"kcc": 321, -"kcc-testnet": 322, -"zksync-era": 324, -"web3q": 333, -"dfk-chain-test": 335, -"shiden": 336, -"cronos-testnet": 338, -"yooldo-verse": 345, -"theta": 361, -"theta-sapphire-testnet": 363, -"theta-amber-testnet": 364, -"theta-testnet": 365, -"pulsechain": 369, -"consta-testnet": 371, -"lisinski": 385, -"hyperonchain-testnet": 400, -"ozone-chain-testnet": 401, -"pepe-chain": 411, -"sx-network": 416, -"latestnet": 418, -"optimism-goerli": 420, -"pgn-public-goods-network": 424, -"zeeth-chain": 427, -"obscuro-testnet": 443, -"frenchain-testnet": 444, -"arzio-chain": 456, -"rupaya": 499, -"camino-c-chain": 500, -"columbus-test-network": 501, -"double-a-chain": 512, -"double-a-chain-testnet": 513, -"gear-zero-network": 516, -"xt-smart-chain": 520, -"firechain": 529, -"f-x-core-network": 530, -"candle": 534, -"pawchain-testnet": 542, -"vela1-chain": 555, -"tao-network": 558, -"dogechain-testnet": 568, -"rollux": 570, -"astar": 592, -"acala-mandala-testnet-tc9": 595, -"karura-network-testnet": 596, -"acala-network-testnet": 597, -"metis-goerli-testnet": 599, -"meshnyan-testnet": 600, -"peer-testnet": 601, -"graphlinq-blockchain": 614, -"avocado": 634, -"sx-network-testnet": 647, -"endurance-smart-chain": 648, -"pixie-chain-testnet": 666, -"laos-arrakis": 667, -"karura-network": 686, -"star-social-testnet": 700, -"blockchain-station": 707, -"blockchain-station-testnet": 708, -"shibarium-beta": 719, -"lycan-chain": 721, -"vention-smart-chain-testnet": 741, -"script-testnet": 742, -"ql1": 766, -"openchain-testnet": 776, -"cheapeth": 777, -"maal-sharia-chain": 786, -"acala-network": 787, -"aerochain-testnet": 788, -"patex": 789, -"lucid-blockchain": 800, -"haic": 803, -"portal-fantasy-chain-test": 808, -"qitmeer": 813, -"beone-chain": 818, -"callisto": 820, -"taraxa": 841, -"taraxa-testnet": 842, -"zeeth-chain-dev": 859, -"fantasia-chain": 868, -"bandai-namco-research-verse": 876, -"dexit-network": 877, -"ambros-chain": 880, -"wanchain": 888, -"garizon-testnet-stage0": 900, -"garizon-testnet-stage1": 901, -"garizon-testnet-stage2": 902, -"garizon-testnet-stage3": 903, -"portal-fantasy-chain": 909, -"decentrabone-layer1-testnet": 910, -"rinia-testnet": 917, -"pulsechain-testnet-v3": 942, -"pulsechain-testnet-v4": 943, -"munode-testnet": 956, -"oort": 970, -"oort-huygens": 971, -"oort-ascraeus": 972, -"nepal-blockchain-network": 977, -"top-evm": 980, -"memo-smart-chain": 985, -"top": 989, -"eliberty": 990, -"5irechain-thunder": 997, -"lucky-network": 998, -"gton": 1000, -"klaytn-testnet-baobab": 1001, -"t-ekta": 1004, -"newton-testnet": 1007, -"eurus": 1008, -"evrice-network": 1010, -"newton": 1012, -"sakura": 1022, -"clover-testnet": 1023, -"clv-parachain": 1024, -"bittorrent-chain-testnet": 1028, -"conflux-espace": 1030, -"proxy-network-testnet": 1031, -"bronos-testnet": 1038, -"bronos": 1039, -"shimmerevm-testnet": 1072, -"mintara-testnet": 1079, -"mintara": 1080, -"metis-andromeda": 1088, -"moac": 1099, -"polygon-zkevm": 1101, -"wemix3-0": 1111, -"wemix3-0-testnet": 1112, -"core-blockchain-testnet": 1115, -"core-blockchain": 1116, -"dogcoin": 1117, -"defichain-evm-network": 1130, -"defichain-evm-network-testnet": 1131, -"amstar-testnet": 1138, -"mathchain": 1139, -"mathchain-testnet": 1140, -"symplexia-smart-chain": 1149, -"origin-testnet": 1170, -"smart-host-teknoloji-testnet": 1177, -"iora-chain": 1197, -"evanesco-testnet": 1201, -"world-trade-technical-chain": 1202, -"popcateum": 1213, -"enterchain": 1214, -"exzo-network": 1229, -"ultron-testnet": 1230, -"ultron": 1231, -"step-network": 1234, -"arc": 1243, -"arc-testnet": 1244, -"om-platform": 1246, -"cic-chain-testnet": 1252, -"halo": 1280, -"moonbeam": 1284, -"moonriver": 1285, -"moonbase-alpha": 1287, -"moonrock": 1288, -"swisstronik-testnet": 1291, -"bobabeam": 1294, -"bobabase-testnet": 1297, -"dos-fuji-subnet": 1311, -"alyx": 1314, -"aitd": 1319, -"aitd-testnet": 1320, -"elysium-testnet": 1338, -"elysium": 1339, -"cic-chain": 1353, -"zafirium": 1369, -"kalar-chain": 1379, -"amstar": 1388, -"joseon": 1392, -"rikeza-network": 1433, -"living-assets": 1440, -"polygon-zkevm-testnet": 1442, -"gil-testnet": 1452, -"ctex-scan-blockchain": 1455, -"bevm": 1501, -"sherpax": 1506, -"sherpax-testnet": 1507, -"beagle-messaging-chain": 1515, -"tenet": 1559, -"catecoin-chain": 1618, -"atheios": 1620, -"btachain": 1657, -"horizen-gobi-testnet": 1663, -"ludan": 1688, -"anytype-evm-chain": 1701, -"tbsi": 1707, -"tbsi-testnet": 1708, -"palette-chain": 1718, -"partychain": 1773, -"gauss": 1777, -"kerleano": 1804, -"rabbit-analog-testnet-chain": 1807, -"cube-chain": 1818, -"cube-chain-testnet": 1819, -"teslafunds": 1856, -"whitebit-network": 1875, -"gitshock-cartenz-testnet": 1881, -"lightlink-phoenix": 1890, -"lightlink-pegasus-testnet": 1891, -"bon-network": 1898, -"bitcichain": 1907, -"bitcichain-testnet": 1908, -"onus-chain-testnet": 1945, -"d-chain": 1951, -"dexilla-testnet": 1954, -"eleanor": 1967, -"super-smart-chain-testnet": 1969, -"super-smart-chain": 1970, -"atelier": 1971, -"onus-chain": 1975, -"eurus-testnet": 1984, -"ethergem": 1987, -"ekta": 1994, -"edexa-testnet": 1995, -"dogechain": 2000, -"milkomeda-c1": 2001, -"milkomeda-a1": 2002, -"cloudwalk-testnet": 2008, -"cloudwalk": 2009, -"z-mainnet": 2016, -"publicmint-devnet": 2018, -"publicmint-testnet": 2019, -"publicmint": 2020, -"edgeware-edgeevm": 2021, -"beresheet-bereevm-testnet": 2022, -"taycan-testnet": 2023, -"rangers-protocol": 2025, -"centrifuge": 2031, -"catalyst": 2032, -"kiwi-subnet": 2037, -"origintrail-parachain": 2043, -"shrapnel-subnet": 2044, -"stratos-testnet": 2047, -"stratos": 2048, -"quokkacoin": 2077, -"altair": 2088, -"algol": 2089, -"ecoball": 2100, -"ecoball-testnet-espuma": 2101, -"exosama-network": 2109, -"metaplayerone": 2122, -"metaplayerone-dubai-testnet": 2124, -"defi-oracle-meta-testnet": 2138, -"bosagora": 2151, -"findora": 2152, -"findora-testnet": 2153, -"findora-forge": 2154, -"moonsama-network": 2199, -"antofy": 2202, -"bitcoin-evm": 2203, -"evanesco": 2213, -"kava-testnet": 2221, -"kava": 2222, -"vchain": 2223, -"bomb-chain": 2300, -"arevia": 2309, -"soma-network-testnet": 2323, -"altcoinchain": 2330, -"soma-network": 2332, -"kroma-sepolia": 2358, -"bomb-chain-testnet": 2399, -"tcg-verse": 2400, -"xodex": 2415, -"unicorn-ultra-nebulas-testnet": 2484, -"kortho": 2559, -"techpay": 2569, -"pocrnet": 2606, -"redlight-chain": 2611, -"ezchain-c-chain": 2612, -"ezchain-c-chain-testnet": 2613, -"whitebit-network-testnet": 2625, -"boba-network-goerli-testnet": 2888, -"bityuan": 2999, -"cennznet-rata": 3000, -"cennznet-nikau": 3001, -"canxium": 3003, -"playa3ull-games": 3011, -"orlando-chain": 3031, -"bifrost": 3068, -"debounce-subnet-testnet": 3306, -"zcore-testnet": 3331, -"web3q-testnet": 3333, -"web3q-galileo": 3334, -"paribu-net": 3400, -"securechain-testnet": 3434, -"paribu-net-testnet": 3500, -"jfin-chain": 3501, -"pandoproject": 3601, -"pandoproject-testnet": 3602, -"botanix-testnet": 3636, -"botanix": 3637, -"jouleverse": 3666, -"bittex": 3690, -"empire-network": 3693, -"senjepowers-testnet": 3698, -"senjepowers": 3699, -"xpla": 3701, -"crossbell": 3737, -"alveychain": 3797, -"kalychain": 3888, -"kalychain-testnet": 3889, -"drac-network": 3912, -"dos-tesnet": 3939, -"dyno": 3966, -"dyno-testnet": 3967, -"yuanchain": 3999, -"ozone-chain": 4000, -"peperium-chain-testnet": 4001, -"fantom-testnet": 4002, -"bobaopera-testnet": 4051, -"nahmii-3": 4061, -"nahmii-3-testnet": 4062, -"fastex-chain-bahamut-oasis-testnet": 4090, -"bitindi-testnet": 4096, -"bitindi": 4099, -"aioz-network-testnet": 4102, -"tipboxcoin-testnet": 4141, -"phi-network-v1": 4181, -"lukso-testnet": 4201, -"nexi": 4242, -"bobafuji-testnet": 4328, -"beam": 4337, -"htmlcoin": 4444, -"orderly-sepolia-testnet": 4460, -"iotex-network": 4689, -"iotex-network-testnet": 4690, -"meverse-chain-testnet": 4759, -"blackfort-exchange-network-testnet": 4777, -"venidium-testnet": 4918, -"venidium": 4919, -"blackfort-exchange-network": 4999, -"mantle": 5000, -"mantle-testnet": 5001, -"treasurenet-alpha": 5002, -"treasurenet-testnet": 5005, -"fastex-chain-bahamut": 5165, -"tlchain-network": 5177, -"eraswap": 5197, -"humanode": 5234, -"uzmi-network": 5315, -"nahmii": 5551, -"nahmii-testnet": 5553, -"chain-verse": 5555, -"arcturus-chain-testnet": 5616, -"tanssi-evm-containerchain": 5678, -"syscoin-tanenbaum-testnet": 5700, -"hika-network-testnet": 5729, -"satoshichain-testnet": 5758, -"ganache": 5777, -"ontology-testnet": 5851, -"wegochain-rubidium": 5869, -"tres-testnet": 6065, -"tres": 6066, -"cascadia-testnet": 6102, -"uptn-testnet": 6118, -"uptn": 6119, -"peerpay": 6502, -"scolcoin-weichain-testnet": 6552, -"fox-testnet-network": 6565, -"pixie-chain": 6626, -"irishub": 6688, -"gold-smart-chain": 6789, -"tomb-chain": 6969, -"polysmartchain": 6999, -"zetachain": 7000, -"zetachain-athens-3-testnet": 7001, -"ella-the-heart": 7027, -"planq": 7070, -"bitrock": 7171, -"klyntar": 7331, -"horizen-eon": 7332, -"shyft": 7341, -"raba-network": 7484, -"meverse-chain": 7518, -"adil-testnet": 7575, -"adil-chain-v2": 7576, -"the-root-network": 7668, -"the-root-network-porcini-testnet": 7672, -"canto": 7700, -"canto-tesnet": 7701, -"bitrock-testnet": 7771, -"rise-of-the-warbots-testnet": 7777, -"hazlor-testnet": 7878, -"ardenium-athena": 7895, -"dos-chain": 7979, -"teleport": 8000, -"teleport-testnet": 8001, -"mdgl-testnet": 8029, -"shardeum-liberty-1-x": 8080, -"shardeum-sphinx-1-x": 8082, -"biteth": 8086, -"streamux-blockchain": 8098, -"qitmeer-network-testnet": 8131, -"qitmeer-network-mixnet": 8132, -"qitmeer-network-privnet": 8133, -"amana": 8134, -"flana": 8135, -"mizana": 8136, -"testnet-beone-chain": 8181, -"klaytn-cypress": 8217, -"blockton-blockchain": 8272, -"korthotest": 8285, -"dracones-financial-services": 8387, -"base": 8453, -"toki-network": 8654, -"toki-testnet": 8655, -"tool-global": 8723, -"tool-global-testnet": 8724, -"alph-network": 8738, -"tmy-chain": 8768, -"maro-blockchain": 8848, -"unique": 8880, -"quartz-by-unique": 8881, -"opal-testnet-by-unique": 8882, -"sapphire-by-unique": 8883, -"xanachain": 8888, -"vyvo-smart-chain": 8889, -"mammoth": 8898, -"jibchain-l1": 8899, -"giant-mammoth": 8989, -"bloxberg": 8995, -"evmos-testnet": 9000, -"evmos": 9001, -"berylbit": 9012, -"genesis-coin": 9100, -"codefin": 9223, -"dogcoin-testnet": 9339, -"rangers-protocol-testnet-robin": 9527, -"qeasyweb3-testnet": 9528, -"neonlink-testnet": 9559, -"oort-dev": 9700, -"boba-bnb-testnet": 9728, -"z-testnet": 9768, -"pepenetwork": 9779, -"carbon-evm": 9790, -"carbon-evm-testnet": 9792, -"imperium-testnet": 9818, -"imperium": 9819, -"mind-smart-chain-testnet": 9977, -"mind-smart-chain": 9996, -"altlayer-testnet": 9997, -"myown-testnet": 9999, -"smart-bitcoin-cash": 10000, -"smart-bitcoin-cash-testnet": 10001, -"gon-chain": 10024, -"japan-open-chain-testnet": 10081, -"sjatsh": 10086, -"blockchain-genesis": 10101, -"gnosis-chiado-testnet": 10200, -"maxxchain": 10201, -"arthera-testnet": 10243, -"0xtade": 10248, -"numbers": 10507, -"numbers-testnet": 10508, -"cryptocoinpay": 10823, -"quadrans-blockchain": 10946, -"quadrans-blockchain-testnet": 10947, -"astra": 11110, -"wagmi": 11111, -"astra-testnet": 11115, -"hashbit": 11119, -"haqq-network": 11235, -"shyft-testnet": 11437, -"sardis-testnet": 11612, -"sanr-chain": 11888, -"satoshichain": 12009, -"singularity-zero-testnet": 12051, -"singularity-zero": 12052, -"brc-chain": 12123, -"fibonacci": 12306, -"blg-testnet": 12321, -"step-testnet": 12345, -"rikeza-network-testnet": 12715, -"sps": 13000, -"credit-smart-chain": 13308, -"beam-testnet": 13337, -"phoenix": 13381, -"susono": 13812, -"sps-testnet": 14000, -"humanode-testnet-5-israfel": 14853, -"loopnetwork": 15551, -"trust-evm-testnet": 15555, -"eos-evm-network-testnet": 15557, -"metadot": 16000, -"metadot-testnet": 16001, -"genesys": 16507, -"irishub-testnet": 16688, -"airdao": 16718, -"ivar-chain-testnet": 16888, -"holesky": 17000, -"palette-chain-testnet": 17180, -"eos-evm-network": 17777, -"frontier-of-dreams-testnet": 18000, -"smart-trade-networks": 18122, -"proof-of-memes": 18159, -"mxc-zkevm": 18686, -"home-verse": 19011, -"btcix-network": 19845, -"camelark": 20001, -"callisto-testnet": 20729, -"p12-chain": 20736, -"cennznet-azalea": 21337, -"omchain": 21816, -"taycan": 22023, -"airdao-testnet": 22040, -"map": 22776, -"antofy-testnet": 23006, -"opside-testnet": 23118, -"oasis-sapphire": 23294, -"oasis-sapphire-testnet": 23295, -"webchain": 24484, -"mintme-com-coin": 24734, -"hammer-chain": 25888, -"bitkub-chain-testnet": 25925, -"ferrum-testnet": 26026, -"hertz-network": 26600, -"oasischain": 26863, -"optimism-bedrock-goerli-alpha-testnet": 28528, -"piece-testnet": 30067, -"ethersocial-network": 31102, -"cloudtx": 31223, -"cloudtx-testnet": 31224, -"gochain-testnet": 31337, -"bitgert": 32520, -"fusion": 32659, -"zilliqa-evm": 32769, -"zilliqa-evm-testnet": 33101, -"aves": 33333, -"j2o-taro": 35011, -"q": 35441, -"q-testnet": 35443, -"energi": 39797, -"oho": 39815, -"opulent-x-beta": 41500, -"pegglecoin": 42069, -"arbitrum": 42161, -"arbitrum-nova": 42170, -"celo": 42220, -"oasis-emerald-testnet": 42261, -"oasis-emerald": 42262, -"kinto-testnet": 42888, -"athereum": 43110, -"avalanche-fuji": 43113, -"avalanche": 43114, -"boba-avax": 43288, -"frenchain": 44444, -"celo-alfajores-testnet": 44787, -"autobahn-network": 45000, -"fusion-testnet": 46688, -"rei-network": 47805, -"wireshape-floripa-testnet": 49049, -"bifrost-testnet": 49088, -"energi-testnet": 49797, -"liveplex-oracleevm": 50001, -"gton-testnet": 50021, -"opside-testnet-pre-alpha": 51178, -"sardis": 51712, -"dfk-chain": 53935, -"haqq-chain-testnet": 54211, -"toronet-testnet": 54321, -"titan": 55004, -"rei-chain": 55555, -"rei-chain-testnet": 55556, -"boba-bnb": 56288, -"velo-labs": 56789, -"rollux-testnet": 57000, -"sepolia-pgn-public-goods-network": 58008, -"linea-testnet": 59140, -"thinkium-testnet-chain-0": 60000, -"thinkium-testnet-chain-1": 60001, -"thinkium-testnet-chain-2": 60002, -"thinkium-testnet-chain-103": 60103, -"axelchain-dev-net": 61800, -"etica": 61803, -"doken-super-chain": 61916, -"celo-baklava-testnet": 62320, -"multivac": 62621, -"ecredits": 63000, -"ecredits-testnet": 63001, -"scolcoin": 65450, -"cosmic-chain": 67588, -"condrieu": 69420, -"thinkium-chain-0": 70000, -"thinkium-chain-1": 70001, -"thinkium-chain-2": 70002, -"thinkium-chain-103": 70103, -"guapcoinx": 71111, -"polyjuice-testnet": 71393, -"godwoken-testnet-v1": 71401, -"godwoken": 71402, -"energy-web-volta-testnet": 73799, -"mixin-virtual-machine": 73927, -"resincoin": 75000, -"vention-smart-chain": 77612, -"toronet": 77777, -"firenze-test-network": 78110, -"dragonfly-hexapod": 78281, -"gold-smart-chain-testnet": 79879, -"mumbai": 80001, -"amana-testnet": 81341, -"amana-mixnet": 81342, -"amana-privnet": 81343, -"flana-testnet": 81351, -"flana-mixnet": 81352, -"flana-privnet": 81353, -"mizana-testnet": 81361, -"mizana-mixnet": 81362, -"mizana-privnet": 81363, -"base-goerli": 84531, -"aerie-network": 84886, -"cybertrust": 85449, -"chiliz-scoville-testnet": 88880, -"beverly-hills": 90210, -"nautilus-chain": 91002, -"lambda-testnet": 92001, -"mantis-testnet-hexapod": 96970, -"eliberty-testnet": 99099, -"ub-smart-chain-testnet": 99998, -"ub-smart-chain": 99999, -"quarkchain-root": 100000, -"quarkchain-shard-0": 100001, -"quarkchain-shard-1": 100002, -"quarkchain-shard-2": 100003, -"quarkchain-shard-3": 100004, -"quarkchain-shard-4": 100005, -"quarkchain-shard-5": 100006, -"quarkchain-shard-6": 100007, -"quarkchain-shard-7": 100008, -"vechain": 100009, -"vechain-testnet": 100010, -"soverun-testnet": 101010, -"crystaleum": 103090, -"brochain": 108801, -"quarkchain-devnet-root": 110000, -"quarkchain-devnet-shard-0": 110001, -"quarkchain-devnet-shard-1": 110002, -"quarkchain-devnet-shard-2": 110003, -"quarkchain-devnet-shard-3": 110004, -"quarkchain-devnet-shard-4": 110005, -"quarkchain-devnet-shard-5": 110006, -"quarkchain-devnet-shard-6": 110007, -"quarkchain-devnet-shard-7": 110008, -"siberium-test-network": 111000, -"siberium-network": 111111, -"metachain-one": 112358, -"adil-devnet": 123456, -"etnd-chain-s": 131419, -"icplaza": 142857, -"taiko-grimsvotn-l2": 167005, -"taiko-eldfell-l3": 167006, -"condor-test-network": 188881, -"milkomeda-c1-testnet": 200101, -"milkomeda-a1-testnet": 200202, -"akroma": 200625, -"alaya": 201018, -"alaya-dev-testnet": 201030, -"mythical-chain": 201804, -"decimal-smart-chain-testnet": 202020, -"jellie": 202624, -"platon": 210425, -"mas": 220315, -"reapchain": 221230, -"reapchain-testnet": 221231, -"taf-eco-chain": 224168, -"hashkey-chain-testnet": 230315, -"haymo-testnet": 234666, -"artis-sigma1": 246529, -"artis-testnet-tau1": 246785, -"saakuru-testnet": 247253, -"cmp": 256256, -"gear-zero-network-testnet": 266256, -"egoncoin-testnet": 271271, -"social-smart-chain": 281121, -"filecoin-calibration-testnet": 314159, -"ttcoin-smart-chain": 330844, -"aves-testnet": 333331, -"oone-chain-testnet": 333777, -"polis-testnet": 333888, -"polis": 333999, -"bitfinity-network-testnet": 355113, -"hapchain-testnet": 373737, -"metal-c-chain": 381931, -"metal-tahoe-c-chain": 381932, -"tipboxcoin": 404040, -"kekchain": 420420, -"kekchain-kektest": 420666, -"alterium-l2-testnet": 420692, -"arbitrum-rinkeby": 421611, -"arbitrum-goerli": 421613, -"fastex-chain-testnet": 424242, -"markr-go": 431140, -"dexalot-subnet-testnet": 432201, -"dexalot-subnet": 432204, -"weelink-testnet": 444900, -"patex-sepolia-testnet": 471100, -"openchain": 474142, -"cmp-testnet": 512512, -"ethereum-fair": 513100, -"scroll-sepolia-testnet": 534351, -"scroll": 534352, -"scroll-alpha-testnet": 534353, -"shinarium-beta": 534849, -"beaneco-smartchain": 535037, -"bear-network-chain": 641230, -"all": 651940, -"vision-vpioneer-test-chain": 666666, -"bear-network-chain-testnet": 751230, -"miexs-smartchain": 761412, -"octaspace": 800001, -"curve": 827431, -"4goodnetwork": 846000, -"vision": 888888, -"posichain-shard-0": 900000, -"posichain-testnet-shard-0": 910000, -"posichain-devnet-shard-0": 920000, -"posichain-devnet-shard-1": 920001, -"fncy-testnet": 923018, -"eluvio-content-fabric": 955305, -"etho-protocol": 1313114, -"xerom": 1313500, -"kintsugi": 1337702, -"kiln": 1337802, -"zhejiang": 1337803, -"debank-testnet": 2021398, -"plian-main": 2099156, -"platon-dev-testnet2": 2206132, -"filecoin-butterfly-testnet": 3141592, -"manta-pacific-testnet": 3441005, -"altlayer-zero-gas-network": 4000003, -"worlds-caldera": 4281033, -"mxc-wannsee-zkevm-testnet": 5167003, -"imversed": 5555555, -"imversed-testnet": 5555558, -"saakuru": 7225878, -"openvessel": 7355310, -"ql1-testnet": 7668378, -"musicoin": 7762959, -"zora": 7777777, -"plian-subchain-1": 8007736, -"hapchain": 8794598, -"quarix-testnet": 8888881, -"quarix": 8888888, -"plian-testnet-subchain-1": 10067275, -"soverun": 10101010, -"sepolia": 11155111, -"pepchain-churchill": 13371337, -"anduschain": 14288640, -"plian-testnet-main": 16658437, -"iolite": 18289463, -"smartmesh": 20180430, -"quarkblockchain": 20181205, -"pego-network": 20201022, -"excelon": 22052002, -"excoincial-chain-volta-testnet": 27082017, -"excoincial-chain": 27082022, -"auxilium-network": 28945486, -"flachain": 29032022, -"filecoin-local-testnet": 31415926, -"joys-digital": 35855456, -"maistestsubnet": 43214913, -"aquachain": 61717561, -"autonity-bakerloo-thames-testnet": 65010000, -"autonity-piccadilly-thames-testnet": 65100000, -"t-e-a-m-blockchain": 88888888, -"joys-digital-testnet": 99415706, -"gather-network": 192837465, -"kanazawa": 222000222, -"neon-evm-devnet": 245022926, -"neon-evm": 245022934, -"neon-evm-testnet": 245022940, -"razor-skale-chain": 278611351, -"oneledger": 311752642, -"meld": 333000333, -"calypso-nft-hub-skale-testnet": 344106930, -"gather-testnet-network": 356256156, -"gather-devnet-network": 486217935, -"nebula-staging": 503129905, -"ipos-network": 1122334455, -"cyberdecknet": 1146703430, -"human-protocol": 1273227453, -"aurora": 1313161554, -"aurora-testnet": 1313161555, -"aurora-betanet": 1313161556, -"chaos-skale-testnet": 1351057110, -"raptorchain": 1380996178, -"nebula": 1482601649, -"calypso-nft-hub-skale": 1564830818, -"harmony-shard-0": 1666600000, -"harmony-shard-1": 1666600001, -"harmony-shard-2": 1666600002, -"harmony-shard-3": 1666600003, -"harmony-testnet-shard-0": 1666700000, -"harmony-testnet-shard-1": 1666700001, -"harmony-devnet-shard-0": 1666900000, -"harmony-devnet-shard-1": 1666900001, -"datahopper": 2021121117, -"europa-skale-chain": 2046399126, -"ancient8-testnet": 2863311531, -"pirl": 3125659152, -"oneledger-testnet-frankenstein": 4216137055, -"palm-testnet": 11297108099, -"palm": 11297108109, -"alphabet": 111222333444, -"ntity": 197710212030, -"haradev-testnet": 197710212031, -"zeniq": 383414847825, -"pdc": 666301171999, -"molereum-network": 6022140761023, -"localhost": 1337, -"xrp-ledger-evm-devnet-sidechain": 1440001, -"bubs-testnet": 1582, -"proofofpepe-testnet": 331769, -"pop": 331771, -"xpla-xpla": 37, -"omega": 408, -"xpla-testnet": 47, -"xai-goerli-orbit": 47279324479, -"opbnb-opBNB": 5611, -"linea": 59144, -"shardeum-sphinx-dapp-1-x": 8081, -"spicy-chain": 88882, -"chiliz-chain": 88888, -"worlds-appchain": 91003, -"mode-testnet": 919, -"zora-testnet": 999 + "expanse-network": 2, + "ropsten": 3, + "rinkeby": 4, + "goerli": 5, + "ethereum-classic-testnet-kotti": 6, + "thaichain": 7, + "ubiq": 8, + "ubiq-network-testnet": 9, + "optimism": 10, + "metadium": 11, + "metadium-testnet": 12, + "diode-testnet-staging": 13, + "flare": 14, + "diode-prenet": 15, + "flare-testnet-coston": 16, + "thaichain-2-0-thaifi": 17, + "thundercore-testnet": 18, + "songbird-canary-network": 19, + "elastos-smart-chain": 20, + "elastos-smart-chain-testnet": 21, + "ela-did-sidechain": 22, + "ela-did-sidechain-testnet": 23, + "kardiachain": 24, + "cronos": 25, + "genesis-l1-testnet": 26, + "shibachain": 27, + "boba-network-rinkeby-testnet": 28, + "genesis-l1": 29, + "rsk": 30, + "rsk-testnet": 31, + "gooddata-testnet": 32, + "gooddata": 33, + "dithereum-testnet": 34, + "tbwg-chain": 35, + "dxchain": 36, + "valorbit": 38, + "unicorn-ultra-testnet": 39, + "telos-evm": 40, + "telos-evm-testnet": 41, + "lukso": 42, + "darwinia-pangolin-testnet": 43, + "darwinia-crab-network": 44, + "darwinia-pangoro-testnet": 45, + "darwinia-network": 46, + "ennothem-proterozoic": 48, + "ennothem-testnet-pioneer": 49, + "xinfin-xdc-network": 50, + "xdc-apothem-network": 51, + "coinex-smart-chain": 52, + "coinex-smart-chain-testnet": 53, + "openpiece": 54, + "zyx": 55, + "binance": 56, + "syscoin": 57, + "ontology": 58, + "gochain": 60, + "ethereum-classic": 61, + "ethereum-classic-testnet-morden": 62, + "ethereum-classic-testnet-mordor": 63, + "ellaism": 64, + "okexchain-testnet": 65, + "okxchain": 66, + "dbchain-testnet": 67, + "soterone": 68, + "optimism-kovan": 69, + "hoo-smart-chain": 70, + "conflux-espace-testnet": 71, + "dxchain-testnet": 72, + "fncy": 73, + "idchain": 74, + "decimal-smart-chain": 75, + "mix": 76, + "poa-network-sokol": 77, + "primuschain": 78, + "zenith": 79, + "genechain": 80, + "japan-open-chain": 81, + "meter": 82, + "meter-testnet": 83, + "linqto-devnet": 84, + "gatechain-testnet": 85, + "gatechain": 86, + "nova-network": 87, + "tomochain": 88, + "tomochain-testnet": 89, + "garizon-stage0": 90, + "garizon-stage1": 91, + "garizon-stage2": 92, + "garizon-stage3": 93, + "swissdlt": 94, + "camdl": 95, + "bitkub-chain": 96, + "binance-testnet": 97, + "six-protocol": 98, + "poa-network-core": 99, + "gnosis": 100, + "etherinc": 101, + "web3games-testnet": 102, + "kaiba-lightning-chain-testnet": 104, + "web3games-devnet": 105, + "velas-evm": 106, + "nebula-testnet": 107, + "thundercore": 108, + "proton-testnet": 110, + "etherlite-chain": 111, + "coinbit": 112, + "dehvo": 113, + "flare-testnet-coston2": 114, + "uptick": 117, + "arcology-testnet": 118, + "enuls": 119, + "enuls-testnet": 120, + "realchain": 121, + "fuse": 122, + "fuse-sparknet": 123, + "decentralized-web": 124, + "oychain-testnet": 125, + "oychain": 126, + "factory-127": 127, + "huobi-eco-chain": 128, + "iexec-sidechain": 134, + "alyx-chain-testnet": 135, + "deamchain": 136, + "polygon": 137, + "defi-oracle-meta": 138, + "woopchain": 139, + "openpiece-testnet": 141, + "dax-chain": 142, + "phi-network-v2": 144, + "six-protocol-testnet": 150, + "tenet-testnet": 155, + "oeblock-testnet": 156, + "armonia-eva-chain": 160, + "armonia-eva-chain-testnet": 161, + "lightstreams-testnet": 162, + "lightstreams": 163, + "omni-testnet": 165, + "atoshi-testnet": 167, + "aioz-network": 168, + "hoo-smart-chain-testnet": 170, + "latam-blockchain-resil-testnet": 172, + "ame-chain": 180, + "seele": 186, + "bmc": 188, + "bmc-testnet": 189, + "crypto-emergency": 193, + "okbchain-testnet": 195, + "okbchain": 196, + "neutrinos-testnet": 197, + "bitchain": 198, + "bittorrent-chain": 199, + "arbitrum-on-xdai": 200, + "moac-testnet": 201, + "opbnb": 204, + "structx": 208, + "bitnet": 210, + "freight-trust-network": 211, + "map-makalu": 212, + "siriusnet-v2": 217, + "lachain": 225, + "lachain-testnet": 226, + "swapdex": 230, + "deamchain-testnet": 236, + "plinga": 242, + "energy-web-chain": 246, + "oasys": 248, + "fantom": 250, + "huobi-eco-chain-testnet": 256, + "setheum": 258, + "neonlink": 259, + "sur-blockchain-network": 262, + "high-performance-blockchain": 269, + "egoncoin": 271, + "lachain-lachain": 274, + "zksync-era-testnet": 280, + "boba-network": 288, + "hedera": 295, + "hedera-testnet": 296, + "hedera-previewnet": 297, + "hedera-localnet": 298, + "bobaopera": 301, + "neurochain-testnet": 303, + "omax": 311, + "neurochain": 313, + "filecoin": 314, + "kcc": 321, + "kcc-testnet": 322, + "zksync-era": 324, + "web3q": 333, + "dfk-chain-test": 335, + "shiden": 336, + "cronos-testnet": 338, + "yooldo-verse": 345, + "theta": 361, + "theta-sapphire-testnet": 363, + "theta-amber-testnet": 364, + "theta-testnet": 365, + "pulsechain": 369, + "consta-testnet": 371, + "lisinski": 385, + "hyperonchain-testnet": 400, + "ozone-chain-testnet": 401, + "pepe-chain": 411, + "sx-network": 416, + "latestnet": 418, + "optimism-goerli": 420, + "pgn-public-goods-network": 424, + "zeeth-chain": 427, + "obscuro-testnet": 443, + "frenchain-testnet": 444, + "arzio-chain": 456, + "rupaya": 499, + "camino-c-chain": 500, + "columbus-test-network": 501, + "double-a-chain": 512, + "double-a-chain-testnet": 513, + "gear-zero-network": 516, + "xt-smart-chain": 520, + "firechain": 529, + "f-x-core-network": 530, + "candle": 534, + "pawchain-testnet": 542, + "vela1-chain": 555, + "tao-network": 558, + "dogechain-testnet": 568, + "rollux": 570, + "astar": 592, + "acala-mandala-testnet-tc9": 595, + "karura-network-testnet": 596, + "acala-network-testnet": 597, + "metis-goerli-testnet": 599, + "meshnyan-testnet": 600, + "peer-testnet": 601, + "graphlinq-blockchain": 614, + "avocado": 634, + "sx-network-testnet": 647, + "endurance-smart-chain": 648, + "pixie-chain-testnet": 666, + "laos-arrakis": 667, + "karura-network": 686, + "star-social-testnet": 700, + "blockchain-station": 707, + "blockchain-station-testnet": 708, + "shibarium-beta": 719, + "lycan-chain": 721, + "vention-smart-chain-testnet": 741, + "script-testnet": 742, + "ql1": 766, + "openchain-testnet": 776, + "cheapeth": 777, + "maal-sharia-chain": 786, + "acala-network": 787, + "aerochain-testnet": 788, + "patex": 789, + "lucid-blockchain": 800, + "haic": 803, + "portal-fantasy-chain-test": 808, + "qitmeer": 813, + "beone-chain": 818, + "callisto": 820, + "taraxa": 841, + "taraxa-testnet": 842, + "zeeth-chain-dev": 859, + "fantasia-chain": 868, + "bandai-namco-research-verse": 876, + "dexit-network": 877, + "ambros-chain": 880, + "wanchain": 888, + "garizon-testnet-stage0": 900, + "garizon-testnet-stage1": 901, + "garizon-testnet-stage2": 902, + "garizon-testnet-stage3": 903, + "portal-fantasy-chain": 909, + "decentrabone-layer1-testnet": 910, + "rinia-testnet": 917, + "pulsechain-testnet-v3": 942, + "pulsechain-testnet-v4": 943, + "munode-testnet": 956, + "oort": 970, + "oort-huygens": 971, + "oort-ascraeus": 972, + "nepal-blockchain-network": 977, + "top-evm": 980, + "memo-smart-chain": 985, + "top": 989, + "eliberty": 990, + "5irechain-thunder": 997, + "lucky-network": 998, + "gton": 1000, + "klaytn-testnet-baobab": 1001, + "t-ekta": 1004, + "newton-testnet": 1007, + "eurus": 1008, + "evrice-network": 1010, + "newton": 1012, + "sakura": 1022, + "clover-testnet": 1023, + "clv-parachain": 1024, + "bittorrent-chain-testnet": 1028, + "conflux-espace": 1030, + "proxy-network-testnet": 1031, + "bronos-testnet": 1038, + "bronos": 1039, + "shimmerevm-testnet": 1072, + "mintara-testnet": 1079, + "mintara": 1080, + "metis-andromeda": 1088, + "moac": 1099, + "polygon-zkevm": 1101, + "wemix3-0": 1111, + "wemix3-0-testnet": 1112, + "core-blockchain-testnet": 1115, + "core-blockchain": 1116, + "dogcoin": 1117, + "defichain-evm-network": 1130, + "defichain-evm-network-testnet": 1131, + "amstar-testnet": 1138, + "mathchain": 1139, + "mathchain-testnet": 1140, + "symplexia-smart-chain": 1149, + "origin-testnet": 1170, + "smart-host-teknoloji-testnet": 1177, + "iora-chain": 1197, + "evanesco-testnet": 1201, + "world-trade-technical-chain": 1202, + "popcateum": 1213, + "enterchain": 1214, + "exzo-network": 1229, + "ultron-testnet": 1230, + "ultron": 1231, + "step-network": 1234, + "arc": 1243, + "arc-testnet": 1244, + "om-platform": 1246, + "cic-chain-testnet": 1252, + "halo": 1280, + "moonbeam": 1284, + "moonriver": 1285, + "moonbase-alpha": 1287, + "moonrock": 1288, + "swisstronik-testnet": 1291, + "bobabeam": 1294, + "bobabase-testnet": 1297, + "dos-fuji-subnet": 1311, + "alyx": 1314, + "aitd": 1319, + "aitd-testnet": 1320, + "elysium-testnet": 1338, + "elysium": 1339, + "cic-chain": 1353, + "zafirium": 1369, + "kalar-chain": 1379, + "amstar": 1388, + "joseon": 1392, + "rikeza-network": 1433, + "living-assets": 1440, + "polygon-zkevm-testnet": 1442, + "gil-testnet": 1452, + "ctex-scan-blockchain": 1455, + "bevm": 1501, + "sherpax": 1506, + "sherpax-testnet": 1507, + "beagle-messaging-chain": 1515, + "tenet": 1559, + "catecoin-chain": 1618, + "atheios": 1620, + "btachain": 1657, + "horizen-gobi-testnet": 1663, + "ludan": 1688, + "anytype-evm-chain": 1701, + "tbsi": 1707, + "tbsi-testnet": 1708, + "palette-chain": 1718, + "partychain": 1773, + "gauss": 1777, + "kerleano": 1804, + "rabbit-analog-testnet-chain": 1807, + "cube-chain": 1818, + "cube-chain-testnet": 1819, + "teslafunds": 1856, + "whitebit-network": 1875, + "gitshock-cartenz-testnet": 1881, + "lightlink-phoenix": 1890, + "lightlink-pegasus-testnet": 1891, + "bon-network": 1898, + "bitcichain": 1907, + "bitcichain-testnet": 1908, + "onus-chain-testnet": 1945, + "d-chain": 1951, + "dexilla-testnet": 1954, + "eleanor": 1967, + "super-smart-chain-testnet": 1969, + "super-smart-chain": 1970, + "atelier": 1971, + "onus-chain": 1975, + "eurus-testnet": 1984, + "ethergem": 1987, + "ekta": 1994, + "edexa-testnet": 1995, + "dogechain": 2000, + "milkomeda-c1": 2001, + "milkomeda-a1": 2002, + "cloudwalk-testnet": 2008, + "cloudwalk": 2009, + "z-mainnet": 2016, + "publicmint-devnet": 2018, + "publicmint-testnet": 2019, + "publicmint": 2020, + "edgeware-edgeevm": 2021, + "beresheet-bereevm-testnet": 2022, + "taycan-testnet": 2023, + "rangers-protocol": 2025, + "centrifuge": 2031, + "catalyst": 2032, + "kiwi-subnet": 2037, + "origintrail-parachain": 2043, + "shrapnel-subnet": 2044, + "stratos-testnet": 2047, + "stratos": 2048, + "quokkacoin": 2077, + "altair": 2088, + "algol": 2089, + "ecoball": 2100, + "ecoball-testnet-espuma": 2101, + "exosama-network": 2109, + "metaplayerone": 2122, + "metaplayerone-dubai-testnet": 2124, + "defi-oracle-meta-testnet": 2138, + "bosagora": 2151, + "findora": 2152, + "findora-testnet": 2153, + "findora-forge": 2154, + "moonsama-network": 2199, + "antofy": 2202, + "bitcoin-evm": 2203, + "evanesco": 2213, + "kava-testnet": 2221, + "kava": 2222, + "vchain": 2223, + "bomb-chain": 2300, + "arevia": 2309, + "soma-network-testnet": 2323, + "altcoinchain": 2330, + "soma-network": 2332, + "kroma-sepolia": 2358, + "bomb-chain-testnet": 2399, + "tcg-verse": 2400, + "xodex": 2415, + "unicorn-ultra-nebulas-testnet": 2484, + "kortho": 2559, + "techpay": 2569, + "pocrnet": 2606, + "redlight-chain": 2611, + "ezchain-c-chain": 2612, + "ezchain-c-chain-testnet": 2613, + "whitebit-network-testnet": 2625, + "boba-network-goerli-testnet": 2888, + "bityuan": 2999, + "cennznet-rata": 3000, + "cennznet-nikau": 3001, + "canxium": 3003, + "playa3ull-games": 3011, + "orlando-chain": 3031, + "bifrost": 3068, + "debounce-subnet-testnet": 3306, + "zcore-testnet": 3331, + "web3q-testnet": 3333, + "web3q-galileo": 3334, + "paribu-net": 3400, + "securechain-testnet": 3434, + "paribu-net-testnet": 3500, + "jfin-chain": 3501, + "pandoproject": 3601, + "pandoproject-testnet": 3602, + "botanix-testnet": 3636, + "botanix": 3637, + "jouleverse": 3666, + "bittex": 3690, + "empire-network": 3693, + "senjepowers-testnet": 3698, + "senjepowers": 3699, + "xpla": 3701, + "crossbell": 3737, + "alveychain": 3797, + "kalychain": 3888, + "kalychain-testnet": 3889, + "drac-network": 3912, + "dos-tesnet": 3939, + "dyno": 3966, + "dyno-testnet": 3967, + "yuanchain": 3999, + "ozone-chain": 4000, + "peperium-chain-testnet": 4001, + "fantom-testnet": 4002, + "bobaopera-testnet": 4051, + "nahmii-3": 4061, + "nahmii-3-testnet": 4062, + "fastex-chain-bahamut-oasis-testnet": 4090, + "bitindi-testnet": 4096, + "bitindi": 4099, + "aioz-network-testnet": 4102, + "tipboxcoin-testnet": 4141, + "phi-network-v1": 4181, + "lukso-testnet": 4201, + "nexi": 4242, + "bobafuji-testnet": 4328, + "beam": 4337, + "htmlcoin": 4444, + "orderly-sepolia-testnet": 4460, + "iotex-network": 4689, + "iotex-network-testnet": 4690, + "meverse-chain-testnet": 4759, + "blackfort-exchange-network-testnet": 4777, + "venidium-testnet": 4918, + "venidium": 4919, + "blackfort-exchange-network": 4999, + "mantle": 5000, + "mantle-testnet": 5001, + "treasurenet-alpha": 5002, + "treasurenet-testnet": 5005, + "fastex-chain-bahamut": 5165, + "tlchain-network": 5177, + "eraswap": 5197, + "humanode": 5234, + "uzmi-network": 5315, + "nahmii": 5551, + "nahmii-testnet": 5553, + "chain-verse": 5555, + "arcturus-chain-testnet": 5616, + "tanssi-evm-containerchain": 5678, + "syscoin-tanenbaum-testnet": 5700, + "hika-network-testnet": 5729, + "satoshichain-testnet": 5758, + "ganache": 5777, + "ontology-testnet": 5851, + "wegochain-rubidium": 5869, + "tres-testnet": 6065, + "tres": 6066, + "cascadia-testnet": 6102, + "uptn-testnet": 6118, + "uptn": 6119, + "peerpay": 6502, + "scolcoin-weichain-testnet": 6552, + "fox-testnet-network": 6565, + "pixie-chain": 6626, + "irishub": 6688, + "gold-smart-chain": 6789, + "tomb-chain": 6969, + "polysmartchain": 6999, + "zetachain": 7000, + "zetachain-athens-3-testnet": 7001, + "ella-the-heart": 7027, + "planq": 7070, + "bitrock": 7171, + "klyntar": 7331, + "horizen-eon": 7332, + "shyft": 7341, + "raba-network": 7484, + "meverse-chain": 7518, + "adil-testnet": 7575, + "adil-chain-v2": 7576, + "the-root-network": 7668, + "the-root-network-porcini-testnet": 7672, + "canto": 7700, + "canto-tesnet": 7701, + "bitrock-testnet": 7771, + "rise-of-the-warbots-testnet": 7777, + "hazlor-testnet": 7878, + "ardenium-athena": 7895, + "dos-chain": 7979, + "teleport": 8000, + "teleport-testnet": 8001, + "mdgl-testnet": 8029, + "shardeum-liberty-1-x": 8080, + "shardeum-sphinx-1-x": 8082, + "biteth": 8086, + "streamux-blockchain": 8098, + "qitmeer-network-testnet": 8131, + "qitmeer-network-mixnet": 8132, + "qitmeer-network-privnet": 8133, + "amana": 8134, + "flana": 8135, + "mizana": 8136, + "testnet-beone-chain": 8181, + "klaytn-cypress": 8217, + "blockton-blockchain": 8272, + "korthotest": 8285, + "dracones-financial-services": 8387, + "base": 8453, + "toki-network": 8654, + "toki-testnet": 8655, + "tool-global": 8723, + "tool-global-testnet": 8724, + "alph-network": 8738, + "tmy-chain": 8768, + "maro-blockchain": 8848, + "unique": 8880, + "quartz-by-unique": 8881, + "opal-testnet-by-unique": 8882, + "sapphire-by-unique": 8883, + "xanachain": 8888, + "vyvo-smart-chain": 8889, + "mammoth": 8898, + "jibchain-l1": 8899, + "giant-mammoth": 8989, + "bloxberg": 8995, + "evmos-testnet": 9000, + "evmos": 9001, + "berylbit": 9012, + "genesis-coin": 9100, + "codefin": 9223, + "dogcoin-testnet": 9339, + "rangers-protocol-testnet-robin": 9527, + "qeasyweb3-testnet": 9528, + "neonlink-testnet": 9559, + "oort-dev": 9700, + "boba-bnb-testnet": 9728, + "z-testnet": 9768, + "pepenetwork": 9779, + "carbon-evm": 9790, + "carbon-evm-testnet": 9792, + "imperium-testnet": 9818, + "imperium": 9819, + "mind-smart-chain-testnet": 9977, + "mind-smart-chain": 9996, + "altlayer-testnet": 9997, + "myown-testnet": 9999, + "smart-bitcoin-cash": 10000, + "smart-bitcoin-cash-testnet": 10001, + "gon-chain": 10024, + "japan-open-chain-testnet": 10081, + "sjatsh": 10086, + "blockchain-genesis": 10101, + "gnosis-chiado-testnet": 10200, + "maxxchain": 10201, + "arthera-testnet": 10243, + "0xtade": 10248, + "numbers": 10507, + "numbers-testnet": 10508, + "cryptocoinpay": 10823, + "quadrans-blockchain": 10946, + "quadrans-blockchain-testnet": 10947, + "astra": 11110, + "wagmi": 11111, + "astra-testnet": 11115, + "hashbit": 11119, + "haqq-network": 11235, + "shyft-testnet": 11437, + "sardis-testnet": 11612, + "sanr-chain": 11888, + "satoshichain": 12009, + "singularity-zero-testnet": 12051, + "singularity-zero": 12052, + "brc-chain": 12123, + "fibonacci": 12306, + "blg-testnet": 12321, + "step-testnet": 12345, + "rikeza-network-testnet": 12715, + "sps": 13000, + "credit-smart-chain": 13308, + "beam-testnet": 13337, + "phoenix": 13381, + "susono": 13812, + "sps-testnet": 14000, + "humanode-testnet-5-israfel": 14853, + "loopnetwork": 15551, + "trust-evm-testnet": 15555, + "eos-evm-network-testnet": 15557, + "metadot": 16000, + "metadot-testnet": 16001, + "genesys": 16507, + "irishub-testnet": 16688, + "airdao": 16718, + "ivar-chain-testnet": 16888, + "holesky": 17000, + "palette-chain-testnet": 17180, + "eos-evm-network": 17777, + "frontier-of-dreams-testnet": 18000, + "smart-trade-networks": 18122, + "proof-of-memes": 18159, + "mxc-zkevm": 18686, + "home-verse": 19011, + "btcix-network": 19845, + "camelark": 20001, + "callisto-testnet": 20729, + "p12-chain": 20736, + "cennznet-azalea": 21337, + "omchain": 21816, + "taycan": 22023, + "airdao-testnet": 22040, + "map": 22776, + "antofy-testnet": 23006, + "opside-testnet": 23118, + "oasis-sapphire": 23294, + "oasis-sapphire-testnet": 23295, + "webchain": 24484, + "mintme-com-coin": 24734, + "hammer-chain": 25888, + "bitkub-chain-testnet": 25925, + "ferrum-testnet": 26026, + "hertz-network": 26600, + "oasischain": 26863, + "optimism-bedrock-goerli-alpha-testnet": 28528, + "piece-testnet": 30067, + "ethersocial-network": 31102, + "cloudtx": 31223, + "cloudtx-testnet": 31224, + "gochain-testnet": 31337, + "bitgert": 32520, + "fusion": 32659, + "zilliqa-evm": 32769, + "zilliqa-evm-testnet": 33101, + "aves": 33333, + "j2o-taro": 35011, + "q": 35441, + "q-testnet": 35443, + "energi": 39797, + "oho": 39815, + "opulent-x-beta": 41500, + "pegglecoin": 42069, + "arbitrum": 42161, + "arbitrum-nova": 42170, + "celo": 42220, + "oasis-emerald-testnet": 42261, + "oasis-emerald": 42262, + "kinto-testnet": 42888, + "athereum": 43110, + "avalanche-fuji": 43113, + "avalanche": 43114, + "boba-avax": 43288, + "frenchain": 44444, + "celo-alfajores-testnet": 44787, + "autobahn-network": 45000, + "fusion-testnet": 46688, + "rei-network": 47805, + "wireshape-floripa-testnet": 49049, + "bifrost-testnet": 49088, + "energi-testnet": 49797, + "liveplex-oracleevm": 50001, + "gton-testnet": 50021, + "opside-testnet-pre-alpha": 51178, + "sardis": 51712, + "dfk-chain": 53935, + "haqq-chain-testnet": 54211, + "toronet-testnet": 54321, + "titan": 55004, + "rei-chain": 55555, + "rei-chain-testnet": 55556, + "boba-bnb": 56288, + "velo-labs": 56789, + "rollux-testnet": 57000, + "sepolia-pgn-public-goods-network": 58008, + "linea-testnet": 59140, + "thinkium-testnet-chain-0": 60000, + "thinkium-testnet-chain-1": 60001, + "thinkium-testnet-chain-2": 60002, + "thinkium-testnet-chain-103": 60103, + "axelchain-dev-net": 61800, + "etica": 61803, + "doken-super-chain": 61916, + "celo-baklava-testnet": 62320, + "multivac": 62621, + "ecredits": 63000, + "ecredits-testnet": 63001, + "scolcoin": 65450, + "cosmic-chain": 67588, + "condrieu": 69420, + "thinkium-chain-0": 70000, + "thinkium-chain-1": 70001, + "thinkium-chain-2": 70002, + "thinkium-chain-103": 70103, + "guapcoinx": 71111, + "polyjuice-testnet": 71393, + "godwoken-testnet-v1": 71401, + "godwoken": 71402, + "energy-web-volta-testnet": 73799, + "mixin-virtual-machine": 73927, + "resincoin": 75000, + "vention-smart-chain": 77612, + "toronet": 77777, + "firenze-test-network": 78110, + "dragonfly-hexapod": 78281, + "gold-smart-chain-testnet": 79879, + "mumbai": 80001, + "amana-testnet": 81341, + "amana-mixnet": 81342, + "amana-privnet": 81343, + "flana-testnet": 81351, + "flana-mixnet": 81352, + "flana-privnet": 81353, + "mizana-testnet": 81361, + "mizana-mixnet": 81362, + "mizana-privnet": 81363, + "base-goerli": 84531, + "aerie-network": 84886, + "cybertrust": 85449, + "chiliz-scoville-testnet": 88880, + "beverly-hills": 90210, + "nautilus-chain": 91002, + "lambda-testnet": 92001, + "mantis-testnet-hexapod": 96970, + "eliberty-testnet": 99099, + "ub-smart-chain-testnet": 99998, + "ub-smart-chain": 99999, + "quarkchain-root": 100000, + "quarkchain-shard-0": 100001, + "quarkchain-shard-1": 100002, + "quarkchain-shard-2": 100003, + "quarkchain-shard-3": 100004, + "quarkchain-shard-4": 100005, + "quarkchain-shard-5": 100006, + "quarkchain-shard-6": 100007, + "quarkchain-shard-7": 100008, + "vechain": 100009, + "vechain-testnet": 100010, + "soverun-testnet": 101010, + "crystaleum": 103090, + "brochain": 108801, + "quarkchain-devnet-root": 110000, + "quarkchain-devnet-shard-0": 110001, + "quarkchain-devnet-shard-1": 110002, + "quarkchain-devnet-shard-2": 110003, + "quarkchain-devnet-shard-3": 110004, + "quarkchain-devnet-shard-4": 110005, + "quarkchain-devnet-shard-5": 110006, + "quarkchain-devnet-shard-6": 110007, + "quarkchain-devnet-shard-7": 110008, + "siberium-test-network": 111000, + "siberium-network": 111111, + "metachain-one": 112358, + "adil-devnet": 123456, + "etnd-chain-s": 131419, + "icplaza": 142857, + "taiko-grimsvotn-l2": 167005, + "taiko-eldfell-l3": 167006, + "condor-test-network": 188881, + "milkomeda-c1-testnet": 200101, + "milkomeda-a1-testnet": 200202, + "akroma": 200625, + "alaya": 201018, + "alaya-dev-testnet": 201030, + "mythical-chain": 201804, + "decimal-smart-chain-testnet": 202020, + "jellie": 202624, + "platon": 210425, + "mas": 220315, + "reapchain": 221230, + "reapchain-testnet": 221231, + "taf-eco-chain": 224168, + "hashkey-chain-testnet": 230315, + "haymo-testnet": 234666, + "artis-sigma1": 246529, + "artis-testnet-tau1": 246785, + "saakuru-testnet": 247253, + "cmp": 256256, + "gear-zero-network-testnet": 266256, + "egoncoin-testnet": 271271, + "social-smart-chain": 281121, + "filecoin-calibration-testnet": 314159, + "ttcoin-smart-chain": 330844, + "aves-testnet": 333331, + "oone-chain-testnet": 333777, + "polis-testnet": 333888, + "polis": 333999, + "bitfinity-network-testnet": 355113, + "hapchain-testnet": 373737, + "metal-c-chain": 381931, + "metal-tahoe-c-chain": 381932, + "tipboxcoin": 404040, + "kekchain": 420420, + "kekchain-kektest": 420666, + "alterium-l2-testnet": 420692, + "arbitrum-rinkeby": 421611, + "arbitrum-goerli": 421613, + "fastex-chain-testnet": 424242, + "markr-go": 431140, + "dexalot-subnet-testnet": 432201, + "dexalot-subnet": 432204, + "weelink-testnet": 444900, + "patex-sepolia-testnet": 471100, + "openchain": 474142, + "cmp-testnet": 512512, + "ethereum-fair": 513100, + "scroll-sepolia-testnet": 534351, + "scroll": 534352, + "scroll-alpha-testnet": 534353, + "shinarium-beta": 534849, + "beaneco-smartchain": 535037, + "bear-network-chain": 641230, + "all": 651940, + "vision-vpioneer-test-chain": 666666, + "bear-network-chain-testnet": 751230, + "miexs-smartchain": 761412, + "octaspace": 800001, + "curve": 827431, + "4goodnetwork": 846000, + "vision": 888888, + "posichain-shard-0": 900000, + "posichain-testnet-shard-0": 910000, + "posichain-devnet-shard-0": 920000, + "posichain-devnet-shard-1": 920001, + "fncy-testnet": 923018, + "eluvio-content-fabric": 955305, + "etho-protocol": 1313114, + "xerom": 1313500, + "kintsugi": 1337702, + "kiln": 1337802, + "zhejiang": 1337803, + "debank-testnet": 2021398, + "plian-main": 2099156, + "platon-dev-testnet2": 2206132, + "filecoin-butterfly-testnet": 3141592, + "manta-pacific-testnet": 3441005, + "altlayer-zero-gas-network": 4000003, + "worlds-caldera": 4281033, + "mxc-wannsee-zkevm-testnet": 5167003, + "imversed": 5555555, + "imversed-testnet": 5555558, + "saakuru": 7225878, + "openvessel": 7355310, + "ql1-testnet": 7668378, + "musicoin": 7762959, + "zora": 7777777, + "plian-subchain-1": 8007736, + "hapchain": 8794598, + "quarix-testnet": 8888881, + "quarix": 8888888, + "plian-testnet-subchain-1": 10067275, + "soverun": 10101010, + "sepolia": 11155111, + "pepchain-churchill": 13371337, + "anduschain": 14288640, + "plian-testnet-main": 16658437, + "iolite": 18289463, + "smartmesh": 20180430, + "quarkblockchain": 20181205, + "pego-network": 20201022, + "excelon": 22052002, + "excoincial-chain-volta-testnet": 27082017, + "excoincial-chain": 27082022, + "auxilium-network": 28945486, + "flachain": 29032022, + "filecoin-local-testnet": 31415926, + "joys-digital": 35855456, + "maistestsubnet": 43214913, + "aquachain": 61717561, + "autonity-bakerloo-thames-testnet": 65010000, + "autonity-piccadilly-thames-testnet": 65100000, + "t-e-a-m-blockchain": 88888888, + "joys-digital-testnet": 99415706, + "gather-network": 192837465, + "kanazawa": 222000222, + "neon-evm-devnet": 245022926, + "neon-evm": 245022934, + "neon-evm-testnet": 245022940, + "razor-skale-chain": 278611351, + "oneledger": 311752642, + "meld": 333000333, + "calypso-nft-hub-skale-testnet": 344106930, + "gather-testnet-network": 356256156, + "gather-devnet-network": 486217935, + "nebula-staging": 503129905, + "ipos-network": 1122334455, + "cyberdecknet": 1146703430, + "human-protocol": 1273227453, + "aurora": 1313161554, + "aurora-testnet": 1313161555, + "aurora-betanet": 1313161556, + "chaos-skale-testnet": 1351057110, + "raptorchain": 1380996178, + "nebula": 1482601649, + "calypso-nft-hub-skale": 1564830818, + "harmony-shard-0": 1666600000, + "harmony-shard-1": 1666600001, + "harmony-shard-2": 1666600002, + "harmony-shard-3": 1666600003, + "harmony-testnet-shard-0": 1666700000, + "harmony-testnet-shard-1": 1666700001, + "harmony-devnet-shard-0": 1666900000, + "harmony-devnet-shard-1": 1666900001, + "datahopper": 2021121117, + "europa-skale-chain": 2046399126, + "ancient8-testnet": 2863311531, + "pirl": 3125659152, + "oneledger-testnet-frankenstein": 4216137055, + "palm-testnet": 11297108099, + "palm": 11297108109, + "alphabet": 111222333444, + "ntity": 197710212030, + "haradev-testnet": 197710212031, + "zeniq": 383414847825, + "pdc": 666301171999, + "molereum-network": 6022140761023, + "localhost": 1337, + "xrp-ledger-evm-devnet-sidechain": 1440001, + "bubs-testnet": 1582, + "proofofpepe-testnet": 331769, + "pop": 331771, + "xpla-xpla": 37, + "omega": 408, + "xpla-testnet": 47, + "xai-goerli-orbit": 47279324479, + "opbnb-opBNB": 5611, + "linea": 59144, + "shardeum-sphinx-dapp-1-x": 8081, + "spicy-chain": 88882, + "chiliz-chain": 88888, + "worlds-appchain": 91003, + "mode-testnet": 919, + "zora-testnet": 999 }; let _chainsById: Record; diff --git a/packages/chains/src/utils.ts b/packages/chains/src/utils.ts index b2aa93d1a05..1acc4ec3044 100644 --- a/packages/chains/src/utils.ts +++ b/packages/chains/src/utils.ts @@ -75,7 +75,6 @@ export function getChainRPCs( * * @param chain - The chain config to assemble RPC URLs from * @param clientId - The client id to use for the RPC URL - * @param secretKey - The secret key to use for the RPC URL * @returns The first valid RPC URL for the chain */ export function getValidChainRPCs( diff --git a/packages/cli/package.json b/packages/cli/package.json index 5f23e6f6fab..4c524343a1f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -37,9 +37,11 @@ }, "dependencies": { "@iarna/toml": "^2.2.5", + "@thirdweb-dev/auth": "workspace:*", "@thirdweb-dev/chains": "workspace:*", "@thirdweb-dev/sdk": "workspace:*", "@thirdweb-dev/storage": "workspace:*", + "@thirdweb-dev/wallets": "workspace:*", "async-retry": "^1.3.3", "commander": "^9.1.0", "detect-package-manager": "^2.0.1", @@ -53,10 +55,10 @@ "prompts": "^2.4.2", "rimraf": "^3.0.2", "solc": "0.8.17", - "sync-disk-cache": "^2.1.0", "tar": "^6.1.15", "update-notifier": "^6.0.2", "validate-npm-package-name": "^4.0.0", + "xdg-app-paths": "^8.3.0", "yaml": "^2.3.1" }, "bin": { diff --git a/packages/cli/src/auth/index.ts b/packages/cli/src/auth/index.ts index 9ad9ea3dbca..173fcce8574 100644 --- a/packages/cli/src/auth/index.ts +++ b/packages/cli/src/auth/index.ts @@ -1,105 +1,301 @@ +import { LocalWallet } from "@thirdweb-dev/wallets"; +import assert from "assert"; import chalk from "chalk"; -import prompts from "prompts"; -import Cache, { CacheEntry } from "sync-disk-cache"; -import { ApiResponse } from "../lib/types"; -import os from "os"; +import fs from "fs"; +import http from "http"; +import open from "open"; +import ora from "ora"; +import url from "url"; +import { logger, spinner } from "../core/helpers/logger"; +import { ThirdwebAuth } from "@thirdweb-dev/auth"; +import { ICredsConfig } from "../lib/types"; +import { generateStateParameter } from "../lib/utils"; +import crypto from "node:crypto"; + +type LoginProps = { + browser: boolean; + configPaths: ConfigPaths; +}; + +const defaultLoginProps = { + browser: true, + configPaths: { + credsConfigPath: "", + cliWalletPath: "", + tokenPath: "", + }, +}; + +type ConfigPaths = { + credsConfigPath: string; + cliWalletPath: string; + tokenPath: string; +} export async function loginUser( - cache: Cache, + configPaths: ConfigPaths, options?: { new: boolean }, showLogs?: boolean, ) { - const keyFound = getSession(cache); - if (keyFound && !options?.new) { + const { credsConfigPath, tokenPath } = configPaths; + const authToken = await getSession(tokenPath, credsConfigPath); + if (authToken && !options?.new) { if (showLogs) { console.log(chalk.green("You are already logged in")); } - return keyFound; + globalThis["TW_AUTH_TOKEN"] = authToken; + return authToken; } else { - const apiKey = await createSession(cache); - return apiKey; + const token = await authenticateUser({ browser: true, configPaths }); + if (!token) { + throw new Error("Failed to login"); + } + + globalThis["TW_AUTH_TOKEN"] = token; + return token; } } -export async function logoutUser(cache: Cache) { +export async function logoutUser(credsConfigPath: string, tokenPath: string, cliWalletPath: string) { try { - cache.remove("api-secret-key"); - console.log(chalk.green("You have been logged out")); + ora("Logging out...").start(); + const dirExists = fs.existsSync(credsConfigPath) && fs.existsSync(tokenPath); + if (!dirExists) { + ora().warn(chalk.yellow("You are already logged out, did you mean to login?")); + return; + } + fs.unlinkSync(credsConfigPath); + fs.unlinkSync(tokenPath); + // TODO: We can consider not removing this on logout later, once we want to implement teams. For now this wallet will be ephemeral. + fs.unlinkSync(cliWalletPath); + ora().succeed(chalk.green("You have been logged out")); } catch (error) { console.log(chalk.red("Something went wrong", error)); } } -export function getSession(cache: Cache) { +export async function getSession(tokenPath: string, configCredsPath: string) { + if (!fs.existsSync(tokenPath) || !fs.existsSync(configCredsPath)) { + return null; + } try { - const apiKey: CacheEntry = cache.get("api-secret-key"); - return apiKey.value; + return fs.readFileSync(tokenPath, "utf8"); } catch (error) { - console.log(error); + console.error(error); } } -export async function createSession(cache: Cache) { - try { - const isWindows = os.type() === "Windows_NT"; - if (isWindows) { - console.log(chalk.yellow("Windows detected: if you are using powershell, there are some known issues with it that we are actively working on, please use git bash or the command prompt. Thank you for your understanding.")); - } - const response = await prompts({ - type: "invisible", - name: "apiSecretKey", - message: `Please enter your API secret key, you can find or create it on ${chalk.blue( - "https://thirdweb.com/create-api-key", - )}`, +export const authenticateUser = async ( + props: LoginProps = defaultLoginProps, +) => { + const { credsConfigPath, cliWalletPath, tokenPath } = props.configPaths; + const waitForDashboard = spinner("Waiting for a response from the dashboard").clear(); + + // Get or generate a localwallet. + const wallet = await getOrGenerateLocalWallet(credsConfigPath, cliWalletPath); + const walletAddress = await wallet.getAddress(); + const domain = "thirdweb.com"; + const auth = new ThirdwebAuth(wallet, domain); + + // Generate the login payload to pass to the dashboard. + const loggedIn = await auth.login({ + domain: domain, + address: walletAddress, + }); + + // In this case the state is the loggedIn object. + const ourState = generateStateParameter(32); + const payload = encodeURIComponent(JSON.stringify(loggedIn)); + const urlToOpen = `https://thirdweb.com/cli/login?payload=${payload}&#${ourState}`; + + let server: http.Server; + let loginTimeoutHandle: NodeJS.Timeout; + const timerPromise = new Promise((resolve, reject) => { + loginTimeoutHandle = setTimeout(() => { + logger.error("Login session timed out, server didn't receive a response in 5 minutes. Please try again."); + server.close(); + clearTimeout(loginTimeoutHandle); + reject(new Error("Login session timed out, server didn't receive a response in 5 minutes. Please try again.")); + }, 300000); + }); + + const loginPromise = new Promise((resolve, reject) => { + server = http.createServer(async (req, res) => { + function finish(error?: Error) { + clearTimeout(loginTimeoutHandle); + server.close((closeErr?: Error) => { + if (error || closeErr) { + reject(error || closeErr); + } + }); + } + + const allowedDomains = [ + "https://www.thirdweb.com", + ] + const origin = req.headers.origin as string; + + if (allowedDomains.includes(origin) || (origin && origin.endsWith('.thirdweb-preview.com'))) { + res.setHeader('Access-Control-Allow-Origin', origin); + res.setHeader('Access-Control-Allow-Methods', '*'); + } + + if (req.method === 'OPTIONS') { + res.setHeader('Access-Control-Allow-Headers', 'content-type, baggage, sentry-trace'); + res.writeHead(200); + res.end(); + return; + } + + assert(req.url, "This request doesn't have a URL"); + const { pathname, query } = url.parse(req.url, true); + switch (pathname) { + case "/auth/callback": { + if (query.failed) { + res.writeHead(500, "Unable to authenticate with the dashboard!"); + res.end("Unable to authenticate with the dashboard!", () => { + finish(new Error("Unable to authenticate with the dashboard!")); + }) + reject(chalk.red("Something went wrong! Unable to authenticate with the dashboard.")); + waitForDashboard.stop(); + } + if (query.token) { + const token = Array.isArray(query.token) ? query.token[0] : query.token; + const theirState = Array.isArray(query.state) + ? query.state[0] + : query.state; + + // Check if the state sent back is the same as the one we sent. + if (theirState !== ourState) { + res.writeHead(400, { "Content-Type": "text/plain" }); // send a 400 response + res.end("Unauthorized request, state mismatch", () => { + finish(new Error("Unauthorized request, state mismatch")); + }); + reject( + new Error(chalk.red("\nUnauthorized request, state mismatch")), + ); + waitForDashboard.stop(); + } else { + // Save the token to the config file. + // eslint-disable-next-line no-unused-expressions + fs.writeFileSync(tokenPath, token), { + encoding: "utf8", + mode: 0o600, + }; + res.end(() => { + waitForDashboard.clear(); + console.log(chalk.green(`Successfully linked your account to this device`)); + finish(); + }); + logger.info(chalk.green(`\nSuccessfully logged in.`)); + resolve(token); // resolve promise with secretKey + } + } else { + res.writeHead(400, { "Content-Type": "text/plain" }); + res.end("No authToken received", () => { + finish(new Error("No authToken received")); + }); + reject(new Error(chalk.red("\nNo authToken received"))); + waitForDashboard.stop(); + } + } + } }); - const keyPassed = response.apiSecretKey; - if (!keyPassed) { - console.log(chalk.red("You need to pass an API secret key")); - process.exit(1); - } + server.listen(8976); + }); + if (props?.browser) { + console.log(chalk.yellow(`Automatically opening a link to authenticate with our dashboard...\n`)) + waitForDashboard.start(); + // Adding this timeout since it feels weird for the browser to open before the spinner. + setTimeout(async () => { + await open(urlToOpen); + }, 2000); + } else { + logger.info(`Visit this link to authenticate: ${urlToOpen}`); + } - if (keyPassed.length === 32) { - console.log(chalk.red(`This is not a valid secret key. To get your secret key -1. Create an API key at https://thirdweb.com/create-api-key -2. Store and copy your Secret Key. This will be shown only once. -3. Paste it in the CLI when prompted`)); - process.exit(1); + return Promise.race([timerPromise, loginPromise]); +}; + +async function getOrCreatePassword(configCredsPath: string): Promise { + const passwordFileExists = fs.existsSync(configCredsPath); + if (!passwordFileExists) { + // Generate a random password for the CLI to be able to import / export the wallet. + return crypto.randomUUID(); + } else { + const file = fs.readFileSync(configCredsPath, "utf8"); + try { + JSON.parse(file); + } catch (e) { + // If it fails to parse the password we should just delete the file and generate a new password, since this password is not shown to the user. + fs.unlinkSync(configCredsPath); + return getOrCreatePassword(configCredsPath); } + const { password } = JSON.parse(file) as ICredsConfig; + return password; + } +} +async function getOrGenerateLocalWallet(configCredsPath: string, cliWalletPath: string) { + // Get or prompt for password. + const password = await getOrCreatePassword(configCredsPath); + const wallet = new LocalWallet(); + const foundWallet = fs.existsSync(cliWalletPath); + + if (foundWallet) { + const walletJson = fs.readFileSync(cliWalletPath, "utf8"); try { - await validateKey(response.apiSecretKey); - } catch (error) { - console.log(error); - process.exit(1); + // See if file is valid before proceeding. + JSON.parse(walletJson); + + await wallet.import({ + encryptedJson: walletJson, + password, + }); + return wallet; + } catch (e) { + // Wallet file is not valid json, create a new one. } - cache.set("api-secret-key", response.apiSecretKey); - return response.apiSecretKey; - } catch (error) { - console.log(error); } + + // Otherwise, generate a new wallet. + wallet.generate(); + const walletExported = await wallet.export({ + strategy: "encryptedJson", + password, + }); + + // write wallet + fs.writeFileSync(cliWalletPath, walletExported, { + encoding: "utf8", + mode: 0o600, + }); + + // write password + fs.writeFileSync(configCredsPath, JSON.stringify({ + password: password, + }), "utf8"); + + return wallet; } -export async function validateKey(apiSecretKey: string) { - const fetch = (await import("node-fetch")).default; - // TODO: CHANGE THIS TO PROD BEFORE MERGING!!! - const response = await fetch( - `https://api.thirdweb.com/v1/keys/use?scope=storage`, - { +export const validateKey = async (apiSecretKey: string) => { + const apiUrl = "https://api.thirdweb.com/v1/keys/use"; + try { + const response = await fetch(`${apiUrl}?scope=storage`, { method: "GET", headers: { "Content-Type": "application/json", "x-secret-key": apiSecretKey, - }, - }, - ); + } + }) - const apiResponse = (await response.json()) as ApiResponse; + if (response.status !== 200) { + throw new Error("Unauthorized key"); + } - if (!response.ok) { - const { error } = apiResponse; - throw new Error(chalk.red(error.message)); - } else { - return apiSecretKey; + } catch (error) { + throw new Error(chalk.red("Unauthorized key")); } -} +}; \ No newline at end of file diff --git a/packages/cli/src/cli/index.ts b/packages/cli/src/cli/index.ts index 6a3bdba4a4e..65f8445592a 100644 --- a/packages/cli/src/cli/index.ts +++ b/packages/cli/src/cli/index.ts @@ -3,11 +3,11 @@ import { ThirdwebStorage } from "@thirdweb-dev/storage"; import chalk from "chalk"; import { exec, spawn } from "child_process"; import { Command } from "commander"; +import fs from "fs"; import open from "open"; -import os from "os"; import path from "path"; import prompts from "prompts"; -import Cache, { CacheEntry } from "sync-disk-cache"; +import xdgAppPaths from "xdg-app-paths"; import { loginUser, logoutUser, validateKey } from "../auth"; import { detectExtensions } from "../common/feature-detector"; import { processProject } from "../common/processor"; @@ -24,11 +24,17 @@ import { upload } from "../storage/command"; const main = async () => { // eslint-disable-next-line turbo/no-undeclared-env-vars const skipIntro = process.env.THIRDWEB_CLI_SKIP_INTRO === "true"; + const configDir = xdgAppPaths(".thirdweb").config(); + const cacheDir = xdgAppPaths(".thirdweb").cache(); + const lastVersionCheckCachePath = path.join( + cacheDir, + "last-version-check.txt", + ); + const credsConfigPath = path.join(configDir, "creds.json"); + const cliWalletPath = path.join(configDir, "wallet.json"); + const tokenPath = path.join(configDir, "auth-token.txt"); const program = new Command(); - const cache = new Cache("thirdweb-cli", { - location: path.join(os.homedir(), ".thirdweb", "creds"), - }); // yes this has to look like this, eliminates whitespace if (!skipIntro) { @@ -50,16 +56,32 @@ const main = async () => { .version(cliVersion, "-v, --version") .option("--skip-update-check", "Skip check for auto updates") .hook("preAction", async () => { + const regenerateConfig = !fs.existsSync(configDir); + const regenerateCache = !fs.existsSync(cacheDir); + + // Create config directory if it doesn't exist + if (regenerateConfig) { + fs.mkdirSync(configDir, { recursive: true }); + } + + // Create cache directory if it doesn't exist + if (regenerateCache) { + fs.mkdirSync(cacheDir, { recursive: true }); + } + if (skipIntro || program.opts().skipUpdateCheck) { return; } let shouldCheckVersion = true; try { - const lastCheckCache: CacheEntry = cache.get("last-version-check"); + const lastVersionCheckCache = fs.readFileSync( + lastVersionCheckCachePath, + "utf-8", + ); - if (lastCheckCache.isCached) { - const lastVersionCheck = new Date(lastCheckCache.value); + if (lastVersionCheckCache) { + const lastVersionCheck = new Date(lastVersionCheckCache); // Don't check for updates if already checked within past 24 hours if (Date.now() - lastVersionCheck.getTime() < 1000 * 60 * 60 * 24) { shouldCheckVersion = false; @@ -88,7 +110,14 @@ const main = async () => { try { // Set cache to prevent checking for updates again for 24 hours - cache.set("last-version-check", new Date().toISOString()); + fs.writeFileSync( + lastVersionCheckCachePath, + new Date().toISOString(), + { + encoding: "utf-8", + mode: 0o600, + }, + ); } catch { // no-op } @@ -300,17 +329,22 @@ const main = async () => { "Deploy a dynamic smart contract made up of extensions to blockchains", ) .option("--zksync", "Deploy on ZKSync") - .option("-k, --key ", "API key to authorize usage") + .option("-k, --key ", "API secret key to authorize usage") .action(async (options) => { - let apiSecretKey = ""; + let secretKey = ""; // If no key is passed in, prompt the user to login. If it is passed in, use it. if (!options.key) { - apiSecretKey = await loginUser(cache); + await loginUser({ + credsConfigPath, + cliWalletPath, + tokenPath, + }); } else { + // Don't need to validate anymore? Also, should probably rely on the underlying service to throw that error. await validateKey(options.key); - apiSecretKey = options.key; + secretKey = options.key; } - const url = await deploy(options, apiSecretKey); + const url = await deploy(options, secretKey); if (url && !options.ci) { await open(url); } @@ -332,20 +366,25 @@ const main = async () => { .option("--dry-run", "dry run (skip actually publishing)") .option("-d, --debug", "show debug logs") .option("--ci", "Continuous Integration mode") - .option("-k, --key ", "API key to authorize usage") + .option("-k, --key ", "API secret key to authorize usage") .action(async (options) => { - let apiSecretKey = ""; + let secretKey = ""; // If no key is passed in, prompt the user to login. If it is passed in, use it. if (!options.key) { - apiSecretKey = await loginUser(cache); + await loginUser({ + credsConfigPath, + cliWalletPath, + tokenPath, + }); } else { + // Don't need to validate anymore? Also, should probably rely on the underlying service to throw that error. await validateKey(options.key); - apiSecretKey = options.key; + secretKey = options.key; } logger.warn( "'release' is deprecated and will be removed in a future update. Please use 'publish' instead.", ); - const url = await processProject(options, "publish", apiSecretKey); + const url = await processProject(options, "publish", secretKey); info( `Open this link to publish your contracts: ${chalk.blueBright( url.toString(), @@ -374,17 +413,22 @@ const main = async () => { .option("--dry-run", "dry run (skip actually publishing)") .option("-d, --debug", "show debug logs") .option("--ci", "Continuous Integration mode") - .option("-k, --key ", "API key to authorize usage") + .option("-k, --key ", "API secret key to authorize usage") .action(async (options) => { - let apiSecretKey = ""; + let secretKey = ""; // If no key is passed in, prompt the user to login. If it is passed in, use it. if (!options.key) { - apiSecretKey = await loginUser(cache); + await loginUser({ + credsConfigPath, + cliWalletPath, + tokenPath, + }); } else { + // Don't need to validate anymore? Also, should probably rely on the underlying service to throw that error. await validateKey(options.key); - apiSecretKey = options.key; + secretKey = options.key; } - const url = await processProject(options, "publish", apiSecretKey); + const url = await processProject(options, "publish", secretKey); info( `Open this link to publish your contracts: ${chalk.blueBright( url.toString(), @@ -399,19 +443,31 @@ const main = async () => { .command("upload") .description("Upload any file or directory to decentralized storage (IPFS)") .argument("[upload]", "path to file or directory to upload") - .option("-k, --key ", "API key to authorize usage") + .option("-k, --key ", "API secret key to authorize usage") .action(async (_path, options) => { - let apiSecretKey = ""; + let secretKey = ""; + let storage: ThirdwebStorage; // If no key is passed in, prompt the user to login. If it is passed in, use it. if (!options.key) { - apiSecretKey = await loginUser(cache); + await loginUser({ + credsConfigPath, + cliWalletPath, + tokenPath, + }); } else { + // Don't need to validate anymore? Also, should probably rely on the underlying service to throw that error. await validateKey(options.key); - apiSecretKey = options.key; + secretKey = options.key; } - const storage = new ThirdwebStorage({ - secretKey: apiSecretKey, - }); + + if (secretKey) { + storage = new ThirdwebStorage({ + secretKey, + }); + } else { + storage = new ThirdwebStorage(); + } + try { const uri = await upload(storage, _path); info( @@ -438,7 +494,7 @@ const main = async () => { ), ); } else { - logger.error(chalk.redBright("Failed to upload files"), err); + logger.error(chalk.redBright(err.message ? err.message : err)); } } }); @@ -460,17 +516,22 @@ const main = async () => { "Preload ABIs and generate types for your smart contract to strongly type the thirdweb SDK", ) .option("-p, --path ", "path to project", ".") - .option("-k, --key ", "API key to authorize usage") + .option("-k, --key ", "API secret key to authorize usage") .action(async (options) => { - let apiSecretKey = ""; + let secretKey = ""; // If no key is passed in, prompt the user to login. If it is passed in, use it. if (!options.key) { - apiSecretKey = await loginUser(cache); + await loginUser({ + credsConfigPath, + cliWalletPath, + tokenPath, + }); } else { + // Don't need to validate anymore? Also, should probably rely on the underlying service to throw that error. await validateKey(options.key); - apiSecretKey = options.key; + secretKey = options.key; } - await generate(options, apiSecretKey); + await generate(options, secretKey); }); program @@ -480,7 +541,11 @@ const main = async () => { ) .option("-n, --new", "Login with a new API secret key", false) .action(async (options) => { - await loginUser(cache, options, true); + await loginUser({ + credsConfigPath, + cliWalletPath, + tokenPath, + }, options, true); }); program @@ -489,7 +554,7 @@ const main = async () => { "Logout of the thirdweb CLI, effectively removing your API secret key from your machine", ) .action(async () => { - await logoutUser(cache); + await logoutUser(credsConfigPath, tokenPath, cliWalletPath); }); await program.parseAsync(); diff --git a/packages/cli/src/common/processor.ts b/packages/cli/src/common/processor.ts index fd65390cc25..8cf6942c42d 100644 --- a/packages/cli/src/common/processor.ts +++ b/packages/cli/src/common/processor.ts @@ -32,12 +32,18 @@ import { export async function processProject( options: any, command: "deploy" | "publish", - apiSecretKey: string, + secretKey: string, ) { // TODO: allow overriding the default storage - const storage = new ThirdwebStorage({ - secretKey: apiSecretKey, - }); + let storage: ThirdwebStorage; + if (secretKey) { + storage = new ThirdwebStorage({ + secretKey, + }); + } else { + // Since the auth key is being set in the global context, we don't need to pass anything here. + storage = new ThirdwebStorage(); + } logger.setSettings({ minLevel: options.debug ? "debug" : "info", @@ -240,7 +246,7 @@ export async function processProject( } else { const deployArgs: RouterParams = await formatToExtensions( selectedContracts, - apiSecretKey, + secretKey, ); const outputDeployArgs = JSON.stringify(deployArgs, undefined, 2); @@ -345,9 +351,9 @@ export async function processProject( loader.succeed("Upload successful"); return getUrl(combinedURIs, command); - } catch (e) { + } catch (err: any) { loader.fail("Error uploading metadata"); - throw e; + throw new Error(err.message ? err.message : err); } } @@ -356,8 +362,8 @@ export function getUrl(hashes: string[], command: string) { if (hashes.length === 1) { url = new URL( THIRDWEB_URL + - `/contracts/${command}/` + - encodeURIComponent(hashes[0].replace("ipfs://", "")), + `/contracts/${command}/` + + encodeURIComponent(hashes[0].replace("ipfs://", "")), ); } else { url = new URL(THIRDWEB_URL + "/contracts/" + command); @@ -370,14 +376,20 @@ export function getUrl(hashes: string[], command: string) { async function formatToExtensions( contracts: ContractPayload[], - apiSecretKey: string, + secretKey: string, ): Promise<{ extensions: Extension[]; extensionDeployArgs: ExtensionDeployArgs[]; }> { - const storage = new ThirdwebStorage({ - secretKey: apiSecretKey, - }); + let storage: ThirdwebStorage; + if (secretKey) { + storage = new ThirdwebStorage({ + secretKey, + }); + } else { + // Since the auth key is being set in the global context, we don't need to pass anything here. + storage = new ThirdwebStorage(); + } const extensions: Extension[] = []; const extensionDeployArgs: ExtensionDeployArgs[] = []; diff --git a/packages/cli/src/deploy/app.ts b/packages/cli/src/deploy/app.ts index da23d6455f3..6ecc734ad02 100644 --- a/packages/cli/src/deploy/app.ts +++ b/packages/cli/src/deploy/app.ts @@ -8,11 +8,17 @@ import { upload } from "../storage/command"; export async function deployApp( distPath = "dist", projectPath = ".", - apiSecretKey: string, + secretKey: string, ) { - const storage = new ThirdwebStorage({ - secretKey: apiSecretKey, - }); + let storage: ThirdwebStorage; + if (secretKey) { + storage = new ThirdwebStorage({ + secretKey, + }); + } else { + // Since the auth key is being set in the global context, we don't need to pass anything here. + storage = new ThirdwebStorage(); + } const detectedPackageManager = await detectPackageManager(projectPath, {}); const detectedFramework = await detectFramework( projectPath, @@ -74,8 +80,8 @@ export async function deployApp( "ipfs://", "https://cf-ipfs.com/ipfs/", )}`; - } catch (err) { - console.error("Can't upload project", err); + } catch (err: any) { + console.error(err.message ? err.message : err); return Promise.reject("Can't upload project"); } } diff --git a/packages/cli/src/deploy/index.ts b/packages/cli/src/deploy/index.ts index 57a9b9f7b05..887d7e4ab00 100644 --- a/packages/cli/src/deploy/index.ts +++ b/packages/cli/src/deploy/index.ts @@ -12,7 +12,7 @@ type DeployOptions = { distPath?: string; }; -export async function deploy(options: DeployOptions, apiSecretKey: string) { +export async function deploy(options: DeployOptions, secretKey: string) { if (options.name) { const url = generateDashboardUrl(options.name, options.contractVersion); @@ -33,7 +33,7 @@ export async function deploy(options: DeployOptions, apiSecretKey: string) { if (options.app) { try { - const url = await deployApp(options.distPath, options.path, apiSecretKey); + const url = await deployApp(options.distPath, options.path, secretKey); info(`Here is the link to your app: ${chalk.blueBright(url.toString())}`); return url.toString(); } catch (err) { @@ -44,7 +44,7 @@ export async function deploy(options: DeployOptions, apiSecretKey: string) { } } - const url = await processProject(options, "deploy", apiSecretKey); + const url = await processProject(options, "deploy", secretKey); info( `Open this link to deploy your contracts: ${chalk.blueBright( url.toString(), diff --git a/packages/cli/src/generate/command.ts b/packages/cli/src/generate/command.ts index f203577db1a..696257559d8 100644 --- a/packages/cli/src/generate/command.ts +++ b/packages/cli/src/generate/command.ts @@ -14,7 +14,7 @@ import { info } from "../core/helpers/logger"; import { GenerateOptions, ThirdwebConfig } from "./types"; import { CHAIN_OPTIONS, getContractsForAddresses } from "./utils"; -export async function generate(options: GenerateOptions, apiSecretKey: string) { +export async function generate(options: GenerateOptions, secretKey: string) { const projectPath: string = options.path?.replace(/\/$/, "") || "."; let contracts: DeployedContract[] = []; @@ -55,8 +55,7 @@ export async function generate(options: GenerateOptions, apiSecretKey: string) { const numberOfNewContracts = contracts.length - thirdwebConfig.contracts.length; info( - `Updated thirdweb.json with ${numberOfNewContracts} new contract${ - numberOfNewContracts === 1 ? "" : "s" + `Updated thirdweb.json with ${numberOfNewContracts} new contract${numberOfNewContracts === 1 ? "" : "s" }`, ); } @@ -86,19 +85,22 @@ export async function generate(options: GenerateOptions, apiSecretKey: string) { ); info( - `Created a thirdweb.json file with configuration for ${ - contracts.length - } contract${ - contracts.length === 1 ? "" : "s" + `Created a thirdweb.json file with configuration for ${contracts.length + } contract${contracts.length === 1 ? "" : "s" } detected in your project.\n\n - You can also update this configuration manually by editing the file.\n`, ); } // Attempt to download the ABI for each contract ora(`Downloading ABIs for contracts configured in 'thirdweb.json'`).info(); - const storage = new ThirdwebStorage({ - secretKey: apiSecretKey, - }); + let storage: ThirdwebStorage; + if (secretKey) { + storage = new ThirdwebStorage({ + secretKey, + }); + } else { + storage = new ThirdwebStorage(); + } const metadata: { address: string; metadata: Awaited>; @@ -187,8 +189,7 @@ export async function generate(options: GenerateOptions, apiSecretKey: string) { } ora( - `Downloaded and cached ABIs for ${metadata.length} smart contract${ - metadata.length === 1 ? "" : "s" + `Downloaded and cached ABIs for ${metadata.length} smart contract${metadata.length === 1 ? "" : "s" }`, ).succeed(); diff --git a/packages/cli/src/generate/types.ts b/packages/cli/src/generate/types.ts index fc2c8197754..83db137cdd2 100644 --- a/packages/cli/src/generate/types.ts +++ b/packages/cli/src/generate/types.ts @@ -1,5 +1,10 @@ import { DeployedContract } from "@thirdweb-dev/sdk"; +export type AuthConfig = { + secretKey?: string; + authToken?: string; +} + export type ThirdwebConfig = { chainIds: number[]; contracts: DeployedContract[]; diff --git a/packages/cli/src/lib/global.d.ts b/packages/cli/src/lib/global.d.ts new file mode 100644 index 00000000000..9ffcf9471b3 --- /dev/null +++ b/packages/cli/src/lib/global.d.ts @@ -0,0 +1,4 @@ +declare module globalThis { + // eslint-disable-next-line no-var + var TW_AUTH_TOKEN: string; +} \ No newline at end of file diff --git a/packages/cli/src/lib/types.ts b/packages/cli/src/lib/types.ts index a1fff8854b4..98f1ab61c64 100644 --- a/packages/cli/src/lib/types.ts +++ b/packages/cli/src/lib/types.ts @@ -4,6 +4,11 @@ import { PackageManagerType, } from "../core/types/ProjectType"; +export type ICredsConfig = { + password: string; + expiration: number; +} + export type IProcessContractAppTypeArgs = { detectedPackageManager: PackageManagerType; thirdwebDepsToUpdate: Set; @@ -43,4 +48,4 @@ export type ApiResponse = { statusCode: number; message: string; }; -}; +}; \ No newline at end of file diff --git a/packages/cli/src/lib/utils.ts b/packages/cli/src/lib/utils.ts index 88da2f82e65..867a27eb4d4 100644 --- a/packages/cli/src/lib/utils.ts +++ b/packages/cli/src/lib/utils.ts @@ -4,6 +4,11 @@ import path from "path"; import { PackageManagerType } from "../core/types/ProjectType"; import { runCommand } from "../create/helpers/run-command"; import { IProcessAppTypeArgs, IProcessContractAppTypeArgs } from "./types"; +import crypto from "crypto"; + +export function generateStateParameter(length: number) { + return crypto.randomBytes(length).toString("hex"); +} export function convertDependenciesToStringFormat(dependenciesObject: object) { return Object.entries(dependenciesObject).map(([pkg, versionDetails]) => { diff --git a/packages/cli/src/storage/command.ts b/packages/cli/src/storage/command.ts index 9f9170bd668..831c0b7519b 100644 --- a/packages/cli/src/storage/command.ts +++ b/packages/cli/src/storage/command.ts @@ -69,9 +69,9 @@ export async function upload( ); try { uri = await storage.upload(file, { uploadWithoutDirectory: true }); - } catch (err) { + } catch (err: any) { spin.fail("Failed to upload file to IPFS."); - return Promise.reject(err); + return Promise.reject(err.message ? err.message : err); } spin.succeed("Successfully uploaded file to IPFS."); } else { diff --git a/packages/sdk/src/evm/constants/urls.ts b/packages/sdk/src/evm/constants/urls.ts index 2ce145bedce..f25eb010241 100644 --- a/packages/sdk/src/evm/constants/urls.ts +++ b/packages/sdk/src/evm/constants/urls.ts @@ -64,9 +64,8 @@ export function getChainProvider( // if we still don't have an url fall back to just using the chainId or slug in the rpc and try that if (!rpcUrl) { - rpcUrl = `https://${chainId || network}.rpc.thirdweb.com/${ - options.clientId || "" - }`; + rpcUrl = `https://${chainId || network}.rpc.thirdweb.com/${options.clientId || "" + }`; } if (!rpcUrl) { @@ -241,6 +240,7 @@ export function getProviderFromRpcUrl( headers["authorization"] = `Bearer ${ (globalThis as any).TW_AUTH_TOKEN as string }`; + headers["x-authorize-wallet"] = "true"; authStrategy = "twAuthToken"; } @@ -278,18 +278,18 @@ export function getProviderFromRpcUrl( // Otherwise, create a new provider on the specific network const newProvider = chainId ? // If we know the chainId we should use the StaticJsonRpcBatchProvider - new StaticJsonRpcBatchProvider( - { - url: rpcUrl, - headers, - }, - chainId, - ) - : // Otherwise fall back to the built in json rpc batch provider - new providers.JsonRpcBatchProvider({ + new StaticJsonRpcBatchProvider( + { url: rpcUrl, headers, - }); + }, + chainId, + ) + : // Otherwise fall back to the built in json rpc batch provider + new providers.JsonRpcBatchProvider({ + url: rpcUrl, + headers, + }); // Save the provider in our cache RPC_PROVIDER_MAP.set(seralizedOpts, newProvider); diff --git a/packages/sdk/src/evm/types/global.d.ts b/packages/sdk/src/evm/types/global.d.ts new file mode 100644 index 00000000000..9ffcf9471b3 --- /dev/null +++ b/packages/sdk/src/evm/types/global.d.ts @@ -0,0 +1,4 @@ +declare module globalThis { + // eslint-disable-next-line no-var + var TW_AUTH_TOKEN: string; +} \ No newline at end of file diff --git a/packages/service-utils/src/core/api.ts b/packages/service-utils/src/core/api.ts index 2c588a2fdbf..019aaa84bc8 100644 --- a/packages/service-utils/src/core/api.ts +++ b/packages/service-utils/src/core/api.ts @@ -6,6 +6,7 @@ export type CoreServiceConfig = { serviceScope: ServiceName; serviceApiKey: string; serviceAction?: string; + useWalletAuth?: boolean; }; export type ApiKeyMetadata = { @@ -73,9 +74,10 @@ export async function fetchKeyMetadataFromApi( export async function fetchAccountFromApi( jwt: string, config: CoreServiceConfig, + useWalletAuth: boolean, ): Promise { const { apiUrl, serviceApiKey } = config; - const url = `${apiUrl}/v1/account/me`; + const url = useWalletAuth ? `${apiUrl}/v1/wallet/me` : `${apiUrl}/v1/account/me` const response = await fetch(url, { method: "GET", headers: { diff --git a/packages/service-utils/src/core/authorize/index.ts b/packages/service-utils/src/core/authorize/index.ts index 38625178a47..270c9def046 100644 --- a/packages/service-utils/src/core/authorize/index.ts +++ b/packages/service-utils/src/core/authorize/index.ts @@ -18,6 +18,8 @@ export type AuthorizationInput = { jwt: string | null; hashedJWT: string | null; targetAddress?: string | string[]; + // IMPORTANT: this is a stringified boolean! Only pass in true or false here. IK it's not ideal, but it's required to pass it in the headers. + useWalletAuth?: string | null; }; type CacheOptions = { @@ -31,16 +33,16 @@ type CacheOptions = { type ApiKeyCacheWithPossibleTTL = | { - apiKeyMeta: ApiKeyMetadata; - updatedAt: number; - } + apiKeyMeta: ApiKeyMetadata; + updatedAt: number; + } | ApiKeyMetadata; type AccountCacheWithPossibleTTL = | { - apiKeyMeta: AccountMetadata; - updatedAt: number; - } + apiKeyMeta: AccountMetadata; + updatedAt: number; + } | AccountMetadata; export async function authorize( @@ -48,7 +50,7 @@ export async function authorize( serviceConfig: CoreServiceConfig, cacheOptions?: CacheOptions, ): Promise { - const { clientId, targetAddress, secretKeyHash, jwt, hashedJWT } = authData; + const { clientId, targetAddress, secretKeyHash, jwt, hashedJWT, useWalletAuth } = authData; const { enforceAuth } = serviceConfig; // BACKWARDS COMPAT: if auth not enforced and we don't have auth credentials bypass @@ -89,7 +91,7 @@ export async function authorize( } if (!accountMeta) { try { - const { data, error } = await fetchAccountFromApi(jwt, serviceConfig); + const { data, error } = await fetchAccountFromApi(jwt, serviceConfig, useWalletAuth?.toLowerCase() === "true"); if (error) { return { authorized: false, diff --git a/packages/service-utils/src/node/index.ts b/packages/service-utils/src/node/index.ts index ce026faff3d..dbf6714b859 100644 --- a/packages/service-utils/src/node/index.ts +++ b/packages/service-utils/src/node/index.ts @@ -20,7 +20,7 @@ export async function authorizeNode( authInput: AuthInput, serviceConfig: NodeServiceConfig, ): Promise { - let authData; + let authData: AuthorizationInput; try { authData = extractAuthorizationData(authInput); } catch (e) { @@ -121,12 +121,18 @@ export function extractAuthorizationData( } let jwt: null | string = null; + let useWalletAuth: null | string = null; // check for authorization header on the request const authorizationHeader = getHeader(headers, "authorization"); if (authorizationHeader) { const [type, token] = authorizationHeader.split(" "); if (type.toLowerCase() === "bearer" && !!token) { jwt = token; + const walletAuthHeader = getHeader(headers, "x-authorize-wallet"); + // IK a stringified boolean is not ideal, but it's required to pass it in the headers. + if (walletAuthHeader?.toLowerCase() === "true") { + useWalletAuth = walletAuthHeader; + } } } @@ -139,6 +145,7 @@ export function extractAuthorizationData( origin, bundleId, targetAddress: authInput.targetAddress, + useWalletAuth, }; } diff --git a/packages/storage/src/core/downloaders/storage-downloader.ts b/packages/storage/src/core/downloaders/storage-downloader.ts index e71eb4ccb90..1b2eb975f8a 100644 --- a/packages/storage/src/core/downloaders/storage-downloader.ts +++ b/packages/storage/src/core/downloaders/storage-downloader.ts @@ -104,9 +104,8 @@ export class StorageDownloader implements IStorageDownloader { ) { headers = { ...headers, - authorization: `Bearer ${ - (globalThis as any).TW_AUTH_TOKEN as string - }`, + authorization: `Bearer ${(globalThis as any).TW_AUTH_TOKEN as string}`, + "x-authorize-wallet": 'true', }; } diff --git a/packages/storage/src/core/uploaders/ipfs-uploader.ts b/packages/storage/src/core/uploaders/ipfs-uploader.ts index a3efa3c3063..763d97bced2 100644 --- a/packages/storage/src/core/uploaders/ipfs-uploader.ts +++ b/packages/storage/src/core/uploaders/ipfs-uploader.ts @@ -96,9 +96,8 @@ export class IpfsUploader implements IStorageUploader { extensions = file.name.substring(extensionStartIndex); } } - fileName = `${ - i + options.rewriteFileNames.fileStartNumber - }${extensions}`; + fileName = `${i + options.rewriteFileNames.fileStartNumber + }${extensions}`; } else { fileName = `${file.name}`; } @@ -300,6 +299,10 @@ export class IpfsUploader implements IStorageUploader { "authorization", `Bearer ${(globalThis as any).TW_AUTH_TOKEN as string}`, ); + xhr.setRequestHeader( + "x-authorize-wallet", + `true`, + ); } xhr.send(form as any); @@ -316,6 +319,7 @@ export class IpfsUploader implements IStorageUploader { } const headers: HeadersInit = {}; + if (this.secretKey) { headers["x-secret-key"] = this.secretKey; } else if (this.clientId) { @@ -333,9 +337,9 @@ export class IpfsUploader implements IStorageUploader { "TW_AUTH_TOKEN" in globalThis && typeof (globalThis as any).TW_AUTH_TOKEN === "string" ) { - headers["authorization"] = `Bearer ${ - (globalThis as any).TW_AUTH_TOKEN as string - }`; + headers["authorization"] = `Bearer ${(globalThis as any).TW_AUTH_TOKEN as string + }`; + headers["x-authorize-wallet"] = "true"; } const res = await fetch(`${this.uploadServerUrl}/ipfs/upload`, { @@ -346,8 +350,13 @@ export class IpfsUploader implements IStorageUploader { }, body: form.getBuffer(), }); + if (!res.ok) { - console.warn(await res.text()); + if (res.status === 401) { + throw new Error( + "Unauthorized - You don't have permission to use this service.", + ); + } throw new Error("Failed to upload files to IPFS"); } diff --git a/packages/storage/src/types/global.d.ts b/packages/storage/src/types/global.d.ts new file mode 100644 index 00000000000..9ffcf9471b3 --- /dev/null +++ b/packages/storage/src/types/global.d.ts @@ -0,0 +1,4 @@ +declare module globalThis { + // eslint-disable-next-line no-var + var TW_AUTH_TOKEN: string; +} \ No newline at end of file diff --git a/packages/wallets/src/evm/connectors/smart-wallet/global.d.ts b/packages/wallets/src/evm/connectors/smart-wallet/global.d.ts new file mode 100644 index 00000000000..9ffcf9471b3 --- /dev/null +++ b/packages/wallets/src/evm/connectors/smart-wallet/global.d.ts @@ -0,0 +1,4 @@ +declare module globalThis { + // eslint-disable-next-line no-var + var TW_AUTH_TOKEN: string; +} \ No newline at end of file diff --git a/packages/wallets/src/evm/connectors/smart-wallet/lib/http-rpc-client.ts b/packages/wallets/src/evm/connectors/smart-wallet/lib/http-rpc-client.ts index c00a5ceba17..6479f958646 100644 --- a/packages/wallets/src/evm/connectors/smart-wallet/lib/http-rpc-client.ts +++ b/packages/wallets/src/evm/connectors/smart-wallet/lib/http-rpc-client.ts @@ -54,6 +54,7 @@ export class HttpRpcClient { headers["authorization"] = `Bearer ${ (globalThis as any).TW_AUTH_TOKEN as string }`; + headers["x-authorize-wallet"] = "true"; } headers["x-sdk-version"] = pkg.version; diff --git a/packages/wallets/src/evm/connectors/smart-wallet/lib/paymaster.ts b/packages/wallets/src/evm/connectors/smart-wallet/lib/paymaster.ts index 719e411ef0e..bfe49718ee1 100644 --- a/packages/wallets/src/evm/connectors/smart-wallet/lib/paymaster.ts +++ b/packages/wallets/src/evm/connectors/smart-wallet/lib/paymaster.ts @@ -34,6 +34,12 @@ class VerifyingPaymasterAPI extends PaymasterAPI { }; if (isTwUrl(this.paymasterUrl)) { + if (this.secretKey && this.clientId) { + throw new Error( + "Cannot use both secret key and client ID. Please use secretKey for server-side applications and clientId for client-side applications.", + ); + } + if (this.secretKey) { headers["x-secret-key"] = this.secretKey; } else if (this.clientId) { @@ -51,9 +57,8 @@ class VerifyingPaymasterAPI extends PaymasterAPI { "TW_AUTH_TOKEN" in globalThis && typeof (globalThis as any).TW_AUTH_TOKEN === "string" ) { - headers["authorization"] = `Bearer ${ - (globalThis as any).TW_AUTH_TOKEN as string - }`; + headers["authorization"] = `Bearer ${(globalThis as any).TW_AUTH_TOKEN as string}`; + headers["x-authorize-wallet"] = "true"; } } diff --git a/packages/wallets/src/evm/wallets/local-wallet.ts b/packages/wallets/src/evm/wallets/local-wallet.ts index e2a267524d7..b39ae0bf763 100644 --- a/packages/wallets/src/evm/wallets/local-wallet.ts +++ b/packages/wallets/src/evm/wallets/local-wallet.ts @@ -380,85 +380,85 @@ export class LocalWallet extends AbstractClientWallet< type DecryptOptions = | { - decrypt?: (message: string, password: string) => Promise; - password: string; - } + decrypt?: (message: string, password: string) => Promise; + password: string; + } | false; type EncryptOptions = | { - encrypt?: (message: string, password: string) => Promise; - password: string; - } + encrypt?: (message: string, password: string) => Promise; + password: string; + } | false; type ImportOptions = | { - privateKey: string; - encryption: DecryptOptions; - } + privateKey: string; + encryption: DecryptOptions; + } | { - mnemonic: string; - encryption: DecryptOptions; - } + mnemonic: string; + encryption: DecryptOptions; + } | { - encryptedJson: string; - password: string; - }; + encryptedJson: string; + password: string; + }; type LoadOptions = | { - strategy: "encryptedJson"; - password: string; - storage?: AsyncStorage; - } + strategy: "encryptedJson"; + password: string; + storage?: AsyncStorage; + } | { - strategy: "privateKey"; - storage?: AsyncStorage; - encryption: DecryptOptions; - } + strategy: "privateKey"; + storage?: AsyncStorage; + encryption: DecryptOptions; + } | { - strategy: "mnemonic"; - storage?: AsyncStorage; - encryption: DecryptOptions; - }; + strategy: "mnemonic"; + storage?: AsyncStorage; + encryption: DecryptOptions; + }; // omit the mnemonic strategy option from LoadOptions type LoadOrCreateOptions = | { - strategy: "encryptedJson"; - password: string; - storage?: AsyncStorage; - } + strategy: "encryptedJson"; + password: string; + storage?: AsyncStorage; + } | { - strategy: "privateKey"; - storage?: AsyncStorage; - encryption: DecryptOptions; - }; + strategy: "privateKey"; + storage?: AsyncStorage; + encryption: DecryptOptions; + }; type SaveOptions = | { strategy: "encryptedJson"; password: string; storage?: AsyncStorage } | { - strategy: "privateKey"; - encryption: EncryptOptions; - storage?: AsyncStorage; - } + strategy: "privateKey"; + encryption: EncryptOptions; + storage?: AsyncStorage; + } | { - strategy: "mnemonic"; - encryption: EncryptOptions; - storage?: AsyncStorage; - }; + strategy: "mnemonic"; + encryption: EncryptOptions; + storage?: AsyncStorage; + }; type ExportOptions = | { strategy: "encryptedJson"; password: string } | { - strategy: "privateKey"; - encryption: EncryptOptions; - } + strategy: "privateKey"; + encryption: EncryptOptions; + } | { - strategy: "mnemonic"; - encryption: EncryptOptions; - }; + strategy: "mnemonic"; + encryption: EncryptOptions; + }; async function defaultEncrypt(message: string, password: string) { const cryptoJS = (await import("crypto-js")).default; @@ -481,7 +481,7 @@ function getDecryptor(encryption: DecryptOptions | undefined) { const noop = async (msg: string) => msg; return encryption ? (msg: string) => - (encryption.decrypt || defaultDecrypt)(msg, encryption.password) + (encryption.decrypt || defaultDecrypt)(msg, encryption.password) : noop; } @@ -496,7 +496,7 @@ function getEncryptor(encryption: EncryptOptions | undefined) { const noop = async (msg: string) => msg; return encryption ? (msg: string) => - (encryption.encrypt || defaultEncrypt)(msg, encryption.password) + (encryption.encrypt || defaultEncrypt)(msg, encryption.password) : noop; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2f76631fa0..9c21d5da49d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -239,6 +239,9 @@ importers: '@iarna/toml': specifier: ^2.2.5 version: 2.2.5 + '@thirdweb-dev/auth': + specifier: workspace:* + version: link:../auth '@thirdweb-dev/chains': specifier: workspace:* version: link:../chains @@ -248,6 +251,9 @@ importers: '@thirdweb-dev/storage': specifier: workspace:* version: link:../storage + '@thirdweb-dev/wallets': + specifier: workspace:* + version: link:../wallets async-retry: specifier: ^1.3.3 version: 1.3.3 @@ -287,9 +293,6 @@ importers: solc: specifier: 0.8.17 version: 0.8.17 - sync-disk-cache: - specifier: ^2.1.0 - version: 2.1.0 tar: specifier: ^6.1.15 version: 6.1.15 @@ -299,6 +302,9 @@ importers: validate-npm-package-name: specifier: ^4.0.0 version: 4.0.0 + xdg-app-paths: + specifier: ^8.3.0 + version: 8.3.0 yaml: specifier: ^2.3.1 version: 2.3.1 @@ -1585,7 +1591,7 @@ packages: '@account-abstraction/contracts': 0.5.0 '@ethersproject/abi': 5.7.0 '@ethersproject/providers': 5.7.2 - '@openzeppelin/contracts': 4.8.3 + '@openzeppelin/contracts': 4.9.3 debug: 4.3.4(supports-color@8.1.1) ethers: 5.7.2 transitivePeerDependencies: @@ -2308,13 +2314,6 @@ packages: dependencies: '@babel/types': 7.22.5 - /@babel/helper-split-export-declaration@7.22.5: - resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: false - /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} @@ -3599,7 +3598,7 @@ packages: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.7 '@babel/types': 7.22.5 debug: 4.3.4(supports-color@8.1.1) @@ -3786,7 +3785,7 @@ packages: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.5.3 + semver: 7.5.4 dev: false /@changesets/assemble-release-plan@5.2.4: @@ -3797,7 +3796,7 @@ packages: '@changesets/get-dependents-graph': 1.3.6 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 - semver: 7.5.3 + semver: 7.5.4 dev: false /@changesets/changelog-git@0.1.14: @@ -6125,7 +6124,7 @@ packages: '@magic-sdk/provider': 17.4.0(localforage@1.10.0) '@magic-sdk/types': 15.6.0 '@react-native-async-storage/async-storage': 1.18.2(react-native@0.71.11) - '@types/lodash': 4.14.194 + '@types/lodash': 4.14.195 buffer: 5.6.1 localforage: 1.10.0 localforage-driver-memory: 1.0.5(localforage@1.10.0) @@ -7180,10 +7179,6 @@ packages: resolution: {integrity: sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==} dev: false - /@openzeppelin/contracts@4.8.3: - resolution: {integrity: sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==} - dev: false - /@openzeppelin/contracts@4.9.3: resolution: {integrity: sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==} dev: false @@ -10837,8 +10832,8 @@ packages: '@types/node': 18.17.1 dev: true - /@types/lodash@4.14.194: - resolution: {integrity: sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==} + /@types/lodash@4.14.195: + resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} dev: false /@types/lru-cache@5.1.1: @@ -15500,9 +15495,14 @@ packages: engines: {node: '>=10.0.0'} dev: true - /engine.io@6.4.1: - resolution: {integrity: sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==} + /engine.io-parser@5.2.1: + resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} engines: {node: '>=10.0.0'} + dev: true + + /engine.io@6.5.2: + resolution: {integrity: sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==} + engines: {node: '>=10.2.0'} dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.13 @@ -15512,7 +15512,7 @@ packages: cookie: 0.4.2 cors: 2.8.5 debug: 4.3.4(supports-color@8.1.1) - engine.io-parser: 5.0.6 + engine.io-parser: 5.2.1 ws: 8.11.0 transitivePeerDependencies: - bufferutil @@ -16223,7 +16223,7 @@ packages: minimatch: 3.1.2 object.values: 1.1.6 resolve: 1.22.1 - semver: 7.5.3 + semver: 7.5.4 tsconfig-paths: 3.14.2 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -18251,12 +18251,6 @@ packages: tslib: 2.5.0 dev: true - /heimdalljs@0.2.6: - resolution: {integrity: sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==} - dependencies: - rsvp: 3.2.1 - dev: false - /hermes-estree@0.8.0: resolution: {integrity: sha512-W6JDAOLZ5pMPMjEiQGLCXSSV7pIBEgRR5zGkxgmzGSXHOxqV5dC/M1Zevqpbm9TZDE5tu358qZf8Vkzmsc+u7Q==} @@ -20458,7 +20452,7 @@ packages: parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 + tough-cookie: 4.1.3 w3c-hr-time: 1.0.2 w3c-xmlserializer: 2.0.0 webidl-conversions: 6.1.0 @@ -22685,6 +22679,13 @@ packages: resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} engines: {node: '>=0.10.0'} + /os-paths@7.4.0: + resolution: {integrity: sha512-Ux1J4NUqC6tZayBqLN1kUlDAEvLiQlli/53sSddU4IN+h+3xxnv2HmRSMpVSvr1hvJzotfMs3ERvETGK+f4OwA==} + engines: {node: '>= 4.0'} + optionalDependencies: + fsevents: 2.3.2 + dev: false + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -22816,7 +22817,7 @@ packages: got: 11.8.5 registry-auth-token: 4.2.2 registry-url: 5.1.0 - semver: 7.5.3 + semver: 7.5.4 dev: false /package-json@8.1.0: @@ -24772,7 +24773,7 @@ packages: resolve: 1.22.1 resolve-url-loader: 4.0.0 sass-loader: 12.6.0(webpack@5.76.2) - semver: 7.3.8 + semver: 7.5.4 source-map-loader: 3.0.2(webpack@5.76.2) style-loader: 3.3.2(webpack@5.76.2) tailwindcss: 3.2.7(postcss@8.4.21) @@ -25337,10 +25338,6 @@ packages: bufferutil: 4.0.7 utf-8-validate: 5.0.10 - /rsvp@3.2.1: - resolution: {integrity: sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg==} - dev: false - /rtcpeerconnection-shim@1.2.15: resolution: {integrity: sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==} engines: {node: '>=6.0.0', npm: '>=3.10.0'} @@ -25549,7 +25546,7 @@ packages: resolution: {integrity: sha512-Ij1vCAdFgWABd7zTg50Xw1/p0JgESNxuLlneEAsmBrKishA06ulTTL/SHGmNy2Zud7+rKrHTKNI6moJsn1ppAQ==} dependencies: '@types/semver': 6.2.3 - semver: 7.5.3 + semver: 7.5.4 dev: false /semver-diff@4.0.0: @@ -25559,14 +25556,6 @@ packages: semver: 7.5.4 dev: false - /semver@7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: false - /semver@7.5.3: resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} engines: {node: '>=10'} @@ -25870,15 +25859,15 @@ packages: '@socket.io/component-emitter': 3.1.0 debug: 4.3.4(supports-color@8.1.1) engine.io-client: 6.4.0 - socket.io-parser: 4.2.2 + socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - /socket.io-parser@4.2.2: - resolution: {integrity: sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==} + /socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} engines: {node: '>=10.0.0'} dependencies: '@socket.io/component-emitter': 3.1.0 @@ -25894,9 +25883,9 @@ packages: accepts: 1.3.8 base64id: 2.0.0 debug: 4.3.4(supports-color@8.1.1) - engine.io: 6.4.1 + engine.io: 6.5.2 socket.io-adapter: 2.5.2 - socket.io-parser: 4.2.2 + socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil - supports-color @@ -26578,19 +26567,6 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: false - /sync-disk-cache@2.1.0: - resolution: {integrity: sha512-vngT2JmkSapgq0z7uIoYtB9kWOOzMihAAYq/D3Pjm/ODOGMgS4r++B+OZ09U4hWR6EaOdy9eqQ7/8ygbH3wehA==} - engines: {node: 8.* || >= 10.*} - dependencies: - debug: 4.3.4(supports-color@8.1.1) - heimdalljs: 0.2.6 - mkdirp: 0.5.6 - rimraf: 3.0.2 - username-sync: 1.0.3 - transitivePeerDependencies: - - supports-color - dev: false - /synckit@0.8.5: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} @@ -26912,8 +26888,8 @@ packages: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} dev: true - /tough-cookie@4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -27557,7 +27533,7 @@ packages: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.3.8 + semver: 7.5.4 semver-diff: 4.0.0 xdg-basedir: 5.1.0 dev: false @@ -27652,10 +27628,6 @@ packages: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} - /username-sync@1.0.3: - resolution: {integrity: sha512-m/7/FSqjJNAzF2La448c/aEom0gJy7HY7Y509h6l0ePvEkFictAGptwWaj1msWJ38JbfEDOUoE8kqFee9EHKdA==} - dev: false - /utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} @@ -28791,11 +28763,29 @@ packages: simple-plist: 1.3.1 uuid: 7.0.3 + /xdg-app-paths@8.3.0: + resolution: {integrity: sha512-mgxlWVZw0TNWHoGmXq+NC3uhCIc55dDpAlDkMQUaIAcQzysb0kxctwv//fvuW61/nAAeUBJMQ8mnZjMmuYwOcQ==} + engines: {node: '>= 4.0'} + dependencies: + xdg-portable: 10.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: false + /xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} dev: false + /xdg-portable@10.6.0: + resolution: {integrity: sha512-xrcqhWDvtZ7WLmt8G4f3hHy37iK7D2idtosRgkeiSPZEPmBShp0VfmRBLWAPC6zLF48APJ21yfea+RfQMF4/Aw==} + engines: {node: '>= 4.0'} + dependencies: + os-paths: 7.4.0 + optionalDependencies: + fsevents: 2.3.2 + dev: false + /xhr-request-promise@0.1.3: resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} dependencies: