Compare commits
54
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c52e3beac1 | ||
|
|
f0250a77cd | ||
|
|
d4be6479db | ||
|
|
c67b287764 | ||
|
|
7ac4e6ba4e | ||
|
|
c494db87cb | ||
|
|
1932d601c1 | ||
|
|
846a3503fe | ||
|
|
3e7f9cb946 | ||
|
|
83526c519a | ||
|
|
2e01627c99 | ||
|
|
7b52c6bba0 | ||
|
|
e024d78ed0 | ||
|
|
a2002d1637 | ||
|
|
607ab7e860 | ||
|
|
f27989741a | ||
|
|
b2be63ada4 | ||
|
|
eee200f8d4 | ||
|
|
817ab2249f | ||
|
|
173777ade4 | ||
|
|
838233075a | ||
|
|
cabfc29119 | ||
|
|
f02570db88 | ||
|
|
c6b025e844 | ||
|
|
332a14552b | ||
|
|
c894270401 | ||
|
|
595815dc3e | ||
|
|
b959cafccc | ||
|
|
4cf0aede0e | ||
|
|
6cf298a29a | ||
|
|
62b2508a6c | ||
|
|
c3967b798e | ||
|
|
588897d1b0 | ||
|
|
862905e161 | ||
|
|
5f81e246f2 | ||
|
|
1b052d63e9 | ||
|
|
a3f6878649 | ||
|
|
74a92dcb7d | ||
|
|
38fc0b796a | ||
|
|
ef76a96c2d | ||
|
|
2667706d8d | ||
|
|
047fbe2918 | ||
|
|
af01c63b45 | ||
|
|
3796204372 | ||
|
|
9c7fbc1603 | ||
|
|
156950423b | ||
|
|
f80f6307a3 | ||
|
|
5f243bba0d | ||
|
|
7d8697ec3f | ||
|
|
ab44b8f0ae | ||
|
|
ad135b67b9 | ||
|
|
5a648f7e74 | ||
|
|
e87292ab60 | ||
|
|
d5d7d542ce |
@@ -5,7 +5,7 @@
|
||||
<br />
|
||||
</p>
|
||||
|
||||
<h1 align="center"><a href='https://thirdweb.com/'>thirdweb</a> JavaScript/TypeScript monorepo</h1>
|
||||
<h1 align="center"><a href='https://thirdweb.com/'>thirdweb</a> TypeScript SDK</h1>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/thirdweb-dev/js/actions/workflows/build-test-lint.yml">
|
||||
@@ -16,38 +16,72 @@
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p align="center"><strong>Best in class web3 SDKs for Browser, Node and Mobile apps</strong></p>
|
||||
<p align="center"><strong>All-in-one web3 SDK for Browser, Node and Mobile apps</strong></p>
|
||||
|
||||
> [!IMPORTANT]
|
||||
> We rewrote the thirdweb SDK from scratch for performance! Head over to the [Beta version unified SDK](https://github.com/thirdweb-dev/js/tree/beta/packages/thirdweb).
|
||||
|
||||
## Features
|
||||
|
||||
- Support for React & React-Native
|
||||
- First party support for [Embedded Wallets](https://portal.thirdweb.com/connect/embedded-wallet/overview) (social/email login)
|
||||
- First party support for [Account Abstraction](https://portal.thirdweb.com/connect/account-abstraction)
|
||||
- Instant connection to any chain with RPC Edge integration
|
||||
- Integrated IPFS upload/download
|
||||
- UI Components for connection, transactions, nft rendering
|
||||
- High level contract extensions for interacting with common standards
|
||||
- Automatic ABI resolution
|
||||
|
||||
## Library Comparison
|
||||
|
||||
| | thirdweb | Wagmi | Viem | Ethers@6 |
|
||||
| ----------------------------------------- | -------- | ------------------ | ------------------ | -------- |
|
||||
| Type safe contract API | ✅ | ✅ | ✅ | ✅ |
|
||||
| Type safe wallet API | ✅ | ✅ | ✅ | ✅ |
|
||||
| EVM utils | ✅ | ❌ | ✅ | ✅ |
|
||||
| RPC for any EVM | ✅ | ⚠️ public RPC only | ⚠️ public RPC only | ❌ |
|
||||
| Automatic ABI Resolution | ✅ | ❌ | ❌ | ❌ |
|
||||
| IPFS Upload/Download | ✅ | ❌ | ❌ | ❌ |
|
||||
| Embedded wallet (email/ social login) | ✅ | ⚠️ via 3rd party | ❌ | ❌ |
|
||||
| Account abstraction (ERC4337) support | ✅ | ⚠️ via 3rd party | ⚠️ via 3rd party | ❌ |
|
||||
| Web3 wallet connectors | ✅ | ✅ | ❌ | ❌ |
|
||||
| Local wallet creation | ✅ | ❌ | ✅ | ✅ |
|
||||
| Auth (SIWE) | ✅ | ⚠️ via 3rd party | ❌ | ❌ |
|
||||
| Extensions functions for common standards | ✅ | ❌ | ❌ | ❌ |
|
||||
| React Hooks | ✅ | ✅ | ❌ | ❌ |
|
||||
| React UI components | ✅ | ❌ | ❌ | ❌ |
|
||||
| React Native Hooks | ✅ | ❌ | ❌ | ❌ |
|
||||
| React Native UI Components | ✅ | ❌ | ❌ | ❌ |
|
||||
|
||||
## 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> |
|
||||
| [/wallets](./packages/wallets) | Unified web3 Wallet library to integrate any wallet into your applications. | <a href="https://www.npmjs.com/package/@thirdweb-dev/wallets"><img src="https://img.shields.io/npm/v/@thirdweb-dev/wallets?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> |
|
||||
| [/react-native](./packages/react-native) | Ultimate collection of React hooks for your native mobile web3 apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/react-native"><img src="https://img.shields.io/npm/v/@thirdweb-dev/react-native?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> |
|
||||
| [/storage](./packages/storage) | Best in class decentralized storage SDK for Browser and Node | <a href="https://www.npmjs.com/package/@thirdweb-dev/storage"><img src="https://img.shields.io/npm/v/@thirdweb-dev/storage?color=red&label=npm&logo=npm" alt="npm version"/></a> |
|
||||
| [/cli](./packages/cli) | Publish and deploy smart contracts without dealing with private keys | <a href="https://www.npmjs.com/package/thirdweb"><img src="https://img.shields.io/npm/v/thirdweb?color=red&label=npm&logo=npm" alt="npm version"/></a> |
|
||||
| [/chains](./packages/chains) | All EVM chain information as JS objects for easy handling | <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> |
|
||||
|
||||
## Documentation
|
||||
|
||||
Visit [https://portal.thirdweb.com/](https://portal.thirdweb.com/) to view the full documentation.
|
||||
|
||||
<br />
|
||||
| Package | Description
|
||||
| -----------------------------------------|-----------------------------------------------------------------------------|
|
||||
| [/sdk](./packages/sdk) | Best in class web3 SDK for Browser, Node and Mobile apps |
|
||||
| [/wallets](./packages/wallets) | Unified web3 Wallet library to integrate any wallet into your applications. |
|
||||
| [/react](./packages/react) | Ultimate collection of React hooks for your web3 apps |
|
||||
| [/react-native](./packages/react-native) | Ultimate collection of React hooks for your native mobile web3 apps |
|
||||
| [/auth](./packages/auth) | Best in class wallet authentication for Node backends |
|
||||
| [/storage](./packages/storage) | Best in class decentralized storage SDK for Browser and Node |
|
||||
| [/cli](./packages/cli) | Publish and deploy smart contracts without dealing with private keys |
|
||||
| [/chains](./packages/chains) | All EVM chain information as JS objects for easy handling |
|
||||
|
||||
## Contributing
|
||||
|
||||
We welcome contributions from all developers, regardless of experience level. If you are interested in contributing, please read our [Contributing Guide](.github/contributing.md) where you'll learn how the repo works, how to test your changes, and how to submit a pull request.
|
||||
We welcome contributions from all developers regardless of experience level. If you are interested in contributing, please read our [Contributing Guide](.github/contributing.md) to learn how the repo works, how to test your changes, and how to submit a pull request.
|
||||
|
||||
<br />
|
||||
See our [open source page](https://thirdweb.com/open-source) for more information on our open-source bounties and program.
|
||||
|
||||
## Community
|
||||
## Additional Resources
|
||||
|
||||
The best place to discuss your ideas, ask questions, and troubleshoot issues is our [Discord server](https://discord.gg/thirdweb).
|
||||
- [SDK Documentation](https://portal.thirdweb.com/typescript/v5)
|
||||
- [Templates](https://thirdweb.com/templates)
|
||||
- [YouTube](https://www.youtube.com/c/thirdweb_)
|
||||
|
||||
<br/>
|
||||
|
||||
## Support
|
||||
|
||||
For help or feedback, please [visit our support site](https://thirdweb.com/support)
|
||||
|
||||
## Security
|
||||
|
||||
|
||||
@@ -1,5 +1,77 @@
|
||||
# @thirdweb-dev/auth
|
||||
|
||||
## 4.1.44
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.4.22
|
||||
|
||||
## 4.1.43
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.4.21
|
||||
|
||||
## 4.1.42
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.4.20
|
||||
|
||||
## 4.1.41
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.4.19
|
||||
|
||||
## 4.1.40
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`cabfc29`](https://github.com/thirdweb-dev/js/commit/cabfc29119f25a78010f59f766bdcb8c392afa2d)]:
|
||||
- @thirdweb-dev/wallets@2.4.18
|
||||
|
||||
## 4.1.39
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`c894270`](https://github.com/thirdweb-dev/js/commit/c894270401850575d1a4df73e16198177b46477a), [`332a145`](https://github.com/thirdweb-dev/js/commit/332a14552bf95e13e5220b1bd73414f000088568)]:
|
||||
- @thirdweb-dev/wallets@2.4.17
|
||||
|
||||
## 4.1.38
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2417](https://github.com/thirdweb-dev/js/pull/2417) [`862905e`](https://github.com/thirdweb-dev/js/commit/862905e161a091c15eb9b054cfcca0e5d2879fd6) Thanks [@jnsdls](https://github.com/jnsdls)! - make verify login payload be self-sufficient
|
||||
|
||||
- Updated dependencies [[`862905e`](https://github.com/thirdweb-dev/js/commit/862905e161a091c15eb9b054cfcca0e5d2879fd6)]:
|
||||
- @thirdweb-dev/wallets@2.4.16
|
||||
|
||||
## 4.1.37
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`74a92dc`](https://github.com/thirdweb-dev/js/commit/74a92dcb7dc4be7d03bcb8b7211e87016f52a81f)]:
|
||||
- @thirdweb-dev/wallets@2.4.15
|
||||
|
||||
## 4.1.36
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`ab44b8f`](https://github.com/thirdweb-dev/js/commit/ab44b8f0ae760065f400f76d69703e26bcbcc022), [`f80f630`](https://github.com/thirdweb-dev/js/commit/f80f6307a3ebe1adaaf072dd2e02aecf83bfa43f)]:
|
||||
- @thirdweb-dev/wallets@2.4.14
|
||||
|
||||
## 4.1.35
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.4.13
|
||||
|
||||
## 4.1.34
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/auth",
|
||||
"version": "4.1.34",
|
||||
"version": "4.1.44",
|
||||
"main": "dist/thirdweb-dev-auth.cjs.js",
|
||||
"module": "dist/thirdweb-dev-auth.esm.js",
|
||||
"browser": {
|
||||
@@ -61,7 +61,7 @@
|
||||
"lint": "eslint src/ && bunx publint --strict --level warning",
|
||||
"fix": "eslint src/ --fix",
|
||||
"clean": "rm -rf dist/ && rm -rf node_modules/",
|
||||
"test": "mocha --config './test/.mocharc.json' --timeout 30000 --parallel './test/**/*.test.ts'",
|
||||
"test": "mocha --config './test/.mocharc.json' --timeout 240000 --parallel './test/**/*.test.ts'",
|
||||
"push": "yalc push"
|
||||
},
|
||||
"preconstruct": {
|
||||
|
||||
@@ -23,14 +23,21 @@ import {
|
||||
AuthenticateOptionsWithOptionalDomain,
|
||||
AuthenticationPayload,
|
||||
} from "./schema/authenticate";
|
||||
import { ThirdwebAuthOptions } from "./types";
|
||||
|
||||
export class ThirdwebAuth {
|
||||
private domain: string;
|
||||
private wallet: GenericAuthWallet;
|
||||
private options: ThirdwebAuthOptions;
|
||||
|
||||
constructor(wallet: GenericAuthWallet, domain: string) {
|
||||
constructor(
|
||||
wallet: GenericAuthWallet,
|
||||
domain: string,
|
||||
options: ThirdwebAuthOptions = {},
|
||||
) {
|
||||
this.wallet = wallet;
|
||||
this.domain = domain;
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
public updateWallet(wallet: GenericAuthWallet) {
|
||||
@@ -66,9 +73,9 @@ export class ThirdwebAuth {
|
||||
options?: VerifyOptionsWithOptionalDomain,
|
||||
): Promise<string> {
|
||||
return verifyLoginPayload({
|
||||
wallet: this.wallet,
|
||||
payload,
|
||||
options: this.formatOptions(options),
|
||||
clientOptions: this.options,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -80,6 +87,7 @@ export class ThirdwebAuth {
|
||||
wallet: this.wallet,
|
||||
payload,
|
||||
options: this.formatOptions(options),
|
||||
clientOptions: this.options,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -99,6 +107,7 @@ export class ThirdwebAuth {
|
||||
wallet: this.wallet,
|
||||
jwt,
|
||||
options: this.formatOptions(options),
|
||||
clientOptions: this.options,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import {
|
||||
import { GenerateOptionsSchema } from "../schema/generate";
|
||||
import { RefreshOptionsSchema } from "../schema/refresh";
|
||||
import { verifyLoginPayload } from "./login";
|
||||
import { verifySignature } from "./verify-signature";
|
||||
|
||||
function isBrowser() {
|
||||
return typeof window !== "undefined";
|
||||
@@ -71,15 +72,16 @@ export async function generateJWT({
|
||||
wallet,
|
||||
payload,
|
||||
options,
|
||||
clientOptions,
|
||||
}: GenerateJwtParams): Promise<string> {
|
||||
const parsedOptions = GenerateOptionsSchema.parse(options);
|
||||
const userAddress = await verifyLoginPayload({
|
||||
wallet,
|
||||
payload,
|
||||
options: {
|
||||
domain: parsedOptions.domain,
|
||||
...parsedOptions.verifyOptions,
|
||||
},
|
||||
clientOptions,
|
||||
});
|
||||
|
||||
let session: Json | undefined = undefined;
|
||||
@@ -156,6 +158,7 @@ export async function authenticateJWT<TSession extends Json = Json>({
|
||||
wallet,
|
||||
jwt,
|
||||
options,
|
||||
clientOptions,
|
||||
}: AuthenticateJwtParams): Promise<User<TSession>> {
|
||||
const parsedOptions = AuthenticateOptionsSchema.parse(options);
|
||||
const { payload, signature } = parseJWT(jwt);
|
||||
@@ -210,11 +213,13 @@ export async function authenticateJWT<TSession extends Json = Json>({
|
||||
}
|
||||
}
|
||||
|
||||
const verified = await wallet.verifySignature(
|
||||
const verified = await verifySignature(
|
||||
JSON.stringify(payload),
|
||||
signature,
|
||||
issuerAddress,
|
||||
chainId,
|
||||
clientOptions.clientId,
|
||||
clientOptions.secretKey,
|
||||
);
|
||||
if (!verified) {
|
||||
throw new Error(
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
LoginPayloadDataSchema,
|
||||
} from "../schema/login";
|
||||
import { VerifyOptionsSchema } from "../schema/verify";
|
||||
import { verifySignature } from "./verify-signature";
|
||||
|
||||
/**
|
||||
* Create an EIP-4361 & CAIP-122 compliant message to sign based on the login payload
|
||||
@@ -113,18 +114,12 @@ export async function buildAndSignLoginPayload({
|
||||
}
|
||||
|
||||
export async function verifyLoginPayload({
|
||||
wallet,
|
||||
payload,
|
||||
options,
|
||||
clientOptions,
|
||||
}: VerifyLoginPayloadParams): Promise<string> {
|
||||
const parsedOptions = VerifyOptionsSchema.parse(options);
|
||||
|
||||
if (payload.payload.type !== wallet.type) {
|
||||
throw new Error(
|
||||
`Expected chain type '${wallet.type}' does not match chain type on payload '${payload.payload.type}'`,
|
||||
);
|
||||
}
|
||||
|
||||
// Check that the intended domain matches the domain of the payload
|
||||
if (payload.payload.domain !== parsedOptions.domain) {
|
||||
throw new Error(
|
||||
@@ -204,16 +199,19 @@ export async function verifyLoginPayload({
|
||||
|
||||
// Check that the signing address is the claimed wallet address
|
||||
const message = createLoginMessage(payload.payload);
|
||||
const chainId =
|
||||
wallet.type === "evm" && payload.payload.chain_id
|
||||
? parseInt(payload.payload.chain_id)
|
||||
: undefined;
|
||||
const verified = await wallet.verifySignature(
|
||||
const chainId = payload.payload.chain_id
|
||||
? parseInt(payload.payload.chain_id)
|
||||
: undefined;
|
||||
|
||||
const verified = await verifySignature(
|
||||
message,
|
||||
payload.signature,
|
||||
payload.payload.address,
|
||||
chainId,
|
||||
clientOptions?.clientId,
|
||||
clientOptions?.secretKey,
|
||||
);
|
||||
|
||||
if (!verified) {
|
||||
throw new Error(
|
||||
`Signer address does not match payload address '${payload.payload.address.toLowerCase()}'`,
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import { checkContractWalletSignature } from "@thirdweb-dev/wallets";
|
||||
import { utils } from "ethers";
|
||||
|
||||
export async function verifySignature(
|
||||
message: string,
|
||||
signature: string,
|
||||
address: string,
|
||||
chainId?: number,
|
||||
clientId?: string,
|
||||
secretKey?: string,
|
||||
): Promise<boolean> {
|
||||
try {
|
||||
const messageHash = utils.hashMessage(message);
|
||||
const messageHashBytes = utils.arrayify(messageHash);
|
||||
const recoveredAddress = utils.recoverAddress(messageHashBytes, signature);
|
||||
|
||||
if (recoveredAddress === address) {
|
||||
return true;
|
||||
}
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
|
||||
if (!chainId) {
|
||||
return false;
|
||||
}
|
||||
return checkContractWalletSignature(
|
||||
message,
|
||||
signature,
|
||||
address,
|
||||
chainId,
|
||||
clientId,
|
||||
secretKey,
|
||||
);
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
} from "./authenticate";
|
||||
import { RefreshOptions } from "./refresh";
|
||||
import { GenerateOptions } from "./generate";
|
||||
import { ThirdwebAuthOptions } from "../types";
|
||||
|
||||
export type BuildLoginPayloadParams = {
|
||||
wallet: GenericAuthWallet;
|
||||
@@ -19,9 +20,9 @@ export type SignLoginPayloadParams = {
|
||||
};
|
||||
|
||||
export type VerifyLoginPayloadParams = {
|
||||
wallet: GenericAuthWallet;
|
||||
payload: LoginPayload;
|
||||
options: VerifyOptions;
|
||||
clientOptions: ThirdwebAuthOptions;
|
||||
};
|
||||
|
||||
export type BuildJwtParams = {
|
||||
@@ -33,6 +34,7 @@ export type GenerateJwtParams = {
|
||||
wallet: GenericAuthWallet;
|
||||
payload: LoginPayload;
|
||||
options: GenerateOptions;
|
||||
clientOptions: ThirdwebAuthOptions;
|
||||
};
|
||||
|
||||
export type RefreshJwtParams = {
|
||||
@@ -45,4 +47,5 @@ export type AuthenticateJwtParams = {
|
||||
wallet: GenericAuthWallet;
|
||||
jwt: string;
|
||||
options: AuthenticateOptions;
|
||||
clientOptions: ThirdwebAuthOptions;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
export type ThirdwebAuthOptions = {
|
||||
clientId?: string;
|
||||
secretKey?: string;
|
||||
};
|
||||
@@ -41,7 +41,7 @@ export function ThirdwebAuth<
|
||||
): ThirdwebAuthReturnType<TData, TSession> {
|
||||
const ctx = {
|
||||
...cfg,
|
||||
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
|
||||
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain, cfg.thirdwebAuthOptions),
|
||||
};
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { ThirdwebAuth } from "../../core";
|
||||
import { ThirdwebAuthOptions } from "../../core/types";
|
||||
import { Json, LoginPayloadOutputSchema, User } from "../../core";
|
||||
import type { GenericAuthWallet } from "@thirdweb-dev/wallets";
|
||||
import { Request } from "express";
|
||||
@@ -68,6 +69,7 @@ export type ThirdwebAuthConfig<
|
||||
| ((user: User, req: Request) => void)
|
||||
| ((user: User, req: Request) => Promise<void>);
|
||||
};
|
||||
thirdwebAuthOptions?: ThirdwebAuthOptions;
|
||||
};
|
||||
|
||||
export type ThirdwebAuthContext<
|
||||
|
||||
@@ -44,7 +44,7 @@ export function ThirdwebAuth<
|
||||
): ThirdwebAuthReturnType<TData, TSession> {
|
||||
const ctx = {
|
||||
...cfg,
|
||||
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
|
||||
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain, cfg.thirdwebAuthOptions),
|
||||
};
|
||||
|
||||
const authRouter = async (
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
import { z } from "zod";
|
||||
import { IncomingMessage, ServerResponse } from "http";
|
||||
import { ZodTypeProvider } from "fastify-type-provider-zod";
|
||||
import { ThirdwebAuthOptions } from "../../core/types";
|
||||
|
||||
export const PayloadBodySchema = z.object({
|
||||
address: z.string(),
|
||||
@@ -76,6 +77,7 @@ export type ThirdwebAuthConfig<
|
||||
| ((user: User, req: FastifyRequest) => void)
|
||||
| ((user: User, req: FastifyRequest) => Promise<void>);
|
||||
};
|
||||
thirdwebAuthOptions?: ThirdwebAuthOptions;
|
||||
};
|
||||
|
||||
export type ThirdwebAuthContext<
|
||||
|
||||
@@ -2,6 +2,7 @@ import type { GenericAuthWallet } from "@thirdweb-dev/wallets";
|
||||
import { z } from "zod";
|
||||
|
||||
import { Json, LoginPayloadOutputSchema, User } from "../../core";
|
||||
import { ThirdwebAuthOptions } from "../../core/types";
|
||||
|
||||
export const PayloadBodySchema = z.object({
|
||||
address: z.string(),
|
||||
@@ -55,8 +56,9 @@ export type ThirdwebAuthConfigShared = {
|
||||
sameSite?: "lax" | "strict" | "none";
|
||||
secure?: boolean;
|
||||
};
|
||||
thirdwebAuthOptions?: ThirdwebAuthOptions;
|
||||
};
|
||||
|
||||
export type ThirdwebNextContext = {
|
||||
params?: Record<string, string | string[]>
|
||||
params?: Record<string, string | string[]>;
|
||||
};
|
||||
|
||||
@@ -8,19 +8,10 @@ import loginHandler from "./routes/login";
|
||||
import logoutHandler from "./routes/logout";
|
||||
import userHandler from "./routes/user";
|
||||
import switchAccountHandler from "./routes/switch-account";
|
||||
import type {
|
||||
ThirdwebAuthConfig,
|
||||
ThirdwebAuthContext,
|
||||
} from "./types";
|
||||
import type {
|
||||
ThirdwebAuthRoute,
|
||||
ThirdwebNextContext,
|
||||
} from "../common/types";
|
||||
import type { ThirdwebAuthConfig, ThirdwebAuthContext } from "./types";
|
||||
import type { ThirdwebAuthRoute, ThirdwebNextContext } from "../common/types";
|
||||
|
||||
export type {
|
||||
ThirdwebAuthConfig,
|
||||
ThirdwebAuthContext,
|
||||
} from "./types";
|
||||
export type { ThirdwebAuthConfig, ThirdwebAuthContext } from "./types";
|
||||
|
||||
export async function ThirdwebAuthRouter(
|
||||
req: NextRequest,
|
||||
@@ -44,7 +35,7 @@ export async function ThirdwebAuthRouter(
|
||||
default:
|
||||
return Response.json(
|
||||
{ message: "Invalid route for authentication." },
|
||||
{ status: 400},
|
||||
{ status: 400 },
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -55,10 +46,13 @@ export function ThirdwebAuth<
|
||||
>(cfg: ThirdwebAuthConfig<TData, TSession>) {
|
||||
const authCtx = {
|
||||
...cfg,
|
||||
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
|
||||
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain, cfg.thirdwebAuthOptions),
|
||||
};
|
||||
|
||||
async function ThirdwebAuthHandler(req: NextRequest, ctx: ThirdwebNextContext) {
|
||||
async function ThirdwebAuthHandler(
|
||||
req: NextRequest,
|
||||
ctx: ThirdwebNextContext,
|
||||
) {
|
||||
return await ThirdwebAuthRouter(req, ctx, authCtx as ThirdwebAuthContext);
|
||||
}
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ export function ThirdwebAuth<
|
||||
>(cfg: ThirdwebAuthConfig<TData, TSession>) {
|
||||
const ctx = {
|
||||
...cfg,
|
||||
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
|
||||
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain, cfg.thirdwebAuthOptions),
|
||||
};
|
||||
|
||||
function ThirdwebAuthHandler(
|
||||
|
||||
@@ -3,6 +3,8 @@ import { EthersWallet } from "@thirdweb-dev/wallets/evm/wallets/ethers";
|
||||
import { expect } from "chai";
|
||||
import { Wallet } from "ethers";
|
||||
|
||||
require("dotenv-mono").load();
|
||||
|
||||
describe("Wallet Authentication - EVM", async () => {
|
||||
let adminWallet: any, signerWallet: any, attackerWallet: any;
|
||||
let auth: ThirdwebAuth;
|
||||
@@ -18,7 +20,9 @@ describe("Wallet Authentication - EVM", async () => {
|
||||
signerWallet = new EthersWallet(signerSigner);
|
||||
attackerWallet = new EthersWallet(attackerSigner);
|
||||
|
||||
auth = new ThirdwebAuth(signerWallet, "thirdweb.com");
|
||||
auth = new ThirdwebAuth(signerWallet, "thirdweb.com", {
|
||||
secretKey: process.env.TW_SECRET_KEY,
|
||||
});
|
||||
});
|
||||
|
||||
beforeEach(async () => {
|
||||
|
||||
@@ -0,0 +1,384 @@
|
||||
import { LocalWallet, SmartWallet } from "@thirdweb-dev/wallets";
|
||||
import { ThirdwebAuth } from "../src/core";
|
||||
import { EthersWallet } from "@thirdweb-dev/wallets/evm/wallets/ethers";
|
||||
import { expect } from "chai";
|
||||
import { Wallet } from "ethers";
|
||||
|
||||
require("dotenv-mono").load();
|
||||
|
||||
describe("Wallet Authentication - EVM - Smart Wallet", async () => {
|
||||
let adminWallet: any, signerWallet: any, attackerWallet: any;
|
||||
let auth: ThirdwebAuth;
|
||||
|
||||
before(async () => {
|
||||
const factoryAddress = "0x13947435c2fe6BE51ED82F6f59C38617a323dB9B";
|
||||
const chain = 80001;
|
||||
const localWallet = new LocalWallet();
|
||||
await localWallet.generate();
|
||||
const smartWallet = new SmartWallet({
|
||||
chain: chain,
|
||||
factoryAddress: factoryAddress,
|
||||
gasless: true,
|
||||
secretKey: process.env.TW_SECRET_KEY,
|
||||
});
|
||||
await smartWallet.connect({ personalWallet: localWallet });
|
||||
|
||||
adminWallet = new EthersWallet(Wallet.createRandom());
|
||||
signerWallet = smartWallet;
|
||||
attackerWallet = new EthersWallet(Wallet.createRandom());
|
||||
|
||||
auth = new ThirdwebAuth(signerWallet, "thirdweb.com", {
|
||||
secretKey: process.env.TW_SECRET_KEY,
|
||||
});
|
||||
});
|
||||
|
||||
beforeEach(async () => {
|
||||
auth.updateWallet(signerWallet);
|
||||
});
|
||||
|
||||
it("Should verify logged in wallet", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const address = await auth.verify(payload);
|
||||
|
||||
expect(address).to.equal(await signerWallet.getAddress());
|
||||
});
|
||||
|
||||
it("Should verify logged in wallet with chain ID and expiration", async () => {
|
||||
const payload = await auth.login({
|
||||
expirationTime: new Date(Date.now() + 1000 * 60 * 5),
|
||||
chainId: "80001",
|
||||
});
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const address = await auth.verify(payload, {
|
||||
chainId: "80001",
|
||||
});
|
||||
|
||||
expect(address).to.equal(await signerWallet.getAddress());
|
||||
});
|
||||
|
||||
it("Should verify payload with resources", async () => {
|
||||
const payload = await auth.login({
|
||||
resources: ["https://example.com", "https://test.com"],
|
||||
});
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const address = await auth.verify(payload, {
|
||||
resources: ["https://example.com", "https://test.com"],
|
||||
});
|
||||
|
||||
expect(address).to.equal(await signerWallet.getAddress());
|
||||
});
|
||||
|
||||
it("Should reject payload without necessary resources", async () => {
|
||||
const payload = await auth.login({
|
||||
resources: ["https://example.com"],
|
||||
});
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
try {
|
||||
await auth.verify(payload, {
|
||||
resources: ["https://example.com", "https://test.com"],
|
||||
});
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.equal(
|
||||
"Login request is missing required resources: https://test.com",
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it("Should verify payload with customized statement", async () => {
|
||||
const payload = await auth.login({
|
||||
statement: "Please sign!",
|
||||
});
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const address = await auth.verify(payload, {
|
||||
statement: "Please sign!",
|
||||
});
|
||||
|
||||
expect(address).to.equal(await signerWallet.getAddress());
|
||||
});
|
||||
|
||||
it("Should reject payload with incorrect statement", async () => {
|
||||
const payload = await auth.login({
|
||||
statement: "Please sign!",
|
||||
});
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
try {
|
||||
await auth.verify(payload, {
|
||||
statement: "Please sign again!",
|
||||
});
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.include(
|
||||
"Expected statement 'Please sign again!' does not match statement on payload",
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it("Should reject invalid nonce", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
try {
|
||||
await auth.verify(payload, {
|
||||
validateNonce: (nonce: string) => {
|
||||
if (nonce === payload.payload.nonce) {
|
||||
throw new Error();
|
||||
}
|
||||
},
|
||||
});
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.equal("Login request nonce is invalid");
|
||||
}
|
||||
});
|
||||
|
||||
it("Should accept valid nonce", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const address = await auth.verify(payload, {
|
||||
validateNonce: (nonce: string) => {
|
||||
if (nonce !== payload.payload.nonce) {
|
||||
throw new Error();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
expect(address).to.equal(await signerWallet.getAddress());
|
||||
});
|
||||
|
||||
it("Should reject payload with incorrect domain", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
try {
|
||||
await auth.verify(payload, { domain: "test.thirdweb.com" });
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.equal(
|
||||
"Expected domain 'test.thirdweb.com' does not match domain on payload 'thirdweb.com'",
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it("Should reject expired login payload", async () => {
|
||||
const payload = await auth.login({
|
||||
expirationTime: new Date(Date.now() - 1000 * 60 * 5),
|
||||
});
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
try {
|
||||
await auth.verify(payload);
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.equal("Login request has expired");
|
||||
}
|
||||
});
|
||||
|
||||
it("Should reject payload with incorrect chain ID", async () => {
|
||||
const payload = await auth.login({
|
||||
chainId: "1",
|
||||
});
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
try {
|
||||
await auth.verify(payload, {
|
||||
chainId: "137",
|
||||
});
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.equal(
|
||||
"Expected chain ID '137' does not match chain ID on payload '1'",
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it("Should reject payload with incorrect signer", async () => {
|
||||
const payload = await auth.login();
|
||||
payload.payload.address = await attackerWallet.getAddress();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
try {
|
||||
await auth.verify(payload);
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.contain("does not match payload address");
|
||||
}
|
||||
});
|
||||
|
||||
it("Should generate valid authentication token", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const token = await auth.generate(payload);
|
||||
const user = await auth.authenticate(token);
|
||||
|
||||
expect(user.address).to.equal(await signerWallet.getAddress());
|
||||
});
|
||||
|
||||
it("Should reject token with incorrect domain", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const token = await auth.generate(payload);
|
||||
|
||||
try {
|
||||
await auth.authenticate(token, { domain: "test.thirdweb.com" });
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.contain(
|
||||
"Expected token to be for the domain 'test.thirdweb.com', but found token with domain 'thirdweb.com'",
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it("Should reject token before invalid before", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const token = await auth.generate(payload, {
|
||||
invalidBefore: new Date(Date.now() + 1000 * 60 * 5),
|
||||
});
|
||||
|
||||
try {
|
||||
await auth.authenticate(token);
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.contain("This token is invalid before");
|
||||
}
|
||||
});
|
||||
|
||||
it("Should reject expired authentication token", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const token = await auth.generate(payload, {
|
||||
expirationTime: new Date(Date.now() - 1000 * 60 * 5),
|
||||
});
|
||||
|
||||
try {
|
||||
await auth.authenticate(token);
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.contain("This token expired");
|
||||
}
|
||||
});
|
||||
|
||||
it("Should reject if admin address is not connected wallet address", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const token = await auth.generate(payload);
|
||||
|
||||
auth.updateWallet(signerWallet);
|
||||
try {
|
||||
await auth.authenticate(token);
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.contain(
|
||||
`The expected issuer address '${await signerWallet.getAddress()}' did not match the token issuer address '${await adminWallet.getAddress()}'`,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it("Should accept token with valid token ID", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const token = await auth.generate(payload, {
|
||||
tokenId: "test",
|
||||
});
|
||||
|
||||
const user = await auth.authenticate(token, {
|
||||
validateTokenId: (tokenId: string) => {
|
||||
if (tokenId !== "test") {
|
||||
throw new Error();
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
expect(user.address).to.equal(await signerWallet.getAddress());
|
||||
});
|
||||
|
||||
it("Should reject token with invalid token ID", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const token = await auth.generate(payload, {
|
||||
tokenId: "test",
|
||||
});
|
||||
|
||||
try {
|
||||
await auth.authenticate(token, {
|
||||
validateTokenId: (tokenId: string) => {
|
||||
if (tokenId !== "invalid") {
|
||||
throw new Error();
|
||||
}
|
||||
},
|
||||
});
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.contain("Token ID is invalid");
|
||||
}
|
||||
});
|
||||
|
||||
it("Should propagate session on token", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const token = await auth.generate(payload, {
|
||||
session: { role: "admin" },
|
||||
});
|
||||
|
||||
const user = await auth.authenticate(token);
|
||||
|
||||
expect(user.address).to.equal(await signerWallet.getAddress());
|
||||
expect(user.session).to.deep.equal({ role: "admin" });
|
||||
});
|
||||
|
||||
it("Should call session callback function", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const token = await auth.generate(payload, {
|
||||
session: (address: string) => {
|
||||
return { address, role: "admin" };
|
||||
},
|
||||
});
|
||||
|
||||
const user = await auth.authenticate(token);
|
||||
|
||||
expect(user.address).to.equal(await signerWallet.getAddress());
|
||||
expect(user.session).to.deep.equal({
|
||||
address: await signerWallet.getAddress(),
|
||||
role: "admin",
|
||||
});
|
||||
});
|
||||
|
||||
it("Should authenticate with issuer address", async () => {
|
||||
const payload = await auth.login();
|
||||
|
||||
auth.updateWallet(adminWallet);
|
||||
const token = await auth.generate(payload);
|
||||
|
||||
auth.updateWallet(attackerWallet);
|
||||
try {
|
||||
await auth.authenticate(token);
|
||||
expect.fail();
|
||||
} catch (err: any) {
|
||||
expect(err.message).to.contain("The expected issuer address");
|
||||
}
|
||||
|
||||
const user = await auth.authenticate(token, {
|
||||
issuerAddress: await adminWallet.getAddress(),
|
||||
});
|
||||
expect(user.address).to.equal(await signerWallet.getAddress());
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,41 @@
|
||||
# @thirdweb-dev/chains
|
||||
|
||||
## 0.1.80
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2484](https://github.com/thirdweb-dev/js/pull/2484) [`c494db8`](https://github.com/thirdweb-dev/js/commit/c494db87cbfa4b6fc4013abb01936e86a4350ea8) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Update chains
|
||||
|
||||
## 0.1.79
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2464](https://github.com/thirdweb-dev/js/pull/2464) [`2e01627`](https://github.com/thirdweb-dev/js/commit/2e01627c998a49a1dd41041f3743a28488c92697) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Sync chains
|
||||
|
||||
## 0.1.78
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2416](https://github.com/thirdweb-dev/js/pull/2416) [`588897d`](https://github.com/thirdweb-dev/js/commit/588897d1b04e6c63da13639aeb47ca701308e1b2) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
|
||||
|
||||
## 0.1.77
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2406](https://github.com/thirdweb-dev/js/pull/2406) [`047fbe2`](https://github.com/thirdweb-dev/js/commit/047fbe2918808cbc8fded90104458b6e38d1207d) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
|
||||
|
||||
## 0.1.76
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2378](https://github.com/thirdweb-dev/js/pull/2378) [`5f243bb`](https://github.com/thirdweb-dev/js/commit/5f243bba0ded5dace9344c79e8904a4a342d16af) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
|
||||
|
||||
## 0.1.75
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2372](https://github.com/thirdweb-dev/js/pull/2372) [`e87292a`](https://github.com/thirdweb-dev/js/commit/e87292ab604897ddfc337d24d2d1fe0f3560baae) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
|
||||
|
||||
## 0.1.74
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -24,11 +24,10 @@ export default {
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://1001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://klaytn-baobab.blockpi.network/v1/rpc/public",
|
||||
"https://api.baobab.klaytn.net:8651"
|
||||
],
|
||||
"shortName": "Baobab",
|
||||
"slip44": 1,
|
||||
"slug": "klaytn-testnet-baobab",
|
||||
"testnet": false
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 11198,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QI0304I2 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QI0304I2 Testnet Token",
|
||||
"symbol": "LOD",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 11198,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://11198.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QI0304I2 Testnet",
|
||||
"slug": "qi0304i2-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 11516,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "Tenzro",
|
||||
"nativeCurrency": {
|
||||
"name": "Tenzro Token",
|
||||
"symbol": "TNZO",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 11516,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://11516.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/tenzro/testnet/rpc"
|
||||
],
|
||||
"shortName": "Tenzro",
|
||||
"slug": "tenzro",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 1614,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QI0305I1 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QI0305I1 Testnet Token",
|
||||
"symbol": "PDC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 1614,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://1614.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QI0305I1 Testnet",
|
||||
"slug": "qi0305i1-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,36 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "ETINS",
|
||||
"chainId": 1617,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Ethereum Inscription Explorer",
|
||||
"url": "https://explorer.etins.org",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [
|
||||
{
|
||||
"name": "EIP155"
|
||||
},
|
||||
{
|
||||
"name": "EIP1559"
|
||||
}
|
||||
],
|
||||
"infoURL": "https://www.etins.org",
|
||||
"name": "Ethereum Inscription Mainnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Ethereum Inscription",
|
||||
"symbol": "ETINS",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 1617,
|
||||
"rpc": [
|
||||
"https://1617.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.etins.org"
|
||||
],
|
||||
"shortName": "etins",
|
||||
"slug": "ethereum-inscription",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,35 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "ETH",
|
||||
"chainId": 17186,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "lazy crimson coral explorer",
|
||||
"url": "https://explorerl2new-lazy-crimson-coral-cotlv0ftqf.t.conduit.xyz",
|
||||
"standard": "standard"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"name": "lazy-crimson-coral",
|
||||
"nativeCurrency": {
|
||||
"name": "Ether",
|
||||
"symbol": "ETH",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 17186,
|
||||
"parent": {
|
||||
"type": "L3",
|
||||
"chain": "Base",
|
||||
"bridges": [
|
||||
{
|
||||
"url": "https://lazy-crimson-coral-cotlv0ftqf.testnets.superbridge.app"
|
||||
}
|
||||
]
|
||||
},
|
||||
"redFlags": [],
|
||||
"rpc": [],
|
||||
"shortName": "lazy-crimson-coral",
|
||||
"slug": "lazy-crimson-coral",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 18898,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser4 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser4 Testnet Token",
|
||||
"symbol": "NLD",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 18898,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://18898.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser4 Testnet",
|
||||
"slug": "qauser4-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,36 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "FFG",
|
||||
"chainId": 191,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [
|
||||
{
|
||||
"name": "EIP155"
|
||||
},
|
||||
{
|
||||
"name": "EIP1559"
|
||||
}
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreihsas2rwakc7lllmtb4pcgwutlel2woibmqmhd4aiin342zgtpmwy",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://filefilego.com",
|
||||
"name": "FileFileGo",
|
||||
"nativeCurrency": {
|
||||
"name": "FFG",
|
||||
"symbol": "FFG",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 191,
|
||||
"rpc": [
|
||||
"https://191.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.filefilego.com/rpc"
|
||||
],
|
||||
"shortName": "ffg",
|
||||
"slug": "filefilego",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 19112,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QI0304s1 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QI0304s1 Testnet Token",
|
||||
"symbol": "LKG",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 19112,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://19112.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QI0304s1 Testnet",
|
||||
"slug": "qi0304s1-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -8,7 +8,7 @@ export default {
|
||||
"name": "Swan Saturn Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "SWANETH",
|
||||
"symbol": "SWAN",
|
||||
"symbol": "sETH",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 2024,
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 20519,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser4113 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser4113 Testnet Token",
|
||||
"symbol": "FYP",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 20519,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://20519.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser4113 Testnet",
|
||||
"slug": "qauser4113-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,37 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Auroria",
|
||||
"chainId": 205205,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Auroria Testnet Explorer",
|
||||
"url": "https://auroria.explorer.stratisevm.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://auroria.faucet.stratisevm.com"
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://QmbkTh6qNYUnae5yNjied3qZqVyZcb4x3hfUpJ33bGg9QY",
|
||||
"width": 800,
|
||||
"height": 800,
|
||||
"format": "jpg"
|
||||
},
|
||||
"infoURL": "https://www.stratisplatform.com",
|
||||
"name": "Auroria Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Auroria Stratis",
|
||||
"symbol": "tSTRAX",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 205205,
|
||||
"rpc": [
|
||||
"https://205205.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://auroria.rpc.stratisevm.com"
|
||||
],
|
||||
"shortName": "auroria",
|
||||
"slug": "auroria-testnet",
|
||||
"testnet": true,
|
||||
"title": "Stratis Testnet Auroria"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,48 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "DEEPL",
|
||||
"chainId": 222555,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "DeepL Mainnet Explorer",
|
||||
"url": "https://scan.deeplnetwork.org",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeihjwgy4qja5cee452malk5hpb25pzpipfaka7hjcyb437ldodxzaq",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [
|
||||
{
|
||||
"name": "EIP155"
|
||||
},
|
||||
{
|
||||
"name": "EIP1559"
|
||||
}
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeihjwgy4qja5cee452malk5hpb25pzpipfaka7hjcyb437ldodxzaq",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://deeplnetwork.org",
|
||||
"name": "DeepL Mainnet",
|
||||
"nativeCurrency": {
|
||||
"name": "DeepL",
|
||||
"symbol": "DEEPL",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 222555,
|
||||
"rpc": [
|
||||
"https://222555.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.deeplnetwork.org"
|
||||
],
|
||||
"shortName": "deepl",
|
||||
"slug": "deepl",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,50 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "DEEPL",
|
||||
"chainId": 222666,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "DeepL Testnet Explorer",
|
||||
"url": "https://testnet-scan.deeplnetwork.org",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeihjwgy4qja5cee452malk5hpb25pzpipfaka7hjcyb437ldodxzaq",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.deeplnetwork.org"
|
||||
],
|
||||
"features": [
|
||||
{
|
||||
"name": "EIP155"
|
||||
},
|
||||
{
|
||||
"name": "EIP1559"
|
||||
}
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeihjwgy4qja5cee452malk5hpb25pzpipfaka7hjcyb437ldodxzaq",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://deeplnetwork.org",
|
||||
"name": "DeepL Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "DeepL",
|
||||
"symbol": "DEEPL",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 222666,
|
||||
"rpc": [
|
||||
"https://222666.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet.deeplnetwork.org"
|
||||
],
|
||||
"shortName": "tdeepl",
|
||||
"slug": "deepl-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 22662,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QA5-03-07 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QA5-03-07 Testnet Token",
|
||||
"symbol": "TYP",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 22662,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://22662.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QA5-03-07 Testnet",
|
||||
"slug": "qa5-03-07-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,42 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "ETH",
|
||||
"chainId": 22985,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "beyond-sepolia-3wng1zu3j3 explorer",
|
||||
"url": "https://explorerl2new-beyond-sepolia-3wng1zu3j3.t.conduit.xyz",
|
||||
"standard": "standard",
|
||||
"icon": {
|
||||
"url": "ipfs://QmbLxRVZ27Yy6RE9xAdYgSxGPB1TjPtcxahy6uNnp2Pt6T/Beyond.jpg",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "jpg"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmbLxRVZ27Yy6RE9xAdYgSxGPB1TjPtcxahy6uNnp2Pt6T/Beyond.jpg",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "jpg"
|
||||
},
|
||||
"infoURL": "https://explorerl2new-beyond-sepolia-3wng1zu3j3.t.conduit.xyz",
|
||||
"name": "Beyond Sepolia",
|
||||
"nativeCurrency": {
|
||||
"name": "Ether",
|
||||
"symbol": "ETH",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 22985,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://22985.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc-beyond-sepolia-3wng1zu3j3.t.conduit.xyz"
|
||||
],
|
||||
"shortName": "beyond-sepolia",
|
||||
"slug": "beyond-sepolia",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 24867,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser45 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser45 Testnet Token",
|
||||
"symbol": "ZAG",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 24867,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://24867.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser45 Testnet",
|
||||
"slug": "qauser45-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -2,7 +2,13 @@ import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "FRAX",
|
||||
"chainId": 252,
|
||||
"explorers": [],
|
||||
"explorers": [
|
||||
{
|
||||
"name": "fraxscan",
|
||||
"url": "https://fraxscan.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
@@ -12,7 +18,7 @@ export default {
|
||||
"format": "PNG"
|
||||
},
|
||||
"infoURL": "https://mainnet.frax.com",
|
||||
"name": "Fraxtal Mainnet",
|
||||
"name": "Fraxtal",
|
||||
"nativeCurrency": {
|
||||
"name": "Frax Ether",
|
||||
"symbol": "frxETH",
|
||||
@@ -20,9 +26,12 @@ export default {
|
||||
},
|
||||
"networkId": 252,
|
||||
"redFlags": [],
|
||||
"rpc": [],
|
||||
"rpc": [
|
||||
"https://252.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.frax.com"
|
||||
],
|
||||
"shortName": "fraxtal",
|
||||
"slug": "fraxtal",
|
||||
"status": "incubating",
|
||||
"status": "active",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -2,7 +2,13 @@ import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "FRAX",
|
||||
"chainId": 2522,
|
||||
"explorers": [],
|
||||
"explorers": [
|
||||
{
|
||||
"name": "fraxscan",
|
||||
"url": "https://holesky.fraxscan.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "inEVM",
|
||||
"chainId": 2525,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmU9KU1qgReJR7vyVxN5zwWB3nkhSs658ViArUjT7GCh4r",
|
||||
"width": 2000,
|
||||
"height": 2000,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://inevm.com",
|
||||
"name": "inEVM Mainnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Injective",
|
||||
"symbol": "INJ",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 2525,
|
||||
"rpc": [
|
||||
"https://2525.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet.rpc.inevm.com/http"
|
||||
],
|
||||
"shortName": "inevm",
|
||||
"slug": "inevm",
|
||||
"status": "active",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -16,6 +16,7 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmRkhUD6J3B9WhT4hEWLrcFVTrBhx3CQgNC783aJsrwxSN",
|
||||
"width": 512,
|
||||
@@ -39,6 +40,7 @@ export default {
|
||||
}
|
||||
]
|
||||
},
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://280.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet.era.zksync.dev"
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 28106,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "Mezzanine Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Mezzanine Testnet Token",
|
||||
"symbol": "OWQ",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 28106,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://28106.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/mezzaninet/testnet/rpc"
|
||||
],
|
||||
"shortName": "Mezzanine Testnet",
|
||||
"slug": "mezzanine-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -10,6 +10,7 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"infoURL": "https://community.optimism.io/docs/developers/bedrock",
|
||||
"name": "Optimism Bedrock (Goerli Alpha Testnet)",
|
||||
"nativeCurrency": {
|
||||
@@ -18,15 +19,16 @@ export default {
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 28528,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://28528.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://alpha-1-replica-0.bedrock-goerli.optimism.io",
|
||||
"https://alpha-1-replica-1.bedrock-goerli.optimism.io",
|
||||
"https://alpha-1-replica-2.bedrock-goerli.optimism.io",
|
||||
"https://alpha-1-replica-2.bedrock-goerli.optimism.io"
|
||||
],
|
||||
"shortName": "obgor",
|
||||
"slip44": 1,
|
||||
"slug": "optimism-bedrock-goerli-alpha-testnet",
|
||||
"status": "deprecated",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -10,6 +10,7 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"infoURL": "https://boba.network",
|
||||
"name": "Boba Network Goerli Testnet",
|
||||
"nativeCurrency": {
|
||||
@@ -27,6 +28,7 @@ export default {
|
||||
}
|
||||
]
|
||||
},
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://2888.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://goerli.boba.network/",
|
||||
@@ -35,5 +37,6 @@ export default {
|
||||
"shortName": "BobaGoerli",
|
||||
"slip44": 1,
|
||||
"slug": "boba-network-goerli-testnet",
|
||||
"status": "deprecated",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,51 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "2911",
|
||||
"chainId": 2911,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://explorer.hychain.com",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmcSJmAfk3iay6uCGJxgUPd9pTsRxbtF4BrNnC5txE9cg8",
|
||||
"width": 400,
|
||||
"height": 400,
|
||||
"format": "jpg"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmcSJmAfk3iay6uCGJxgUPd9pTsRxbtF4BrNnC5txE9cg8",
|
||||
"width": 400,
|
||||
"height": 400,
|
||||
"format": "jpg"
|
||||
},
|
||||
"infoURL": "https://www.hychain.com",
|
||||
"name": "HYCHAIN",
|
||||
"nativeCurrency": {
|
||||
"name": "TOPIA",
|
||||
"symbol": "TOPIA",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 2911,
|
||||
"parent": {
|
||||
"type": "L2",
|
||||
"chain": "eip155-1",
|
||||
"bridges": [
|
||||
{
|
||||
"url": "https://bridge.hychain.com"
|
||||
}
|
||||
]
|
||||
},
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://2911.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.hychain.com/http"
|
||||
],
|
||||
"shortName": "hychain",
|
||||
"slug": "hychain",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,47 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "ETH",
|
||||
"chainId": 29112,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://testnet.explorer.hychain.com",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmcSJmAfk3iay6uCGJxgUPd9pTsRxbtF4BrNnC5txE9cg8",
|
||||
"width": 400,
|
||||
"height": 400,
|
||||
"format": "jpg"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmcSJmAfk3iay6uCGJxgUPd9pTsRxbtF4BrNnC5txE9cg8",
|
||||
"width": 400,
|
||||
"height": 400,
|
||||
"format": "jpg"
|
||||
},
|
||||
"infoURL": "https://www.hychain.com",
|
||||
"name": "HYCHAIN Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "TOPIA",
|
||||
"symbol": "TOPIA",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 29112,
|
||||
"parent": {
|
||||
"type": "L2",
|
||||
"chain": "eip155-58008",
|
||||
"bridges": []
|
||||
},
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://29112.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet-rpc.hychain.com/http"
|
||||
],
|
||||
"shortName": "hychain-testnet",
|
||||
"slug": "hychain-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 29645,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser6355 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser6355 Testnet Token",
|
||||
"symbol": "MQO",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 29645,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://29645.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser6355 Testnet",
|
||||
"slug": "qauser6355-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -5,7 +5,7 @@ export default {
|
||||
"explorers": [
|
||||
{
|
||||
"name": "explorer-thebifrost",
|
||||
"url": "https://explorer.mainnet.thebifrost.io",
|
||||
"url": "https://explorer.mainnet.bifrostnetwork.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
@@ -16,7 +16,7 @@ export default {
|
||||
"height": 480,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://thebifrost.io",
|
||||
"infoURL": "https://bifrostnetwork.com",
|
||||
"name": "Bifrost Mainnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Bifrost",
|
||||
@@ -26,8 +26,8 @@ export default {
|
||||
"networkId": 3068,
|
||||
"rpc": [
|
||||
"https://3068.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://public-01.mainnet.thebifrost.io/rpc",
|
||||
"https://public-02.mainnet.thebifrost.io/rpc"
|
||||
"https://public-01.mainnet.bifrostnetwork.com/rpc",
|
||||
"https://public-02.mainnet.bifrostnetwork.com/rpc"
|
||||
],
|
||||
"shortName": "bfc",
|
||||
"slug": "bifrost",
|
||||
|
||||
@@ -7,6 +7,11 @@ export default {
|
||||
"name": "3xpl",
|
||||
"url": "https://3xpl.com/botanix",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "Blockscout",
|
||||
"url": "https://blockscout.botanixlabs.dev",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
|
||||
@@ -4,8 +4,8 @@ export default {
|
||||
"chainId": 3776,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://astar-zkevm.explorer.startale.com/",
|
||||
"name": "Blockscout Astar zkEVM explorer",
|
||||
"url": "https://astar-zkevm.explorer.startale.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
@@ -35,10 +35,12 @@ export default {
|
||||
]
|
||||
},
|
||||
"redFlags": [],
|
||||
"rpc": [],
|
||||
"rpc": [
|
||||
"https://3776.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.startale.com/astar-zkevm"
|
||||
],
|
||||
"shortName": "astarzk",
|
||||
"slug": "astar-zkevm",
|
||||
"status": "incubating",
|
||||
"testnet": false,
|
||||
"title": "Astar zkEVM Mainnet"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,42 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "3839",
|
||||
"chainId": 3839,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "traderlands explorer",
|
||||
"url": "https://sepolia.arbiscan.io/",
|
||||
"standard": "standard",
|
||||
"icon": {
|
||||
"url": "ipfs://QmRQVgjLcoWAVTocuYegwumz8J8b2F3Le2WnQhwffRmWcg/traderlands%20logo.png",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmRQVgjLcoWAVTocuYegwumz8J8b2F3Le2WnQhwffRmWcg/traderlands%20logo.png",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://sepolia.arbiscan.io/",
|
||||
"name": "traderlands-sepolia",
|
||||
"nativeCurrency": {
|
||||
"name": "Traderlands",
|
||||
"symbol": "TRADE",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 3839,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://3839.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://traderlands-sepolia.rpc.caldera.xyz/http"
|
||||
],
|
||||
"shortName": "Tradetest",
|
||||
"slug": "traderlands-sepolia",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -5,7 +5,7 @@ export default {
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"infoURL": "https://docs.thefirechain.com/",
|
||||
"name": "Firechain zkEVM Testnet",
|
||||
"name": "Firechain zkEVM Ghostrider",
|
||||
"nativeCurrency": {
|
||||
"name": "Ether",
|
||||
"symbol": "ETH",
|
||||
@@ -16,8 +16,8 @@ export default {
|
||||
"https://3885.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc-zkevm-ghostrider.thefirechain.com"
|
||||
],
|
||||
"shortName": "firechain-zkEVM-ghostrider",
|
||||
"slug": "firechain-zkevm-testnet",
|
||||
"shortName": "firechain-zkEVM-testnet",
|
||||
"slug": "firechain-zkevm-ghostrider",
|
||||
"testnet": true,
|
||||
"title": "Firechain zkEVM Ghostrider"
|
||||
"title": "Firechain zkEVM Testnet"
|
||||
} as const satisfies Chain;
|
||||
@@ -11,6 +11,7 @@ export default {
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"infoURL": "https://crossfi.org/",
|
||||
"name": "CrossFi Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "XFI",
|
||||
@@ -21,9 +22,10 @@ export default {
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://4157.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.testnet.ms/"
|
||||
"https://rpc.testnet.ms"
|
||||
],
|
||||
"shortName": "XFI",
|
||||
"slip44": 1,
|
||||
"slug": "crossfi-testnet",
|
||||
"testnet": true,
|
||||
"title": "https://scan.testnet.ms/"
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 41799,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "Will's New Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Will's New Testnet Token",
|
||||
"symbol": "ZBO",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 41799,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://41799.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "Will's New Testnet",
|
||||
"slug": "will-s-new-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -43,5 +43,6 @@ export default {
|
||||
"shortName": "ogor",
|
||||
"slip44": 1,
|
||||
"slug": "optimism-goerli",
|
||||
"status": "deprecated",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -44,6 +44,7 @@ export default {
|
||||
"shortName": "arb-goerli",
|
||||
"slip44": 1,
|
||||
"slug": "arbitrum-goerli",
|
||||
"status": "deprecated",
|
||||
"testnet": true,
|
||||
"title": "Arbitrum Goerli Rollup Testnet"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 45544,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser6609 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser6609 Testnet Token",
|
||||
"symbol": "NHU",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 45544,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://45544.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser6609 Testnet",
|
||||
"slug": "qauser6609-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -2,13 +2,7 @@ import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Xai Goerli Orbit Testnet",
|
||||
"chainId": 47279324479,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Xai Goerli Testnet Explorer",
|
||||
"url": "https://testnet-explorer.xai-chain.net",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"infoURL": "https://xai.games/",
|
||||
@@ -20,11 +14,9 @@ export default {
|
||||
},
|
||||
"networkId": 47279324479,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://47279324479.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet.xai-chain.net/rpc"
|
||||
],
|
||||
"rpc": [],
|
||||
"shortName": "xai-goerli",
|
||||
"slug": "xai-goerli-orbit",
|
||||
"status": "deprecated",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -5,7 +5,7 @@ export default {
|
||||
"explorers": [
|
||||
{
|
||||
"name": "explorer-thebifrost",
|
||||
"url": "https://explorer.testnet.thebifrost.io",
|
||||
"url": "https://explorer.testnet.bifrostnetwork.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
@@ -16,7 +16,7 @@ export default {
|
||||
"height": 480,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://thebifrost.io",
|
||||
"infoURL": "https://bifrostnetwork.com",
|
||||
"name": "Bifrost Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Bifrost",
|
||||
@@ -26,8 +26,8 @@ export default {
|
||||
"networkId": 49088,
|
||||
"rpc": [
|
||||
"https://49088.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://public-01.testnet.thebifrost.io/rpc",
|
||||
"https://public-02.testnet.thebifrost.io/rpc"
|
||||
"https://public-01.testnet.bifrostnetwork.com/rpc",
|
||||
"https://public-02.testnet.bifrostnetwork.com/rpc"
|
||||
],
|
||||
"shortName": "tbfc",
|
||||
"slip44": 1,
|
||||
|
||||
@@ -57,6 +57,7 @@ export default {
|
||||
"shortName": "gor",
|
||||
"slip44": 1,
|
||||
"slug": "goerli",
|
||||
"status": "deprecated",
|
||||
"testnet": true,
|
||||
"title": "Ethereum Testnet Goerli"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 50528,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser9606 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser9606 Testnet Token",
|
||||
"symbol": "JTW",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 50528,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://50528.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser9606 Testnet",
|
||||
"slug": "qauser9606-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,28 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "SIC Testnet",
|
||||
"chainId": 5102,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://explorerl2new-sic-testnet-zvr7tlkzsi.t.conduit.xyz",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"infoURL": "https://www.fwb.help/",
|
||||
"name": "SIC Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "ETH",
|
||||
"symbol": "ETH",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 5102,
|
||||
"rpc": [
|
||||
"https://5102.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc-sic-testnet-zvr7tlkzsi.t.conduit.xyz"
|
||||
],
|
||||
"shortName": "sic-testnet",
|
||||
"slug": "sic-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 51277,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QI0344s1 Testne",
|
||||
"nativeCurrency": {
|
||||
"name": "QI0344s1 Testne Token",
|
||||
"symbol": "LKG",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 51277,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://51277.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QI0344s1 Testne",
|
||||
"slug": "qi0344s1-testne",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -1,28 +1,28 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "ETHF",
|
||||
"chain": "DIS",
|
||||
"chainId": 513100,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "etherfair",
|
||||
"url": "https://www.oklink.com/ethf",
|
||||
"name": "DisChain",
|
||||
"url": "https://www.oklink.com/dis",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"infoURL": "https://etherfair.org",
|
||||
"name": "ethereum Fair",
|
||||
"infoURL": "https://dischain.xyz",
|
||||
"name": "DisChain",
|
||||
"nativeCurrency": {
|
||||
"name": "EthereumFair",
|
||||
"symbol": "ETHF",
|
||||
"name": "DisChain",
|
||||
"symbol": "DIS",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 513100,
|
||||
"rpc": [
|
||||
"https://513100.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.etherfair.org"
|
||||
"https://rpc.dischain.xyz"
|
||||
],
|
||||
"shortName": "ethf",
|
||||
"slug": "ethereum-fair",
|
||||
"shortName": "dis",
|
||||
"slug": "dischain",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -40,7 +40,7 @@ export default {
|
||||
"networkId": 52014,
|
||||
"rpc": [
|
||||
"https://52014.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://api.electroneum.com"
|
||||
"https://rpc.electroneum.com"
|
||||
],
|
||||
"shortName": "etn-mainnet",
|
||||
"slug": "electroneum",
|
||||
|
||||
@@ -40,7 +40,7 @@ export default {
|
||||
"networkId": 5201420,
|
||||
"rpc": [
|
||||
"https://5201420.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://api.electroneum.com"
|
||||
"https://testnet-rpc.electroneum.com"
|
||||
],
|
||||
"shortName": "etn-testnet",
|
||||
"slip44": 1,
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 52150,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QI0304I1 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QI0304I1 Testnet Token",
|
||||
"symbol": "LOD",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 52150,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://52150.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QI0304I1 Testnet",
|
||||
"slug": "qi0304i1-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -26,8 +26,8 @@ export default {
|
||||
"https://rpc.ankr.com/syscoin/${ANKR_API_KEY}",
|
||||
"https://syscoin.public-rpc.com",
|
||||
"wss://rpc.syscoin.org/wss",
|
||||
"https://syscoin-evm-rpc.publicnode.com",
|
||||
"wss://syscoin-evm-rpc.publicnode.com"
|
||||
"https://syscoin-evm.publicnode.com",
|
||||
"wss://syscoin-evm.publicnode.com"
|
||||
],
|
||||
"shortName": "sys",
|
||||
"slug": "syscoin",
|
||||
|
||||
@@ -23,7 +23,9 @@ export default {
|
||||
"rpc": [
|
||||
"https://570.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.rollux.com",
|
||||
"wss://rpc.rollux.com/wss"
|
||||
"wss://rpc.rollux.com/wss",
|
||||
"https://rollux.rpc.syscoin.org",
|
||||
"wss://rollux.rpc.syscoin.org/wss"
|
||||
],
|
||||
"shortName": "sys-rollux",
|
||||
"slug": "rollux",
|
||||
|
||||
@@ -24,8 +24,8 @@ export default {
|
||||
"https://5700.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.tanenbaum.io",
|
||||
"wss://rpc.tanenbaum.io/wss",
|
||||
"https://syscoin-tanenbaum-evm-rpc.publicnode.com",
|
||||
"wss://syscoin-tanenbaum-evm-rpc.publicnode.com"
|
||||
"https://syscoin-tanenbaum-evm.publicnode.com",
|
||||
"wss://syscoin-tanenbaum-evm.publicnode.com"
|
||||
],
|
||||
"shortName": "tsys",
|
||||
"slip44": 1,
|
||||
|
||||
@@ -24,7 +24,9 @@ export default {
|
||||
"https://57000.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc-tanenbaum.rollux.com",
|
||||
"https://rpc.ankr.com/rollux_testnet/${ANKR_API_KEY}",
|
||||
"wss://rpc-tanenbaum.rollux.com/wss"
|
||||
"wss://rpc-tanenbaum.rollux.com/wss",
|
||||
"https://rollux.rpc.tanenbaum.io",
|
||||
"wss://rollux.rpc.tanenbaum.io/wss"
|
||||
],
|
||||
"shortName": "tsys-rollux",
|
||||
"slip44": 1,
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 57021,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QIM2403061",
|
||||
"nativeCurrency": {
|
||||
"name": "QIM2403061 Token",
|
||||
"symbol": "VVC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 57021,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://57021.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QIM2403061",
|
||||
"slug": "qim2403061",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,42 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "BEYOND",
|
||||
"chainId": 59185,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Beyond",
|
||||
"url": "https://explorerl2new-beyond-indigo-playground-xz87sjgmaj.t.conduit.xyz",
|
||||
"standard": "standard",
|
||||
"icon": {
|
||||
"url": "ipfs://QmbLxRVZ27Yy6RE9xAdYgSxGPB1TjPtcxahy6uNnp2Pt6T/Beyond.jpg",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "jpg"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmbLxRVZ27Yy6RE9xAdYgSxGPB1TjPtcxahy6uNnp2Pt6T/Beyond.jpg",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "jpg"
|
||||
},
|
||||
"infoURL": "https://explorerl2new-beyond-indigo-playground-xz87sjgmaj.t.conduit.xyz",
|
||||
"name": "BeyondChain Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "BEYOND",
|
||||
"symbol": "BEYOND",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 59185,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://59185.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc-beyond-indigo-playground-xz87sjgmaj.t.conduit.xyz"
|
||||
],
|
||||
"shortName": "beyond-indigo-playground-xz87sjgmaj",
|
||||
"slug": "beyondchain-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -44,5 +44,6 @@ export default {
|
||||
"shortName": "metis-goerli",
|
||||
"slip44": 1,
|
||||
"slug": "metis-goerli-testnet",
|
||||
"status": "deprecated",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 59944,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser7920 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser7920 Testnet Token",
|
||||
"symbol": "USH",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 59944,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://59944.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser7920 Testnet",
|
||||
"slug": "qauser7920-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -4,7 +4,7 @@ export default {
|
||||
"chainId": 6038361,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Blockscout zKyoto chain explorer",
|
||||
"name": "Blockscout zKyoto explorer",
|
||||
"url": "https://astar-zkyoto.blockscout.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
@@ -43,7 +43,6 @@ export default {
|
||||
],
|
||||
"shortName": "azkyt",
|
||||
"slug": "astar-zkyoto",
|
||||
"status": "incubating",
|
||||
"testnet": true,
|
||||
"title": "Astar zkEVM Testnet zKyoto"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 61258,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser7821 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser7821 Testnet Token",
|
||||
"symbol": "WND",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 61258,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://61258.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser7821 Testnet",
|
||||
"slug": "qauser7821-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,42 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "KEC",
|
||||
"chainId": 61406,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "KEC SCAN",
|
||||
"url": "https://explorer.kaichain.net/",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmbfRP2Ugo66pw6Mn8m9ChP4UE6Rn5nobtDo7Vy7ej93qA/kaichain%20icon.png",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmbfRP2Ugo66pw6Mn8m9ChP4UE6Rn5nobtDo7Vy7ej93qA/kaichain%20icon.png",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "http://kaichain.net/",
|
||||
"name": "Kaichain Mainnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Kaichain",
|
||||
"symbol": "KEC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 61406,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://61406.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-rpc.kaichain.net"
|
||||
],
|
||||
"shortName": "Kaichain",
|
||||
"slug": "kaichain",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 61551,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QR0304T1TS Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QR0304T1TS Testnet Token",
|
||||
"symbol": "OYU",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 61551,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://61551.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/qr0304t1ts/testnet/rpc"
|
||||
],
|
||||
"shortName": "QR0304T1TS Testnet",
|
||||
"slug": "qr0304t1ts-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,47 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "FTM",
|
||||
"chainId": 64165,
|
||||
"ens": {
|
||||
"registry": "standard"
|
||||
},
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Fantom Sonic Builders Testnet",
|
||||
"url": "https://sonicscan.io/",
|
||||
"standard": "standard",
|
||||
"icon": {
|
||||
"url": "ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/fantom/512.png",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://public-sonic.fantom.network/account"
|
||||
],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/fantom/512.png",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://sonicscan.io/",
|
||||
"name": "Fantom Sonic Builders Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Fantom",
|
||||
"symbol": "FTM",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 64165,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://64165.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.sonic.fantom.network/"
|
||||
],
|
||||
"shortName": "FantomTestnet",
|
||||
"slug": "fantom-sonic-builders-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 64361,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser8734 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser8734 Testnet Token",
|
||||
"symbol": "XPI",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 64361,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://64361.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser8734 Testnet",
|
||||
"slug": "qauser8734-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,36 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "FlowEVM",
|
||||
"chainId": 646,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Flow Diver",
|
||||
"url": "https://previewnet.flowdiver.io",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://previewnet-faucet.onflow.org"
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://QmQFugEvsfU3ARjjJ7YRLJwSxMfTk54WWzrofekTRBKFaC",
|
||||
"width": 2000,
|
||||
"height": 2000,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://developers.flow.com/evm/about",
|
||||
"name": "FlowEVM PreviewNet",
|
||||
"nativeCurrency": {
|
||||
"name": "FLOW",
|
||||
"symbol": "FLOW",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 646,
|
||||
"rpc": [
|
||||
"https://646.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://previewnet.evm.nodes.onflow.org"
|
||||
],
|
||||
"shortName": "flowevm-preview",
|
||||
"slug": "flowevm-previewnet",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -24,13 +24,10 @@ export default {
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 65100001,
|
||||
"rpc": [
|
||||
"https://65100001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc1.piccadilly.autonity.org/",
|
||||
"wss://rpc1.piccadilly.autonity.org/ws/"
|
||||
],
|
||||
"rpc": [],
|
||||
"shortName": "piccadilly-01",
|
||||
"slip44": 1,
|
||||
"slug": "autonity-piccadilly-barada-testnet",
|
||||
"status": "deprecated",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,36 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "AUT",
|
||||
"chainId": 65100002,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "autonity-blockscout",
|
||||
"url": "https://piccadilly.autonity.org",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://Qme5nxFZZoNNpiT8u9WwcBot4HyLTg2jxMxRnsbc5voQwB",
|
||||
"width": 1000,
|
||||
"height": 1000,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://autonity.org/",
|
||||
"name": "Autonity Piccadilly (Sumida) Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Piccadilly Auton",
|
||||
"symbol": "ATN",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 65100002,
|
||||
"rpc": [
|
||||
"https://65100002.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc1.piccadilly.autonity.org/",
|
||||
"wss://rpc1.piccadilly.autonity.org/ws/"
|
||||
],
|
||||
"shortName": "piccadilly-02",
|
||||
"slip44": 1,
|
||||
"slug": "autonity-piccadilly-sumida-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 65300,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser46 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser46 Testnet Token",
|
||||
"symbol": "ZAG",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 65300,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://65300.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser46 Testnet",
|
||||
"slug": "qauser46-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 65842,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser4143 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser4143 Testnet Token",
|
||||
"symbol": "NHU",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 65842,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://65842.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser4143 Testnet",
|
||||
"slug": "qauser4143-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Degen",
|
||||
"chainId": 666666666,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://Qmb6yAe4wXeBkxjfhxzoUT9TzETcmE7Vne59etm9GJaQf7",
|
||||
"width": 789,
|
||||
"height": 668,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://degen.tips",
|
||||
"name": "Degen Chain",
|
||||
"nativeCurrency": {
|
||||
"name": "DEGEN",
|
||||
"symbol": "DEGEN",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 666666666,
|
||||
"rpc": [
|
||||
"https://666666666.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.degen.tips"
|
||||
],
|
||||
"shortName": "degen-chain",
|
||||
"slug": "degen-chain",
|
||||
"status": "incubating",
|
||||
"testnet": false,
|
||||
"title": "Degen Chain"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 66904,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser1335 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser1335 Testnet Token",
|
||||
"symbol": "KFZ",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 66904,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://66904.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser1335 Testnet",
|
||||
"slug": "qauser1335-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 67451,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser6097 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser6097 Testnet Token",
|
||||
"symbol": "NHU",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 67451,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://67451.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser6097 Testnet",
|
||||
"slug": "qauser6097-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Galadriel",
|
||||
"chainId": 696969,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Galadriel Explorer",
|
||||
"url": "https://explorer.galadriel.com",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://docs.galadriel.com/faucet"
|
||||
],
|
||||
"infoURL": "https://galadriel.com",
|
||||
"name": "Galadriel Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Galadriel Testnet token",
|
||||
"symbol": "GAL",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 696969,
|
||||
"rpc": [
|
||||
"https://696969.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet.galadriel.com"
|
||||
],
|
||||
"shortName": "galadriel-testnet",
|
||||
"slug": "galadriel-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 70038,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "John's Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "John's Testnet Token",
|
||||
"symbol": "FLG",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 70038,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://70038.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "John's Testnet",
|
||||
"slug": "john-s-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 70341,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser1957 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser1957 Testnet Token",
|
||||
"symbol": "AKI",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 70341,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://70341.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser1957 Testnet",
|
||||
"slug": "qauser1957-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -2,9 +2,22 @@ import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 710420,
|
||||
"explorers": [],
|
||||
"explorers": [
|
||||
{
|
||||
"name": "TILTYARD Explorer",
|
||||
"url": "https://subnets.avax.network/tiltyard",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"features": [
|
||||
{
|
||||
"name": "EIP155"
|
||||
},
|
||||
{
|
||||
"name": "EIP1559"
|
||||
}
|
||||
],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 7158,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "TESTNet FirstTEST",
|
||||
"nativeCurrency": {
|
||||
"name": "TESTNet FirstTEST Token",
|
||||
"symbol": "TEST",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 7158,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://7158.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/testnetfir/testnet/rpc"
|
||||
],
|
||||
"shortName": "TESTNet FirstTEST",
|
||||
"slug": "testnet-firsttest",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 72877,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser4 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser4 Testnet Token",
|
||||
"symbol": "ZAG",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 72877,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://72877.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser4 Testnet",
|
||||
"slug": "qauser4-testnet-qauser4 testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 7326,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QI M 2403051 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QI M 2403051 Testnet Token",
|
||||
"symbol": "VVC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 7326,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://7326.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QI M 2403051 Testnet",
|
||||
"slug": "qi-m-2403051-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 73677,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser9318 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser9318 Testnet Token",
|
||||
"symbol": "XUK",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 73677,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://73677.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser9318 Testnet",
|
||||
"slug": "qauser9318-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,34 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "FlowEVM",
|
||||
"chainId": 747,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Flow Diver",
|
||||
"url": "https://flowdiver.io",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmQFugEvsfU3ARjjJ7YRLJwSxMfTk54WWzrofekTRBKFaC",
|
||||
"width": 2000,
|
||||
"height": 2000,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://developers.flow.com/evm/about",
|
||||
"name": "FlowEVM Mainnet",
|
||||
"nativeCurrency": {
|
||||
"name": "FLOW",
|
||||
"symbol": "FLOW",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 747,
|
||||
"rpc": [
|
||||
"https://747.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet.evm.nodes.onflow.org"
|
||||
],
|
||||
"shortName": "flowevm-mainnet",
|
||||
"slug": "flowevm",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -4,19 +4,14 @@ export default {
|
||||
"chainId": 7700,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Canto EVM Explorer (Blockscout)",
|
||||
"url": "https://evm.explorer.canto.io",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "Canto Cosmos Explorer",
|
||||
"url": "https://cosmos-explorers.neobase.one",
|
||||
"standard": "none"
|
||||
"name": "Canto Explorer (OKLink)",
|
||||
"url": "https://www.oklink.com/canto",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "Canto EVM Explorer (Blockscout)",
|
||||
"url": "https://tuber.build",
|
||||
"standard": "none"
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "dexguru",
|
||||
@@ -42,14 +37,9 @@ export default {
|
||||
"rpc": [
|
||||
"https://7700.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://canto.slingshot.finance",
|
||||
"https://canto.neobase.one",
|
||||
"https://canto-rpc.ansybl.io",
|
||||
"https://mainnode.plexnode.org:8545",
|
||||
"https://canto.gravitychain.io/",
|
||||
"https://canto.evm.chandrastation.com/",
|
||||
"https://jsonrpc.canto.nodestake.top/",
|
||||
"https://canto.dexvaults.com/",
|
||||
"wss://canto.gravitychain.io:8546",
|
||||
"wss://canto.dexvaults.com/ws"
|
||||
"https://canto.gravitychain.io/"
|
||||
],
|
||||
"shortName": "canto",
|
||||
"slug": "canto",
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 77552,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QaUser3673 Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "QaUser3673 Testnet Token",
|
||||
"symbol": "YSI",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 77552,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://77552.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QaUser3673 Testnet",
|
||||
"slug": "qauser3673-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,38 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Polygon",
|
||||
"chainId": 80002,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "polygonamoy",
|
||||
"url": "https://www.oklink.com/amoy",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.polygon.technology/"
|
||||
],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmcxZHpyJa8T4i63xqjPYrZ6tKrt55tZJpbXcjSDKuKaf9/polygon/512.png",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://polygon.technology/",
|
||||
"name": "Polygon Amoy Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "MATIC",
|
||||
"symbol": "MATIC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 80002,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://80002.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc-amoy.polygon.technology"
|
||||
],
|
||||
"shortName": "polygonamoy",
|
||||
"slug": "polygon-amoy-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user