Compare commits
176
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e4d41856f2 | ||
|
|
713d3187be | ||
|
|
f6c6a68b97 | ||
|
|
2682f5823e | ||
|
|
d30e3f4db3 | ||
|
|
2efe5be3ad | ||
|
|
31a252a0ec | ||
|
|
d5f18b403a | ||
|
|
cc0c7fa093 | ||
|
|
baeb74274e | ||
|
|
5038487e1b | ||
|
|
c5959fbd52 | ||
|
|
68d52f99b3 | ||
|
|
9efeba38f0 | ||
|
|
50346bd9d0 | ||
|
|
f9cf2bc6ba | ||
|
|
4355518afe | ||
|
|
99521129ed | ||
|
|
c9067681c2 | ||
|
|
2335f000c9 | ||
|
|
a7e908b5fe | ||
|
|
2a8cc289ac | ||
|
|
d8dec9fc19 | ||
|
|
0c88304464 | ||
|
|
2676fc01f4 | ||
|
|
61ef69649f | ||
|
|
460576fea9 | ||
|
|
87a8ebdb7a | ||
|
|
e23ee0526e | ||
|
|
be04ff2775 | ||
|
|
3740a0bf5d | ||
|
|
6ae39277a1 | ||
|
|
8f46a2eef5 | ||
|
|
8ac9b03f4a | ||
|
|
6ef52dc916 | ||
|
|
b6b0855b81 | ||
|
|
ac01516ce6 | ||
|
|
1aef3bd270 | ||
|
|
e9b5031565 | ||
|
|
e081075b2c | ||
|
|
3212867de2 | ||
|
|
91e7178295 | ||
|
|
3985560942 | ||
|
|
87a101ad56 | ||
|
|
842ed519a3 | ||
|
|
2f4cd92848 | ||
|
|
303bf63c1a | ||
|
|
8845bf960e | ||
|
|
b80024c6cc | ||
|
|
696c384a34 | ||
|
|
bd6be0bae7 | ||
|
|
8d5b418e78 | ||
|
|
1bdb44d36b | ||
|
|
b83ea5251b | ||
|
|
537785fed0 | ||
|
|
fb346ffd45 | ||
|
|
63f552d736 | ||
|
|
cc7ce8b1e8 | ||
|
|
85250cf711 | ||
|
|
29c1cf7eff | ||
|
|
0666f37c13 | ||
|
|
8a8a37f6d3 | ||
|
|
dc08aa731f | ||
|
|
541dfeeaba | ||
|
|
1e1a39123b | ||
|
|
5c7ae694c4 | ||
|
|
e33bd2a856 | ||
|
|
b1ee7491c8 | ||
|
|
7832041c0f | ||
|
|
88c78f3b32 | ||
|
|
78536ba65f | ||
|
|
b0e8406d1e | ||
|
|
9c5dbf1fe6 | ||
|
|
ba90c675db | ||
|
|
fd9ba94db2 | ||
|
|
91f5a2fd5c | ||
|
|
e50911bc06 | ||
|
|
23cd88ec3a | ||
|
|
1adaf41e41 | ||
|
|
478780f634 | ||
|
|
521c85c1ba | ||
|
|
b7a5b45441 | ||
|
|
d7deaa48f2 | ||
|
|
98fc320a86 | ||
|
|
5712650074 | ||
|
|
1b0bc87efb | ||
|
|
a3472a1331 | ||
|
|
7c3f050883 | ||
|
|
8b68f20678 | ||
|
|
3d644fb8cb | ||
|
|
690ff925c3 | ||
|
|
4fe6797427 | ||
|
|
f3408d05d8 | ||
|
|
845e818c66 | ||
|
|
5178256e84 | ||
|
|
66cf1fb5c2 | ||
|
|
df792f0b81 | ||
|
|
ae0f967356 | ||
|
|
076718112f | ||
|
|
7c9f86cc44 | ||
|
|
9c90371426 | ||
|
|
4516487a9a | ||
|
|
300fe4a933 | ||
|
|
f580b8ac06 | ||
|
|
f0de81d4b1 | ||
|
|
f3a863a3b1 | ||
|
|
128bca9e07 | ||
|
|
18ba6b381e | ||
|
|
18c16101dd | ||
|
|
b6b94ca348 | ||
|
|
81d2d2185d | ||
|
|
37f58b4e68 | ||
|
|
61d41db769 | ||
|
|
44cce2f2b1 | ||
|
|
017b0d56b6 | ||
|
|
4d77c185d9 | ||
|
|
44d56e4a91 | ||
|
|
03e755f1df | ||
|
|
8694d5a3a1 | ||
|
|
4d9e5c6193 | ||
|
|
27d8db200e | ||
|
|
813c4a4a09 | ||
|
|
f6ea971854 | ||
|
|
f3b96e7120 | ||
|
|
cfd2a7c9ec | ||
|
|
9670c7aee5 | ||
|
|
94b120ffd1 | ||
|
|
d0bcd2c587 | ||
|
|
818048d52f | ||
|
|
500a0e671b | ||
|
|
6a50719486 | ||
|
|
1f89410867 | ||
|
|
363c6799a6 | ||
|
|
bddabe0b42 | ||
|
|
2b3e94f90a | ||
|
|
5d25ee1ab7 | ||
|
|
d6abe00c4e | ||
|
|
af8cf40e4e | ||
|
|
e85ec3e8f0 | ||
|
|
9919026f38 | ||
|
|
c349f44d58 | ||
|
|
fc7c6b6211 | ||
|
|
55b00eff26 | ||
|
|
76d219e6be | ||
|
|
f13408a33d | ||
|
|
74b19012c2 | ||
|
|
8f85868324 | ||
|
|
448b357ed4 | ||
|
|
912738bd0a | ||
|
|
f1aecc3049 | ||
|
|
0b38dac852 | ||
|
|
440a4ade95 | ||
|
|
29d0c62610 | ||
|
|
f295ec67b4 | ||
|
|
1686fb4b2c | ||
|
|
85dd18e8f0 | ||
|
|
ec1f2324c7 | ||
|
|
b59a31c365 | ||
|
|
d29f7e78f0 | ||
|
|
3e2b392b6b | ||
|
|
cf96333fa2 | ||
|
|
4213cfee77 | ||
|
|
25ef4be50f | ||
|
|
ab1f8bb6f6 | ||
|
|
5f8ec45af7 | ||
|
|
b45d761f8f | ||
|
|
04de5b2783 | ||
|
|
dee4596549 | ||
|
|
3547901ddd | ||
|
|
fe7ab1c5d3 | ||
|
|
bdd9ed2298 | ||
|
|
0977454d45 | ||
|
|
19b8e18b6b | ||
|
|
7c0060b7fd | ||
|
|
0a07d7a248 | ||
|
|
8c81ca5c30 |
@@ -16,6 +16,6 @@
|
||||
},
|
||||
"snapshot": {
|
||||
"useCalculatedVersion": true,
|
||||
"prereleaseTemplate": "{tag}-{commit}"
|
||||
"prereleaseTemplate": "{tag}-{datetime}-{commit}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
# Order is important; the last matching pattern takes the most precedence.
|
||||
|
||||
# Platform team owns everything by default
|
||||
|
||||
* @thirdweb-dev/platform
|
||||
|
||||
# Devrel owns all markdown files (README etc.)
|
||||
|
||||
*.md @thirdweb-dev/devrel
|
||||
.changeset/
|
||||
|
||||
# Shared ownership of the react and react-core packages
|
||||
|
||||
packages/react/ @thirdweb-dev/product @thirdweb-dev/platform
|
||||
packages/react-core/ @thirdweb-dev/product @thirdweb-dev/platform
|
||||
|
||||
# Shared ownership of the CLI
|
||||
|
||||
packages/cli/ @thirdweb-dev/product @thirdweb-dev/platform
|
||||
|
||||
# Chains is owned specifically by jonas for now
|
||||
|
||||
packages/chains/ @jnsdls
|
||||
|
||||
# .github folder + .changeset + turbo config is owned by joaquim and jonas for now
|
||||
|
||||
.github/ @jnsdls @joaquim-verges
|
||||
.changeset/config.json @jnsdls @joaquim-verges
|
||||
turbo.json @joaquim-verges @jnsdls
|
||||
@@ -13,6 +13,6 @@ runs:
|
||||
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: yarn install --frozen-lockfile
|
||||
run: yarn
|
||||
env:
|
||||
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1"
|
||||
|
||||
@@ -23,7 +23,7 @@ We use [Turborepo](https://turborepo.org/docs/getting-started) to manage the mon
|
||||
You can see a quick outline of each of the projects within this repo below, each living within the [/packages](/packages) directory:
|
||||
|
||||
| Package | Description | Latest Version |
|
||||
| ------------------------------ | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
|--------------------------------|----------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| [/sdk](./packages/sdk) | Best in class web3 SDK for Browser, Node and Mobile apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/sdk"><img src="https://img.shields.io/npm/v/@thirdweb-dev/sdk?color=red&label=npm&logo=npm" alt="npm version"/></a> |
|
||||
| [/react](./packages/react) | Ultimate collection of React hooks for your web3 apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/react"><img src="https://img.shields.io/npm/v/@thirdweb-dev/react?color=red&label=npm&logo=npm" alt="npm version"/></a> |
|
||||
| [/auth](./packages/auth) | Best in class wallet authentication for Node backends | <a href="https://www.npmjs.com/package/@thirdweb-dev/auth"><img src="https://img.shields.io/npm/v/@thirdweb-dev/auth?color=red&label=npm&logo=npm" alt="npm version"/></a> |
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["main"]
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build and Test
|
||||
timeout-minutes: 30
|
||||
runs-on: ubuntu-latest-32
|
||||
# To use Remote Caching, uncomment the next lines and follow the steps below.
|
||||
env:
|
||||
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
||||
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
||||
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install
|
||||
uses: ./.github/composite-actions/install
|
||||
|
||||
# this already builds anything that changed...
|
||||
- name: Build & Test
|
||||
run: yarn test
|
||||
@@ -0,0 +1,121 @@
|
||||
name: Build, Lint & Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["main"]
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
# trigger on merge group as well (merge queue)
|
||||
merge_group:
|
||||
types: [checks_requested]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
# To use Remote Caching, uncomment the next lines and follow the steps below.
|
||||
env:
|
||||
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
||||
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
timeout-minutes: 15
|
||||
name: Build
|
||||
runs-on: ubuntu-latest-16
|
||||
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 25
|
||||
|
||||
- name: Install
|
||||
uses: ./.github/composite-actions/install
|
||||
|
||||
- run: yarn build
|
||||
|
||||
# We use week in the turbo cache key to keep the cache from infinitely growing
|
||||
- id: get-week
|
||||
run: echo "WEEK=$(date +%U)" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/cache@v3
|
||||
timeout-minutes: 5
|
||||
id: cache-build
|
||||
with:
|
||||
path: ./*
|
||||
key: ${{ github.sha }}-${{ github.run_number }}
|
||||
|
||||
lint:
|
||||
timeout-minutes: 15
|
||||
name: Lint Packages
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
check-latest: true
|
||||
|
||||
- uses: actions/cache@v3
|
||||
timeout-minutes: 5
|
||||
id: restore-build
|
||||
with:
|
||||
path: ./*
|
||||
key: ${{ github.sha }}-${{ github.run_number }}
|
||||
|
||||
- run: yarn lint
|
||||
|
||||
test:
|
||||
timeout-minutes: 15
|
||||
name: Unit Tests
|
||||
runs-on: ubuntu-latest-16
|
||||
needs: build
|
||||
steps:
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
check-latest: true
|
||||
|
||||
- uses: actions/cache@v3
|
||||
timeout-minutes: 5
|
||||
id: restore-build
|
||||
with:
|
||||
path: ./*
|
||||
key: ${{ github.sha }}-${{ github.run_number }}
|
||||
|
||||
- run: yarn test
|
||||
|
||||
- name: Upload coverage reports to Codecov
|
||||
uses: codecov/codecov-action@v3
|
||||
with:
|
||||
files: ./packages/sdk/coverage/evm/lcov.info,./packages/sdk/coverage/solana/lcov.info,
|
||||
|
||||
e2e:
|
||||
timeout-minutes: 15
|
||||
name: E2E Tests
|
||||
runs-on: ubuntu-latest-16
|
||||
needs: build
|
||||
steps:
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
check-latest: true
|
||||
|
||||
- uses: actions/cache@v3
|
||||
timeout-minutes: 5
|
||||
id: restore-build
|
||||
with:
|
||||
path: ./*
|
||||
key: ${{ github.sha }}-${{ github.run_number }}
|
||||
|
||||
- name: Install Playwright
|
||||
run: npx playwright install --with-deps
|
||||
|
||||
- name: Run e2e tests
|
||||
run: yarn e2e
|
||||
env:
|
||||
NODE_OPTIONS: "--max_old_space_size=4096"
|
||||
@@ -1,29 +0,0 @@
|
||||
name: Integration tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["main"]
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
integration-tests:
|
||||
timeout-minutes: 30
|
||||
runs-on: ubuntu-latest-32
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install
|
||||
uses: ./.github/composite-actions/install
|
||||
|
||||
- name: Install Playwright
|
||||
run: npx playwright install --with-deps
|
||||
|
||||
- name: Run e2e tests
|
||||
run: yarn e2e
|
||||
env:
|
||||
NODE_OPTIONS: "--max_old_space_size=4096"
|
||||
@@ -1,33 +0,0 @@
|
||||
name: Lint
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["main"]
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: Lint
|
||||
timeout-minutes: 15
|
||||
runs-on: ubuntu-latest
|
||||
# To use Remote Caching, uncomment the next lines and follow the steps below.
|
||||
env:
|
||||
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
|
||||
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
|
||||
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install
|
||||
uses: ./.github/composite-actions/install
|
||||
|
||||
- name: Lint
|
||||
run: yarn lint
|
||||
@@ -40,7 +40,7 @@ jobs:
|
||||
comment_body: ${{ github.event.comment.body }}
|
||||
|
||||
deploy:
|
||||
runs-on: ubuntu-latest-32
|
||||
runs-on: ubuntu-latest-16
|
||||
timeout-minutes: 30
|
||||
needs: deploy-check
|
||||
if: needs.deploy-check.outputs.triggered == 'true'
|
||||
@@ -67,7 +67,7 @@ jobs:
|
||||
uses: ./.github/composite-actions/install
|
||||
|
||||
- name: Build
|
||||
run: yarn build:release
|
||||
run: yarn build
|
||||
|
||||
- name: Configure npm
|
||||
run: |
|
||||
@@ -76,8 +76,10 @@ jobs:
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
||||
- name: Deploy pre-release
|
||||
id: changesets
|
||||
run: |
|
||||
yarn changeset version --snapshot dev
|
||||
node ./scripts/pre-release.mjs
|
||||
yarn changeset publish --tag dev --no-git-tag
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
release:
|
||||
name: Release
|
||||
timeout-minutes: 30
|
||||
runs-on: ubuntu-latest-32
|
||||
runs-on: ubuntu-latest-16
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@v3
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
name: Compressed Size
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest-32
|
||||
timeout-minutes: 30
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- uses: preactjs/compressed-size-action@v2
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
strip-hash: "\\-(\\w{8})(?:\\.esm|\\.cjs)"
|
||||
minimum-change-threshold: 100
|
||||
# exclude source maps, node modules and any test related files
|
||||
exclude: "{**/*.map,**/node_modules/**,**/test/**}"
|
||||
@@ -10,7 +10,6 @@ dist-ssr
|
||||
.cache
|
||||
server/dist
|
||||
public/dist
|
||||
.turbo
|
||||
./packages/contracts-js/abis
|
||||
.idea/
|
||||
.yalc/
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
<br />
|
||||
</p>
|
||||
|
||||
<h1 align="center"><a href='http://thirdweb.com/'>thirdweb</a> JavaScript/TypeScript monorepo</h1>
|
||||
<h1 align="center"><a href='https://thirdweb.com/'>thirdweb</a> JavaScript/TypeScript monorepo</h1>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/thirdweb-dev/js/actions/workflows/CI.yml">
|
||||
<img alt="Build Status" src="https://github.com/thirdweb-dev/js/actions/workflows/CI.yml/badge.svg"/>
|
||||
<a href="https://github.com/thirdweb-dev/js/actions/workflows/build-test-lint.yml">
|
||||
<img alt="Build Status" src="https://github.com/thirdweb-dev/js/actions/workflows/build-test-lint.yml/badge.svg"/>
|
||||
</a>
|
||||
<a href="https://discord.gg/thirdweb">
|
||||
<img alt="Join our Discord!" src="https://img.shields.io/discord/834227967404146718.svg?color=7289da&label=discord&logo=discord&style=flat"/>
|
||||
@@ -21,7 +21,7 @@
|
||||
## Packages
|
||||
|
||||
| Package | Description | Latest Version |
|
||||
| ------------------------------ | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
|--------------------------------|----------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| [/sdk](./packages/sdk) | Best in class web3 SDK for Browser, Node and Mobile apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/sdk"><img src="https://img.shields.io/npm/v/@thirdweb-dev/sdk?color=red&label=npm&logo=npm" alt="npm version"/></a> |
|
||||
| [/react](./packages/react) | Ultimate collection of React hooks for your web3 apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/react"><img src="https://img.shields.io/npm/v/@thirdweb-dev/react?color=red&label=npm&logo=npm" alt="npm version"/></a> |
|
||||
| [/auth](./packages/auth) | Best in class wallet authentication for Node backends | <a href="https://www.npmjs.com/package/@thirdweb-dev/auth"><img src="https://img.shields.io/npm/v/@thirdweb-dev/auth?color=red&label=npm&logo=npm" alt="npm version"/></a> |
|
||||
|
||||
+4
-3
@@ -13,7 +13,7 @@
|
||||
]
|
||||
},
|
||||
"scripts": {
|
||||
"test": "turbo run test test:evm test:solana",
|
||||
"test": "turbo run test test:evm test:solana --filter=./packages/*",
|
||||
"e2e": "turbo run e2e",
|
||||
"build": "turbo run build --filter=./packages/*",
|
||||
"build:release": "turbo run build --force --filter=./packages/*",
|
||||
@@ -38,12 +38,13 @@
|
||||
"@manypkg/get-packages": "^1.1.3",
|
||||
"@trivago/prettier-plugin-sort-imports": "^4.0.0",
|
||||
"eslint": "^8.21.0",
|
||||
"mocha": "^10.2.0",
|
||||
"postinstall-postinstall": "^2.1.0",
|
||||
"prettier": "^2.7.1",
|
||||
"turbo": "^1.4.6",
|
||||
"turbo": "^1.8.3",
|
||||
"yalc": "^1.0.0-pre.53"
|
||||
},
|
||||
"manypkg": {
|
||||
"defaultBranch": "main"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,45 @@
|
||||
# @thirdweb-dev/auth
|
||||
|
||||
## 3.0.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#665](https://github.com/thirdweb-dev/js/pull/665) [`6ef52dc9`](https://github.com/thirdweb-dev/js/commit/6ef52dc916251d72416ba5a8b63b428770f54e75) Thanks [@shift4id](https://github.com/shift4id)! - Fix spelling throughout all packages
|
||||
|
||||
## 3.0.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#601](https://github.com/thirdweb-dev/js/pull/601) [`66cf1fb`](https://github.com/thirdweb-dev/js/commit/66cf1fb5c2e8deb486543ee028d786bb8eef6c19) Thanks [@jnsdls](https://github.com/jnsdls)! - upgrade dependencies
|
||||
|
||||
## 3.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#588](https://github.com/thirdweb-dev/js/pull/588) [`f0de81d`](https://github.com/thirdweb-dev/js/commit/f0de81d4b1ba33b2ac73ed16cfdea8fd4eb5da9e) Thanks [@adam-maj](https://github.com/adam-maj)! - Add verify login to auth
|
||||
|
||||
## 3.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#581](https://github.com/thirdweb-dev/js/pull/581) [`4d9e5c6`](https://github.com/thirdweb-dev/js/commit/4d9e5c6193b839fc7f67e7e73e0589dc8c4db90d) Thanks [@adam-maj](https://github.com/adam-maj)! - Remove wallet from next-auth config
|
||||
|
||||
- [#576](https://github.com/thirdweb-dev/js/pull/576) [`f6ea971`](https://github.com/thirdweb-dev/js/commit/f6ea97185470f91fc73a117827df51cf8e1c99d1) Thanks [@adam-maj](https://github.com/adam-maj)! - Add support for next-auth to auth and react
|
||||
|
||||
## 3.0.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#533](https://github.com/thirdweb-dev/js/pull/533) [`dee4596`](https://github.com/thirdweb-dev/js/commit/dee45965496d5d0298944031dd13a4345f9e1683) Thanks [@adam-maj](https://github.com/adam-maj)! - Remove next major version pin on auth
|
||||
|
||||
## 3.0.2
|
||||
|
||||
## 3.0.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#520](https://github.com/thirdweb-dev/js/pull/520) [`8c81ca5`](https://github.com/thirdweb-dev/js/commit/8c81ca5c3033b04b1f64e3a1134a72e7e3ec03b1) Thanks [@adam-maj](https://github.com/adam-maj)! - Update auth and react-core dependencies
|
||||
|
||||
## 3.0.0
|
||||
|
||||
### Major Changes
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
</p>
|
||||
<h1 align="center">thirdweb Auth</h1>
|
||||
<p align="center">
|
||||
<a href="https://www.npmjs.com/package/@thirdweb-dev/auth"><img src="https://img.shields.io/npm/v/@thirdweb-dev/auth?color=red&label=npm&logo=npm" alt="npm version"/></a>
|
||||
<a href="https://github.com/thirdweb-dev/js/actions/workflows/build-test-lint.yml"><img alt="Build Status" src="https://github.com/thirdweb-dev/js/actions/workflows/build-test-lint.yml/badge.svg"/></a>
|
||||
<a href="https://discord.gg/thirdweb"><img alt="Join our Discord!" src="https://img.shields.io/discord/834227967404146718.svg?color=7289da&label=discord&logo=discord&style=flat"/></a>
|
||||
|
||||
</p>
|
||||
@@ -16,9 +18,13 @@
|
||||
Install the latest version of the SDK with either `npm` or `yarn`:
|
||||
|
||||
```shell
|
||||
npm install @thirdweb-dev/auth @thirdweb-dev/sdk ethers
|
||||
npm install @thirdweb-dev/auth
|
||||
```
|
||||
|
||||
```shell
|
||||
yarn add @thirdweb-dev/auth @thirdweb-dev/sdk ethers
|
||||
yarn add @thirdweb-dev/auth
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Auth Docs](https://portal.thirdweb.com/auth)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/auth",
|
||||
"version": "3.0.0",
|
||||
"version": "3.0.7",
|
||||
"main": "dist/thirdweb-dev-auth.cjs.js",
|
||||
"module": "dist/thirdweb-dev-auth.esm.js",
|
||||
"exports": {
|
||||
@@ -50,9 +50,6 @@
|
||||
"evm/index.ts",
|
||||
"solana/index.ts"
|
||||
],
|
||||
"___experimentalFlags_WILL_CHANGE_IN_PATCH": {
|
||||
"exports": true
|
||||
},
|
||||
"exports": true
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -66,7 +63,6 @@
|
||||
"@solana/web3.js": "^1.73.0",
|
||||
"@swc-node/register": "^1.5.4",
|
||||
"@swc/core": "^1.3.23",
|
||||
"@thirdweb-dev/sdk": "*",
|
||||
"@thirdweb-dev/wallets": "*",
|
||||
"@types/bs58": "^4.0.1",
|
||||
"@types/chai": "^4.3.4",
|
||||
@@ -97,13 +93,12 @@
|
||||
"peerDependencies": {
|
||||
"@noble/ed25519": "^1.7.1",
|
||||
"@solana/web3.js": "^1.73.0",
|
||||
"@thirdweb-dev/sdk": "*",
|
||||
"bs58": "^5.0.0",
|
||||
"cookie-parser": "^1.4.6",
|
||||
"ethers": ">=5.5.1",
|
||||
"express": "^4.18.1",
|
||||
"next": "^12.2.0",
|
||||
"next-auth": "^4.10.3",
|
||||
"ethers": "^5",
|
||||
"express": "^4",
|
||||
"next": "^12 || ^13",
|
||||
"next-auth": "^4",
|
||||
"tweetnacl": "^1.0.3"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
@@ -138,7 +133,6 @@
|
||||
"dependencies": {
|
||||
"cookie": "^0.5.0",
|
||||
"uuid": "^9.0.0",
|
||||
"yarn": "^1.22.19",
|
||||
"zod": "^3.20.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,7 +50,8 @@ export class ThirdwebAuth {
|
||||
statement: parsedOptions?.statement,
|
||||
version: parsedOptions?.version,
|
||||
uri:
|
||||
parsedOptions?.uri || (isBrowser() ? window.location.href : undefined),
|
||||
parsedOptions?.uri ||
|
||||
(isBrowser() ? window.location.origin : undefined),
|
||||
chain_id: chainId,
|
||||
nonce: parsedOptions?.nonce,
|
||||
expiration_time:
|
||||
@@ -129,7 +130,6 @@ export class ThirdwebAuth {
|
||||
try {
|
||||
await parsedOptions.validateNonce(payload.payload.nonce);
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
throw new Error(`Login request nonce is invalid`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import { ThirdwebAuth } from "../core";
|
||||
import { LoginPayload, VerifyOptions } from "../core/schema";
|
||||
import { SignerWallet } from "./signer";
|
||||
import { ethers } from "ethers";
|
||||
|
||||
const wallet = new SignerWallet(ethers.Wallet.createRandom());
|
||||
const authMap = new Map<string, ThirdwebAuth>();
|
||||
|
||||
export async function verifyLogin(
|
||||
domain: string,
|
||||
payload: LoginPayload,
|
||||
options?: Omit<VerifyOptions, "domain">,
|
||||
) {
|
||||
let auth: ThirdwebAuth;
|
||||
if (!authMap.has(domain)) {
|
||||
auth = new ThirdwebAuth(wallet, domain);
|
||||
authMap.set(domain, auth);
|
||||
} else {
|
||||
auth = authMap.get(domain) as ThirdwebAuth;
|
||||
}
|
||||
|
||||
try {
|
||||
const address = await auth.verify(payload, options);
|
||||
return { address, error: undefined };
|
||||
} catch (err: any) {
|
||||
return { address: undefined, error: err.message };
|
||||
}
|
||||
}
|
||||
@@ -468,6 +468,7 @@ const polygonMumbai: Chain = {
|
||||
|
||||
/**
|
||||
* @public
|
||||
* @deprecated - use the chainId number directly instead
|
||||
*/
|
||||
export enum ChainId {
|
||||
Mainnet = 1,
|
||||
@@ -488,6 +489,7 @@ export enum ChainId {
|
||||
|
||||
/**
|
||||
* @public
|
||||
* @deprecated - thirdweb now supports all evm chains, for a list of chain install the @thirdweb-dev/chains package
|
||||
*/
|
||||
export type SUPPORTED_CHAIN_ID =
|
||||
| ChainId.Mainnet
|
||||
@@ -507,6 +509,7 @@ export type SUPPORTED_CHAIN_ID =
|
||||
|
||||
/**
|
||||
* @public
|
||||
* @deprecated - thirdweb now supports all evm chains, for a list of chain install the @thirdweb-dev/chains package
|
||||
*/
|
||||
export const SUPPORTED_CHAIN_IDS: SUPPORTED_CHAIN_ID[] = [
|
||||
ChainId.Mainnet,
|
||||
@@ -534,45 +537,8 @@ export const NATIVE_TOKEN_ADDRESS =
|
||||
export const DEFAULT_API_KEY =
|
||||
"c6634ad2d97b74baf15ff556016830c251050e6c36b9da508ce3ec80095d3dc1";
|
||||
|
||||
function getRpcNameFromChainId(chainId: SUPPORTED_CHAIN_ID): string {
|
||||
switch (chainId) {
|
||||
case ChainId.Mainnet:
|
||||
return "mainnet";
|
||||
case ChainId.Goerli:
|
||||
return "goerli";
|
||||
case ChainId.Polygon:
|
||||
return "polygon";
|
||||
case ChainId.Mumbai:
|
||||
return "mumbai";
|
||||
case ChainId.Avalanche:
|
||||
return "avalanche";
|
||||
case ChainId.AvalancheFujiTestnet:
|
||||
return "avalanche-fuji";
|
||||
case ChainId.Fantom:
|
||||
return "fantom";
|
||||
case ChainId.FantomTestnet:
|
||||
return "fantom-testnet";
|
||||
case ChainId.Arbitrum:
|
||||
return "arbitrum";
|
||||
case ChainId.ArbitrumGoerli:
|
||||
return "arbitrum-goerli";
|
||||
case ChainId.Optimism:
|
||||
return "optimism";
|
||||
case ChainId.OptimismGoerli:
|
||||
return "optimism-goerli";
|
||||
case ChainId.BinanceSmartChainMainnet:
|
||||
return "bsc";
|
||||
case ChainId.BinanceSmartChainTestnet:
|
||||
return "bsc-testnet";
|
||||
default:
|
||||
throw new Error("Unsupported chain id");
|
||||
}
|
||||
}
|
||||
|
||||
export function getRpcUrl(chainId: SUPPORTED_CHAIN_ID) {
|
||||
return `https://${getRpcNameFromChainId(
|
||||
chainId,
|
||||
)}.rpc.thirdweb.com/${DEFAULT_API_KEY}`;
|
||||
export function getRpcUrl(chainId: number) {
|
||||
return `https://${chainId}.rpc.thirdweb.com/${DEFAULT_API_KEY}`;
|
||||
}
|
||||
|
||||
function enhanceChain<TChain extends Chain>(chain: TChain) {
|
||||
|
||||
@@ -1,93 +1,2 @@
|
||||
import { SUPPORTED_CHAIN_ID, supportedChains } from "./evm";
|
||||
import type { Ecosystem, GenericAuthWallet } from "@thirdweb-dev/wallets";
|
||||
import { ethers } from "ethers";
|
||||
|
||||
const EIP1271_ABI = [
|
||||
"function isValidSignature(bytes32 _message, bytes _signature) public view returns (bytes4)",
|
||||
];
|
||||
const EIP1271_MAGICVALUE = "0x1626ba7e";
|
||||
|
||||
export const checkContractWalletSignature = async (
|
||||
message: string,
|
||||
signature: string,
|
||||
address: string,
|
||||
chainId: number,
|
||||
): Promise<boolean> => {
|
||||
const rpcUrl =
|
||||
supportedChains[chainId as SUPPORTED_CHAIN_ID]?.rpcUrls.default.http[0];
|
||||
if (!rpcUrl) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const provider = new ethers.providers.JsonRpcProvider(rpcUrl);
|
||||
const walletContract = new ethers.Contract(address, EIP1271_ABI, provider);
|
||||
const hashMessage = ethers.utils.hashMessage(message);
|
||||
try {
|
||||
const res = await walletContract.isValidSignature(hashMessage, signature);
|
||||
return res === EIP1271_MAGICVALUE;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
export class SignerWallet implements GenericAuthWallet {
|
||||
type: Ecosystem = "evm";
|
||||
#signer: ethers.Signer;
|
||||
|
||||
constructor(signer: ethers.Signer) {
|
||||
this.#signer = signer;
|
||||
}
|
||||
|
||||
public async getAddress(): Promise<string> {
|
||||
return this.#signer.getAddress();
|
||||
}
|
||||
|
||||
public async getChainId(): Promise<number> {
|
||||
return this.#signer.getChainId();
|
||||
}
|
||||
|
||||
public async signMessage(message: string): Promise<string> {
|
||||
return await this.#signer.signMessage(message);
|
||||
}
|
||||
|
||||
public async verifySignature(
|
||||
message: string,
|
||||
signature: string,
|
||||
address: string,
|
||||
chainId?: number,
|
||||
): Promise<boolean> {
|
||||
const messageHash = ethers.utils.hashMessage(message);
|
||||
const messageHashBytes = ethers.utils.arrayify(messageHash);
|
||||
const recoveredAddress = ethers.utils.recoverAddress(
|
||||
messageHashBytes,
|
||||
signature,
|
||||
);
|
||||
|
||||
if (recoveredAddress === address) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check if the address is a smart contract wallet
|
||||
if (chainId !== undefined) {
|
||||
try {
|
||||
const isValid = await checkContractWalletSignature(
|
||||
message,
|
||||
signature,
|
||||
address,
|
||||
chainId || 1,
|
||||
);
|
||||
return isValid;
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export class PrivateKeyWallet extends SignerWallet {
|
||||
constructor(privateKey: string) {
|
||||
super(new ethers.Wallet(privateKey));
|
||||
}
|
||||
}
|
||||
export * from "./signer";
|
||||
export * from "./auth";
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
import { SUPPORTED_CHAIN_ID, supportedChains } from "./evm";
|
||||
import type { Ecosystem, GenericAuthWallet } from "@thirdweb-dev/wallets";
|
||||
import { ethers } from "ethers";
|
||||
|
||||
const EIP1271_ABI = [
|
||||
"function isValidSignature(bytes32 _message, bytes _signature) public view returns (bytes4)",
|
||||
];
|
||||
const EIP1271_MAGICVALUE = "0x1626ba7e";
|
||||
|
||||
export const checkContractWalletSignature = async (
|
||||
message: string,
|
||||
signature: string,
|
||||
address: string,
|
||||
chainId: number,
|
||||
): Promise<boolean> => {
|
||||
const rpcUrl =
|
||||
supportedChains[chainId as SUPPORTED_CHAIN_ID]?.rpcUrls.default.http[0];
|
||||
if (!rpcUrl) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const provider = new ethers.providers.JsonRpcProvider(rpcUrl);
|
||||
const walletContract = new ethers.Contract(address, EIP1271_ABI, provider);
|
||||
const hashMessage = ethers.utils.hashMessage(message);
|
||||
try {
|
||||
const res = await walletContract.isValidSignature(hashMessage, signature);
|
||||
return res === EIP1271_MAGICVALUE;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
export class SignerWallet implements GenericAuthWallet {
|
||||
type: Ecosystem = "evm";
|
||||
#signer: ethers.Signer;
|
||||
|
||||
constructor(signer: ethers.Signer) {
|
||||
this.#signer = signer;
|
||||
}
|
||||
|
||||
public async getAddress(): Promise<string> {
|
||||
return this.#signer.getAddress();
|
||||
}
|
||||
|
||||
public async getChainId(): Promise<number> {
|
||||
return this.#signer.getChainId();
|
||||
}
|
||||
|
||||
public async signMessage(message: string): Promise<string> {
|
||||
return await this.#signer.signMessage(message);
|
||||
}
|
||||
|
||||
public async verifySignature(
|
||||
message: string,
|
||||
signature: string,
|
||||
address: string,
|
||||
chainId?: number,
|
||||
): Promise<boolean> {
|
||||
const messageHash = ethers.utils.hashMessage(message);
|
||||
const messageHashBytes = ethers.utils.arrayify(messageHash);
|
||||
const recoveredAddress = ethers.utils.recoverAddress(
|
||||
messageHashBytes,
|
||||
signature,
|
||||
);
|
||||
|
||||
if (recoveredAddress === address) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check if the address is a smart contract wallet
|
||||
if (chainId !== undefined) {
|
||||
try {
|
||||
const isValid = await checkContractWalletSignature(
|
||||
message,
|
||||
signature,
|
||||
address,
|
||||
chainId || 1,
|
||||
);
|
||||
return isValid;
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export class PrivateKeyWallet extends SignerWallet {
|
||||
constructor(privateKey: string) {
|
||||
super(new ethers.Wallet(privateKey));
|
||||
}
|
||||
}
|
||||
@@ -56,11 +56,11 @@ export default async function handler(
|
||||
token = await ctx.auth.generate(payload, generateOptions);
|
||||
} catch (err: any) {
|
||||
if (err.message) {
|
||||
return res.status(403).json({ error: err.message });
|
||||
return res.status(400).json({ error: err.message });
|
||||
} else if (typeof err === "string") {
|
||||
return res.status(403).json({ error: err });
|
||||
return res.status(400).json({ error: err });
|
||||
} else {
|
||||
return res.status(403).json({ error: "Invalid login payload" });
|
||||
return res.status(400).json({ error: "Invalid login payload" });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,5 +31,5 @@ export default async function handler(
|
||||
}),
|
||||
);
|
||||
|
||||
return res.status(200).json({ message: "Succesfully logged out" });
|
||||
return res.status(200).json({ message: "Successfully logged out" });
|
||||
}
|
||||
|
||||
@@ -1,145 +1,60 @@
|
||||
import { ThirdwebAuth } from "../core";
|
||||
import { ThirdwebNextAuthConfig } from "./types";
|
||||
import { serialize } from "cookie";
|
||||
import {
|
||||
GetServerSidePropsContext,
|
||||
NextApiRequest,
|
||||
NextApiResponse,
|
||||
} from "next";
|
||||
import NextAuth, {
|
||||
NextAuthOptions,
|
||||
Session,
|
||||
unstable_getServerSession,
|
||||
} from "next-auth";
|
||||
import { LoginPayload, ThirdwebAuth, VerifyOptions } from "../core";
|
||||
import { SignerWallet } from "../evm";
|
||||
import { ThirdwebProviderConfig } from "./types";
|
||||
import { ethers } from "ethers";
|
||||
import { Awaitable, Session } from "next-auth/core/types";
|
||||
import { JWT } from "next-auth/jwt/types";
|
||||
import CredentialsProvider from "next-auth/providers/credentials";
|
||||
|
||||
export function ThirdwebNextAuth(cfg: ThirdwebNextAuthConfig) {
|
||||
const auth = new ThirdwebAuth(cfg.wallet, cfg.domain);
|
||||
export function ThirdwebAuthProvider(cfg: ThirdwebProviderConfig) {
|
||||
const wallet = new SignerWallet(ethers.Wallet.createRandom());
|
||||
const auth = new ThirdwebAuth(wallet, cfg.domain);
|
||||
|
||||
function ThirdwebProvider(res: GetServerSidePropsContext["res"]) {
|
||||
return CredentialsProvider({
|
||||
name: "ThirdwebAuth",
|
||||
credentials: {
|
||||
payload: {
|
||||
label: "Payload",
|
||||
type: "text",
|
||||
placeholder: "",
|
||||
},
|
||||
return CredentialsProvider({
|
||||
name: "Credentials",
|
||||
credentials: {
|
||||
payload: {
|
||||
label: "Payload",
|
||||
type: "text",
|
||||
placeholder: "",
|
||||
},
|
||||
async authorize({ payload }: any) {
|
||||
try {
|
||||
const parsed = JSON.parse(payload);
|
||||
const token = await auth.generate(parsed);
|
||||
const user = await auth.authenticate(token);
|
||||
|
||||
// Securely set httpOnly cookie on request to prevent XSS on frontend
|
||||
// And set path to / to enable thirdweb_auth_token usage on all endpoints
|
||||
res.setHeader(
|
||||
"Set-Cookie",
|
||||
serialize("thirdweb_auth_token", token, {
|
||||
path: "/",
|
||||
httpOnly: true,
|
||||
secure: true,
|
||||
sameSite: "none",
|
||||
}),
|
||||
);
|
||||
|
||||
return { id: user.address, address: user.address };
|
||||
} catch (err) {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function nextOptions(
|
||||
req: GetServerSidePropsContext["req"],
|
||||
res: GetServerSidePropsContext["res"],
|
||||
): NextAuthOptions {
|
||||
async function session({
|
||||
session: _session,
|
||||
}: {
|
||||
session: Session;
|
||||
}): Promise<Session> {
|
||||
const token = req.cookies.thirdweb_auth_token || "";
|
||||
},
|
||||
async authorize({ payload }: any) {
|
||||
try {
|
||||
const address = await auth.authenticate(token);
|
||||
_session.user = { ..._session.user, address } as Session["user"];
|
||||
return _session;
|
||||
} catch {
|
||||
return _session;
|
||||
const parsedPayload: LoginPayload = JSON.parse(payload);
|
||||
const verifyOptions: VerifyOptions = {
|
||||
statement: cfg.authOptions?.statement,
|
||||
uri: cfg.authOptions?.uri,
|
||||
version: cfg.authOptions?.version,
|
||||
chainId: cfg.authOptions?.chainId,
|
||||
resources: cfg.authOptions?.resources,
|
||||
validateNonce: async (nonce: string) => {
|
||||
if (cfg.authOptions?.validateNonce) {
|
||||
await cfg.authOptions?.validateNonce(nonce);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
const address = await auth.verify(parsedPayload, verifyOptions);
|
||||
|
||||
return { id: address };
|
||||
} catch (err) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function signOut() {
|
||||
res.setHeader(
|
||||
"Set-Cookie",
|
||||
serialize("thirdweb_auth_token", "", {
|
||||
path: "/",
|
||||
expires: new Date(Date.now() + 5 * 1000),
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
const providers: NextAuthOptions["providers"] = [
|
||||
...cfg.nextOptions.providers,
|
||||
ThirdwebProvider(res),
|
||||
];
|
||||
|
||||
const configSession = cfg.nextOptions.callbacks?.session;
|
||||
const callbacks: NextAuthOptions["callbacks"] = {
|
||||
...cfg.nextOptions.callbacks,
|
||||
session: configSession
|
||||
? async (params) => {
|
||||
params.session = await session(params);
|
||||
return configSession(params);
|
||||
}
|
||||
: session,
|
||||
};
|
||||
|
||||
const configSignOut = cfg.nextOptions.events?.signOut;
|
||||
const events: NextAuthOptions["events"] = {
|
||||
...cfg.nextOptions.events,
|
||||
signOut: configSignOut
|
||||
? async (params) => {
|
||||
signOut();
|
||||
return configSignOut(params);
|
||||
}
|
||||
: signOut,
|
||||
};
|
||||
|
||||
return {
|
||||
...cfg.nextOptions,
|
||||
providers,
|
||||
callbacks,
|
||||
events,
|
||||
};
|
||||
}
|
||||
|
||||
async function getUser(
|
||||
...args:
|
||||
| [NextApiRequest, NextApiResponse]
|
||||
| [GetServerSidePropsContext["req"], GetServerSidePropsContext["res"]]
|
||||
) {
|
||||
return unstable_getServerSession(
|
||||
args[0],
|
||||
args[1],
|
||||
nextOptions(args[0], args[1]),
|
||||
);
|
||||
}
|
||||
|
||||
function NextAuthHandler(...args: [] | [NextApiRequest, NextApiResponse]) {
|
||||
if (args.length === 0) {
|
||||
return (req: NextApiRequest, res: NextApiResponse) => {
|
||||
return NextAuth(req, res, nextOptions(req, res));
|
||||
};
|
||||
}
|
||||
|
||||
return NextAuth(args[0], args[1], nextOptions(args[0], args[1]));
|
||||
}
|
||||
|
||||
return {
|
||||
NextAuthHandler,
|
||||
getUser,
|
||||
};
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function authSession(params: {
|
||||
session: Session;
|
||||
token: JWT;
|
||||
}): Awaitable<Session> {
|
||||
if (params.token.sub && ethers.utils.isAddress(params.token.sub)) {
|
||||
params.session.user = {
|
||||
...params.session.user,
|
||||
address: params.token.sub,
|
||||
};
|
||||
}
|
||||
|
||||
return params.session;
|
||||
}
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
import NextAuth from "next-auth";
|
||||
|
||||
declare module "next-auth" {
|
||||
interface Session {
|
||||
user: {
|
||||
id: string;
|
||||
username: string;
|
||||
email: string;
|
||||
address?: string;
|
||||
[key: string]: string;
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
export type ThirdwebProviderConfig = {
|
||||
domain: string;
|
||||
authOptions?: {
|
||||
statement?: string;
|
||||
uri?: string;
|
||||
version?: string;
|
||||
chainId?: string;
|
||||
resources?: string[];
|
||||
validateNonce?:
|
||||
| ((nonce: string) => void)
|
||||
| ((nonce: string) => Promise<void>);
|
||||
};
|
||||
};
|
||||
@@ -1,8 +0,0 @@
|
||||
import { GenericAuthWallet } from "@thirdweb-dev/wallets";
|
||||
import { NextAuthOptions } from "next-auth";
|
||||
|
||||
export type ThirdwebNextAuthConfig = {
|
||||
domain: string;
|
||||
wallet: GenericAuthWallet;
|
||||
nextOptions: NextAuthOptions;
|
||||
};
|
||||
@@ -56,11 +56,11 @@ export default async function handler(
|
||||
token = await ctx.auth.generate(payload, generateOptions);
|
||||
} catch (err: any) {
|
||||
if (err.message) {
|
||||
return res.status(403).json({ error: err.message });
|
||||
return res.status(400).json({ error: err.message });
|
||||
} else if (typeof err === "string") {
|
||||
return res.status(403).json({ error: err });
|
||||
return res.status(400).json({ error: err });
|
||||
} else {
|
||||
return res.status(403).json({ error: "Invalid login payload" });
|
||||
return res.status(400).json({ error: "Invalid login payload" });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,5 +31,5 @@ export default async function handler(
|
||||
}),
|
||||
);
|
||||
|
||||
return res.status(200).json({ message: "Succesfully logged out" });
|
||||
return res.status(200).json({ message: "Successfully logged out" });
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import { ThirdwebAuth } from "../core";
|
||||
import { LoginPayload, VerifyOptions } from "../core/schema";
|
||||
import { KeypairWallet } from "./signer";
|
||||
import { Keypair } from "@solana/web3.js";
|
||||
|
||||
const wallet = new KeypairWallet(Keypair.generate());
|
||||
const authMap = new Map<string, ThirdwebAuth>();
|
||||
|
||||
export async function verifyLogin(
|
||||
domain: string,
|
||||
payload: LoginPayload,
|
||||
options?: Omit<VerifyOptions, "domain">,
|
||||
) {
|
||||
let auth: ThirdwebAuth;
|
||||
if (!authMap.has(domain)) {
|
||||
auth = new ThirdwebAuth(wallet, domain);
|
||||
authMap.set(domain, auth);
|
||||
} else {
|
||||
auth = authMap.get(domain) as ThirdwebAuth;
|
||||
}
|
||||
|
||||
try {
|
||||
const address = await auth.verify(payload, options);
|
||||
return { address, error: undefined };
|
||||
} catch (err: any) {
|
||||
return { address: undefined, error: err.message };
|
||||
}
|
||||
}
|
||||
@@ -1,69 +1,2 @@
|
||||
import * as ed25519 from "@noble/ed25519";
|
||||
import { Signer, Keypair, PublicKey } from "@solana/web3.js";
|
||||
import type { Ecosystem, GenericAuthWallet } from "@thirdweb-dev/wallets";
|
||||
import bs58 from "bs58";
|
||||
import nacl from "tweetnacl";
|
||||
|
||||
export interface SolanaSigner {
|
||||
publicKey: PublicKey;
|
||||
signMessage(message: Uint8Array): Promise<Uint8Array>;
|
||||
}
|
||||
|
||||
export class SignerWallet implements GenericAuthWallet {
|
||||
type: Ecosystem = "solana";
|
||||
private signer: SolanaSigner;
|
||||
|
||||
constructor(signer: SolanaSigner) {
|
||||
this.signer = signer;
|
||||
}
|
||||
|
||||
public async getAddress(): Promise<string> {
|
||||
return this.signer.publicKey.toBase58();
|
||||
}
|
||||
|
||||
public async signMessage(message: string): Promise<string> {
|
||||
const encodedMessage = new TextEncoder().encode(message);
|
||||
const signedMessage = await this.signer.signMessage(encodedMessage);
|
||||
const signature = bs58.encode(signedMessage);
|
||||
|
||||
return signature;
|
||||
}
|
||||
|
||||
public async verifySignature(
|
||||
message: string,
|
||||
signature: string,
|
||||
address: string,
|
||||
): Promise<boolean> {
|
||||
return nacl.sign.detached.verify(
|
||||
new TextEncoder().encode(message),
|
||||
bs58.decode(signature),
|
||||
bs58.decode(address),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class KeypairSigner implements SolanaSigner {
|
||||
private keypair: Signer;
|
||||
public publicKey: PublicKey;
|
||||
|
||||
constructor(keypair: Signer) {
|
||||
this.keypair = keypair;
|
||||
this.publicKey = keypair.publicKey;
|
||||
}
|
||||
|
||||
public async signMessage(message: Uint8Array): Promise<Uint8Array> {
|
||||
return ed25519.sync.sign(message, this.keypair.secretKey.slice(0, 32));
|
||||
}
|
||||
}
|
||||
|
||||
export class KeypairWallet extends SignerWallet {
|
||||
constructor(keypair: Keypair) {
|
||||
super(new KeypairSigner(keypair));
|
||||
}
|
||||
}
|
||||
|
||||
export class PrivateKeyWallet extends KeypairWallet {
|
||||
constructor(privateKey: string) {
|
||||
super(Keypair.fromSecretKey(bs58.decode(privateKey)));
|
||||
}
|
||||
}
|
||||
export * from "./signer";
|
||||
export * from "./auth";
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
import * as ed25519 from "@noble/ed25519";
|
||||
import { Signer, Keypair, PublicKey } from "@solana/web3.js";
|
||||
import type { Ecosystem, GenericAuthWallet } from "@thirdweb-dev/wallets";
|
||||
import bs58 from "bs58";
|
||||
import nacl from "tweetnacl";
|
||||
|
||||
export interface SolanaSigner {
|
||||
publicKey: PublicKey;
|
||||
signMessage(message: Uint8Array): Promise<Uint8Array>;
|
||||
}
|
||||
|
||||
export class SignerWallet implements GenericAuthWallet {
|
||||
type: Ecosystem = "solana";
|
||||
private signer: SolanaSigner;
|
||||
|
||||
constructor(signer: SolanaSigner) {
|
||||
this.signer = signer;
|
||||
}
|
||||
|
||||
public async getAddress(): Promise<string> {
|
||||
return this.signer.publicKey.toBase58();
|
||||
}
|
||||
|
||||
public async signMessage(message: string): Promise<string> {
|
||||
const encodedMessage = new TextEncoder().encode(message);
|
||||
const signedMessage = await this.signer.signMessage(encodedMessage);
|
||||
const signature = bs58.encode(signedMessage);
|
||||
|
||||
return signature;
|
||||
}
|
||||
|
||||
public async verifySignature(
|
||||
message: string,
|
||||
signature: string,
|
||||
address: string,
|
||||
): Promise<boolean> {
|
||||
return nacl.sign.detached.verify(
|
||||
new TextEncoder().encode(message),
|
||||
bs58.decode(signature),
|
||||
bs58.decode(address),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class KeypairSigner implements SolanaSigner {
|
||||
private keypair: Signer;
|
||||
public publicKey: PublicKey;
|
||||
|
||||
constructor(keypair: Signer) {
|
||||
this.keypair = keypair;
|
||||
this.publicKey = keypair.publicKey;
|
||||
}
|
||||
|
||||
public async signMessage(message: Uint8Array): Promise<Uint8Array> {
|
||||
return ed25519.sync.sign(message, this.keypair.secretKey.slice(0, 32));
|
||||
}
|
||||
}
|
||||
|
||||
export class KeypairWallet extends SignerWallet {
|
||||
constructor(keypair: Keypair) {
|
||||
super(new KeypairSigner(keypair));
|
||||
}
|
||||
}
|
||||
|
||||
export class PrivateKeyWallet extends KeypairWallet {
|
||||
constructor(privateKey: string) {
|
||||
super(Keypair.fromSecretKey(bs58.decode(privateKey)));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"presets": [
|
||||
"@babel/preset-typescript",
|
||||
["@babel/preset-env", { "targets": "defaults, not ie 11" }]
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
# @thirdweb-dev/chains
|
||||
|
||||
## 0.1.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#635](https://github.com/thirdweb-dev/js/pull/635) [`7832041c`](https://github.com/thirdweb-dev/js/commit/7832041c0fb25852489c73453c2b26e844d94582) Thanks [@jnsdls](https://github.com/jnsdls)! - Add additional chains
|
||||
|
||||
- [#643](https://github.com/thirdweb-dev/js/pull/643) [`85250cf7`](https://github.com/thirdweb-dev/js/commit/85250cf71190092b61023d56d1e786d395a008a6) Thanks [@jnsdls](https://github.com/jnsdls)! - expose `getChainBySlug` and `ChainSlug` and `ChainId` type
|
||||
|
||||
- [#638](https://github.com/thirdweb-dev/js/pull/638) [`e33bd2a8`](https://github.com/thirdweb-dev/js/commit/e33bd2a856bbc2e2f6b0c90b46be5166281875ae) Thanks [@jnsdls](https://github.com/jnsdls)! - Add `getChainByChainId()` to retrieve chain by chainId
|
||||
|
||||
- [#685](https://github.com/thirdweb-dev/js/pull/685) [`4355518a`](https://github.com/thirdweb-dev/js/commit/4355518afea68cd8026d3ab8a0144c15d66b9e24) Thanks [@jnsdls](https://github.com/jnsdls)! - update chains
|
||||
|
||||
## 0.1.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#617](https://github.com/thirdweb-dev/js/pull/617) [`d7deaa4`](https://github.com/thirdweb-dev/js/commit/d7deaa48f2f943deb8f2ad7459d17de930c00517) Thanks [@jnsdls](https://github.com/jnsdls)! - Add Base Goerli
|
||||
|
||||
- [#619](https://github.com/thirdweb-dev/js/pull/619) [`b7a5b45`](https://github.com/thirdweb-dev/js/commit/b7a5b454415596316f58a75f14472631242cc115) Thanks [@jnsdls](https://github.com/jnsdls)! - fix the slug for base-goerli
|
||||
|
||||
## 0.1.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#613](https://github.com/thirdweb-dev/js/pull/613) [`a3472a1`](https://github.com/thirdweb-dev/js/commit/a3472a133175826d052ee986907de014e3cf3ad9) Thanks [@jnsdls](https://github.com/jnsdls)! - Update Chains
|
||||
|
||||
- [#616](https://github.com/thirdweb-dev/js/pull/616) [`5712650`](https://github.com/thirdweb-dev/js/commit/5712650074e2415bbea4173a0bb68d727ff2db90) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - new chains
|
||||
|
||||
## 0.1.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#608](https://github.com/thirdweb-dev/js/pull/608) [`3d644fb`](https://github.com/thirdweb-dev/js/commit/3d644fb8cbae8bc3ee624505831b9f5c6996898a) Thanks [@jnsdls](https://github.com/jnsdls)! - update chains
|
||||
|
||||
## 0.1.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#601](https://github.com/thirdweb-dev/js/pull/601) [`66cf1fb`](https://github.com/thirdweb-dev/js/commit/66cf1fb5c2e8deb486543ee028d786bb8eef6c19) Thanks [@jnsdls](https://github.com/jnsdls)! - upgrade dependencies
|
||||
|
||||
## 0.1.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#599](https://github.com/thirdweb-dev/js/pull/599) [`f580b8a`](https://github.com/thirdweb-dev/js/commit/f580b8ac06534df24b0194cbc632b4a8fd447611) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - New chains added
|
||||
|
||||
## 0.1.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- [`af8cf40`](https://github.com/thirdweb-dev/js/commit/af8cf40e4e1dab6afcc7622f7f9bbcfc6e8534d8) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Initial release for `@thirdweb-dev/chains`.
|
||||
|
||||
Use this package to easily configure chains with `@thirdweb-dev/sdk` and `@thirdweb-dev/react`.
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [`6a50719`](https://github.com/thirdweb-dev/js/commit/6a507194861b0712fd753c49ac63a8af68eb21d5) Thanks [@jnsdls](https://github.com/jnsdls)! - add `getChainRPCs` export to get a list of RPCs instead of a single RPC via `getChainRPC`
|
||||
|
||||
- [`5d25ee1`](https://github.com/thirdweb-dev/js/commit/5d25ee1ab7abb4bfbded283a18f2d7740bb6995d) Thanks [@jnsdls](https://github.com/jnsdls)! - fix `getChainRPC()` utility function logic
|
||||
|
||||
- [`d0bcd2c`](https://github.com/thirdweb-dev/js/commit/d0bcd2c5871ca9480efc8d97e27e337eb9bbf830) Thanks [@jnsdls](https://github.com/jnsdls)! - add new chains + localhost special case
|
||||
|
||||
- [#589](https://github.com/thirdweb-dev/js/pull/589) [`017b0d5`](https://github.com/thirdweb-dev/js/commit/017b0d56b64651b290440b60789e058afba9f9a5) Thanks [@jnsdls](https://github.com/jnsdls)! - add `minimizeChain` and `configureChain` util functions
|
||||
|
||||
- [`500a0e6`](https://github.com/thirdweb-dev/js/commit/500a0e671b3feb01aedd2c34443b682d0934f389) Thanks [@jnsdls](https://github.com/jnsdls)! - add thirdweb rpc to all available chains
|
||||
@@ -0,0 +1,36 @@
|
||||
<p align="center">
|
||||
<br />
|
||||
<a href="https://thirdweb.com"><img src="https://github.com/thirdweb-dev/js/blob/main/packages/sdk/logo.svg?raw=true" width="200" alt=""/></a>
|
||||
<br />
|
||||
</p>
|
||||
<h1 align="center">thirdweb chains</h1>
|
||||
<p align="center">
|
||||
<a href="https://www.npmjs.com/package/@thirdweb-dev/chains"><img src="https://img.shields.io/npm/v/@thirdweb-dev/chains?color=red&label=npm&logo=npm" alt="npm version"/></a>
|
||||
<a href="https://github.com/thirdweb-dev/js/actions/workflows/build-test-lint.yml"><img alt="Build Status" src="https://github.com/thirdweb-dev/js/actions/workflows/build-test-lint.yml/badge.svg"/></a>
|
||||
<a href="https://discord.gg/thirdweb"><img alt="Join our Discord!" src="https://img.shields.io/discord/834227967404146718.svg?color=7289da&label=discord&logo=discord&style=flat"/></a>
|
||||
|
||||
</p>
|
||||
<!-- <p align="center"><strong>Best in class Web3 SDK for Browser, Node and Mobile apps</strong></p> -->
|
||||
<br />
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
yarn add @thirdweb-dev/chains
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
### Adding / Overriding Chain Data
|
||||
|
||||
Chain data is automatically pulled in from [ethereum-lists/chains](https://github.com/ethereum-lists/chains) on every build.
|
||||
|
||||
#### Overriding Chain Data
|
||||
|
||||
Chain data can be overridden by running `yarn override-chain` and following the prompts.
|
||||
|
||||
#### Adding A New Chain
|
||||
|
||||
In cases where a chain is not listed in the [ethereum-lists/chains](https://github.com/ethereum-lists/chains) repo, you can add it manually by running `yarn add-chain` and following the prompts.
|
||||
|
||||
> Prefer adding chains to the ethereum-lists/chains repo instead of manually adding them here.
|
||||
@@ -0,0 +1,57 @@
|
||||
export default {
|
||||
"name": "Ethereum Mainnet",
|
||||
"chain": "ETH",
|
||||
"icon": {
|
||||
"url": "ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/ethereum/512.png",
|
||||
"height": 512,
|
||||
"width": 512,
|
||||
"format": "png",
|
||||
"sizes": [
|
||||
512,
|
||||
256,
|
||||
128,
|
||||
64,
|
||||
32,
|
||||
16
|
||||
]
|
||||
},
|
||||
"rpc": [
|
||||
"https://ethereum.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}",
|
||||
"https://mainnet.infura.io/v3/${INFURA_API_KEY}",
|
||||
"wss://mainnet.infura.io/ws/v3/${INFURA_API_KEY}",
|
||||
"https://api.mycryptoapi.com/eth",
|
||||
"https://cloudflare-eth.com"
|
||||
],
|
||||
"features": [
|
||||
{
|
||||
"name": "EIP1559"
|
||||
},
|
||||
{
|
||||
"name": "EIP155"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Ether",
|
||||
"symbol": "ETH",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://ethereum.org",
|
||||
"shortName": "eth",
|
||||
"chainId": 1,
|
||||
"networkId": 1,
|
||||
"slip44": 60,
|
||||
"ens": {
|
||||
"registry": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "etherscan",
|
||||
"url": "https://etherscan.io",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "ethereum"
|
||||
} as const;
|
||||
@@ -0,0 +1,43 @@
|
||||
export default {
|
||||
"name": "Optimism",
|
||||
"chain": "ETH",
|
||||
"rpc": [
|
||||
"https://optimism.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://opt-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}",
|
||||
"https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}",
|
||||
"https://mainnet.optimism.io/"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Ether",
|
||||
"symbol": "ETH",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://optimism.io",
|
||||
"shortName": "oeth",
|
||||
"chainId": 10,
|
||||
"networkId": 10,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "etherscan",
|
||||
"url": "https://optimistic.etherscan.io",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/optimism/512.png",
|
||||
"height": 512,
|
||||
"width": 512,
|
||||
"format": "png",
|
||||
"sizes": [
|
||||
512,
|
||||
256,
|
||||
128,
|
||||
64,
|
||||
32,
|
||||
16
|
||||
]
|
||||
},
|
||||
"testnet": false,
|
||||
"slug": "optimism"
|
||||
} as const;
|
||||
@@ -0,0 +1,50 @@
|
||||
export default {
|
||||
"name": "Gnosis",
|
||||
"chain": "GNO",
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeidk4swpgdyqmpz6shd5onvpaujvwiwthrhypufnwr6xh3dausz2dm",
|
||||
"width": 1800,
|
||||
"height": 1800,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://gnosis.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.gnosischain.com",
|
||||
"https://rpc.ankr.com/gnosis",
|
||||
"https://gnosischain-rpc.gateway.pokt.network",
|
||||
"https://gnosis-mainnet.public.blastapi.io",
|
||||
"wss://rpc.gnosischain.com/wss"
|
||||
],
|
||||
"faucets": [
|
||||
"https://gnosisfaucet.com",
|
||||
"https://faucet.gimlu.com/gnosis",
|
||||
"https://stakely.io/faucet/gnosis-chain-xdai",
|
||||
"https://faucet.prussia.dev/xdai"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "xDAI",
|
||||
"symbol": "xDAI",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://docs.gnosischain.com",
|
||||
"shortName": "gno",
|
||||
"chainId": 100,
|
||||
"networkId": 100,
|
||||
"slip44": 700,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "gnosisscan",
|
||||
"url": "https://gnosisscan.io",
|
||||
"icon": "gnosisscan",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://blockscout.com/xdai/mainnet",
|
||||
"icon": "blockscout",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "gnosis"
|
||||
} as const;
|
||||
@@ -0,0 +1,31 @@
|
||||
export default {
|
||||
"name": "GTON Mainnet",
|
||||
"chain": "GTON",
|
||||
"rpc": [
|
||||
"https://gton.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.gton.network/"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "GCD",
|
||||
"symbol": "GCD",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://gton.capital",
|
||||
"shortName": "gton",
|
||||
"chainId": 1000,
|
||||
"networkId": 1000,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "GTON Network Explorer",
|
||||
"url": "https://explorer.gton.network",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"parent": {
|
||||
"type": "L2",
|
||||
"chain": "eip155-1"
|
||||
},
|
||||
"testnet": false,
|
||||
"slug": "gton"
|
||||
} as const;
|
||||
@@ -0,0 +1,23 @@
|
||||
export default {
|
||||
"name": "Smart Bitcoin Cash",
|
||||
"chain": "smartBCH",
|
||||
"rpc": [
|
||||
"https://smart-bitcoin-cash.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://smartbch.greyh.at",
|
||||
"https://rpc-mainnet.smartbch.org",
|
||||
"https://smartbch.fountainhead.cash/mainnet",
|
||||
"https://smartbch.devops.cash/mainnet"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Bitcoin Cash",
|
||||
"symbol": "BCH",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://smartbch.org/",
|
||||
"shortName": "smartbch",
|
||||
"chainId": 10000,
|
||||
"networkId": 10000,
|
||||
"testnet": false,
|
||||
"slug": "smart-bitcoin-cash"
|
||||
} as const;
|
||||
@@ -0,0 +1,20 @@
|
||||
export default {
|
||||
"name": "QuarkChain Mainnet Root",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-root.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"http://jrpc.mainnet.quarkchain.io:38391"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-r",
|
||||
"chainId": 100000,
|
||||
"networkId": 100000,
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-root"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Mainnet Shard 0",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-shard-0.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-s0-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.mainnet.quarkchain.io:39000"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-s0",
|
||||
"chainId": 100001,
|
||||
"networkId": 100001,
|
||||
"parent": {
|
||||
"chain": "eip155-100000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-mainnet",
|
||||
"url": "https://mainnet.quarkchain.io/0",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-shard-0"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Mainnet Shard 1",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-shard-1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-s1-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.mainnet.quarkchain.io:39001"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-s1",
|
||||
"chainId": 100002,
|
||||
"networkId": 100002,
|
||||
"parent": {
|
||||
"chain": "eip155-100000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-mainnet",
|
||||
"url": "https://mainnet.quarkchain.io/1",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-shard-1"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Mainnet Shard 2",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-shard-2.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-s2-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.mainnet.quarkchain.io:39002"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-s2",
|
||||
"chainId": 100003,
|
||||
"networkId": 100003,
|
||||
"parent": {
|
||||
"chain": "eip155-100000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-mainnet",
|
||||
"url": "https://mainnet.quarkchain.io/2",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-shard-2"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Mainnet Shard 3",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-shard-3.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-s3-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.mainnet.quarkchain.io:39003"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-s3",
|
||||
"chainId": 100004,
|
||||
"networkId": 100004,
|
||||
"parent": {
|
||||
"chain": "eip155-100000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-mainnet",
|
||||
"url": "https://mainnet.quarkchain.io/3",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-shard-3"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Mainnet Shard 4",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-shard-4.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-s4-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.mainnet.quarkchain.io:39004"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-s4",
|
||||
"chainId": 100005,
|
||||
"networkId": 100005,
|
||||
"parent": {
|
||||
"chain": "eip155-100000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-mainnet",
|
||||
"url": "https://mainnet.quarkchain.io/4",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-shard-4"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Mainnet Shard 5",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-shard-5.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-s5-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.mainnet.quarkchain.io:39005"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-s5",
|
||||
"chainId": 100006,
|
||||
"networkId": 100006,
|
||||
"parent": {
|
||||
"chain": "eip155-100000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-mainnet",
|
||||
"url": "https://mainnet.quarkchain.io/5",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-shard-5"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Mainnet Shard 6",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-shard-6.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-s6-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.mainnet.quarkchain.io:39006"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-s6",
|
||||
"chainId": 100007,
|
||||
"networkId": 100007,
|
||||
"parent": {
|
||||
"chain": "eip155-100000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-mainnet",
|
||||
"url": "https://mainnet.quarkchain.io/6",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-shard-6"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Mainnet Shard 7",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-shard-7.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-s7-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.mainnet.quarkchain.io:39007"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-s7",
|
||||
"chainId": 100008,
|
||||
"networkId": 100008,
|
||||
"parent": {
|
||||
"chain": "eip155-100000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-mainnet",
|
||||
"url": "https://mainnet.quarkchain.io/7",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-shard-7"
|
||||
} as const;
|
||||
@@ -0,0 +1,29 @@
|
||||
export default {
|
||||
"name": "VeChain",
|
||||
"chain": "VeChain",
|
||||
"rpc": [],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "VeChain",
|
||||
"symbol": "VET",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://vechain.org",
|
||||
"shortName": "vechain",
|
||||
"chainId": 100009,
|
||||
"networkId": 100009,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "VeChain Stats",
|
||||
"url": "https://vechainstats.com",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "VeChain Explorer",
|
||||
"url": "https://explore.vechain.org",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "vechain"
|
||||
} as const;
|
||||
@@ -0,0 +1,21 @@
|
||||
export default {
|
||||
"name": "Smart Bitcoin Cash Testnet",
|
||||
"chain": "smartBCHTest",
|
||||
"rpc": [
|
||||
"https://smart-bitcoin-cash-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc-testnet.smartbch.org",
|
||||
"https://smartbch.devops.cash/testnet"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Bitcoin Cash Test Token",
|
||||
"symbol": "BCHT",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "http://smartbch.org/",
|
||||
"shortName": "smartbchtest",
|
||||
"chainId": 10001,
|
||||
"networkId": 10001,
|
||||
"testnet": true,
|
||||
"slug": "smart-bitcoin-cash-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,26 @@
|
||||
export default {
|
||||
"name": "VeChain Testnet",
|
||||
"chain": "VeChain",
|
||||
"rpc": [],
|
||||
"faucets": [
|
||||
"https://faucet.vecha.in"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "VeChain",
|
||||
"symbol": "VET",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://vechain.org",
|
||||
"shortName": "vechain-testnet",
|
||||
"chainId": 100010,
|
||||
"networkId": 100010,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "VeChain Explorer",
|
||||
"url": "https://explore-testnet.vechain.org",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "vechain-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,22 @@
|
||||
export default {
|
||||
"name": "Klaytn Testnet Baobab",
|
||||
"chain": "KLAY",
|
||||
"rpc": [
|
||||
"https://klaytn-testnet-baobab.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://api.baobab.klaytn.net:8651"
|
||||
],
|
||||
"faucets": [
|
||||
"https://baobab.wallet.klaytn.com/access?next=faucet"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "KLAY",
|
||||
"symbol": "KLAY",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.klaytn.com/",
|
||||
"shortName": "Baobab",
|
||||
"chainId": 1001,
|
||||
"networkId": 1001,
|
||||
"testnet": true,
|
||||
"slug": "klaytn-testnet-baobab"
|
||||
} as const;
|
||||
@@ -0,0 +1,34 @@
|
||||
export default {
|
||||
"name": "Gon Chain",
|
||||
"chain": "GonChain",
|
||||
"icon": {
|
||||
"url": "ipfs://QmPtiJGaApbW3ATZhPW3pKJpw3iGVrRGsZLWhrDKF9ZK18",
|
||||
"width": 1024,
|
||||
"height": 1024,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://gon-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://node1.testnet.gaiaopen.network",
|
||||
"http://database1.gaiaopen.network"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Gon Token",
|
||||
"symbol": "GT",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "",
|
||||
"shortName": "gon",
|
||||
"chainId": 10024,
|
||||
"networkId": 10024,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Gon Explorer",
|
||||
"url": "https://gonscan.com",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "gon-chain"
|
||||
} as const;
|
||||
@@ -0,0 +1,35 @@
|
||||
export default {
|
||||
"name": "T-EKTA",
|
||||
"title": "EKTA Testnet T-EKTA",
|
||||
"chain": "T-EKTA",
|
||||
"rpc": [
|
||||
"https://t-ekta.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://test.ekta.io:8545"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "T-EKTA",
|
||||
"symbol": "T-EKTA",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.ekta.io",
|
||||
"shortName": "t-ekta",
|
||||
"chainId": 1004,
|
||||
"networkId": 1004,
|
||||
"icon": {
|
||||
"url": "ipfs://QmfMd564KUPK8eKZDwGCT71ZC2jMnUZqP6LCtLpup3rHH1",
|
||||
"width": 2100,
|
||||
"height": 2100,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "test-ektascan",
|
||||
"url": "https://test.ektascan.io",
|
||||
"icon": "ekta",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "t-ekta"
|
||||
} as const;
|
||||
@@ -0,0 +1,31 @@
|
||||
export default {
|
||||
"name": "Plian Testnet Subchain 1",
|
||||
"chain": "Plian",
|
||||
"rpc": [
|
||||
"https://plian-testnet-subchain-1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet.plian.io/child_test"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Plian Token",
|
||||
"symbol": "TPI",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://plian.org/",
|
||||
"shortName": "plian-testnet-l2",
|
||||
"chainId": 10067275,
|
||||
"networkId": 10067275,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "piscan",
|
||||
"url": "https://testnet.plian.org/child_test",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"parent": {
|
||||
"chain": "eip155-16658437",
|
||||
"type": "L2"
|
||||
},
|
||||
"testnet": true,
|
||||
"slug": "plian-testnet-subchain-1"
|
||||
} as const;
|
||||
@@ -0,0 +1,20 @@
|
||||
export default {
|
||||
"name": "Newton Testnet",
|
||||
"chain": "NEW",
|
||||
"rpc": [
|
||||
"https://newton-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc1.newchain.newtonproject.org"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Newton",
|
||||
"symbol": "NEW",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.newtonproject.org/",
|
||||
"shortName": "tnew",
|
||||
"chainId": 1007,
|
||||
"networkId": 1007,
|
||||
"testnet": true,
|
||||
"slug": "newton-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,34 @@
|
||||
export default {
|
||||
"name": "Eurus Mainnet",
|
||||
"chain": "EUN",
|
||||
"rpc": [
|
||||
"https://eurus.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet.eurus.network/"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Eurus",
|
||||
"symbol": "EUN",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://eurus.network",
|
||||
"shortName": "eun",
|
||||
"chainId": 1008,
|
||||
"networkId": 1008,
|
||||
"icon": {
|
||||
"url": "ipfs://QmaGd5L9jGPbfyGXBFhu9gjinWJ66YtNrXq8x6Q98Eep9e",
|
||||
"width": 471,
|
||||
"height": 471,
|
||||
"format": "svg"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "eurusexplorer",
|
||||
"url": "https://explorer.eurus.network",
|
||||
"icon": "eurus",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "eurus"
|
||||
} as const;
|
||||
@@ -0,0 +1,20 @@
|
||||
export default {
|
||||
"name": "SJATSH",
|
||||
"chain": "ETH",
|
||||
"rpc": [
|
||||
"https://sjatsh.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"http://geth.free.idcfengye.com"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Ether",
|
||||
"symbol": "ETH",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://sjis.me",
|
||||
"shortName": "SJ",
|
||||
"chainId": 10086,
|
||||
"networkId": 10086,
|
||||
"testnet": false,
|
||||
"slug": "sjatsh"
|
||||
} as const;
|
||||
@@ -0,0 +1,21 @@
|
||||
export default {
|
||||
"name": "EtherInc",
|
||||
"chain": "ETI",
|
||||
"rpc": [
|
||||
"https://etherinc.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://api.einc.io/jsonrpc/mainnet"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "EtherInc Ether",
|
||||
"symbol": "ETI",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://einc.io",
|
||||
"shortName": "eti",
|
||||
"chainId": 101,
|
||||
"networkId": 1,
|
||||
"slip44": 464,
|
||||
"testnet": false,
|
||||
"slug": "etherinc"
|
||||
} as const;
|
||||
@@ -0,0 +1,21 @@
|
||||
export default {
|
||||
"name": "Evrice Network",
|
||||
"chain": "EVC",
|
||||
"rpc": [
|
||||
"https://evrice-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://meta.evrice.com"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Evrice",
|
||||
"symbol": "EVC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://evrice.com",
|
||||
"shortName": "EVC",
|
||||
"chainId": 1010,
|
||||
"networkId": 1010,
|
||||
"slip44": 1020,
|
||||
"testnet": false,
|
||||
"slug": "evrice-network"
|
||||
} as const;
|
||||
@@ -0,0 +1,22 @@
|
||||
export default {
|
||||
"name": "Blockchain Genesis Mainnet",
|
||||
"chain": "GEN",
|
||||
"rpc": [
|
||||
"https://blockchain-genesis.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://eu.mainnet.xixoio.com",
|
||||
"https://us.mainnet.xixoio.com",
|
||||
"https://asia.mainnet.xixoio.com"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "GEN",
|
||||
"symbol": "GEN",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.xixoio.com/",
|
||||
"shortName": "GEN",
|
||||
"chainId": 10101,
|
||||
"networkId": 10101,
|
||||
"testnet": false,
|
||||
"slug": "blockchain-genesis"
|
||||
} as const;
|
||||
@@ -0,0 +1,35 @@
|
||||
export default {
|
||||
"name": "Soverun Testnet",
|
||||
"chain": "SVRN",
|
||||
"icon": {
|
||||
"url": "ipfs://QmTYazUzgY9Nn2mCjWwFUSLy3dG6i2PvALpwCNQvx1zXyi",
|
||||
"width": 1154,
|
||||
"height": 1154,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://soverun-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet-rpc.soverun.com"
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.soverun.com"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "Soverun",
|
||||
"symbol": "SVRN",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://soverun.com",
|
||||
"shortName": "SVRNt",
|
||||
"chainId": 101010,
|
||||
"networkId": 101010,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Soverun",
|
||||
"url": "https://testnet.soverun.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "soverun-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,35 @@
|
||||
export default {
|
||||
"name": "Soverun Mainnet",
|
||||
"chain": "SVRN",
|
||||
"icon": {
|
||||
"url": "ipfs://QmTYazUzgY9Nn2mCjWwFUSLy3dG6i2PvALpwCNQvx1zXyi",
|
||||
"width": 1154,
|
||||
"height": 1154,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://soverun.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-rpc.soverun.com"
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.soverun.com"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "Soverun",
|
||||
"symbol": "SVRN",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://soverun.com",
|
||||
"shortName": "SVRNm",
|
||||
"chainId": 10101010,
|
||||
"networkId": 10101010,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Soverun",
|
||||
"url": "https://explorer.soverun.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "soverun"
|
||||
} as const;
|
||||
@@ -0,0 +1,20 @@
|
||||
export default {
|
||||
"name": "Newton",
|
||||
"chain": "NEW",
|
||||
"rpc": [
|
||||
"https://newton.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://global.rpc.mainnet.newtonproject.org"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Newton",
|
||||
"symbol": "NEW",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.newtonproject.org/",
|
||||
"shortName": "new",
|
||||
"chainId": 1012,
|
||||
"networkId": 1012,
|
||||
"testnet": false,
|
||||
"slug": "newton"
|
||||
} as const;
|
||||
@@ -0,0 +1,28 @@
|
||||
export default {
|
||||
"name": "Web3Games Testnet",
|
||||
"chain": "Web3Games",
|
||||
"icon": {
|
||||
"url": "ipfs://QmUc57w3UTHiWapNW9oQb1dP57ymtdemTTbpvGkjVHBRCo",
|
||||
"width": 192,
|
||||
"height": 192,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://web3games-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet-rpc-0.web3games.org/evm",
|
||||
"https://testnet-rpc-1.web3games.org/evm",
|
||||
"https://testnet-rpc-2.web3games.org/evm"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Web3Games",
|
||||
"symbol": "W3G",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://web3games.org/",
|
||||
"shortName": "tw3g",
|
||||
"chainId": 102,
|
||||
"networkId": 102,
|
||||
"testnet": true,
|
||||
"slug": "web3games-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,37 @@
|
||||
export default {
|
||||
"name": "Chiado Testnet",
|
||||
"chain": "CHI",
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeidk4swpgdyqmpz6shd5onvpaujvwiwthrhypufnwr6xh3dausz2dm",
|
||||
"width": 1800,
|
||||
"height": 1800,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://chiado-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.chiadochain.net",
|
||||
"https://rpc.eu-central-2.gateway.fm/v3/gnosis/archival/chiado"
|
||||
],
|
||||
"faucets": [
|
||||
"https://gnosisfaucet.com"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "Chiado xDAI",
|
||||
"symbol": "xDAI",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://docs.gnosischain.com",
|
||||
"shortName": "chi",
|
||||
"chainId": 10200,
|
||||
"networkId": 10200,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://blockscout.chiadochain.net",
|
||||
"icon": "blockscout",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "chiado-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,17 @@
|
||||
export default {
|
||||
"name": "Sakura",
|
||||
"chain": "Sakura",
|
||||
"rpc": [],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Sakura",
|
||||
"symbol": "SKU",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://clover.finance/sakura",
|
||||
"shortName": "sku",
|
||||
"chainId": 1022,
|
||||
"networkId": 1022,
|
||||
"testnet": false,
|
||||
"slug": "sakura"
|
||||
} as const;
|
||||
@@ -0,0 +1,17 @@
|
||||
export default {
|
||||
"name": "Clover Testnet",
|
||||
"chain": "Clover",
|
||||
"rpc": [],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Clover",
|
||||
"symbol": "CLV",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://clover.finance",
|
||||
"shortName": "tclv",
|
||||
"chainId": 1023,
|
||||
"networkId": 1023,
|
||||
"testnet": true,
|
||||
"slug": "clover-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,20 @@
|
||||
export default {
|
||||
"name": "CLV Parachain",
|
||||
"chain": "CLV",
|
||||
"rpc": [
|
||||
"https://clv-parachain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://api-para.clover.finance"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "CLV",
|
||||
"symbol": "CLV",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://clv.org",
|
||||
"shortName": "clv",
|
||||
"chainId": 1024,
|
||||
"networkId": 1024,
|
||||
"testnet": false,
|
||||
"slug": "clv-parachain"
|
||||
} as const;
|
||||
@@ -0,0 +1,27 @@
|
||||
export default {
|
||||
"name": "0XTade",
|
||||
"chain": "0XTade Chain",
|
||||
"rpc": [
|
||||
"https://0xtade.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://node.0xtchain.com"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "0XT",
|
||||
"symbol": "0XT",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.0xtrade.finance/",
|
||||
"shortName": "0xt",
|
||||
"chainId": 10248,
|
||||
"networkId": 10248,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "0xtrade Scan",
|
||||
"url": "https://www.0xtscan.com",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "0xtade"
|
||||
} as const;
|
||||
@@ -0,0 +1,27 @@
|
||||
export default {
|
||||
"name": "BitTorrent Chain Testnet",
|
||||
"chain": "BTTC",
|
||||
"rpc": [
|
||||
"https://bittorrent-chain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testrpc.bittorrentchain.io/"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "BitTorrent",
|
||||
"symbol": "BTT",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://bittorrentchain.io/",
|
||||
"shortName": "tbtt",
|
||||
"chainId": 1028,
|
||||
"networkId": 1028,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "testbttcscan",
|
||||
"url": "https://testscan.bittorrentchain.io",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "bittorrent-chain-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,33 @@
|
||||
export default {
|
||||
"name": "Conflux eSpace",
|
||||
"chain": "Conflux",
|
||||
"rpc": [
|
||||
"https://conflux-espace.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://evm.confluxrpc.com"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "CFX",
|
||||
"symbol": "CFX",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://confluxnetwork.org",
|
||||
"shortName": "cfx",
|
||||
"chainId": 1030,
|
||||
"networkId": 1030,
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreifj7n24u2dslfijfihwqvpdeigt5aj3k3sxv6s35lv75sxsfr3ojy",
|
||||
"width": 460,
|
||||
"height": 576,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Conflux Scan",
|
||||
"url": "https://evm.confluxscan.net",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "conflux-espace"
|
||||
} as const;
|
||||
@@ -0,0 +1,35 @@
|
||||
export default {
|
||||
"name": "Crystaleum",
|
||||
"chain": "crystal",
|
||||
"rpc": [
|
||||
"https://crystaleum.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://evm.cryptocurrencydevs.org",
|
||||
"https://rpc.crystaleum.org"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "CRFI",
|
||||
"symbol": "◈",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://crystaleum.org",
|
||||
"shortName": "CRFI",
|
||||
"chainId": 103090,
|
||||
"networkId": 1,
|
||||
"icon": {
|
||||
"url": "ipfs://Qmbry1Uc6HnXmqFNXW5dFJ7To8EezCCjNr4TqqvAyzXS4h",
|
||||
"width": 150,
|
||||
"height": 150,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://scan.crystaleum.org",
|
||||
"icon": "crystal",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "crystaleum"
|
||||
} as const;
|
||||
@@ -0,0 +1,27 @@
|
||||
export default {
|
||||
"name": "Proxy Network Testnet",
|
||||
"chain": "Proxy Network",
|
||||
"rpc": [
|
||||
"https://proxy-network-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"http://128.199.94.183:8041"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "PRX",
|
||||
"symbol": "PRX",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://theproxy.network",
|
||||
"shortName": "prx",
|
||||
"chainId": 1031,
|
||||
"networkId": 1031,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "proxy network testnet",
|
||||
"url": "http://testnet-explorer.theproxy.network",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "proxy-network-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,36 @@
|
||||
export default {
|
||||
"name": "Bronos Testnet",
|
||||
"chain": "Bronos",
|
||||
"rpc": [
|
||||
"https://bronos-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://evm-testnet.bronos.org"
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.bronos.org"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "tBRO",
|
||||
"symbol": "tBRO",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://bronos.org",
|
||||
"shortName": "bronos-testnet",
|
||||
"chainId": 1038,
|
||||
"networkId": 1038,
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeifkgtmhnq4sxu6jn22i7ass7aih6ubodr77k6ygtu4tjbvpmkw2ga",
|
||||
"width": 500,
|
||||
"height": 500,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Bronos Testnet Explorer",
|
||||
"url": "https://tbroscan.bronos.org",
|
||||
"standard": "none",
|
||||
"icon": "bronos"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "bronos-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,31 @@
|
||||
export default {
|
||||
"name": "Bronos Mainnet",
|
||||
"chain": "Bronos",
|
||||
"rpc": [],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "BRO",
|
||||
"symbol": "BRO",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://bronos.org",
|
||||
"shortName": "bronos-mainnet",
|
||||
"chainId": 1039,
|
||||
"networkId": 1039,
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeifkgtmhnq4sxu6jn22i7ass7aih6ubodr77k6ygtu4tjbvpmkw2ga",
|
||||
"width": 500,
|
||||
"height": 500,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Bronos Explorer",
|
||||
"url": "https://broscan.bronos.org",
|
||||
"standard": "none",
|
||||
"icon": "bronos"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "bronos"
|
||||
} as const;
|
||||
@@ -0,0 +1,34 @@
|
||||
export default {
|
||||
"name": "Kaiba Lightning Chain Testnet",
|
||||
"chain": "tKLC",
|
||||
"rpc": [
|
||||
"https://kaiba-lightning-chain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://klc.live/"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Kaiba Testnet Token",
|
||||
"symbol": "tKAIBA",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://kaibadefi.com",
|
||||
"shortName": "tklc",
|
||||
"chainId": 104,
|
||||
"networkId": 104,
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeihbsw3ky7yf6llpww6fabo4dicotcgwjpefscoxrppstjx25dvtea",
|
||||
"width": 932,
|
||||
"height": 932,
|
||||
"format": "png"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "kaibascan",
|
||||
"url": "https://kaibascan.io",
|
||||
"icon": "kaibascan",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "kaiba-lightning-chain-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,33 @@
|
||||
export default {
|
||||
"name": "Web3Games Devnet",
|
||||
"chain": "Web3Games",
|
||||
"icon": {
|
||||
"url": "ipfs://QmUc57w3UTHiWapNW9oQb1dP57ymtdemTTbpvGkjVHBRCo",
|
||||
"width": 192,
|
||||
"height": 192,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://web3games-devnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://devnet.web3games.org/evm"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Web3Games",
|
||||
"symbol": "W3G",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://web3games.org/",
|
||||
"shortName": "dw3g",
|
||||
"chainId": 105,
|
||||
"networkId": 105,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Web3Games Explorer",
|
||||
"url": "https://explorer-devnet.web3games.org",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "web3games-devnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,33 @@
|
||||
export default {
|
||||
"name": "Numbers Mainnet",
|
||||
"chain": "NUM",
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreie3ba6ofosjqqiya6empkyw6u5xdrtcfzi2evvyt4u6utzeiezyhi",
|
||||
"width": 1500,
|
||||
"height": 1500,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://numbers.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnetrpc.num.network"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "NUM Token",
|
||||
"symbol": "NUM",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://numbersprotocol.io",
|
||||
"shortName": "Jade",
|
||||
"chainId": 10507,
|
||||
"networkId": 10507,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "ethernal",
|
||||
"url": "https://mainnet.num.network",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "numbers"
|
||||
} as const;
|
||||
@@ -0,0 +1,36 @@
|
||||
export default {
|
||||
"name": "Numbers Testnet",
|
||||
"chain": "NUM",
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreie3ba6ofosjqqiya6empkyw6u5xdrtcfzi2evvyt4u6utzeiezyhi",
|
||||
"width": 1500,
|
||||
"height": 1500,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://numbers-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnetrpc.num.network"
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.avax.network/?subnet=num",
|
||||
"https://faucet.num.network"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "NUM Token",
|
||||
"symbol": "NUM",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://numbersprotocol.io",
|
||||
"shortName": "Snow",
|
||||
"chainId": 10508,
|
||||
"networkId": 10508,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "ethernal",
|
||||
"url": "https://testnet.num.network",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "numbers-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,34 @@
|
||||
export default {
|
||||
"name": "Velas EVM Mainnet",
|
||||
"chain": "Velas",
|
||||
"icon": {
|
||||
"url": "ipfs://QmNXiCXJxEeBd7ZYGYjPSMTSdbDd2nfodLC677gUfk9ku5",
|
||||
"width": 924,
|
||||
"height": 800,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://velas-evm.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://evmexplorer.velas.com/rpc",
|
||||
"https://explorer.velas.com/rpc"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Velas",
|
||||
"symbol": "VLX",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://velas.com",
|
||||
"shortName": "vlx",
|
||||
"chainId": 106,
|
||||
"networkId": 106,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Velas Explorer",
|
||||
"url": "https://evmexplorer.velas.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "velas-evm"
|
||||
} as const;
|
||||
@@ -0,0 +1,35 @@
|
||||
export default {
|
||||
"name": "Nebula Testnet",
|
||||
"chain": "NTN",
|
||||
"icon": {
|
||||
"url": "ipfs://QmeFaJtQqTKKuXQR7ysS53bLFPasFBcZw445cvYJ2HGeTo",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://nebula-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet.rpc.novanetwork.io:9070"
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.novanetwork.io"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "Nebula X",
|
||||
"symbol": "NBX",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://novanetwork.io",
|
||||
"shortName": "ntn",
|
||||
"chainId": 107,
|
||||
"networkId": 107,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "nebulatestnet",
|
||||
"url": "https://explorer.novanetwork.io",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "nebula-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "ThunderCore Mainnet",
|
||||
"chain": "TT",
|
||||
"rpc": [
|
||||
"https://thundercore.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-rpc.thundercore.com",
|
||||
"https://mainnet-rpc.thundertoken.net",
|
||||
"https://mainnet-rpc.thundercore.io"
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.thundercore.com"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "ThunderCore Token",
|
||||
"symbol": "TT",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://thundercore.com",
|
||||
"shortName": "TT",
|
||||
"chainId": 108,
|
||||
"networkId": 108,
|
||||
"slip44": 1001,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "thundercore-viewblock",
|
||||
"url": "https://viewblock.io/thundercore",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "thundercore"
|
||||
} as const;
|
||||
@@ -0,0 +1,34 @@
|
||||
export default {
|
||||
"name": "CryptoCoinPay",
|
||||
"chain": "CCP",
|
||||
"rpc": [
|
||||
"https://cryptocoinpay.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"http://node106.cryptocoinpay.info:8545",
|
||||
"ws://node106.cryptocoinpay.info:8546"
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmPw1ixYYeXvTiRWoCt2jWe4YMd3B5o7TzL18SBEHXvhXX",
|
||||
"width": 200,
|
||||
"height": 200,
|
||||
"format": "png"
|
||||
},
|
||||
"nativeCurrency": {
|
||||
"name": "CryptoCoinPay",
|
||||
"symbol": "CCP",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.cryptocoinpay.co",
|
||||
"shortName": "CCP",
|
||||
"chainId": 10823,
|
||||
"networkId": 10823,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "CCP Explorer",
|
||||
"url": "https://cryptocoinpay.info",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "cryptocoinpay"
|
||||
} as const;
|
||||
@@ -0,0 +1,36 @@
|
||||
export default {
|
||||
"name": "Metis Andromeda Mainnet",
|
||||
"chain": "ETH",
|
||||
"rpc": [
|
||||
"https://metis-andromeda.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://andromeda.metis.io/?owner=1088"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Metis",
|
||||
"symbol": "METIS",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.metis.io",
|
||||
"shortName": "metis-andromeda",
|
||||
"chainId": 1088,
|
||||
"networkId": 1088,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://andromeda-explorer.metis.io",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"parent": {
|
||||
"type": "L2",
|
||||
"chain": "eip155-1",
|
||||
"bridges": [
|
||||
{
|
||||
"url": "https://bridge.metis.io"
|
||||
}
|
||||
]
|
||||
},
|
||||
"testnet": false,
|
||||
"slug": "metis-andromeda"
|
||||
} as const;
|
||||
@@ -0,0 +1,30 @@
|
||||
export default {
|
||||
"name": "BROChain Mainnet",
|
||||
"chain": "BRO",
|
||||
"rpc": [
|
||||
"https://brochain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.brochain.org",
|
||||
"http://rpc.brochain.org",
|
||||
"https://rpc.brochain.org/mainnet",
|
||||
"http://rpc.brochain.org/mainnet"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Brother",
|
||||
"symbol": "BRO",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://brochain.org",
|
||||
"shortName": "bro",
|
||||
"chainId": 108801,
|
||||
"networkId": 108801,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "BROChain Explorer",
|
||||
"url": "https://explorer.brochain.org",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "brochain"
|
||||
} as const;
|
||||
@@ -0,0 +1,36 @@
|
||||
export default {
|
||||
"name": "Quadrans Blockchain",
|
||||
"chain": "QDC",
|
||||
"icon": {
|
||||
"url": "ipfs://QmZFiYHnE4TrezPz8wSap9nMxG6m98w4fv7ataj2TfLNck",
|
||||
"width": 1024,
|
||||
"height": 1024,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://quadrans-blockchain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.quadrans.io",
|
||||
"https://rpcna.quadrans.io",
|
||||
"https://rpceu.quadrans.io"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Quadrans Coin",
|
||||
"symbol": "QDC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://quadrans.io",
|
||||
"shortName": "quadrans",
|
||||
"chainId": 10946,
|
||||
"networkId": 10946,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "explorer",
|
||||
"url": "https://explorer.quadrans.io",
|
||||
"icon": "quadrans",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quadrans-blockchain"
|
||||
} as const;
|
||||
@@ -0,0 +1,37 @@
|
||||
export default {
|
||||
"name": "Quadrans Blockchain Testnet",
|
||||
"chain": "tQDC",
|
||||
"icon": {
|
||||
"url": "ipfs://QmZFiYHnE4TrezPz8wSap9nMxG6m98w4fv7ataj2TfLNck",
|
||||
"width": 1024,
|
||||
"height": 1024,
|
||||
"format": "png"
|
||||
},
|
||||
"rpc": [
|
||||
"https://quadrans-blockchain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpctest.quadrans.io",
|
||||
"https://rpctest2.quadrans.io"
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucetpage.quadrans.io"
|
||||
],
|
||||
"nativeCurrency": {
|
||||
"name": "Quadrans Testnet Coin",
|
||||
"symbol": "tQDC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://quadrans.io",
|
||||
"shortName": "quadranstestnet",
|
||||
"chainId": 10947,
|
||||
"networkId": 10947,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "explorer",
|
||||
"url": "https://explorer.testnet.quadrans.io",
|
||||
"icon": "quadrans",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": true,
|
||||
"slug": "quadrans-blockchain-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,25 @@
|
||||
export default {
|
||||
"name": "MOAC mainnet",
|
||||
"chain": "MOAC",
|
||||
"rpc": [],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "MOAC",
|
||||
"symbol": "mc",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://moac.io",
|
||||
"shortName": "moac",
|
||||
"chainId": 1099,
|
||||
"networkId": 1099,
|
||||
"slip44": 314,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "moac explorer",
|
||||
"url": "https://explorer.moac.io",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "moac"
|
||||
} as const;
|
||||
@@ -0,0 +1,21 @@
|
||||
export default {
|
||||
"name": "Metadium Mainnet",
|
||||
"chain": "META",
|
||||
"rpc": [
|
||||
"https://metadium.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://api.metadium.com/prod"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Metadium Mainnet Ether",
|
||||
"symbol": "META",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://metadium.com",
|
||||
"shortName": "meta",
|
||||
"chainId": 11,
|
||||
"networkId": 11,
|
||||
"slip44": 916,
|
||||
"testnet": false,
|
||||
"slug": "metadium"
|
||||
} as const;
|
||||
@@ -0,0 +1,20 @@
|
||||
export default {
|
||||
"name": "Proton Testnet",
|
||||
"chain": "XPR",
|
||||
"rpc": [
|
||||
"https://proton-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://protontestnet.greymass.com/"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "Proton",
|
||||
"symbol": "XPR",
|
||||
"decimals": 4
|
||||
},
|
||||
"infoURL": "https://protonchain.com",
|
||||
"shortName": "xpr",
|
||||
"chainId": 110,
|
||||
"networkId": 110,
|
||||
"testnet": true,
|
||||
"slug": "proton-testnet"
|
||||
} as const;
|
||||
@@ -0,0 +1,20 @@
|
||||
export default {
|
||||
"name": "QuarkChain Devnet Root",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-devnet-root.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"http://jrpc.devnet.quarkchain.io:38391"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-d-r",
|
||||
"chainId": 110000,
|
||||
"networkId": 110000,
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-devnet-root"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Devnet Shard 0",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-devnet-shard-0.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://devnet-s0-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.devnet.quarkchain.io:39900"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-d-s0",
|
||||
"chainId": 110001,
|
||||
"networkId": 110001,
|
||||
"parent": {
|
||||
"chain": "eip155-110000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-devnet",
|
||||
"url": "https://devnet.quarkchain.io/0",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-devnet-shard-0"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Devnet Shard 1",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-devnet-shard-1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://devnet-s1-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.devnet.quarkchain.io:39901"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-d-s1",
|
||||
"chainId": 110002,
|
||||
"networkId": 110002,
|
||||
"parent": {
|
||||
"chain": "eip155-110000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-devnet",
|
||||
"url": "https://devnet.quarkchain.io/1",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-devnet-shard-1"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Devnet Shard 2",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-devnet-shard-2.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://devnet-s2-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.devnet.quarkchain.io:39902"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-d-s2",
|
||||
"chainId": 110003,
|
||||
"networkId": 110003,
|
||||
"parent": {
|
||||
"chain": "eip155-110000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-devnet",
|
||||
"url": "https://devnet.quarkchain.io/2",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-devnet-shard-2"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Devnet Shard 3",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-devnet-shard-3.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://devnet-s3-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.devnet.quarkchain.io:39903"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-d-s3",
|
||||
"chainId": 110004,
|
||||
"networkId": 110004,
|
||||
"parent": {
|
||||
"chain": "eip155-110000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-devnet",
|
||||
"url": "https://devnet.quarkchain.io/3",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-devnet-shard-3"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Devnet Shard 4",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-devnet-shard-4.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://devnet-s4-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.devnet.quarkchain.io:39904"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-d-s4",
|
||||
"chainId": 110005,
|
||||
"networkId": 110005,
|
||||
"parent": {
|
||||
"chain": "eip155-110000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-devnet",
|
||||
"url": "https://devnet.quarkchain.io/4",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-devnet-shard-4"
|
||||
} as const;
|
||||
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
"name": "QuarkChain Devnet Shard 5",
|
||||
"chain": "QuarkChain",
|
||||
"rpc": [
|
||||
"https://quarkchain-devnet-shard-5.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://devnet-s5-ethapi.quarkchain.io",
|
||||
"http://eth-jrpc.devnet.quarkchain.io:39905"
|
||||
],
|
||||
"faucets": [],
|
||||
"nativeCurrency": {
|
||||
"name": "QKC",
|
||||
"symbol": "QKC",
|
||||
"decimals": 18
|
||||
},
|
||||
"infoURL": "https://www.quarkchain.io",
|
||||
"shortName": "qkc-d-s5",
|
||||
"chainId": 110006,
|
||||
"networkId": 110006,
|
||||
"parent": {
|
||||
"chain": "eip155-110000",
|
||||
"type": "shard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "quarkchain-devnet",
|
||||
"url": "https://devnet.quarkchain.io/5",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"testnet": false,
|
||||
"slug": "quarkchain-devnet-shard-5"
|
||||
} as const;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user