Compare commits

..
Author SHA1 Message Date
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
7faab1c09b Version Packages (#994)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-18 11:15:53 -07:00
8bb0a6d874 fix: set ethers@^5 version in peerDeps of @thirdweb/contracts-js (#921)
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-18 04:06:46 +00:00
b1ede491fb [REACT] Add React hook useBuyDirectListing() (#993)
Co-authored-by: Fran Ros <[email protected]>
Co-authored-by: Jarrod Watts <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-18 04:00:01 +00:00
f674da7b44 Add sepolia as a supported chain for WETH (#987)
Co-authored-by: Nacho Iacovino <[email protected]>
Co-authored-by: Jarrod Watts <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-18 03:49:27 +00:00
iketwandGitHub 748e3e7856 [RN] clear unusued fields (#1026) 2023-05-17 23:40:59 +00:00
738c0ec6c4 [wallets] Update paper sdk and add new supported chains (#1022)
Co-authored-by: Manan Tank <[email protected]>
2023-05-17 22:35:09 +00:00
Joaquim VergesandGitHub e4356e76d1 [SDK] Update error message when contracts ABIs cannot be resolved, with url to import contract (#1021) 2023-05-17 17:27:38 +00:00
iketwandGitHub 8a0dd070d4 [RN] Adds modalTitle, buttonTitle and detailsButton props to the ConnectWallet component (#1019) 2023-05-17 00:06:39 +00:00
Manan TankandGitHub 39bd963015 Render input for magic and paper wallet using selectUI API (#1015) 2023-05-16 22:41:48 +00:00
84fc3b6fab Add detect-project command to CLI (#926)
Co-authored-by: Jonas Daniels <[email protected]>
2023-05-16 20:05:59 +00:00
Adam MajmudarandGitHub 49ec2d171e [SDK] Add a prepareGaslessRequest function (#983) 2023-05-15 21:27:57 +00:00
Adam MajmudarandGitHub b92aabe450 [Auth] Expose request on user hook (#1013) 2023-05-15 21:21:40 +00:00
Manan TankandGitHub 470e0a144d [react-core] rename ConfiguredWallet -> WalletConfig (#1011) 2023-05-15 19:29:22 +00:00
Manan TankandGitHub b6bb73b34c [react, react-core] Various connect Wallet changes (#1006) 2023-05-15 18:20:45 +00:00
YashandGitHub 9886c858d9 [SDK] Add support for ZKSync Era Testnet (#988) 2023-05-12 22:24:31 +00:00
iketwandGitHub 25de32d45d [RN] Update wcv2 props (#1005) 2023-05-12 15:35:55 +00:00
Manan TankandGitHub d495a4b8a6 [react, wallets] Expose Web3Modal QRModalOptions in WalletConnect v2 (#1002) 2023-05-12 14:53:06 +00:00
Manan TankandGitHub 2b0fb9d22f [react] Fix flaky Coinbase QR code scan (#1001) 2023-05-11 15:12:39 +00:00
e9b69300d1 [SDK] Display plugins on router release page (#713)
Co-authored-by: Jonas Daniels <[email protected]>
2023-05-10 23:18:40 +00:00
Manan TankandGitHub 4f8438335e [react] Connect Wallet improvements (#998) 2023-05-10 22:42:45 +00:00
Manan TankandGitHub c3645c451b Various Connect Wallet changes (#996) 2023-05-10 18:49:58 +00:00
iketwandGitHub 482f6d1b58 [ReactNative] update export wallet modal UI (#995) 2023-05-10 18:05:05 +00:00
Joaquim VergesandGitHub 799d98e862 [SDK] switch type of abi in SmartContract to Abi (#997) 2023-05-10 17:51:01 +00:00
iketwandGitHub 8db78299ea [React/RN] rename useThirdwebWallet to useProviderContext (#989) 2023-05-10 11:44:04 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
1119f63a47 Version Packages (#991)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-09 23:23:42 -07:00
Joaquim VergesandGitHub 32908b7683 [SDK] rename extension detection functions (#992) 2023-05-10 06:03:26 +00:00
Joaquim VergesandGitHub 6a4aab0b8a [Wallets] LocalWalletNode fix + cleanup SmartWallet logs (#990) 2023-05-10 05:15:22 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
e87d166d2b Version Packages (#965)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-09 20:46:05 -07:00
Adam MajmudarandGitHub af4b535637 [SDK] Add chunked snapshot input parsing (#986) 2023-05-09 04:29:35 +00:00
Joaquim VergesandGitHub a2df187bc1 [Sol] Fix token deployement (#985) 2023-05-09 03:30:41 +00:00
iketwandGitHub ea0f9479a3 [ReactNative] setup support for custom wallets UI with LocalWallet as example (#981) 2023-05-08 19:49:19 +00:00
Manan TankandGitHub bbe329a656 [react, react-core] Wallet UI API refactor (#979) 2023-05-08 15:09:46 +00:00
Joaquim VergesandGitHub 05ebbc15a0 [Wallets] export ethers and pkey wallets (#978) 2023-05-05 23:50:07 +00:00
Manan TankandGitHub 93bd57337b Connect wallet Modal UI fixes (#977) 2023-05-05 22:29:36 +00:00
Adam MajmudarandGitHub eb521d240a [SDK] Expose raw error on transaction error (#976) 2023-05-05 19:46:57 +00:00
Adam MajmudarandGitHub aa9b6acc3f [SDK] Add ability to resolveAddress (#975) 2023-05-05 19:16:33 +00:00
iketwandGitHub 4ca557ae4a [Wallet] Rename Connector to WagmiConnector (#974) 2023-05-05 16:41:52 +00:00
Manan TankandGitHub 93bdec061d [wallets] various fixes (#973) 2023-05-04 21:41:28 +00:00
Joaquim VergesandGitHub c6e9406808 Update wallets README (#971) 2023-05-04 19:00:34 +00:00
iketwandGitHub 12ad7fead2 [ReactNative] Remove gap for pre-71 RN apps (#969) 2023-05-04 17:23:21 +00:00
Manan TankandGitHub 7d7685e3fa [wallets] Magic and Local wallet improvements (#967) 2023-05-04 17:12:09 +00:00
iketwandGitHub 9640e0731f [ReactNative] Add guest mode warnings (#968) 2023-05-04 16:59:45 +00:00
Manan TankandGitHub 87021cee45 [react] Connect wallet UI improvements (#966) 2023-05-04 16:45:24 +00:00
Jarrod WattsandGitHub 5305b42db5 [REACT, SDK] - Use generated contract's types for useContract Read & Write (#954) 2023-05-04 14:42:15 +00:00
Manan TankandGitHub c8ba96fa00 [react] Wallet UI API refactor, and other fixes (#962) 2023-05-04 11:56:12 +00:00
nkrishangandGitHub 89c821d49e Build deployArgs.json only on deploy --dynamic command (#964) 2023-05-04 06:25:12 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
318b274aae Version Packages (#924)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-05-03 21:24:18 -07:00
77f0474b88 [ReactNative] update copy for smart wallet (#963)
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-03 19:15:33 +00:00
5ffb1cba03 [REACT] Add onLogout function to ConnectWallet authOptions prop (#960)
Co-authored-by: frog <[email protected]>
2023-05-03 16:07:31 +00:00
YashandGitHub 0bf29745b0 [SDK] GSNv2 Forwarder addresses (#961) 2023-05-03 15:55:30 +00:00
Joaquim VergesandGitHub 00d0d01e61 [SDK] Feature detection for Account and AccountFactory (#959) 2023-05-03 05:51:13 +00:00
Adam MajmudarandGitHub 72b8b9829e [Auth] Add all fields to cookie on logout (#958) 2023-05-03 00:14:29 +00:00
Joaquim VergesandGitHub 26cd91ffe1 [Wallets] update to latest account factory (#953) 2023-05-02 23:24:30 +00:00
1c3a846045 [ReactNative] Update guest mode icon and update learn more link (#957)
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-02 22:40:44 +00:00
4a69f8c85d [ReactNative] Allow switching between personal wallet and smart wallet (#956)
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-02 19:44:32 +00:00
Manan TankandGitHub c7c2530c7f [react] Local Wallet UI refactor, various fixes and cleanup (#955) 2023-05-02 17:58:14 +00:00
7012513bc2 [ReactNative] Introducing Smart Wallet (#937)
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-01 22:58:06 +00:00
YashandGitHub 28b5d1eb6d [SDK] Custom gas-price for Theta testnet and mainnet (#951) 2023-05-01 21:37:15 +00:00
1e9fad779f safe, device wallet, smartWallet autoconnect (#927)
Co-authored-by: Joaquim Verges <[email protected]>
2023-05-01 20:07:25 +00:00
Joaquim VergesandGitHub 7e7a507f03 [Unity] fix unity wallet connect (#950) 2023-05-01 18:48:09 +00:00
Joaquim VergesandGitHub 5a67d5d894 [Wallets] Batch transactions functionality for Smart Wallets (#948) 2023-04-30 21:42:41 +00:00
Joaquim VergesandGitHub fc96e14750 [Wallets] Expose execute functions directly from smart wallet (#947) 2023-04-29 02:05:16 +00:00
YashandGitHub 8f962bc15c [SDK] Add default domain in gasless options (#944) 2023-04-29 01:19:15 +00:00
Joaquim VergesandGitHub f12a80a475 [Wallets] fix default RPC for local wallet providers (#931) 2023-04-29 01:11:57 +00:00
Joaquim VergesandGitHub 0186721bc4 [Wallets] New utils functions for smart wallets (#945) 2023-04-28 23:25:27 +00:00
Manan TankandGitHub 5d67b2807f add magic link wallet and UI (#941) 2023-04-28 21:11:52 +00:00
Joaquim VergesandGitHub 1e4ac67272 [SmartWallet] remove accountIds and allow passing custom factory/account contract definitions (#942) 2023-04-28 17:41:44 +00:00
iketwandGitHub 465d8e2c3d [ReactNative] Make web3button action return a promise (#943) 2023-04-28 15:03:05 +00:00
0xHendrixandGitHub a8b790652c [REACT] Add onLogin callback to ConnectWallet authOptions props (#940) 2023-04-28 03:41:38 +00:00
iketwandGitHub 4828c87691 [ReactNative] Enable copying the address by pressing on it (#936) 2023-04-26 17:46:52 +00:00
iketwandGitHub 45d2ffcf89 [ReactNative] continue as guest (#935) 2023-04-26 15:37:03 +00:00
YashandGitHub bf6df26711 [SDK] Add support for Skale chaos testnet (#932) 2023-04-25 19:56:15 +00:00
Manan TankandGitHub e22e4a47d7 [react] suggest first supportedWallet for getting started (#930) 2023-04-24 12:29:13 +00:00
iketwandGitHub d2c7f6d758 [ReactNativeSDK] Adds Local Wallet (#787) 2023-04-22 04:14:55 +00:00
Joaquim VergesandGitHub 7af99d9a6d [Wallets] Switch to entrypoint v0.6 for Smart Wallet (#929) 2023-04-21 23:01:33 +00:00
YashandGitHub f0279c2288 [SDK] Contract verification utils (#905) 2023-04-21 17:17:10 +00:00
iketwandGitHub 07194b06e5 [RN] Remove select wallet step with one supported wallet (#925) 2023-04-21 14:43:51 +00:00
255c5dcae8 [Wallets] Add accountId handling for SmartWallet (#923)
Co-authored-by: Manan Tank <[email protected]>
2023-04-21 14:15:39 +00:00
8cfb4f38ed [Wallets] Introducing Smart Wallet (#904)
Co-authored-by: Manan Tank <[email protected]>
2023-04-21 05:10:56 +00:00
438 changed files with 15841 additions and 3495 deletions
+4 -1
View File
@@ -16,4 +16,7 @@ public/dist
yalc.lock
build/
playwright-report/
.vscode/
.vscode/
# Artifacts
packages/cli/artifacts/
+32
View File
@@ -1,5 +1,37 @@
# @thirdweb-dev/auth
## 3.0.19
### Patch Changes
- [#1013](https://github.com/thirdweb-dev/js/pull/1013) [`b92aabe4`](https://github.com/thirdweb-dev/js/commit/b92aabe450f40b248fd1b7533f1d3bc7f8f25288) Thanks [@adam-maj](https://github.com/adam-maj)! - Expose request on onUser hook
- Updated dependencies [[`738c0ec6`](https://github.com/thirdweb-dev/js/commit/738c0ec6c4190aa2252233c1382aed5d982cc7b8), [`d495a4b8`](https://github.com/thirdweb-dev/js/commit/d495a4b8a6e0599e5b4611620f3fded80a411173), [`4f843833`](https://github.com/thirdweb-dev/js/commit/4f8438335e3e3731b67ae271cb34c383832242a0)]:
- @thirdweb-dev/wallets@0.2.20
## 3.0.18
### Patch Changes
- Updated dependencies [[`6a4aab0b`](https://github.com/thirdweb-dev/js/commit/6a4aab0b8a2e0f6ff1b47992a3c1e5426a74f7ff)]:
- @thirdweb-dev/wallets@0.2.19
## 3.0.17
### Patch Changes
- Updated dependencies [[`93bdec06`](https://github.com/thirdweb-dev/js/commit/93bdec061dc05ab133e79f5f739dcae9b5393f53), [`ea0f9479`](https://github.com/thirdweb-dev/js/commit/ea0f9479a38d442201e367fce1234c130228fde6), [`05ebbc15`](https://github.com/thirdweb-dev/js/commit/05ebbc15a012855735fba2aa93887b88e14295d1), [`4ca557ae`](https://github.com/thirdweb-dev/js/commit/4ca557ae4ab225e39decc3b7a01a04c0d8e464c7), [`7d7685e3`](https://github.com/thirdweb-dev/js/commit/7d7685e3fab5780b3c1d26b8ef431b96f8486972), [`93bd5733`](https://github.com/thirdweb-dev/js/commit/93bd57337b7d2c2fcd252987d10df3206c839daf)]:
- @thirdweb-dev/wallets@0.2.18
## 3.0.16
### Patch Changes
- [#958](https://github.com/thirdweb-dev/js/pull/958) [`72b8b982`](https://github.com/thirdweb-dev/js/commit/72b8b9829eb11d51a63530af62e5634f182c0d03) Thanks [@adam-maj](https://github.com/adam-maj)! - Add extra options to cookie on logout
- Updated dependencies [[`7012513b`](https://github.com/thirdweb-dev/js/commit/7012513bc20f283b2cde46c0b938af33fe3a1a20), [`5d67b280`](https://github.com/thirdweb-dev/js/commit/5d67b2807f2504add4c202d2eb18897415662fb6), [`f12a80a4`](https://github.com/thirdweb-dev/js/commit/f12a80a4758aa91c43084acedb212de9f36a7371), [`5a67d5d8`](https://github.com/thirdweb-dev/js/commit/5a67d5d89474eac9a638ffaddba139b62965deff), [`d2c7f6d7`](https://github.com/thirdweb-dev/js/commit/d2c7f6d758787fab102ecc0cec16ac74f3c87a1f), [`c7c2530c`](https://github.com/thirdweb-dev/js/commit/c7c2530c7f2ef412f1e40428391e85decf504392), [`e22e4a47`](https://github.com/thirdweb-dev/js/commit/e22e4a47d73e1bbc6e3f0ae7ed56717b44e5ffcd), [`1e4ac672`](https://github.com/thirdweb-dev/js/commit/1e4ac672720c2fb01046bec195877a074ffbda06), [`fc96e147`](https://github.com/thirdweb-dev/js/commit/fc96e14750175b19cb66fa7d50cdbad65b42153a), [`4a69f8c8`](https://github.com/thirdweb-dev/js/commit/4a69f8c85dec420615e9eda8d1ad5b5ef0b87713), [`26cd91ff`](https://github.com/thirdweb-dev/js/commit/26cd91ffe18dad37133a18988f21185c13d64cfb), [`0186721b`](https://github.com/thirdweb-dev/js/commit/0186721bc455aa1f8454839a1a25fa4062b45102), [`1e9fad77`](https://github.com/thirdweb-dev/js/commit/1e9fad779f3ebe535d32c0ce76905a3a8033f2fa), [`7af99d9a`](https://github.com/thirdweb-dev/js/commit/7af99d9a6d54492a29a90288a25b30773a8a10a7), [`8cfb4f38`](https://github.com/thirdweb-dev/js/commit/8cfb4f38ed89c26ad04f19d27c65c24cefa976b6)]:
- @thirdweb-dev/wallets@0.2.17
## 3.0.15
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/auth",
"version": "3.0.15",
"version": "3.0.19",
"main": "dist/thirdweb-dev-auth.cjs.js",
"module": "dist/thirdweb-dev-auth.esm.js",
"browser": {
+1 -1
View File
@@ -51,7 +51,7 @@ export async function getUser<
return authenticatedUser;
}
const data = await ctx.callbacks.onUser(authenticatedUser);
const data = await ctx.callbacks.onUser(authenticatedUser, req);
if (!data) {
return authenticatedUser;
}
@@ -27,7 +27,10 @@ export default async function handler(
serialize("thirdweb_auth_token", "", {
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(Date.now() + 5 * 1000),
httpOnly: true,
secure: true,
}),
);
+1 -1
View File
@@ -56,7 +56,7 @@ export async function getUser<
return authenticatedUser;
}
const data = await ctx.callbacks.onUser(authenticatedUser);
const data = await ctx.callbacks.onUser(authenticatedUser, req);
if (!data) {
return authenticatedUser;
}
+3
View File
@@ -27,7 +27,10 @@ export default async function handler(
serialize("thirdweb_auth_token", "", {
domain: ctx.cookieOptions?.domain,
path: ctx.cookieOptions?.path || "/",
sameSite: ctx.cookieOptions?.sameSite || "none",
expires: new Date(Date.now() + 5 * 1000),
httpOnly: true,
secure: true,
}),
);
+45
View File
@@ -1,5 +1,50 @@
# @thirdweb-dev/chains
## 0.1.16
### Patch Changes
- [#996](https://github.com/thirdweb-dev/js/pull/996) [`c3645c45`](https://github.com/thirdweb-dev/js/commit/c3645c451b5e9a0fcf651fa07eb0e31ebf1882ca) Thanks [@MananTank](https://github.com/MananTank)! - - add `theme` in `ConfiguredWallet.connectUI`'s props - to use theme aware UI for wallets
- add `useWalletConfig` hook to get the `ConfiguredWallet` object for active wallet
- add hooks `useSetConnectedWallet`, `useSetConnectionStatus`
- rename `useActiveChain` to `useChain` - keep the `useActiveChain` also with deprecated tag
- make `useSafe` hook await-able by returning the promise of connect() call
- add hook `useSmartWallet`
- allow rendering custom wallet details button via `<ConnectWallet detailsButton={} />` prop
- Rename "Export" to "Backup" in local wallet UI
- [#1011](https://github.com/thirdweb-dev/js/pull/1011) [`470e0a14`](https://github.com/thirdweb-dev/js/commit/470e0a144db6aa03e7789e231bbdfae43144f0e0) Thanks [@MananTank](https://github.com/MananTank)! - rename ConfiguredWallet to WalletConfig
```diff
- import { ConfiguredWallet } from '@thirdweb-dev/react';
+ import { WalletConfig } from '@thirdweb-dev/react';
```
- [#995](https://github.com/thirdweb-dev/js/pull/995) [`482f6d1b`](https://github.com/thirdweb-dev/js/commit/482f6d1b58ac99b331fc750d3eeb6082556fd526) Thanks [@iketw](https://github.com/iketw)! - [Chains] Update chains
- [#989](https://github.com/thirdweb-dev/js/pull/989) [`8db78299`](https://github.com/thirdweb-dev/js/commit/8db78299ea6cfb51d93b91bb1a351644a83c73d2) Thanks [@iketw](https://github.com/iketw)! - [React/ReactNative] Updated useThirdwebWallet to useWalletContext
## 0.1.15
### Patch Changes
- [#990](https://github.com/thirdweb-dev/js/pull/990) [`6a4aab0b`](https://github.com/thirdweb-dev/js/commit/6a4aab0b8a2e0f6ff1b47992a3c1e5426a74f7ff) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - updated chains
## 0.1.14
### Patch Changes
- [#954](https://github.com/thirdweb-dev/js/pull/954) [`5305b42d`](https://github.com/thirdweb-dev/js/commit/5305b42db554b69f903b3d95f3ba0eeddabd6114) Thanks [@jarrodwatts](https://github.com/jarrodwatts)! - useContract now types correctly for thirdweb generate
## 0.1.13
### Patch Changes
- [#787](https://github.com/thirdweb-dev/js/pull/787) [`d2c7f6d7`](https://github.com/thirdweb-dev/js/commit/d2c7f6d758787fab102ecc0cec16ac74f3c87a1f) Thanks [@iketw](https://github.com/iketw)! - [ReactNative] Adds Device Wallet
- [#931](https://github.com/thirdweb-dev/js/pull/931) [`f12a80a4`](https://github.com/thirdweb-dev/js/commit/f12a80a4758aa91c43084acedb212de9f36a7371) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Updated chains
## 0.1.12
### Patch Changes
+1 -1
View File
@@ -10,7 +10,7 @@ export default {
},
"rpc": [
"https://nebula-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.rpc.novanetwork.io:9070"
"https://testnet.rpc.novanetwork.io"
],
"faucets": [
"https://faucet.novanetwork.io"
+37
View File
@@ -0,0 +1,37 @@
import type { Chain } from "../src/types";
export default {
"name": "Alphabet Mainnet",
"chain": "Alphabet Network",
"icon": {
"url": "ipfs://QmfTeudwVJcu7jzySBcpD9H5ZVK66nPJKRnicxend1bxfq",
"width": 500,
"height": 500,
"format": "svg"
},
"rpc": [
"https://alphabet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://londonpublic.alphabetnetwork.org",
"wss://londonpublic.alphabetnetwork.org/ws/",
"https://main-rpc.com",
"wss://main-rpc.com/ws/"
],
"faucets": [],
"nativeCurrency": {
"name": "ALT",
"symbol": "ALT",
"decimals": 18
},
"infoURL": "https://alphabetnetwork.org",
"shortName": "alphabet",
"chainId": 111222333444,
"networkId": 111222333444,
"explorers": [
{
"name": "Alphabet Explorer",
"url": "https://scan.alphabetnetwork.org",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "alphabet"
} as const satisfies Chain;
+40
View File
@@ -0,0 +1,40 @@
import type { Chain } from "../src/types";
export default {
"name": "Coinbit Mainnet",
"chain": "Coinbit",
"rpc": [
"https://coinbit.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://coinbit-rpc-mainnet.chain.sbcrypto.app"
],
"faucets": [],
"nativeCurrency": {
"name": "Gas IDR",
"symbol": "GIDR",
"decimals": 18
},
"infoURL": "https://crypto.stockbit.com/",
"shortName": "coinbit",
"chainId": 112,
"networkId": 112,
"icon": {
"url": "ipfs://QmdaQRUbAXJGfHeJ8jaB8WVh8CCmHExq8VjvAfXpLWWQEo",
"width": 760,
"height": 760,
"format": "png"
},
"explorers": [
{
"name": "blockscout",
"url": "https://coinbit-explorer.chain.sbcrypto.app",
"icon": {
"url": "ipfs://bafybeifu5tpui7dk5cjoo54kde7pmuthvnl7sdykobuarsxgu7t2izurnq",
"width": 512,
"height": 512,
"format": "png"
},
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "coinbit"
} as const satisfies Chain;
+6
View File
@@ -2,6 +2,12 @@ import type { Chain } from "../src/types";
export default {
"name": "Palm Testnet",
"chain": "Palm",
"icon": {
"url": "ipfs://bafkreihifvvbq6xzviygveivayogqiotdtpjvilu27bgqobduqemzeq7o4",
"width": 72,
"height": 72,
"format": "svg"
},
"rpc": [
"https://palm-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://palm-testnet.infura.io/v3/${INFURA_API_KEY}"
+6
View File
@@ -2,6 +2,12 @@ import type { Chain } from "../src/types";
export default {
"name": "Palm",
"chain": "Palm",
"icon": {
"url": "ipfs://bafkreihifvvbq6xzviygveivayogqiotdtpjvilu27bgqobduqemzeq7o4",
"width": 72,
"height": 72,
"format": "svg"
},
"rpc": [
"https://palm.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://palm-mainnet.infura.io/v3/${INFURA_API_KEY}"
+40
View File
@@ -0,0 +1,40 @@
import type { Chain } from "../src/types";
export default {
"name": "Symplexia Smart Chain",
"chain": "Plexchain",
"rpc": [
"https://symplexia-smart-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://plex-rpc.plexfinance.us"
],
"faucets": [],
"nativeCurrency": {
"name": "Plex Native Token",
"symbol": "PLEX",
"decimals": 18
},
"infoURL": "https://plexfinance.us/",
"shortName": "Plexchain",
"chainId": 1149,
"networkId": 1149,
"icon": {
"url": "ipfs://QmcXzfMNSQ7SZzKemNquVoXyG5ergdqCGeLWjRYETGBTUM",
"width": 256,
"height": 256,
"format": "png"
},
"explorers": [
{
"name": "Plexchain Explorer",
"url": "https://explorer.plexfinance.us",
"icon": {
"url": "ipfs://QmcXzfMNSQ7SZzKemNquVoXyG5ergdqCGeLWjRYETGBTUM",
"width": 256,
"height": 256,
"format": "png"
},
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "symplexia-smart-chain"
} as const satisfies Chain;
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"name": "ARC Mainnet",
"chain": "ARC",
"icon": {
"url": "ipfs://bafybeiady63oqduls2pm4aaykzjhahblagokhnpsc5qeq5dmkxqelh7i2i",
"width": 512,
"height": 512,
"format": "png"
},
"rpc": [
"https://arc.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-main-1.archiechain.io"
],
"faucets": [],
"nativeCurrency": {
"name": "ARC",
"symbol": "ARC",
"decimals": 18
},
"infoURL": "https://archiechain.io/",
"shortName": "ARC",
"chainId": 1243,
"networkId": 1243,
"explorers": [
{
"name": "archiescan",
"url": "https://app.archiescan.io",
"standard": "none"
}
],
"testnet": false,
"slug": "arc"
} as const satisfies Chain;
+36
View File
@@ -0,0 +1,36 @@
import type { Chain } from "../src/types";
export default {
"name": "ARC Testnet",
"chain": "ARC",
"icon": {
"url": "ipfs://bafybeiady63oqduls2pm4aaykzjhahblagokhnpsc5qeq5dmkxqelh7i2i",
"width": 512,
"height": 512,
"format": "png"
},
"rpc": [
"https://arc-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-test-1.archiechain.io"
],
"faucets": [
"https://faucet.archiechain.io"
],
"nativeCurrency": {
"name": "ARC",
"symbol": "ARC",
"decimals": 18
},
"infoURL": "https://archiechain.io/",
"shortName": "TARC",
"chainId": 1244,
"networkId": 1244,
"explorers": [
{
"name": "archiescan",
"url": "https://testnet.archiescan.io",
"standard": "none"
}
],
"testnet": true,
"slug": "arc-testnet"
} as const satisfies Chain;
+6
View File
@@ -3,6 +3,12 @@ export default {
"name": "Rikeza Network Testnet",
"title": "Rikeza Network Testnet",
"chain": "Rikeza",
"icon": {
"url": "ipfs://QmfJ1Qxpzi6CSLeFeWY1Bwe435CpT5za5WfrLUE7vNzZfy",
"width": 512,
"height": 512,
"format": "png"
},
"rpc": [
"https://rikeza-network-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rpc.rikscan.com"
+40
View File
@@ -0,0 +1,40 @@
import type { Chain } from "../src/types";
export default {
"name": "Deamchain Mainnet",
"chain": "Deamchain",
"icon": {
"url": "ipfs://QmXvHWmjfXKdZMSz7x82NR4SjEqigKdJELVHbnzUPkj17F",
"width": 512,
"height": 512,
"format": "svg"
},
"rpc": [
"https://deamchain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet.deamchain.com"
],
"faucets": [],
"nativeCurrency": {
"name": "Deamchain Native Token",
"symbol": "DEAM",
"decimals": 18
},
"infoURL": "https://deamchain.com",
"shortName": "deam",
"chainId": 136,
"networkId": 136,
"explorers": [
{
"name": "Deamchain Block Explorer",
"url": "https://scan.deamchain.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmXvHWmjfXKdZMSz7x82NR4SjEqigKdJELVHbnzUPkj17F",
"width": 512,
"height": 512,
"format": "svg"
}
}
],
"testnet": false,
"slug": "deamchain"
} as const satisfies Chain;
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"name": "Joseon Mainnet",
"chain": "Joseon",
"icon": {
"url": "ipfs://QmQjwcNRCLXU8JBtSkPLUnbWVrpoqbnZVffpJ9Bu8rG34e",
"width": 148,
"height": 148,
"format": "svg"
},
"rpc": [
"https://joseon.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.modchain.net/blockchain.joseon.com/rpc"
],
"faucets": [],
"nativeCurrency": {
"name": "Joseon Mun",
"symbol": "JSM",
"decimals": 18
},
"infoURL": "https://www.joseon.com/",
"shortName": "mun",
"chainId": 1392,
"networkId": 1392,
"explorers": [
{
"name": "BlockExplorer",
"url": "https://www.blockexplorer.com",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "joseon"
} as const satisfies Chain;
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"name": "ICPlaza Mainnet",
"chain": "ICPlaza",
"icon": {
"url": "ipfs://QmQpKKwpqrx77VA4SJLEWhuv9eLFMcVV9uvxRCLb6gdgCX",
"width": 847,
"height": 906,
"format": "png"
},
"rpc": [
"https://icplaza.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpcmainnet.ic-plaza.org/"
],
"faucets": [],
"nativeCurrency": {
"name": "ict",
"symbol": "ict",
"decimals": 18
},
"infoURL": "https://docs.ic-plaza.org/",
"shortName": "ICPlaza",
"chainId": 142857,
"networkId": 142857,
"explorers": [
{
"name": "ICPlaza",
"url": "https://browsemainnet.ic-plaza.org/index",
"standard": "none"
}
],
"testnet": false,
"slug": "icplaza"
} as const satisfies Chain;
+6
View File
@@ -3,6 +3,12 @@ export default {
"name": "Rikeza Network Mainnet",
"title": "Rikeza Network Mainnet",
"chain": "Rikeza",
"icon": {
"url": "ipfs://QmfJ1Qxpzi6CSLeFeWY1Bwe435CpT5za5WfrLUE7vNzZfy",
"width": 512,
"height": 512,
"format": "png"
},
"rpc": [
"https://rikeza-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.rikscan.com"
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"name": "GIL Testnet",
"chain": "GIL",
"icon": {
"url": "ipfs://QmeDXUAYgQxwaSJLsqWgTqnrJVwicgEyNf9199xAMyRkqA",
"width": 243,
"height": 243,
"format": "svg"
},
"rpc": [
"https://gil-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.giltestnet.com"
],
"faucets": [],
"nativeCurrency": {
"name": "GANG",
"symbol": "GANG",
"decimals": 18
},
"infoURL": "https://gaussgang.com/",
"shortName": "gil",
"chainId": 1452,
"networkId": 1452,
"explorers": [
{
"name": "GIL Explorer",
"url": "https://explorer.giltestnet.com",
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "gil-testnet"
} as const satisfies Chain;
+42
View File
@@ -0,0 +1,42 @@
import type { Chain } from "../src/types";
export default {
"name": "Six Protocol Testnet",
"chain": "FIVENET",
"icon": {
"url": "ipfs://QmP93z696v8Hetu13peY2oEHDXq8Bj5CqaDRwpVkpnM15A",
"width": 512,
"height": 512,
"format": "png"
},
"rpc": [
"https://six-protocol-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-evm.fivenet.sixprotocol.net"
],
"faucets": [
"https://faucet.sixprotocol.net"
],
"nativeCurrency": {
"name": "SIX testnet evm token",
"symbol": "tSIX",
"decimals": 18
},
"infoURL": "https://six.network/",
"shortName": "sixt",
"chainId": 150,
"networkId": 150,
"explorers": [
{
"name": "SIX Scan fivenet",
"url": "https://sixscan.io/fivenet",
"standard": "none",
"icon": {
"url": "ipfs://QmP93z696v8Hetu13peY2oEHDXq8Bj5CqaDRwpVkpnM15A",
"width": 512,
"height": 512,
"format": "png"
}
}
],
"testnet": true,
"slug": "six-protocol-testnet"
} as const satisfies Chain;
+43
View File
@@ -0,0 +1,43 @@
import type { Chain } from "../src/types";
export default {
"name": "Tenet Testnet",
"title": "Tenet Testnet",
"chain": "TENET",
"icon": {
"url": "ipfs://Qmc1gqjWTzNo4pyFSGtQuCu7kRSZZBUVybtTjHn2nNEEPA",
"width": 640,
"height": 640,
"format": "svg"
},
"rpc": [
"https://tenet-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.testnet.tenet.org"
],
"faucets": [
"https://faucet.testnet.tenet.org"
],
"nativeCurrency": {
"name": "TENET",
"symbol": "TENET",
"decimals": 18
},
"infoURL": "https://tenet.org/",
"shortName": "tenet-testnet",
"chainId": 155,
"networkId": 155,
"explorers": [
{
"name": "TenetScan Testnet",
"url": "https://testnet.tenetscan.io",
"icon": {
"url": "ipfs://Qmc1gqjWTzNo4pyFSGtQuCu7kRSZZBUVybtTjHn2nNEEPA",
"width": 640,
"height": 640,
"format": "svg"
},
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "tenet-testnet"
} as const satisfies Chain;
+41
View File
@@ -0,0 +1,41 @@
import type { Chain } from "../src/types";
export default {
"name": "Tenet",
"title": "Tenet Mainnet",
"chain": "TENET",
"icon": {
"url": "ipfs://Qmc1gqjWTzNo4pyFSGtQuCu7kRSZZBUVybtTjHn2nNEEPA",
"width": 640,
"height": 640,
"format": "svg"
},
"rpc": [
"https://tenet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.tenet.org"
],
"faucets": [],
"nativeCurrency": {
"name": "TENET",
"symbol": "TENET",
"decimals": 18
},
"infoURL": "https://tenet.org/",
"shortName": "tenet",
"chainId": 1559,
"networkId": 1559,
"explorers": [
{
"name": "TenetScan Mainnet",
"url": "https://tenetscan.io",
"icon": {
"url": "ipfs://Qmc1gqjWTzNo4pyFSGtQuCu7kRSZZBUVybtTjHn2nNEEPA",
"width": 640,
"height": 640,
"format": "svg"
},
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "tenet"
} as const satisfies Chain;
+9 -1
View File
@@ -2,9 +2,17 @@ import type { Chain } from "../src/types";
export default {
"name": "OEBlock Testnet",
"chain": "OEBt",
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
}
],
"rpc": [
"https://oeblock-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rpc.oeblock.com/"
"https://testnet-rpc.oeblock.com"
],
"faucets": [],
"nativeCurrency": {
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"name": "Genesys Mainnet",
"chain": "Genesys",
"icon": {
"url": "ipfs://bafkreie6nai3yhykcdlsyshn5lbcbyba5y7zwsqg6owcfek2urhoucr6rm",
"width": 800,
"height": 800,
"format": "png"
},
"rpc": [
"https://genesys.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.genesys.network"
],
"faucets": [],
"nativeCurrency": {
"name": "Genesys",
"symbol": "GSYS",
"decimals": 18
},
"infoURL": "https://www.genesys.network/",
"shortName": "Genesys",
"chainId": 16507,
"networkId": 16507,
"explorers": [
{
"name": "GchainExplorer",
"url": "https://gchainexplorer.genesys.network",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "genesys"
} as const satisfies Chain;
+1 -1
View File
@@ -4,7 +4,7 @@ export default {
"chain": "IRIShub",
"rpc": [
"https://irishub-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"http://34.80.202.172:8545"
"https://evmrpc.nyancat.irisnet.org"
],
"features": [
{
+1 -1
View File
@@ -14,7 +14,7 @@ export default {
},
"features": [],
"infoURL": "https://hashpalette.com/",
"shortName": "PaletteChain",
"shortName": "PCM",
"chainId": 1718,
"networkId": 1718,
"icon": {
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"name": "Gauss Mainnet",
"chain": "Gauss",
"icon": {
"url": "ipfs://QmeDXUAYgQxwaSJLsqWgTqnrJVwicgEyNf9199xAMyRkqA",
"width": 243,
"height": 243,
"format": "svg"
},
"rpc": [
"https://gauss.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.gaussgang.com"
],
"faucets": [],
"nativeCurrency": {
"name": "GANG",
"symbol": "GANG",
"decimals": 18
},
"infoURL": "https://gaussgang.com/",
"shortName": "gauss",
"chainId": 1777,
"networkId": 1777,
"explorers": [
{
"name": "Gauss Explorer",
"url": "https://explorer.gaussgang.com",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "gauss"
} as const satisfies Chain;
+14 -2
View File
@@ -1,7 +1,7 @@
import type { Chain } from "../src/types";
export default {
"name": "Kerleano",
"title": "Proof of Carbon Reduction testnet",
"title": "Proof of Climate awaReness testnet",
"chain": "CRC",
"status": "active",
"rpc": [
@@ -13,7 +13,7 @@ export default {
"https://github.com/ethereum-pocr/kerleano/blob/main/docs/faucet.md"
],
"nativeCurrency": {
"name": "Carbon Reduction Coin",
"name": "Climate awaReness Coin",
"symbol": "CRC",
"decimals": 18
},
@@ -21,10 +21,22 @@ export default {
"shortName": "kerleano",
"chainId": 1804,
"networkId": 1804,
"icon": {
"url": "ipfs://QmRLwpq47tyEd3rfK4tKRhbTvyb3fc7PCutExnL1XAb37A",
"width": 334,
"height": 360,
"format": "png"
},
"explorers": [
{
"name": "Lite Explorer",
"url": "https://ethereum-pocr.github.io/explorer/kerleano",
"icon": {
"url": "ipfs://QmRLwpq47tyEd3rfK4tKRhbTvyb3fc7PCutExnL1XAb37A",
"width": 334,
"height": 360,
"format": "png"
},
"standard": "EIP3091"
}
],
+4 -4
View File
@@ -27,10 +27,10 @@ export default {
"name": "Blockscout",
"url": "https://explorer.gather.network",
"icon": {
"url": "ipfs://QmeoEHUVYKSJFkM9o5j62rhQqCDN5iQxPC7PtzmH77rSWR",
"width": 512,
"height": 512,
"format": "png"
"url": "ipfs://QmTYR8CeFiNbJ1zJHnE3DK2wEN18r2y2vqSKUcLweUT2Gz",
"width": 1080,
"height": 1080,
"format": "svg"
},
"standard": "none"
}
+1 -1
View File
@@ -28,7 +28,7 @@ export default {
"explorers": [
{
"name": "edexa-testnet",
"url": "https://explorer.edexa.com",
"url": "https://explorer.testnet.edexa.com",
"standard": "EIP3091"
}
],
+21
View File
@@ -0,0 +1,21 @@
import type { Chain } from "../src/types";
export default {
"name": "Structx Mainnet",
"chain": "utx",
"rpc": [
"https://structx.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet.structx.io"
],
"faucets": [],
"nativeCurrency": {
"name": "Notes",
"symbol": "utx",
"decimals": 18
},
"infoURL": "https://structx.io",
"shortName": "utx",
"chainId": 208,
"networkId": 208,
"testnet": false,
"slug": "structx"
} as const satisfies Chain;
+40
View File
@@ -0,0 +1,40 @@
import type { Chain } from "../src/types";
export default {
"name": "Metaplayerone Network",
"chain": "MP1 Dubai-Testnet",
"icon": {
"url": "ipfs://QmfJKxmubJrqYWDcR2PnPvmpukxPz4fYDu3hqTaSnpJDxC",
"width": 42,
"height": 23,
"format": "svg"
},
"rpc": [
"https://metaplayerone-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-dubai.mp1network.com/"
],
"faucets": [],
"nativeCurrency": {
"name": "Metaunit",
"symbol": "MEU",
"decimals": 18
},
"infoURL": "https://docs.metaplayer.one/",
"shortName": "MEU",
"chainId": 2124,
"networkId": 2124,
"explorers": [
{
"name": "MP1Scan",
"url": "https://dubai.mp1scan.io",
"icon": {
"url": "ipfs://QmfJKxmubJrqYWDcR2PnPvmpukxPz4fYDu3hqTaSnpJDxC",
"width": 42,
"height": 23,
"format": "svg"
},
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "metaplayerone-network"
} as const satisfies Chain;
+8 -2
View File
@@ -2,7 +2,7 @@ import type { Chain } from "../src/types";
export default {
"name": "Kanazawa",
"title": "Meld Testnet Kanazawa",
"chain": "MELD",
"chain": "Kanazawa",
"rpc": [
"https://kanazawa.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-kanazawa.meldlabs.dev/ext/bc/2Ci7VYrUd4fTBqGA5D2HA6UPHzQ4LQyr8rZQww9MGSv9rNkRzn/rpc"
@@ -14,8 +14,14 @@ export default {
"symbol": "gMELD",
"decimals": 18
},
"icon": {
"url": "ipfs://QmRhB4AbjDrhvwfSAQi2JvKirFiDWxzJvKEvG8S8AdDdED",
"width": 4000,
"height": 4000,
"format": "png"
},
"infoURL": "https://meld.com",
"shortName": "meld",
"shortName": "kanazawa",
"chainId": 222000222,
"networkId": 222000222,
"explorers": [],
+29
View File
@@ -0,0 +1,29 @@
import type { Chain } from "../src/types";
export default {
"name": "SwapDEX",
"chain": "SDX",
"rpc": [
"https://swapdex.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.swapdex.network",
"wss://ss.swapdex.network"
],
"faucets": [],
"nativeCurrency": {
"name": "SwapDEX",
"symbol": "SDX",
"decimals": 18
},
"infoURL": "https://swapdex.network/",
"shortName": "SDX",
"chainId": 230,
"networkId": 230,
"explorers": [
{
"name": "SwapDEX",
"url": "https://evm.swapdex.network",
"standard": "none"
}
],
"testnet": false,
"slug": "swapdex"
} as const satisfies Chain;
+42
View File
@@ -0,0 +1,42 @@
import type { Chain } from "../src/types";
export default {
"name": "SOMA Network Testnet",
"chain": "SOMA",
"rpc": [
"https://soma-network-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://data-testnet-v1.somanetwork.io/"
],
"faucets": [
"https://faucet.somanetwork.io"
],
"nativeCurrency": {
"name": "SMA",
"symbol": "tSMA",
"decimals": 18
},
"infoURL": "https://somanetwork.io",
"shortName": "sma",
"chainId": 2323,
"networkId": 2323,
"icon": {
"url": "ipfs://QmadSU2tcyvuzssDYGJ4rVLag43QLnKwcBerZR2zKLVU2N",
"width": 500,
"height": 500,
"format": "png"
},
"explorers": [
{
"name": "SOMA Testnet Explorer",
"icon": {
"url": "ipfs://QmadSU2tcyvuzssDYGJ4rVLag43QLnKwcBerZR2zKLVU2N",
"width": 500,
"height": 500,
"format": "png"
},
"url": "https://testnet.somascan.io",
"standard": "none"
}
],
"testnet": true,
"slug": "soma-network-testnet"
} as const satisfies Chain;
+11 -11
View File
@@ -1,9 +1,9 @@
import type { Chain } from "../src/types";
export default {
"name": "WEMIX Kanvas Sepolia",
"title": "WEMIX Kanvas Testnet Sepolia",
"name": "Kroma Sepolia",
"title": "Kroma Testnet Sepolia",
"chainId": 2357,
"shortName": "kanvas-aqua",
"shortName": "kroma-sepolia",
"chain": "ETH",
"networkId": 2357,
"nativeCurrency": {
@@ -12,13 +12,13 @@ export default {
"decimals": 18
},
"rpc": [
"https://wemix-kanvas-sepolia.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://api.aqua.wemixkanvas.io"
"https://kroma-sepolia.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://api.sepolia.kroma.network"
],
"faucets": [],
"infoURL": "https://wemixkanvas.io",
"infoURL": "https://kroma.network",
"icon": {
"url": "ipfs://QmVcVxsHsVg5BMii3EJ1MUSnLBZkQicpjmXjSmW66bCEUF",
"url": "ipfs://QmcYafk2je5rMqgnFPDZJTaLi6dgFgq96vmX2Li6DX441B",
"width": 320,
"height": 320,
"format": "svg"
@@ -26,9 +26,9 @@ export default {
"explorers": [
{
"name": "blockscout",
"url": "https://blockscout.aqua.wemixkanvas.io",
"url": "https://blockscout.sepolia.kroma.network",
"icon": {
"url": "ipfs://QmVcVxsHsVg5BMii3EJ1MUSnLBZkQicpjmXjSmW66bCEUF",
"url": "ipfs://QmcYafk2je5rMqgnFPDZJTaLi6dgFgq96vmX2Li6DX441B",
"width": 320,
"height": 320,
"format": "svg"
@@ -41,10 +41,10 @@ export default {
"chain": "eip155-11155111",
"bridges": [
{
"url": "https://wemixkanvas.io/bridge"
"url": "https://kroma.network/bridge"
}
]
},
"testnet": true,
"slug": "wemix-kanvas-sepolia"
"slug": "kroma-sepolia"
} as const satisfies Chain;
+42
View File
@@ -0,0 +1,42 @@
import type { Chain } from "../src/types";
export default {
"name": "Deamchain Testnet",
"chain": "Deamchain",
"icon": {
"url": "ipfs://QmXvHWmjfXKdZMSz7x82NR4SjEqigKdJELVHbnzUPkj17F",
"width": 512,
"height": 512,
"format": "svg"
},
"rpc": [
"https://deamchain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.deamchain.com"
],
"faucets": [
"https://faucet.deamchain.com"
],
"nativeCurrency": {
"name": "Deamchain Native Token",
"symbol": "DEAM",
"decimals": 18
},
"infoURL": "https://deamchain.com",
"shortName": "deamtest",
"chainId": 236,
"networkId": 236,
"explorers": [
{
"name": "Deamchain Testnet Explorer",
"url": "https://testnet-scan.deamchain.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmXvHWmjfXKdZMSz7x82NR4SjEqigKdJELVHbnzUPkj17F",
"width": 512,
"height": 512,
"format": "svg"
}
}
],
"testnet": true,
"slug": "deamchain-testnet"
} as const satisfies Chain;
+38
View File
@@ -0,0 +1,38 @@
import type { Chain } from "../src/types";
export default {
"name": "Ferrum Testnet",
"chain": "tFRM",
"rpc": [
"https://ferrum-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"http://testnet.dev.svcs.ferrumnetwork.io:9933"
],
"faucets": [
"https://testnet.faucet.ferrumnetwork.io"
],
"nativeCurrency": {
"name": "Ferrum",
"symbol": "tFRM",
"decimals": 18
},
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
}
],
"infoURL": "https://ferrum.network",
"shortName": "frm",
"chainId": 26026,
"networkId": 26026,
"explorers": [
{
"name": "polkadotjs",
"url": "https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftestnet.dev.svcs.ferrumnetwork.io#/explorer",
"standard": "none"
}
],
"testnet": true,
"slug": "ferrum-testnet"
} as const satisfies Chain;
+14 -2
View File
@@ -1,7 +1,7 @@
import type { Chain } from "../src/types";
export default {
"name": "PoCRNet",
"title": "Proof of Carbon Reduction mainnet",
"title": "Proof of Climate awaReness mainnet",
"chain": "CRC",
"status": "active",
"rpc": [
@@ -11,7 +11,7 @@ export default {
],
"faucets": [],
"nativeCurrency": {
"name": "Carbon Reduction Coin",
"name": "Climate awaReness Coin",
"symbol": "CRC",
"decimals": 18
},
@@ -19,10 +19,22 @@ export default {
"shortName": "pocrnet",
"chainId": 2606,
"networkId": 2606,
"icon": {
"url": "ipfs://QmRLwpq47tyEd3rfK4tKRhbTvyb3fc7PCutExnL1XAb37A",
"width": 334,
"height": 360,
"format": "png"
},
"explorers": [
{
"name": "Lite Explorer",
"url": "https://ethereum-pocr.github.io/explorer/pocrnet",
"icon": {
"url": "ipfs://QmRLwpq47tyEd3rfK4tKRhbTvyb3fc7PCutExnL1XAb37A",
"width": 334,
"height": 360,
"format": "png"
},
"standard": "EIP3091"
}
],
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"name": "LaChain",
"chain": "LaChain",
"rpc": [
"https://lachain-lachain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc1.mainnet.lachain.network",
"https://rpc2.mainnet.lachain.network"
],
"faucets": [],
"nativeCurrency": {
"name": "LaCoin",
"symbol": "LAC",
"decimals": 18
},
"features": [
{
"name": "EIP155"
}
],
"infoURL": "",
"shortName": "lachain",
"chainId": 274,
"networkId": 274,
"explorers": [
{
"name": "LaChain Explorer",
"url": "https://explorer.lachain.network",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "lachain-lachain"
} as const satisfies Chain;
+36
View File
@@ -0,0 +1,36 @@
import type { Chain } from "../src/types";
export default {
"name": "Razor Skale Chain",
"chain": "Razor Schain",
"icon": {
"url": "ipfs://QmUdwAZJfyKGZnfPGDsCnNvGu123mdd57kTGj1Y3EWVuWK",
"width": 900,
"height": 900,
"format": "png"
},
"rpc": [
"https://razor-skale-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet.skalenodes.com/v1/turbulent-unique-scheat"
],
"faucets": [
"https://faucet.razorscan.io/"
],
"nativeCurrency": {
"name": "sFuel",
"symbol": "SFUEL",
"decimals": 18
},
"infoURL": "https://razor.network",
"shortName": "razor",
"chainId": 278611351,
"networkId": 278611351,
"explorers": [
{
"name": "turbulent-unique-scheat",
"url": "https://turbulent-unique-scheat.explorer.mainnet.skalenodes.com",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "razor-skale-chain"
} as const satisfies Chain;
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"name": "Zilliqa EVM",
"chain": "ZIL",
"rpc": [
"https://zilliqa-evm.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://api.zilliqa.com"
],
"faucets": [],
"nativeCurrency": {
"name": "Zilliqa",
"symbol": "ZIL",
"decimals": 18
},
"infoURL": "https://www.zilliqa.com/",
"shortName": "zil",
"chainId": 32769,
"networkId": 32769,
"icon": {
"url": "ipfs://QmTREXNgGtUhSoxFsrkhTe5LUnDBTKL5byaX8kpET6UuKp",
"width": 2048,
"height": 2048,
"format": "png"
},
"explorers": [
{
"name": "Zilliqa EVM Explorer",
"url": "https://evmx.zilliqa.com",
"standard": "none"
}
],
"testnet": false,
"slug": "zilliqa-evm"
} as const satisfies Chain;
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"name": "Meld",
"title": "Meld Mainnet",
"chain": "MELD",
"rpc": [
"https://meld.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://network-rpc.meld.com"
],
"faucets": [],
"features": [],
"nativeCurrency": {
"name": "gMeld",
"symbol": "gMELD",
"decimals": 18
},
"icon": {
"url": "ipfs://QmRhB4AbjDrhvwfSAQi2JvKirFiDWxzJvKEvG8S8AdDdED",
"width": 4000,
"height": 4000,
"format": "png"
},
"infoURL": "https://meld.com",
"shortName": "meld",
"chainId": 333000333,
"networkId": 333000333,
"explorers": [],
"testnet": false,
"slug": "meld"
} as const satisfies Chain;
+1 -1
View File
@@ -21,7 +21,7 @@ export default {
"explorers": [
{
"name": "Cronos Testnet Explorer",
"url": "https://testnet.cronoscan.com",
"url": "https://explorer.cronos.org/testnet",
"standard": "none"
}
],
+4 -4
View File
@@ -29,10 +29,10 @@ export default {
"name": "Blockscout",
"url": "https://testnet-explorer.gather.network",
"icon": {
"url": "ipfs://QmeoEHUVYKSJFkM9o5j62rhQqCDN5iQxPC7PtzmH77rSWR",
"width": 512,
"height": 512,
"format": "png"
"url": "ipfs://QmTYR8CeFiNbJ1zJHnE3DK2wEN18r2y2vqSKUcLweUT2Gz",
"width": 1080,
"height": 1080,
"format": "svg"
},
"standard": "none"
}
+45
View File
@@ -0,0 +1,45 @@
import type { Chain } from "../src/types";
export default {
"name": "Fastex Chain (Bahamut) Oasis Testnet",
"title": "Bahamut testnet Oasis",
"icon": {
"url": "ipfs://QmSemioP83RXnDWwTZbet8VpwJxcFRboX4B3pcdhLZGodP",
"width": 200,
"height": 200,
"format": "png"
},
"chain": "Fastex Chain (Bahamut)",
"rpc": [
"https://fastex-chain-bahamut-oasis-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc1.oasis.bahamutchain.com"
],
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
}
],
"faucets": [
"https://faucet.oasis.fastexchain.com"
],
"nativeCurrency": {
"name": "FTN",
"symbol": "FTN",
"decimals": 18
},
"infoURL": "https://fastexchain.com",
"shortName": "Oasis",
"chainId": 4090,
"networkId": 4090,
"explorers": [
{
"name": "blockscout",
"url": "https://oasis.ftnscan.com",
"standard": "none"
}
],
"testnet": true,
"slug": "fastex-chain-bahamut-oasis-testnet"
} as const satisfies Chain;
+10 -2
View File
@@ -6,7 +6,9 @@ export default {
"https://la-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.testnet.lachain.network"
],
"faucets": [],
"faucets": [
"https://faucet.lachain.network"
],
"nativeCurrency": {
"name": "Test La Coin",
"symbol": "TLA",
@@ -21,7 +23,13 @@ export default {
"shortName": "latestnet",
"chainId": 418,
"networkId": 418,
"explorers": [],
"explorers": [
{
"name": "LA Testnet Explorer",
"url": "https://testexplorer.lachain.network",
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "la-testnet"
} as const satisfies Chain;
+1 -1
View File
@@ -22,7 +22,7 @@ export default {
"decimals": 18
},
"infoURL": "https://fastex.com",
"shortName": "ftn",
"shortName": "fastexTestnet",
"chainId": 424242,
"networkId": 424242,
"explorers": [
+36
View File
@@ -0,0 +1,36 @@
import type { Chain } from "../src/types";
export default {
"name": "Worlds Caldera",
"chain": "WCal",
"rpc": [
"https://worlds-caldera.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://worlds-test.calderachain.xyz/http"
],
"faucets": [],
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
}
],
"infoURL": "https://caldera.xyz/",
"shortName": "worldscal",
"chainId": 4281033,
"networkId": 4281033,
"icon": {
"url": "ipfs://QmdwQDr6vmBtXmK2TmknkEuZNoaDqTasFdZdu3DRw8b2wt",
"width": 1000,
"height": 1628,
"format": "png"
},
"explorers": [],
"testnet": true,
"slug": "worlds-caldera"
} as const satisfies Chain;
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"name": "ARZIO Chain",
"chain": "ARZIO",
"icon": {
"url": "ipfs://QmUwqGWGjjQweTprn5LBirAwRjYnteTiFLCVpSNHrfMmSL",
"width": 150,
"height": 150,
"format": "png"
},
"rpc": [
"https://arzio-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://chain-rpc.arzio.co"
],
"faucets": [],
"nativeCurrency": {
"name": "ARZIO",
"symbol": "AZO",
"decimals": 18
},
"infoURL": "https://chain.arzio.co",
"shortName": "arzio",
"chainId": 456,
"networkId": 456,
"explorers": [
{
"name": "ARZIO Scan",
"url": "https://scan.arzio.co",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "arzio-chain"
} as const satisfies Chain;
+2 -1
View File
@@ -6,7 +6,8 @@ export default {
"https://xinfin-xdc-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://erpc.xinfin.network",
"https://rpc.xinfin.network",
"https://rpc1.xinfin.network"
"https://rpc1.xinfin.network",
"https://rpc-xdc.icecreamswap.com"
],
"faucets": [],
"nativeCurrency": {
+5 -2
View File
@@ -2,7 +2,10 @@ import type { Chain } from "../src/types";
export default {
"name": "Camino C-Chain",
"chain": "CAM",
"rpc": [],
"rpc": [
"https://camino-c-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://api.camino.network/ext/bc/C/rpc"
],
"faucets": [],
"nativeCurrency": {
"name": "Camino",
@@ -22,7 +25,7 @@ export default {
"explorers": [
{
"name": "blockexplorer",
"url": "https://explorer.camino.foundation/mainnet",
"url": "https://suite.camino.network/explorer",
"standard": "none"
}
],
+1 -1
View File
@@ -25,7 +25,7 @@ export default {
"explorers": [
{
"name": "blockexplorer",
"url": "https://explorer.camino.foundation",
"url": "https://suite.camino.network/explorer",
"standard": "none"
}
],
+49
View File
@@ -0,0 +1,49 @@
import type { Chain } from "../src/types";
export default {
"name": "Opside Testnet Pre-Alpha",
"chain": "ETH",
"rpc": [
"https://opside-testnet-pre-alpha.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://pre-alpha-us-http-geth.opside.network",
"https://pre-alpha-hk-http-geth.opside.network"
],
"faucets": [],
"nativeCurrency": {
"name": "IDE Test Token",
"symbol": "IDE",
"decimals": 18
},
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
}
],
"infoURL": "https://opsi.de/",
"shortName": "Opside-Testnet",
"chainId": 51178,
"networkId": 51178,
"icon": {
"url": "ipfs://QmZnE2ygPL2ZGuzHGvFCHmrqxwdurrhz3K1yPnwLzKbgay",
"width": 401,
"height": 400,
"format": "png"
},
"explorers": [
{
"name": "OpsideTestnetInfo",
"url": "https://pre-alpha.opside.info",
"icon": {
"url": "ipfs://QmZnE2ygPL2ZGuzHGvFCHmrqxwdurrhz3K1yPnwLzKbgay",
"width": 401,
"height": 400,
"format": "png"
},
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "opside-testnet-pre-alpha"
} as const satisfies Chain;
+44
View File
@@ -0,0 +1,44 @@
import type { Chain } from "../src/types";
export default {
"name": "Sahara",
"title": "Bahamut mainnet Sahara",
"chain": "Bahamut",
"icon": {
"url": "ipfs://QmSemioP83RXnDWwTZbet8VpwJxcFRboX4B3pcdhLZGodP",
"width": 200,
"height": 200,
"format": "png"
},
"rpc": [
"https://sahara.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc1.sahara.bahamutchain.com",
"https://rpc2.sahara.bahamutchain.com"
],
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
}
],
"faucets": [],
"nativeCurrency": {
"name": "FTN",
"symbol": "FTN",
"decimals": 18
},
"shortName": "ftn",
"infoURL": "https://fastexchain.com",
"chainId": 5165,
"networkId": 5165,
"explorers": [
{
"name": "blockscout",
"url": "https://ftnscan.com",
"standard": "none"
}
],
"testnet": false,
"slug": "sahara"
} as const satisfies Chain;
+36
View File
@@ -0,0 +1,36 @@
import type { Chain } from "../src/types";
export default {
"name": "SatoshiChain Testnet",
"chain": "SATS",
"icon": {
"url": "ipfs://QmRegpZQBW4o1imYNsW3d27MQjygBSU23Gf6JKje26nvs7",
"width": 1251,
"height": 1251,
"format": "png"
},
"rpc": [
"https://satoshichain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.satoshichain.io"
],
"faucets": [
"https://faucet.satoshichain.io"
],
"nativeCurrency": {
"name": "SatoshiChain Coin",
"symbol": "SATS",
"decimals": 18
},
"infoURL": "https://satoshichain.net",
"shortName": "sats",
"chainId": 5758,
"networkId": 5758,
"explorers": [
{
"name": "SatoshiChain Explorer",
"url": "https://satoshiscan.io",
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "satoshichain-testnet"
} as const satisfies Chain;
-28
View File
@@ -1,28 +0,0 @@
import type { Chain } from "../src/types";
export default {
"name": "EOS Mainnet",
"chain": "EOS",
"rpc": [
"https://eos.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://api.eosargentina.io"
],
"faucets": [],
"nativeCurrency": {
"name": "EOS",
"symbol": "EOS",
"decimals": 18
},
"infoURL": "https://eoscommunity.org/",
"shortName": "EOSMainnet",
"chainId": 59,
"networkId": 59,
"explorers": [
{
"name": "bloks",
"url": "https://bloks.eosargentina.io",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "eos"
} as const satisfies Chain;
+13 -10
View File
@@ -1,17 +1,20 @@
import type { Chain } from "../src/types";
export default {
"name": "Linea Testnet",
"title": "Linea Testnet",
"title": "Linea Goerli Testnet",
"chain": "ETH",
"rpc": [
"https://linea-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.goerli.linea.build"
"https://rpc.goerli.linea.build",
"wss://rpc.goerli.linea.build",
"https://consensys-zkevm-goerli-prealpha.infura.io/v3/${INFURA_API_KEY}",
"wss://consensys-zkevm-goerli-prealpha.infura.io/v3/${INFURA_API_KEY}"
],
"faucets": [
"https://faucetlink.to/goerli"
],
"nativeCurrency": {
"name": "Goerli Ether",
"name": "Linea Ether",
"symbol": "ETH",
"decimals": 18
},
@@ -20,9 +23,9 @@ export default {
"chainId": 59140,
"networkId": 59140,
"icon": {
"url": "ipfs://QmP6rcphqMTeByPxomeYeR5XRPZaFpwGbZxHkGQKyao4Le",
"width": 115,
"height": 115,
"url": "ipfs://QmURjritnHL7a8TwZgsFwp3f272DJmG5paaPtWDZ98QZwH",
"width": 97,
"height": 102,
"format": "svg"
},
"parent": {
@@ -36,13 +39,13 @@ export default {
},
"explorers": [
{
"name": "Linea Testnet Explorer",
"name": "blockscout",
"url": "https://explorer.goerli.linea.build",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmP6rcphqMTeByPxomeYeR5XRPZaFpwGbZxHkGQKyao4Le",
"width": 115,
"height": 115,
"url": "ipfs://QmURjritnHL7a8TwZgsFwp3f272DJmG5paaPtWDZ98QZwH",
"width": 97,
"height": 102,
"format": "svg"
}
}
+22
View File
@@ -0,0 +1,22 @@
import type { Chain } from "../src/types";
export default {
"name": "Peerpay",
"chain": "P2P",
"rpc": [
"https://peerpay.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://peerpay.su.gy/p2p"
],
"faucets": [],
"nativeCurrency": {
"name": "Peerpay",
"symbol": "P2P",
"decimals": 18
},
"infoURL": "https://peerpay.su.gy",
"shortName": "Peerpay",
"chainId": 6502,
"networkId": 6502,
"explorers": [],
"testnet": false,
"slug": "peerpay"
} as const satisfies Chain;
+42
View File
@@ -0,0 +1,42 @@
import type { Chain } from "../src/types";
export default {
"name": "GuapcoinX",
"chain": "GuapcoinX",
"rpc": [
"https://guapcoinx.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-mainnet.guapcoinx.com/",
"https://rpc-mainnet-1.guapcoinx.com/",
"https://rpc-mainnet-2.guapcoinx.com/"
],
"faucets": [],
"nativeCurrency": {
"name": "GuapcoinX",
"symbol": "GuapX",
"decimals": 18
},
"infoURL": "https://guapcoin.org/",
"shortName": "GuapX",
"chainId": 71111,
"networkId": 71111,
"icon": {
"url": "ipfs://QmcDTR7982VQKDDz2Mh4fZbnE9hn67MuFPWQv1MimCqPvB",
"width": 800,
"height": 800,
"format": "png"
},
"explorers": [
{
"name": "GuapcoinX Explorer",
"url": "http://explorer.guapcoinx.com",
"standard": "none",
"icon": {
"url": "ipfs://QmcDTR7982VQKDDz2Mh4fZbnE9hn67MuFPWQv1MimCqPvB",
"width": 800,
"height": 800,
"format": "png"
}
}
],
"testnet": false,
"slug": "guapcoinx"
} as const satisfies Chain;
-5
View File
@@ -20,11 +20,6 @@ export default {
"chainId": 71401,
"networkId": 71401,
"explorers": [
{
"name": "GWScout Explorer",
"url": "https://gw-testnet-explorer.nervosdao.community",
"standard": "none"
},
{
"name": "GWScan Block Explorer",
"url": "https://v1.testnet.gwscan.com",
-5
View File
@@ -17,11 +17,6 @@ export default {
"chainId": 71402,
"networkId": 71402,
"explorers": [
{
"name": "GWScout Explorer",
"url": "https://gw-mainnet-explorer.nervosdao.community",
"standard": "none"
},
{
"name": "GWScan Block Explorer",
"url": "https://v1.gwscan.com",
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"name": "Raba Network Mainnet",
"chain": "Raba",
"icon": {
"url": "ipfs://QmatP9qMHEYoXqRDyHMTyjYRQa6j6Gk7pmv1QLxQkvpGRP",
"width": 787,
"height": 750,
"format": "png"
},
"rpc": [
"https://raba-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.x.raba.app/",
"wss://rpc.x.raba.app/ws/"
],
"faucets": [],
"nativeCurrency": {
"name": "Raba",
"symbol": "RABA",
"decimals": 18
},
"infoURL": "https://x.raba.app/",
"shortName": "raba",
"chainId": 7484,
"networkId": 7484,
"explorers": [
{
"name": "raba",
"url": "https://x.raba.app/explorer",
"standard": "none"
}
],
"testnet": false,
"slug": "raba-network"
} as const satisfies Chain;
+5 -5
View File
@@ -1,6 +1,6 @@
import type { Chain } from "../src/types";
export default {
"name": "ADIL Mainnet",
"name": "Adil Chain V2 Mainnet",
"chain": "ADIL",
"icon": {
"url": "ipfs://QmeHNYUx6n8CjUFSLWNT17oAtDYrUq6r8buyvGCUBXCJw6",
@@ -9,8 +9,8 @@ export default {
"format": "png"
},
"rpc": [
"https://adil.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://s2.adilchain-rpc.io"
"https://adil-chain-v2.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://adilchain-rpc.io"
],
"faucets": [],
"nativeCurrency": {
@@ -25,10 +25,10 @@ export default {
"explorers": [
{
"name": "ADIL Mainnet Explorer",
"url": "https://s2.adilchain-scan.io",
"url": "https://adilchain-scan.io",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "adil"
"slug": "adil-chain-v2"
} as const satisfies Chain;
+1 -1
View File
@@ -21,7 +21,7 @@ export default {
{
"name": "rootnet",
"url": "https://explorer.rootnet.live",
"standard": "none"
"standard": "EIP3091"
}
],
"testnet": false,
+1 -1
View File
@@ -21,7 +21,7 @@ export default {
{
"name": "rootnet",
"url": "https://explorer.rootnet.cloud",
"standard": "none"
"standard": "EIP3091"
}
],
"testnet": true,
+22
View File
@@ -0,0 +1,22 @@
import type { Chain } from "../src/types";
export default {
"name": "BitEth",
"chain": "BTE",
"rpc": [
"https://biteth.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.biteth.org"
],
"faucets": [],
"nativeCurrency": {
"name": "BitEth",
"symbol": "BTE",
"decimals": 18
},
"infoURL": "https://biteth.org",
"shortName": "BitEth",
"chainId": 8086,
"networkId": 8086,
"explorers": [],
"testnet": false,
"slug": "biteth"
} as const satisfies Chain;
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"name": "CURVE Mainnet",
"chain": "CURVE",
"icon": {
"url": "ipfs://QmTjV3TTR5aLb7fi7tjx8gcDvYtqBpusqhCSaznVxJ7NJg",
"width": 150,
"height": 150,
"format": "png"
},
"rpc": [
"https://curve.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-rpc.curvescan.io"
],
"faucets": [],
"nativeCurrency": {
"name": "Curve",
"symbol": "CURVE",
"decimals": 18
},
"infoURL": "https://curvescan.io",
"shortName": "CURVEm",
"chainId": 827431,
"networkId": 827431,
"explorers": [
{
"name": "CURVE Mainnet",
"url": "https://curvescan.io",
"standard": "EIP3091"
}
],
"testnet": false,
"slug": "curve"
} as const satisfies Chain;
+1 -1
View File
@@ -3,7 +3,7 @@ export default {
"name": "TMY Chain",
"chain": "TMY",
"icon": {
"url": "ipfs://QmXQu3ib9gTo23mdVgMqmrExga6SmAzDQTTctpVBNtfDu9",
"url": "ipfs://Qmcd19ksUvNMD1XQFSC55jJhDPoF2zUzzV7woteFiugwBH",
"width": 1024,
"height": 1023,
"format": "svg"
-24
View File
@@ -1,24 +0,0 @@
import type { Chain } from "../src/types";
export default {
"name": "PulseChain Testnet",
"shortName": "tpls",
"chain": "tPLS",
"chainId": 940,
"networkId": 940,
"infoURL": "https://pulsechain.com/",
"rpc": [
"https://pulsechain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.v2.testnet.pulsechain.com/",
"wss://rpc.v2.testnet.pulsechain.com/"
],
"faucets": [
"https://faucet.v2.testnet.pulsechain.com/"
],
"nativeCurrency": {
"name": "Test Pulse",
"symbol": "tPLS",
"decimals": 18
},
"testnet": true,
"slug": "pulsechain-testnet"
} as const satisfies Chain;
-24
View File
@@ -1,24 +0,0 @@
import type { Chain } from "../src/types";
export default {
"name": "PulseChain Testnet v2b",
"shortName": "t2bpls",
"chain": "t2bPLS",
"chainId": 941,
"networkId": 941,
"infoURL": "https://pulsechain.com/",
"rpc": [
"https://pulsechain-testnet-v2b.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.v2b.testnet.pulsechain.com/",
"wss://rpc.v2b.testnet.pulsechain.com/"
],
"faucets": [
"https://faucet.v2b.testnet.pulsechain.com/"
],
"nativeCurrency": {
"name": "Test Pulse",
"symbol": "tPLS",
"decimals": 18
},
"testnet": true,
"slug": "pulsechain-testnet-v2b"
} as const satisfies Chain;
-28
View File
@@ -1,28 +0,0 @@
import type { Chain } from "../src/types";
export default {
"name": "CryptoKylin Testnet",
"chain": "EOS",
"rpc": [
"https://cryptokylin-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://kylin.eosargentina.io"
],
"faucets": [],
"nativeCurrency": {
"name": "EOS",
"symbol": "EOS",
"decimals": 18
},
"infoURL": "https://www.cryptokylin.io/",
"shortName": "KylinTestnet",
"chainId": 95,
"networkId": 95,
"explorers": [
{
"name": "eosq",
"url": "https://kylin.eosargentina.io",
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "cryptokylin-testnet"
} as const satisfies Chain;
+40
View File
@@ -0,0 +1,40 @@
import type { Chain } from "../src/types";
export default {
"name": "Six Protocol",
"chain": "SIXNET",
"icon": {
"url": "ipfs://QmP93z696v8Hetu13peY2oEHDXq8Bj5CqaDRwpVkpnM15A",
"width": 512,
"height": 512,
"format": "png"
},
"rpc": [
"https://six-protocol.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://sixnet-rpc-evm.sixprotocol.net"
],
"faucets": [],
"nativeCurrency": {
"name": "SIX evm token",
"symbol": "SIX",
"decimals": 18
},
"infoURL": "https://six.network/",
"shortName": "six",
"chainId": 98,
"networkId": 98,
"explorers": [
{
"name": "SIX Scan",
"url": "https://sixscan.io/sixnet",
"standard": "none",
"icon": {
"url": "ipfs://QmP93z696v8Hetu13peY2oEHDXq8Bj5CqaDRwpVkpnM15A",
"width": 512,
"height": 512,
"format": "png"
}
}
],
"testnet": false,
"slug": "six-protocol"
} as const satisfies Chain;
+42
View File
@@ -0,0 +1,42 @@
import type { Chain } from "../src/types";
export default {
"name": "5ireChain Thunder",
"chain": "5ireChain",
"rpc": [
"https://5irechain-thunder.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-testnet.5ire.network"
],
"faucets": [
"https://explorer.5ire.network/faucet"
],
"nativeCurrency": {
"name": "5ire Token",
"symbol": "5ire",
"decimals": 18
},
"infoURL": "https://5ire.org",
"shortName": "5ire",
"chainId": 997,
"networkId": 997,
"icon": {
"url": "ipfs://QmaZDNDFLWESH4i3XqwEWfWBb1HPnQSNbDAr74nr2x8QAk",
"width": 800,
"height": 800,
"format": "svg"
},
"explorers": [
{
"name": "5ireChain Explorer",
"url": "https://explorer.5ire.network",
"standard": "none",
"icon": {
"url": "ipfs://QmaZDNDFLWESH4i3XqwEWfWBb1HPnQSNbDAr74nr2x8QAk",
"width": 800,
"height": 800,
"format": "svg"
}
}
],
"testnet": true,
"slug": "5irechain-thunder"
} as const satisfies Chain;
+48
View File
@@ -0,0 +1,48 @@
import type { Chain } from "../src/types";
export default {
"name": "AltLayer Testnet",
"chain": "ETH",
"rpc": [
"https://altlayer-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rollup-api.altlayer.io"
],
"faucets": [],
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
}
],
"infoURL": "https://altlayer.io",
"shortName": "alt-testnet",
"chainId": 9997,
"networkId": 9997,
"icon": {
"url": "ipfs://QmcEfZJU7NMn9ycTAcEooQgGNfa2nYBToSUZHdFCFadcjb",
"width": 1080,
"height": 1025,
"format": "png"
},
"explorers": [
{
"name": "blockscout",
"url": "https://testnet-rollup-explorer.altlayer.io",
"icon": {
"url": "ipfs://bafybeifu5tpui7dk5cjoo54kde7pmuthvnl7sdykobuarsxgu7t2izurnq",
"width": 512,
"height": 512,
"format": "png"
},
"standard": "EIP3091"
}
],
"testnet": true,
"slug": "altlayer-testnet"
} as const satisfies Chain;
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/chains",
"version": "0.1.12",
"version": "0.1.16",
"main": "dist/thirdweb-dev-chains.cjs.js",
"module": "dist/thirdweb-dev-chains.esm.js",
"browser": {
File diff suppressed because one or more lines are too long
+39
View File
@@ -1,5 +1,44 @@
# thirdweb
## 0.10.16
### Patch Changes
- [#926](https://github.com/thirdweb-dev/js/pull/926) [`84fc3b6f`](https://github.com/thirdweb-dev/js/commit/84fc3b6fab112b91563348f1a88820bd49a2f9b3) Thanks [@Marfuen](https://github.com/Marfuen)! - Added detect-project command, reorganized folder structure for detecting, added many more detections.
- [#926](https://github.com/thirdweb-dev/js/pull/926) [`84fc3b6f`](https://github.com/thirdweb-dev/js/commit/84fc3b6fab112b91563348f1a88820bd49a2f9b3) Thanks [@Marfuen](https://github.com/Marfuen)! - Added log to see detected app type to the "detect-project" command
- Updated dependencies [[`e9b69300`](https://github.com/thirdweb-dev/js/commit/e9b69300d15b233609f1ed897256ec9a1eef3e28), [`49ec2d17`](https://github.com/thirdweb-dev/js/commit/49ec2d171ecb1c9240398b7b486a452eb9429979), [`799d98e8`](https://github.com/thirdweb-dev/js/commit/799d98e86258677ab72931fa8397aee653fe8b34), [`c3645c45`](https://github.com/thirdweb-dev/js/commit/c3645c451b5e9a0fcf651fa07eb0e31ebf1882ca), [`470e0a14`](https://github.com/thirdweb-dev/js/commit/470e0a144db6aa03e7789e231bbdfae43144f0e0), [`482f6d1b`](https://github.com/thirdweb-dev/js/commit/482f6d1b58ac99b331fc750d3eeb6082556fd526), [`e4356e76`](https://github.com/thirdweb-dev/js/commit/e4356e76d1506624afe2eb6feeaf57dc376f372f), [`9886c858`](https://github.com/thirdweb-dev/js/commit/9886c858d9c8d0f677aba6572dbf5cc6c876edf2), [`8db78299`](https://github.com/thirdweb-dev/js/commit/8db78299ea6cfb51d93b91bb1a351644a83c73d2)]:
- @thirdweb-dev/sdk@3.10.15
- @thirdweb-dev/chains@0.1.16
## 0.10.15
### Patch Changes
- Updated dependencies [[`32908b76`](https://github.com/thirdweb-dev/js/commit/32908b76832c60e91a0a6e40dbdb1c8f56e9e5be), [`6a4aab0b`](https://github.com/thirdweb-dev/js/commit/6a4aab0b8a2e0f6ff1b47992a3c1e5426a74f7ff)]:
- @thirdweb-dev/sdk@3.10.14
- @thirdweb-dev/chains@0.1.15
## 0.10.14
### Patch Changes
- [#964](https://github.com/thirdweb-dev/js/pull/964) [`89c821d4`](https://github.com/thirdweb-dev/js/commit/89c821d49e95e9319443acf25748ef614c1af396) Thanks [@nkrishang](https://github.com/nkrishang)! - Build deployArgs only on deploy --dynamic cmd
- Updated dependencies [[`5305b42d`](https://github.com/thirdweb-dev/js/commit/5305b42db554b69f903b3d95f3ba0eeddabd6114), [`eb521d24`](https://github.com/thirdweb-dev/js/commit/eb521d240ae7102d44fe2c5223b0a18d867e09ad), [`af4b5356`](https://github.com/thirdweb-dev/js/commit/af4b5356372ffa084c8d0e747d8def46c2ff892c), [`93bd5733`](https://github.com/thirdweb-dev/js/commit/93bd57337b7d2c2fcd252987d10df3206c839daf), [`a2df187b`](https://github.com/thirdweb-dev/js/commit/a2df187bc1867beb2e90853da70dac271f604f12), [`aa9b6acc`](https://github.com/thirdweb-dev/js/commit/aa9b6acc3f5a118c2b5fe9e46732e72c0fc69376)]:
- @thirdweb-dev/chains@0.1.14
- @thirdweb-dev/sdk@3.10.13
## 0.10.13
### Patch Changes
- Updated dependencies [[`d2c7f6d7`](https://github.com/thirdweb-dev/js/commit/d2c7f6d758787fab102ecc0cec16ac74f3c87a1f), [`f12a80a4`](https://github.com/thirdweb-dev/js/commit/f12a80a4758aa91c43084acedb212de9f36a7371), [`bf6df267`](https://github.com/thirdweb-dev/js/commit/bf6df2671131d7ed38650e2bed806081b32dc244), [`8f962bc1`](https://github.com/thirdweb-dev/js/commit/8f962bc15c35da52ed5bc4025bb4cd18b69079e3), [`28b5d1eb`](https://github.com/thirdweb-dev/js/commit/28b5d1eb6d0142d3ebefb8bd078c30949f77fe61), [`0bf29745`](https://github.com/thirdweb-dev/js/commit/0bf29745b0e842763c271ad8773312f0836ea00f), [`f0279c22`](https://github.com/thirdweb-dev/js/commit/f0279c228829b86ff1f828219bcef4fe16901f67), [`1e9fad77`](https://github.com/thirdweb-dev/js/commit/1e9fad779f3ebe535d32c0ce76905a3a8033f2fa), [`00d0d01e`](https://github.com/thirdweb-dev/js/commit/00d0d01e619ff5c60b9f31386f51a55b5e466efa), [`fc96e147`](https://github.com/thirdweb-dev/js/commit/fc96e14750175b19cb66fa7d50cdbad65b42153a)]:
- @thirdweb-dev/chains@0.1.13
- @thirdweb-dev/sdk@3.10.12
- @thirdweb-dev/storage@1.1.2
## 0.10.12
### Patch Changes
+1
View File
@@ -2,6 +2,7 @@ export const CREATE_MESSAGES = {
typeOfProject: "What type of project do you want to create?",
projectName: "What is your project named?",
contractName: "What will be the name of your new smart contract?",
extensionName: "What will be the name of your new extension?",
chain: "Which blockchain do you want to use?",
framework: "What framework do you want to use?",
language: "What language do you want to use?",
+4 -1
View File
@@ -1,7 +1,7 @@
{
"name": "thirdweb",
"main": "dist/cli/index.js",
"version": "0.10.12",
"version": "0.10.16",
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/cli",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
@@ -15,6 +15,7 @@
"@types/cross-spawn": "^6.0.2",
"@types/inquirer": "^8.2.1",
"@types/jest": "^29.2.1",
"@types/js-yaml": "^4.0.5",
"@types/node": "^18.0.0",
"@types/prompts": "^2.0.14",
"@types/rimraf": "^3.0.0",
@@ -34,6 +35,7 @@
"typescript": "^4.7.4"
},
"dependencies": {
"@iarna/toml": "^2.2.5",
"@thirdweb-dev/chains": "workspace:*",
"@thirdweb-dev/sdk": "workspace:*",
"@thirdweb-dev/storage": "workspace:*",
@@ -44,6 +46,7 @@
"ethers": "^5.7.2",
"got": "11.8.5",
"inquirer": "^8.2.3",
"js-yaml": "^4.1.0",
"open": "^8.4.0",
"prompts": "^2.4.2",
"rimraf": "^3.0.2",
+12
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env node
import { detectExtensions } from "../common/feature-detector";
import { detectProjectV2 } from "../common/project-detector-v2";
import { processProject } from "../common/processor";
import { cliVersion, pkg } from "../constants/urls";
import { info, logger, spinner } from "../core/helpers/logger";
@@ -406,6 +407,17 @@ const main = async () => {
await detectExtensions(options);
});
program
.command("detect-project")
.description(
"Detect the type of project your are running and let you know what it is.",
)
.option("-p, --path <project-path>", "path to project", ".")
.option("-d, --debug", "show debug logs")
.action(async (options) => {
await detectProjectV2(options);
});
program
.command("generate")
.description(
+23 -21
View File
@@ -220,27 +220,29 @@ export async function processProject(
const soliditySDKPackage = "@thirdweb-dev/contracts";
let usesSoliditySDK = false;
if (selectedRouter.name === "thirdweb-router") {
const deployArgs: TWRouterParams = {
extensionRegistry: EXTENSION_REGISTRY_ADDRESS,
extensionNames: selectedContracts.map((c) => c.name),
};
const outputDeployArgs = JSON.stringify(deployArgs, undefined, 2);
writeFileSync("./deployArgs.json", outputDeployArgs, "utf-8");
info(
"Deployment parameters written to deployArgs.json in your project directory",
);
} else {
const deployArgs: RouterParams = await formatToExtensions(
selectedContracts,
);
const outputDeployArgs = JSON.stringify(deployArgs, undefined, 2);
writeFileSync("./deployArgs.json", outputDeployArgs, "utf-8");
info(
"Deployment parameters written to deployArgs.json in your project directory",
);
if(options.dynamic) {
if (selectedRouter.name === "thirdweb-router") {
const deployArgs: TWRouterParams = {
extensionRegistry: EXTENSION_REGISTRY_ADDRESS,
extensionNames: selectedContracts.map((c) => c.name),
};
const outputDeployArgs = JSON.stringify(deployArgs, undefined, 2);
writeFileSync("./deployArgs.json", outputDeployArgs, "utf-8");
info(
"Deployment parameters written to deployArgs.json in your project directory",
);
} else {
const deployArgs: RouterParams = await formatToExtensions(
selectedContracts,
);
const outputDeployArgs = JSON.stringify(deployArgs, undefined, 2);
writeFileSync("./deployArgs.json", outputDeployArgs, "utf-8");
info(
"Deployment parameters written to deployArgs.json in your project directory",
);
}
}
const loader = spinner("Uploading contract data...");
@@ -0,0 +1,48 @@
import detectPackageManager from "../core/detection/detectPackageManager";
import detectFramework from "../core/detection/detectFramework";
import detectLibrary from "../core/detection/detectLibrary";
import detectLanguage from "../core/detection/detectLanguage";
import { logger } from "../core/helpers/logger";
import path from "path";
import { ContractLibrariesType, contractLibraries } from "../core/types/ProjectType";
export async function detectProjectV2(options: any) {
logger.setSettings({
minLevel: options.debug ? "debug" : "info",
});
let projectPath = process.cwd();
if (options.path) {
logger.debug("Overriding project path to " + options.path);
const resolvedPath = (options.path as string).startsWith("/")
? options.path
: path.resolve(`${projectPath}/${options.path}`);
projectPath = resolvedPath;
}
logger.debug("Processing project at path " + projectPath);
const detectedPackageManager = await detectPackageManager(
projectPath,
options,
);
const detectedLanguage = await detectLanguage(projectPath, options);
const detectedLibrary = await detectLibrary(
projectPath,
options,
detectedPackageManager,
);
const detectedFramework = await detectFramework(
projectPath,
options,
detectedPackageManager,
);
const detectedAppType = contractLibraries.includes(detectedFramework as ContractLibrariesType) ? "contract" : "app";
logger.debug("Detected package manager: " + detectedPackageManager);
logger.debug("Detected library: " + detectedLibrary);
logger.debug("Detected language: " + detectedLanguage);
logger.debug("Detected framework: " + detectedFramework);
logger.debug("Detected app type: " + detectedAppType);
}
+182
View File
@@ -0,0 +1,182 @@
import { ALWAYS_SUGGESTED } from "../constants/features";
import build from "../core/builder/build";
import detect from "../core/detection/detect";
import detectPackageManager from "../core/detection/detectPackageManager";
import { logger, spinner } from "../core/helpers/logger";
import { createContractsPrompt } from "../core/helpers/selector";
import { ContractFeatures, Feature } from "../core/interfaces/ContractFeatures";
import { ContractPayload } from "../core/interfaces/ContractPayload";
import { getPkgManager } from "../create/helpers/get-pkg-manager";
import { detectFeatures, FeatureWithEnabled } from "@thirdweb-dev/sdk";
import chalk from "chalk";
import { existsSync, readFileSync } from "fs";
import ora from "ora";
import path from "path";
export async function detectProject(options: any) {
logger.setSettings({
minLevel: options.debug ? "debug" : "info",
});
let projectPath = process.cwd();
if (options.path) {
logger.debug("Overriding project path to " + options.path);
const resolvedPath = (options.path as string).startsWith("/")
? options.path
: path.resolve(`${projectPath}/${options.path}`);
projectPath = resolvedPath;
}
logger.debug("Processing project at path " + projectPath);
const packageManagerType = await detectPackageManager(projectPath, options);
console.log(packageManagerType);
const projectType = await detect(projectPath, options);
let compiledResult;
const compileLoader = spinner("Compiling project...");
try {
compiledResult = await build(projectPath, projectType, options);
} catch (e) {
compileLoader.fail("Compilation failed");
logger.error(e);
process.exit(1);
}
compileLoader.succeed("Compilation successful");
let selectedContracts: ContractPayload[] = [];
if (compiledResult.contracts.length === 1) {
selectedContracts = [compiledResult.contracts[0]];
} else {
if (options.all) {
selectedContracts = compiledResult.contracts;
} else {
const choices = compiledResult.contracts.map((c) => ({
name: c.name,
value: c,
}));
const prompt = createContractsPrompt(
choices,
"Choose which contracts to run detection on",
);
const selection: Record<string, ContractPayload> = await prompt.run();
selectedContracts = Object.keys(selection).map((key) => selection[key]);
}
}
let contractsWithFeatures: ContractFeatures[] = selectedContracts.map(
(contract) => {
const abi: Parameters<typeof detectFeatures>[0] = JSON.parse(
contract.metadata,
)["output"]["abi"];
const features = extractFeatures(detectFeatures(abi));
const enabledFeatures: Feature[] = features.enabledFeatures.map(
(feature) => ({
name: feature.name,
reference: `https://portal.thirdweb.com/interfaces/${feature.name.toLowerCase()}`,
}),
);
const suggestedFeatures: Feature[] = features.suggestedFeatures.map(
(feature) => ({
name: feature.name,
reference: `https://portal.thirdweb.com/interfaces/${feature.name.toLowerCase()}`,
}),
);
return {
name: contract.name,
enabledFeatures,
suggestedFeatures,
};
},
);
contractsWithFeatures.map((contractWithFeatures) => {
logger.info(`\n`);
if (contractWithFeatures.enabledFeatures.length === 0) {
ora(
`No extensions detected on ${chalk.blueBright(
contractWithFeatures.name,
)}`,
).stopAndPersist({ symbol: "🔎" });
} else {
ora(
`Detected extension on ${chalk.blueBright(contractWithFeatures.name)}`,
).stopAndPersist({ symbol: "🔎" });
contractWithFeatures.enabledFeatures.map((feature) => {
logger.info(`✔️ ${chalk.green(feature.name)}`);
});
}
logger.info(``);
ora(`Suggested extensions`).info();
contractWithFeatures.suggestedFeatures.map((feature) => {
logger.info(
`${chalk.dim(chalk.gray(`-`))} ${chalk.gray(
feature.name,
)} - ${chalk.dim(chalk.gray(feature.reference))}`,
);
});
let deployCmd = `npx thirdweb@latest deploy`;
if (existsSync(projectPath + "/package.json")) {
const packageManager = getPkgManager();
const useYarn = packageManager === "yarn";
const pkgJson = JSON.parse(
readFileSync(projectPath + "/package.json", "utf-8"),
);
if (pkgJson?.scripts?.deploy === deployCmd) {
deployCmd = `${packageManager}${useYarn ? "" : " run"} deploy`;
}
}
logger.info(``);
ora(
`Once you're done writing your contracts, you can run the following command to deploy them:`,
).info();
logger.info(``);
logger.info(` ${chalk.cyan(deployCmd)}`);
logger.info(``);
});
}
function extractFeatures(
input: ReturnType<typeof detectFeatures>,
enabledFeatures: FeatureWithEnabled[] = [],
suggestedFeatures: FeatureWithEnabled[] = [],
parent = "__ROOT__",
) {
if (!input) {
return {
enabledFeatures,
suggestedFeatures,
};
}
for (const featureKey in input) {
const feature = input[featureKey];
// if feature is enabled, then add it to enabledFeatures
if (feature.enabled) {
enabledFeatures.push(feature);
}
// otherwise if it is disabled, but it's parent is enabled or suggested, then add it to suggestedFeatures
else if (
enabledFeatures.findIndex((f) => f.name === parent) > -1 ||
ALWAYS_SUGGESTED.includes(feature.name)
) {
suggestedFeatures.push(feature);
}
// recurse
extractFeatures(
feature.features,
enabledFeatures,
suggestedFeatures,
feature.name,
);
}
return {
enabledFeatures,
suggestedFeatures,
};
}
@@ -0,0 +1,88 @@
import { info } from "../helpers/logger";
import { FrameworkType, PackageManagerType } from "../types/ProjectType";
import inquirer from "inquirer";
import NextDetector from "./frameworks/next";
import CRADetector from "./frameworks/cra";
import RemixDetector from "./frameworks/remix";
import GatsbyDetector from "./frameworks/gatsby";
import VueDetector from "./frameworks/vue";
import ReactNativeCLIDetector from "./frameworks/reactNativeCli";
import DjangoDetector from "./frameworks/django";
import ExpoDetector from "./frameworks/expo";
import FoundryDetector from "./frameworks/foundry";
import HardhatDetector from "./frameworks/hardhat";
import { FrameworkDetector } from "./detector";
import TruffleDetector from "./frameworks/truffle";
import BrownieDetector from "./frameworks/brownie";
import FastAPIDetector from "./frameworks/fastAPI";
import FlaskDetector from "./frameworks/flask";
import PopulusDetector from "./frameworks/populus";
import FastifyDetector from "./frameworks/fastify";
import EchoDetector from "./frameworks/echo";
import FiberDetector from "./frameworks/fiber";
import GinDetector from "./frameworks/gin";
import RevelDetector from "./frameworks/revel";
import ZenjectDetector from "./frameworks/zenject";
export default async function detect(
path: string,
options: any,
detectedPackageManager: PackageManagerType,
): Promise<FrameworkType> {
// We could optimize further if we want, by only running the detectors that match the package manager.
const frameworkDetectors: FrameworkDetector[] = [
new BrownieDetector(),
new CRADetector(),
new DjangoDetector(),
new EchoDetector(),
new ExpoDetector(),
new FastAPIDetector(),
new FastifyDetector(),
new FiberDetector(),
new FlaskDetector(),
new FoundryDetector(),
new GatsbyDetector(),
new GinDetector(),
new HardhatDetector(),
new NextDetector(),
new PopulusDetector(),
new ReactNativeCLIDetector(),
new RemixDetector(),
new RevelDetector(),
new TruffleDetector(),
new VueDetector(),
new ZenjectDetector(),
];
const possibleFrameworks = frameworkDetectors
.filter((detector) => detector.matches(path, detectedPackageManager))
.map((detector) => detector.frameworkType);
if (!possibleFrameworks.length) {
return "none";
}
if (possibleFrameworks.length === 1) {
return possibleFrameworks[0];
}
info(
`Detected multiple possible frameworks: ${possibleFrameworks
.map((s) => `"${s}"`)
.join(", ")}`,
);
const question =
"We detected multiple possible frameworks which one do you want to use?";
if (options.ci) {
return possibleFrameworks[0];
} else {
const answer = await inquirer.prompt({
type: "list",
choices: possibleFrameworks,
name: question,
});
return answer[question];
}
}
@@ -0,0 +1,52 @@
import { info } from "../helpers/logger";
import { LanguageType } from "../types/ProjectType";
import { LanguageDetector } from "./detector";
import inquirer from "inquirer";
import JavascriptDetector from "./languages/javascript";
import TypescriptDetector from "./languages/typescript";
import PythonDetector from "./languages/python";
import GoDetector from "./languages/go";
export default async function detect(
path: string,
options: any,
): Promise<LanguageType> {
const languageDetectors: LanguageDetector[] = [
new JavascriptDetector(),
new TypescriptDetector(),
new PythonDetector(),
new GoDetector(),
];
const possibleLanguages = languageDetectors
.filter((detector) => detector.matches(path))
.map((detector) => detector.languageType);
if (!possibleLanguages.length) {
return "none";
}
if (possibleLanguages.length === 1) {
return possibleLanguages[0];
}
info(
`Detected multiple possible languages: ${possibleLanguages
.map((s) => `"${s}"`)
.join(", ")}`,
);
const question =
"We detected multiple possible languages which one do you want to use?";
if (options.ci) {
return possibleLanguages[0];
} else {
const answer = await inquirer.prompt({
type: "list",
choices: possibleLanguages,
name: question,
});
return answer[question];
}
}
@@ -0,0 +1,58 @@
import { info } from "../helpers/logger";
import { LibraryType, PackageManagerType } from "../types/ProjectType";
import { LibraryDetector } from "./detector";
import inquirer from "inquirer";
import ReactDetector from "./libraries/react";
import ExpressDetector from "./libraries/express";
import ReactNativeDetector from "./libraries/reactNative";
import ViteDetector from "./libraries/vite";
import Web3PyDetector from "./libraries/web3py";
import PlayMakerDetector from "./libraries/playmaker";
export default async function detect(
path: string,
options: any,
detectedPackageManager: PackageManagerType,
): Promise<LibraryType> {
// We could optimize further if we want, by only running the detectors that match the package manager.
const libraryDetectors: LibraryDetector[] = [
new ExpressDetector(),
new ReactDetector(),
new ReactNativeDetector(),
new ViteDetector(),
new Web3PyDetector(),
new PlayMakerDetector(),
];
const possibleLibraries = libraryDetectors
.filter((detector) => detector.matches(path, detectedPackageManager))
.map((detector) => detector.libraryType);
if (!possibleLibraries.length) {
return "none";
}
if (possibleLibraries.length === 1) {
return possibleLibraries[0];
}
info(
`Detected multiple possible libraries: ${possibleLibraries
.map((s) => `"${s}"`)
.join(", ")}`,
);
const question =
"We detected multiple possible libraries which one do you want to use?";
if (options.ci) {
return possibleLibraries[0];
} else {
const answer = await inquirer.prompt({
type: "list",
choices: possibleLibraries,
name: question,
});
return answer[question];
}
}
@@ -0,0 +1,58 @@
import { info } from "../helpers/logger";
import { PackageManagerType } from "../types/ProjectType";
import { PackageManagerDetector } from "./detector";
import inquirer from "inquirer";
import NPMDetector from "./packageManagers/npm";
import YarnDetector from "./packageManagers/yarn";
import PnpmDetector from "./packageManagers/pnpm";
import CondaDetector from "./packageManagers/conda";
import PipDetector from "./packageManagers/pip";
import PipEnvDetector from "./packageManagers/pipenv";
import PoetryDetector from "./packageManagers/poetry";
export default async function detect(
path: string,
options: any,
): Promise<PackageManagerType> {
const packageManagerDetectors: PackageManagerDetector[] = [
new NPMDetector(),
new YarnDetector(),
new PnpmDetector(),
new CondaDetector(),
new PipDetector(),
new PipEnvDetector(),
new PoetryDetector(),
];
const possiblePackageManagers = packageManagerDetectors
.filter((detector) => detector.matches(path))
.map((detector) => detector.packageManagerType);
if (!possiblePackageManagers.length) {
return "none";
}
if (possiblePackageManagers.length === 1) {
return possiblePackageManagers[0];
}
info(
`Detected multiple possible package managers: ${possiblePackageManagers
.map((s) => `"${s}"`)
.join(", ")}`,
);
const question =
"We detected multiple possible package managers, which one do you want to use?";
if (options.ci) {
return possiblePackageManagers[0];
} else {
const answer = await inquirer.prompt({
type: "list",
choices: possiblePackageManagers,
name: question,
});
return answer[question];
}
}
+38 -1
View File
@@ -1,7 +1,44 @@
import { ProjectType } from "../types/ProjectType";
import {
ProjectType,
LanguageType,
PackageManagerType,
AppType,
FrameworkType,
LibraryType,
} from "../types/ProjectType";
export interface Detector {
projectType: ProjectType;
matches(path: string): boolean;
}
export interface PackageManagerDetector {
packageManagerType: PackageManagerType;
matches(path: string): boolean;
}
export interface FrameworkDetector {
frameworkType: FrameworkType;
matches(path: string, PackageManager?: PackageManagerType): boolean;
}
export interface LibraryDetector {
libraryType: LibraryType;
matches(path: string, PackageManager?: PackageManagerType): boolean;
}
export interface LanguageDetector {
languageType: LanguageType;
matches(path: string): boolean;
}
export interface AppTypeDetector {
appType: AppType;
matches(path: string): boolean;
}
@@ -0,0 +1,30 @@
import { FrameworkDetector } from "../detector";
import { existsSync } from "fs";
import { FrameworkType, PackageManagerType } from "../../types/ProjectType";
import { getDependenciesForPython } from "../../../lib/utils";
export default class BrownieDetector implements FrameworkDetector {
public frameworkType: FrameworkType = "brownie";
public matches(path: string, packageManager: PackageManagerType): boolean {
const { dependencies, devDependencies } = getDependenciesForPython(
path,
packageManager,
);
const additionalFilesToCheck = [
"/brownie-config.yaml",
"/brownie-config.json",
];
const additionalFilesExist = additionalFilesToCheck.some((file) =>
existsSync(path + file),
);
return (
dependencies.includes("brownie") ||
devDependencies.includes("brownie") ||
additionalFilesExist ||
false
);
}
}
@@ -0,0 +1,25 @@
import { FrameworkDetector } from "../detector";
import { existsSync, readFileSync } from "fs";
import { FrameworkType } from "../../types/ProjectType";
import { parsePackageJson } from "../../../lib/utils";
export default class CRADetector implements FrameworkDetector {
public frameworkType: FrameworkType = "cra";
public matches(path: string): boolean {
const packageJsonPath = path + "/package.json";
if (!existsSync(packageJsonPath)) {
return false;
}
const packageJson = readFileSync(packageJsonPath);
const { dependencies, devDependencies } = parsePackageJson(packageJson);
const craDependencyExists =
dependencies["react-scripts"] ||
devDependencies["react-scripts"] ||
false;
return craDependencyExists;
}
}
@@ -0,0 +1,27 @@
import { FrameworkDetector } from "../detector";
import { existsSync } from "fs";
import { FrameworkType, PackageManagerType } from "../../types/ProjectType";
import { getDependenciesForPython } from "../../../lib/utils";
export default class DjangoDetector implements FrameworkDetector {
public frameworkType: FrameworkType = "django";
public matches(path: string, packageManager: PackageManagerType): boolean {
const { dependencies, devDependencies } = getDependenciesForPython(
path,
packageManager,
);
const additionalFilesToCheck = ["/manage.py"];
const additionalFilesExist = additionalFilesToCheck.some((file) =>
existsSync(path + file),
);
return (
dependencies.includes("django") ||
devDependencies.includes("django") ||
additionalFilesExist ||
false
);
}
}
@@ -0,0 +1,36 @@
import { FrameworkDetector } from "../detector";
import { existsSync, readFileSync } from "fs";
import { FrameworkType } from "../../types/ProjectType";
import { fileContainsImport, parseGoMod } from "../../../lib/utils";
export default class EchoDetector implements FrameworkDetector {
public frameworkType: FrameworkType = "echo";
public matches(path: string): boolean {
const goModFilePath = path + "/go.mod";
const mainGoFilePath = path + "/main.go";
let dependenciesExist = false;
if (!existsSync(goModFilePath) && !existsSync(mainGoFilePath)) {
return false;
}
if (existsSync(goModFilePath)) {
const goModFile = readFileSync(goModFilePath, "utf-8");
const { dependencies } = parseGoMod(goModFile);
const dependenciesToCheck = ["github.com/labstack/echo"];
dependenciesExist = dependenciesToCheck.some((dependency) =>
dependencies.some((importstr) => importstr.name === dependency),
);
}
const mainGoFile = readFileSync(mainGoFilePath, "utf-8");
const fileImportExists = fileContainsImport(
mainGoFile,
"github.com/labstack/echo",
);
return dependenciesExist || fileImportExists || false;
}
}
@@ -0,0 +1,32 @@
import { FrameworkDetector } from "../detector";
import { existsSync, readFileSync } from "fs";
import { FrameworkType } from "../../types/ProjectType";
import { parsePackageJson } from "../../../lib/utils";
export default class ExpoDetector implements FrameworkDetector {
public frameworkType: FrameworkType = "expo";
public matches(path: string): boolean {
const packageJsonPath = path + "/package.json";
if (!existsSync(packageJsonPath)) {
return false;
}
const packageJson = readFileSync(packageJsonPath);
const { dependencies, devDependencies } = parsePackageJson(packageJson);
const additionalFilesToCheck = ["/app.json", "/app.config.js", "/assets"];
const additionalFilesExist = additionalFilesToCheck.some((file) =>
existsSync(path + file),
);
const expoDependencyExists =
dependencies["expo"] ||
devDependencies["expo"] ||
additionalFilesExist ||
false;
return expoDependencyExists;
}
}
@@ -0,0 +1,27 @@
import { FrameworkDetector } from "../detector";
import { existsSync } from "fs";
import { FrameworkType, PackageManagerType } from "../../types/ProjectType";
import { getDependenciesForPython } from "../../../lib/utils";
export default class FastAPIDetector implements FrameworkDetector {
public frameworkType: FrameworkType = "fastapi";
public matches(path: string, packageManager: PackageManagerType): boolean {
const { dependencies, devDependencies } = getDependenciesForPython(
path,
packageManager,
);
const additionalFilesToCheck = ["/app.py", "/main.py"];
const additionalFilesExist = additionalFilesToCheck.some((file) =>
existsSync(path + file),
);
return (
dependencies.includes("fastapi") ||
devDependencies.includes("fastapi") ||
additionalFilesExist ||
false
);
}
}
@@ -0,0 +1,37 @@
import { FrameworkDetector } from "../detector";
import { existsSync, readFileSync } from "fs";
import { FrameworkType } from "../../types/ProjectType";
import { parsePackageJson } from "../../../lib/utils";
export default class FastifyDetector implements FrameworkDetector {
public frameworkType: FrameworkType = "fastify";
public matches(path: string): boolean {
const packageJsonPath = path + "/package.json";
if (!existsSync(packageJsonPath)) {
return false;
}
const packageJson = readFileSync(packageJsonPath);
const { dependencies, devDependencies } = parsePackageJson(packageJson);
const additionalFilesToCheck = [
"/server.js",
"/app.js",
"/server.ts",
"/app.ts",
];
const additionalFilesExist = additionalFilesToCheck.some((file) =>
existsSync(path + file),
);
const fastifyDependencyExists =
dependencies["fastify"] ||
devDependencies["fastify"] ||
additionalFilesExist ||
false;
return fastifyDependencyExists;
}
}
@@ -0,0 +1,36 @@
import { FrameworkDetector } from "../detector";
import { existsSync, readFileSync } from "fs";
import { FrameworkType } from "../../types/ProjectType";
import { fileContainsImport, parseGoMod } from "../../../lib/utils";
export default class FiberDetector implements FrameworkDetector {
public frameworkType: FrameworkType = "fiber";
public matches(path: string): boolean {
const goModFilePath = path + "/go.mod";
const mainGoFilePath = path + "/main.go";
let dependenciesExist = false;
if (!existsSync(goModFilePath) && !existsSync(mainGoFilePath)) {
return false;
}
if (existsSync(goModFilePath)) {
const goModFile = readFileSync(goModFilePath, "utf-8");
const { dependencies } = parseGoMod(goModFile);
const dependenciesToCheck = ["github.com/gofiber/fiber"];
dependenciesExist = dependenciesToCheck.some((dependency) =>
dependencies.some((importstr) => importstr.name === dependency),
);
}
const mainGoFile = readFileSync(mainGoFilePath, "utf-8");
const fileImportExists = fileContainsImport(
mainGoFile,
"github.com/gofiber/fiber",
);
return dependenciesExist || fileImportExists || false;
}
}

Some files were not shown because too many files have changed in this diff Show More