From cb45d378b7e66a02afabc204d0f6f463b649b156 Mon Sep 17 00:00:00 2001 From: Maharshi Mishra Date: Thu, 12 Oct 2023 02:55:59 +0530 Subject: [PATCH 1/5] Added migration guide, whitelabel, fixed minor typos --- docs/pnp/migration-guides/rn-v3-to-v4.mdx | 22 ++--- docs/pnp/migration-guides/rn-v4-to-v5.mdx | 89 ++++++++++++++++++ .../sfa-react-native/sfa-react-native.mdx | 4 +- docs/sdk/pnp/react-native/react-native.mdx | 4 +- docs/sdk/pnp/react-native/whitelabel.mdx | 92 ++++++++++++++----- sidebars.js | 9 +- 6 files changed, 183 insertions(+), 37 deletions(-) create mode 100644 docs/pnp/migration-guides/rn-v4-to-v5.mdx diff --git a/docs/pnp/migration-guides/rn-v3-to-v4.mdx b/docs/pnp/migration-guides/rn-v3-to-v4.mdx index eae5bf1a5..c873c6db7 100644 --- a/docs/pnp/migration-guides/rn-v3-to-v4.mdx +++ b/docs/pnp/migration-guides/rn-v3-to-v4.mdx @@ -1,17 +1,17 @@ --- -title: PnP React Native SDK - v3 to v4 +title: PnP React Native - v3 to v4 displayed_sidebar: docs description: "PnP React Native SDK - v3 to v4 | Documentation - Web3Auth" --- ## Third parameter to web3auth constructor -In order to introduce session management without storing the private key in the device, a new parameter is introduced to the web3auth constructor. -Thhis is the `Storage` parameter. +To introduce session management without storing the private key in the device, a new parameter is introduced to the web3auth constructor. This is the +`Storage` parameter. -### In Expo managed workflow +### In Expo-managed workflow -When using our SDK with a Expo-based React Native app (aka managed workflow), you have to install the `expo-web-browser` package as a `WebBrowser` +When using our SDK with an Expo-based React Native app (aka managed workflow), you have to install the `expo-web-browser` package as a `WebBrowser` implementation. You also need to install `expo-secure-store` to store the user's session. ```bash @@ -31,7 +31,7 @@ const web3auth = new Web3Auth(WebBrowser, SecureStore, { }); ``` -### In Bare react native workflow +### In Bare React native workflow Install Web3Auth's React Native SDK in your React Native project. When using our SDK with a bare workflow React Native app, you have to install a `WebBrowser` implementation made by us and a `Storage` implementation provided by react-native. @@ -57,7 +57,7 @@ const web3auth = new Web3Auth(WebBrowser, EncryptedStorage, { ### For Bare React Native workflow -Add `globals.js` file to your project and import it in your `index.js` file. +Add `globals.js` file to your project and import it into your `index.js` file. ```tsx title="globals.js" global.Buffer = require("buffer").Buffer; @@ -140,7 +140,7 @@ module.exports = (async () => { ### For Expo managed workflow -Before running `npm run ios` or `npm run android` in your Expo managed workflow project, run the following command. +Before running `npm run ios` or `npm run android` in your Expo-managed workflow project, run the following command. ```bash npx expo prebuild @@ -149,7 +149,7 @@ npx expo prebuild This generates the native folder structure for your project, just like you would have in a bare workflow project. This is required for the polyfills to work. -Create a `globals.js` file in your project and import it in your `index.js` file. +Create a `globals.js` file in your project and import it into your `index.js` file. ```tsx title="globals.js" global.Buffer = require("buffer").Buffer; @@ -174,7 +174,7 @@ Then add this line to your `index.js` file. import "./globals"; ``` -Once you have done the above, ceate a new metro.config.js file in your project and add the following to it. +Once you have done the above, create a new metro.config.js file in your project and add the following to it. :::info @@ -259,4 +259,4 @@ declare class Web3Auth implements IWeb3Auth { export default Web3Auth; ``` -Checkout our react-native PnP examples in PnP examples repo to know how to use the new SDK methods. +Check out our react-native PnP examples in the PnP examples repo to know how to use the new SDK methods. diff --git a/docs/pnp/migration-guides/rn-v4-to-v5.mdx b/docs/pnp/migration-guides/rn-v4-to-v5.mdx new file mode 100644 index 000000000..0419fd0c4 --- /dev/null +++ b/docs/pnp/migration-guides/rn-v4-to-v5.mdx @@ -0,0 +1,89 @@ +--- +title: PnP React Native - v4 to v5 +displayed_sidebar: docs +description: "PnP React Native SDK - v4 to v5 | Documentation - Web3Auth" +--- + +import TabItem from "@theme/TabItem"; +import Tabs from "@theme/Tabs"; + +## Changes to the `WhiteLabelData` object + +### Addition and modifications to parameters + +- With v5, when sending the whitelabel object while initialization, please keep in mind that the `name` parameter signifying the name of the app has + been changed to `appName`. +- The `dark` parameter that used to accept a boolean value to switch between dark or light mode has been changed to `mode` that accepts a string value + of either `light` or `dark` or `auto`. +- The `theme` parameter now accepts an object with key-value pairs, where the value corresponds to the color for a specific set of keys. +- Other than the above modifications, new parameters have been added to the `WhiteLabelData` object, like, `appUrl`, `useLogoLoader`, `tncLink` and + `privacyPolicy`. + +Please look at the [whitelabel](/sdk/pnp/react-native/whitelabel) section for `WhiteLabelData` interface. + + + + + +```tsx +import * as WebBrowser from "expo-web-browser"; +import * as SecureStore from "expo-secure-store"; +import Web3Auth, { LOGIN_PROVIDER, OPENLOGIN_NETWORK } from "@web3auth/react-native-sdk"; + +const clientId = "YOUR WEB3AUTH CLIENT ID"; + +const web3auth = new Web3Auth(WebBrowser, SecureStore, { + clientId, + network: OPENLOGIN_NETWORK.TESTNET, // or other networks + // highlight-start + whiteLabel: { + appName: "My App", + logoLight: "https://web3auth.io/images/logo-light.png", + logoDark: "https://web3auth.io/images/logo-dark.png", + defaultLanguage: "en", + mode: "auto", // or "dark" or "light" + theme: { + primary: "#cddc39", + }, + }, + // highlight-end +}); +``` + + + + + +```tsx +import * as WebBrowser from "@toruslabs/react-native-web-browser"; +import EncryptedStorage from "react-native-encrypted-storage"; +import Web3Auth, { LOGIN_PROVIDER, OPENLOGIN_NETWORK } from "@web3auth/react-native-sdk"; + +const clientId = "YOUR WEB3AUTH CLIENT ID"; + +const web3auth = new Web3Auth(WebBrowser, EncryptedStorage, { + clientId, + network: OPENLOGIN_NETWORK.TESTNET, // or other networks + // highlight-start + whiteLabel: { + appName: "My App", + logoLight: "https://web3auth.io/images/logo-light.png", + logoDark: "https://web3auth.io/images/logo-dark.png", + defaultLanguage: "en", + mode: "auto", // or "dark" or "light" + theme: { + primary: "#cddc39", + }, + }, + // highlight-end +}); +``` + + + diff --git a/docs/sdk/core-kit/sfa-react-native/sfa-react-native.mdx b/docs/sdk/core-kit/sfa-react-native/sfa-react-native.mdx index e9b2f6cfd..da61efcfb 100644 --- a/docs/sdk/core-kit/sfa-react-native/sfa-react-native.mdx +++ b/docs/sdk/core-kit/sfa-react-native/sfa-react-native.mdx @@ -6,7 +6,7 @@ description: "Web3Auth Core Kit Single Factor Auth React Native SDK | Documentat You can leverage the Web3Auth [Single Factor Auth React Native SDK](https://github.com/Web3Auth/single-factor-auth-react-native) for your React Native applications to authenticate users via Web3Auth. This SDK is constructed using TypeScript and supports the One Key flow natively, commencing with a -single share of the key. This allows for users to authenticate without any redirection in a single key pair flow. +single share of the key. This allows users to authenticate without any redirection in a single key pair flow. With the use of the Web3Auth SFA React Native SDK, you can authenticate users and regenerate their private keys swiftly and conveniently. For many common use cases, the Web3Auth Plug and Play React Native SDK allows you to redirect users to a Web3Auth-hosted screen (`http://app.openlogin.com`). @@ -15,7 +15,7 @@ However, if you prefer a higher degree of control over the UI and UX during the authentication flow to prevent any redirection. This is achievable with the latest Web3Auth SFA React Native SDK, enabling you to utilize the Web3Auth SFA React Native and circumvent redirection to openlogin hosted screens. -This SDK offers you the flexibility to provide seamless and secure authentication for your users, while preserving your app's unique user experience +This SDK offers you the flexibility to provide seamless and secure authentication for your users while preserving your app's unique user experience and interface. #### This Documentation is based on `2.0.0` SDK Version. diff --git a/docs/sdk/pnp/react-native/react-native.mdx b/docs/sdk/pnp/react-native/react-native.mdx index 2aead4765..5ca03d9c0 100644 --- a/docs/sdk/pnp/react-native/react-native.mdx +++ b/docs/sdk/pnp/react-native/react-native.mdx @@ -10,6 +10,8 @@ TypeScript. The Web3Auth React Native SDK is a client-side library you can use w returns a private key generated in a non-custodial way on successful authentication of the user. This authentication can be achieved by using any of the social logins Web3Auth provides or using a custom authentication flow of your choice. +#### This Documentation is based on `5.0.0` SDK Version. + ### Requirements - React Native Release 0.71 and above (for Bare React Native Workflow) @@ -44,4 +46,4 @@ Please run `npx expo prebuild` to generate native code based on the version of e - [Source Code](https://github.com/Web3Auth/web3auth-react-native-sdk/): Web3Auth is open sourced. You can find the source code on our GitHub repository. -- [Community Portal](https://web3auth.io/community): Join our community to get support from our team and other developers. +- [Community Portal](https://web3auth.io/community/c/help-pnp/pnp-rn/19): Join our community to get support from our team and other developers. diff --git a/docs/sdk/pnp/react-native/whitelabel.mdx b/docs/sdk/pnp/react-native/whitelabel.mdx index 5e50cbeb5..8fe3fda53 100644 --- a/docs/sdk/pnp/react-native/whitelabel.mdx +++ b/docs/sdk/pnp/react-native/whitelabel.mdx @@ -26,14 +26,18 @@ For defining custom UI, branding, and translations for your brand app, you just -| Parameter | Type | Mandatory | Description | -| ----------------- | ------------------ | --------- | ------------------------------------------------- | -| `name` | `String` | No | Name of your application | -| `logoLight` | `String` | No | Light logo for dark background | -| `logoDark` | `String` | No | Dark logo for light background | -| `defaultLanguage` | `String` | No | Default translation language to used | -| `dark` | `Bool` | No | If true, enables dark mode. Default is light mode | -| `theme` | `[String, String]` | No | Whitelabel theme | +| Parameter | Type | Mandatory | Description | +| ----------------- | --------- | --------- | --------------------------------------- | +| `appName` | `String` | No | Name of your application | +| `appUrl` | `String` | No | URL of your application | +| `logoLight` | `String` | No | Light logo for dark background | +| `logoDark` | `String` | No | Dark logo for light background | +| `defaultLanguage` | `String` | No | Default translation language to be used | +| `mode` | `String` | No | Theme mode to be used | +| `useLogoLoader` | `Boolean` | No | Use logo loader | +| `theme` | `Object` | No | Whitelabel theme | +| `tncLink` | `String` | No | Terms and conditions link | +| `privacyPolicy` | `String` | No | Privacy policy link | @@ -44,7 +48,11 @@ export type WhiteLabelData = { /** * App name to display in the UI */ - name?: string; + appName?: string; + /** + * App url + */ + appUrl?: string; /** * App logo to use in light mode */ @@ -54,25 +62,65 @@ export type WhiteLabelData = { */ logoDark?: string; /** - * Default language to use + * language which will be used by web3auth. app will use browser language if not specified. if language is not supported it will use "en" + * en: english + * de: german + * ja: japanese + * ko: korean + * zh: mandarin + * es: spanish + * fr: french + * pt: portuguese + * nl: dutch * * @defaultValue en */ - defaultLanguage?: string; + defaultLanguage?: LANGUAGE_TYPE; /** - * Whether to enable dark mode + theme + * + * @defaultValue auto + */ + mode?: THEME_MODE_TYPE; + /** + * Use logo loader * * @defaultValue false */ - dark?: boolean; - + useLogoLoader?: boolean; /** * Used to customize theme of the login modal with following options * `'primary'` - To customize primary color of modal's content. */ theme?: { - [P in string]: string; + primary?: string; + gray?: string; + red?: string; + green?: string; + success?: string; + warning?: string; + error?: string; + info?: string; + white?: string; }; + /** + * Language specific link for terms and conditions on torus-website. See (examples/vue-app) to configure + * e.g. + * tncLink: { + * en: "http://example.com/tnc/en", + * ja: "http://example.com/tnc/ja", + * } + */ + tncLink?: Partial>; + /** + * Language specific link for privacy policy on torus-website. See (examples/vue-app) to configure + * e.g. + * privacyPolicy: { + * en: "http://example.com/tnc/en", + * ja: "http://example.com/tnc/ja", + * } + */ + privacyPolicy?: Partial>; }; ``` @@ -94,20 +142,21 @@ export type WhiteLabelData = { ```tsx import * as WebBrowser from "expo-web-browser"; +import * as SecureStore from "expo-secure-store"; import Web3Auth, { LOGIN_PROVIDER, OPENLOGIN_NETWORK } from "@web3auth/react-native-sdk"; const clientId = "YOUR WEB3AUTH CLIENT ID"; -const web3auth = new Web3Auth(WebBrowser, { +const web3auth = new Web3Auth(WebBrowser, SecureStore, { clientId, network: OPENLOGIN_NETWORK.TESTNET, // or other networks // highlight-start whiteLabel: { - name: "My App", + appName: "My App", logoLight: "https://web3auth.io/images/logo-light.png", logoDark: "https://web3auth.io/images/logo-dark.png", defaultLanguage: "en", - dark: true, + mode: "auto", // or "dark" or "light" theme: { primary: "#cddc39", }, @@ -122,20 +171,21 @@ const web3auth = new Web3Auth(WebBrowser, { ```tsx import * as WebBrowser from "@toruslabs/react-native-web-browser"; +import EncryptedStorage from "react-native-encrypted-storage"; import Web3Auth, { LOGIN_PROVIDER, OPENLOGIN_NETWORK } from "@web3auth/react-native-sdk"; const clientId = "YOUR WEB3AUTH CLIENT ID"; -const web3auth = new Web3Auth(WebBrowser, { +const web3auth = new Web3Auth(WebBrowser, EncryptedStorage, { clientId, network: OPENLOGIN_NETWORK.TESTNET, // or other networks // highlight-start whiteLabel: { - name: "My App", + appName: "My App", logoLight: "https://web3auth.io/images/logo-light.png", logoDark: "https://web3auth.io/images/logo-dark.png", defaultLanguage: "en", - dark: true, + mode: "auto", // or "dark" or "light" theme: { primary: "#cddc39", }, diff --git a/sidebars.js b/sidebars.js index df494290f..1ba038750 100644 --- a/sidebars.js +++ b/sidebars.js @@ -114,8 +114,13 @@ module.exports = { collapsible: true, items: ["pnp/migration-guides/no-modal-v6-to-v7", "pnp/migration-guides/no-modal-v5-to-v6"], }, - - "pnp/migration-guides/rn-v3-to-v4", + { + type: "category", + label: "PnP React Native", + collapsed: true, + collapsible: true, + items: ["pnp/migration-guides/rn-v3-to-v4", "pnp/migration-guides/rn-v4-to-v5"], + }, ], }, // Core Kit Section From c3a8efe5b7e4f431b0bf8a9cda6b760a6a7d2594 Mon Sep 17 00:00:00 2001 From: Maharshi Mishra Date: Thu, 19 Oct 2023 14:13:22 +0530 Subject: [PATCH 2/5] Added version in sdk ref --- docs/sdk/pnp/web/modal/modal.mdx | 10 ++++++---- docs/sdk/pnp/web/no-modal/no-modal.mdx | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/sdk/pnp/web/modal/modal.mdx b/docs/sdk/pnp/web/modal/modal.mdx index b99fc7901..c77495302 100644 --- a/docs/sdk/pnp/web/modal/modal.mdx +++ b/docs/sdk/pnp/web/modal/modal.mdx @@ -4,9 +4,11 @@ displayed_sidebar: sdk description: " Web3Auth PnP Web Modal SDK | Documentation - Web3Auth" --- -This package provides main class for using default Web3Auth Modal. The package includes all of our packages and gives you a simple way of implementing -Web3Auth within your interface. Additionally, it is a child class of [`@web3auth/no-modal`](/sdk/pnp/web/no-modal) package. Hence, you can still call -all the functions available in the [`@web3auth/no-modal`](/sdk/pnp/web/no-modal) package. +This package provides the main class for using the default Web3Auth Modal. The package includes all of our packages and gives you a simple way of +implementing Web3Auth within your interface. Additionally, it is a child class of [`@web3auth/no-modal`](/sdk/pnp/web/no-modal) package. Hence, you +can still call all the functions available in the [`@web3auth/no-modal`](/sdk/pnp/web/no-modal) package. + +#### This Documentation is based on `7.0.0` SDK Version. ## Requirements @@ -19,7 +21,7 @@ all the functions available in the [`@web3auth/no-modal`](/sdk/pnp/web/no-modal) - [Quick Start](/quick-start?product=Plug+and+Play&sdk=Plug+and+Play+Web+Modal+SDK&platform=React): Integrate Web3Auth in 4 Simple Steps. - [Integration Builder](/integration-builder?lang=REACT&chain=ETH&evmFramework=WEB3&customAuth=NONE&mfa=DEFAULT&whitelabel=NO&useModal=YES&web3AuthNetwork=TESTNET&rnMode=EXPO&stepIndex=0): - Get customised integration code with detailed reference for your specific use case. + Get customized integration code with detailed references for your specific use case. - [Example Applications](/examples?product=Plug+and+Play&sdk=Plug+and+Play+Web+Modal+SDK): Explore our example applications and try the SDK yourself. diff --git a/docs/sdk/pnp/web/no-modal/no-modal.mdx b/docs/sdk/pnp/web/no-modal/no-modal.mdx index ee94990bb..1e1d37958 100644 --- a/docs/sdk/pnp/web/no-modal/no-modal.mdx +++ b/docs/sdk/pnp/web/no-modal/no-modal.mdx @@ -8,6 +8,8 @@ Web3Auth Plug and Play No Modal is the main SDK that consists of the core module for implementing the Web3Auth features, giving you the flexibility of implementing your own UI to use all the functionalities. Since this package doesn't contain the UI Modal as compared to [`@web3auth/modal`](/sdk/pnp/web/modal) package, the size of this package is smaller. +#### This Documentation is based on `7.0.0` SDK Version. + ## Requirements - This is a frontend SDK and can only run in a browser environment @@ -19,7 +21,7 @@ doesn't contain the UI Modal as compared to [`@web3auth/modal`](/sdk/pnp/web/mod - [Quick Start](/quick-start?product=Plug+and+Play&sdk=Plug+and+Play+Web+No+Modal+SDK&platform=React): Integrate Web3Auth in 4 Simple Steps. - [Integration Builder](/integration-builder?lang=REACT&chain=ETH&evmFramework=WEB3&customAuth=NONE&mfa=DEFAULT&whitelabel=NO&useModal=NO&web3AuthNetwork=TESTNET&rnMode=EXPO&stepIndex=0): - Get customised integration code with detailed reference for your specific use case. + Get customized integration code with detailed references for your specific use case. - [Example Applications](/examples?product=Plug+and+Play&sdk=Plug+and+Play+Web+No+Modal+SDK): Explore our example applications and try the SDK yourself. From 30b807d60102ad6ad8377d4f2a4dac7fe161db60 Mon Sep 17 00:00:00 2001 From: Maharshi Mishra Date: Fri, 20 Oct 2023 11:42:53 +0530 Subject: [PATCH 3/5] Added zKatana and Skale --- docs/connect-blockchain/new.mdx | 1066 ++++++++++++++ docs/connect-blockchain/skale.mdx | 2024 +++++++++++++++++++++++++++ docs/connect-blockchain/temp.mdx | 212 +++ docs/connect-blockchain/zkatana.mdx | 316 +++++ sidebars.js | 2 + 5 files changed, 3620 insertions(+) create mode 100644 docs/connect-blockchain/new.mdx create mode 100644 docs/connect-blockchain/skale.mdx create mode 100644 docs/connect-blockchain/temp.mdx create mode 100644 docs/connect-blockchain/zkatana.mdx diff --git a/docs/connect-blockchain/new.mdx b/docs/connect-blockchain/new.mdx new file mode 100644 index 000000000..2bb92071a --- /dev/null +++ b/docs/connect-blockchain/new.mdx @@ -0,0 +1,1066 @@ +### Testnet + +#### SKALE Europa Hub Testnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Calypso NFT Hub Testnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Nebula Gaming Hub Testnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Titan Community Hub + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Chaos Testnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + diff --git a/docs/connect-blockchain/skale.mdx b/docs/connect-blockchain/skale.mdx new file mode 100644 index 000000000..510a5257d --- /dev/null +++ b/docs/connect-blockchain/skale.mdx @@ -0,0 +1,2024 @@ +--- +title: Integrate Web3Auth with the Skale Blockchain +sidebar_label: Skale +image: "content-hub/guides/banners/optimism.png" +displayed_sidebar: docs +keywords: [skale, blockchain, web3auth] +description: "Integrate Web3Auth with the Skale Blockchain | Documentation - Web3Auth" +--- + +import InstallationSnippet from "@site/src/common/docs/_evm-installation.mdx"; +import GetUserInfoSnippet from "@site/src/common/docs/_get-userinfo.mdx"; +import GetAccountAndBalanceSnippet from "@site/src/common/docs/_evm-get-account-n-balance.mdx"; +import SendTransactionSnippet from "@site/src/common/docs/_evm-send-transaction.mdx"; +import SignTransactionSnippet from "@site/src/common/docs/_evm-sign-transaction.mdx"; +import SignPersonalMessageSnippet from "@site/src/common/docs/_evm-sign-message-personal-sign.mdx"; +import SignTypedDataV1Snippet from "@site/src/common/docs/_evm-sign-message-v1.mdx"; +import SignTypedDataV3Snippet from "@site/src/common/docs/_evm-sign-message-v3.mdx"; +import SignTypedDataV4Snippet from "@site/src/common/docs/_evm-sign-message-v4.mdx"; +import SmartContractSoliditySnippet from "@site/src/common/docs/_smart-contract-solidity.mdx"; +import DeployContractSolidityDeploySnippet from "@site/src/common/docs/_smart-contract-solidity-deploy.mdx"; +import DeployContractSolidityReadSnippet from "@site/src/common/docs/_smart-contract-solidity-read.mdx"; +import DeployContractSolidityWriteSnippet from "@site/src/common/docs/_smart-contract-solidity-write.mdx"; +import FetchUserPrivateKeySnippet from "@site/src/common/docs/_evm-fetch-user-private-key.mdx"; +import TabItem from "@theme/TabItem"; +import Tabs from "@theme/Tabs"; + +While using the Web3Auth Web SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the +[Metamask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like +[`web3.js`](https://web3js.readthedocs.io/en/v1.2.8/getting-started.html), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make +[Skale](https://skale.space/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` +from and `write` to the smart contract, etc. We have highlighted a few here to get you started quickly on that. + +:::info + +This reference is for the `Web`, however, you can use Optimism on `Android`, `iOS`, `React Native`, `Flutter`, & `Unity` as well. Please follow our +reference for [Ethereum](/connect-blockchain/ethereum/), and change the RPC Provider URL & configurations corresponding to Optimism. + +::: + +## Installation + +To interact with the Optimism blockchain, you can use either [web3.js](https://web3js.readthedocs.io/en/v1.2.8/getting-started.html) or +[ethers.js](https://docs.ethers.io/v5/getting-started/) libraries with Web3Auth. + + + +## Initializing Provider (Skale) + +### Mainnet + +#### SKALE Europa Hub + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x79f99296", + rpcTarget: "https://mainnet.skalenodes.com/v1/elated-tan-skat", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Mainnet", + blockExplorer: "https://elated-tan-skat.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x79f99296", + rpcTarget: "https://mainnet.skalenodes.com/v1/elated-tan-skat", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Mainnet", + blockExplorer: "https://elated-tan-skat.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x79f99296", + rpcTarget: "https://mainnet.skalenodes.com/v1/elated-tan-skat", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Mainnet", + blockExplorer: "https://elated-tan-skat.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x79f99296", + rpcTarget: "https://mainnet.skalenodes.com/v1/elated-tan-skat", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Mainnet", + blockExplorer: "https://elated-tan-skat.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x79f99296", + rpcTarget: "https://mainnet.skalenodes.com/v1/elated-tan-skat", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Mainnet", + blockExplorer: "https://elated-tan-skat.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x79f99296", + rpcTarget: "https://mainnet.skalenodes.com/v1/elated-tan-skat", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Mainnet", + blockExplorer: "https://elated-tan-skat.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Calypso NFT Hub Mainnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5d456c62", + rpcTarget: "https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Mainnet", + blockExplorer: "https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5d456c62", + rpcTarget: "https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Mainnet", + blockExplorer: "https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5d456c62", + rpcTarget: "https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Mainnet", + blockExplorer: "https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5d456c62", + rpcTarget: "https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Mainnet", + blockExplorer: "https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5d456c62", + rpcTarget: "https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Mainnet", + blockExplorer: "https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5d456c62", + rpcTarget: "https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Mainnet", + blockExplorer: "https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Nebula Gaming Hub Mainnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x585eb4b1", + rpcTarget: "https://mainnet.skalenodes.com/v1/green-giddy-denebola", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Mainnet", + blockExplorer: "https://green-giddy-denebola.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x585eb4b1", + rpcTarget: "https://mainnet.skalenodes.com/v1/green-giddy-denebola", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Mainnet", + blockExplorer: "https://green-giddy-denebola.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x585eb4b1", + rpcTarget: "https://mainnet.skalenodes.com/v1/green-giddy-denebola", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Mainnet", + blockExplorer: "https://green-giddy-denebola.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x585eb4b1", + rpcTarget: "https://mainnet.skalenodes.com/v1/green-giddy-denebola", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Mainnet", + blockExplorer: "https://green-giddy-denebola.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x585eb4b1", + rpcTarget: "https://mainnet.skalenodes.com/v1/green-giddy-denebola", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Mainnet", + blockExplorer: "https://green-giddy-denebola.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x585eb4b1", + rpcTarget: "https://mainnet.skalenodes.com/v1/green-giddy-denebola", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Mainnet", + blockExplorer: "https://green-giddy-denebola.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Titan Community Hub Mainnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x507aaa2a", + rpcTarget: "https://mainnet.skalenodes.com/v1/parallel-stormy-spica", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Mainnet", + blockExplorer: "https://parallel-stormy-spica.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x507aaa2a", + rpcTarget: "https://mainnet.skalenodes.com/v1/parallel-stormy-spica", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Mainnet", + blockExplorer: "https://parallel-stormy-spica.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x507aaa2a", + rpcTarget: "https://mainnet.skalenodes.com/v1/parallel-stormy-spica", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Mainnet", + blockExplorer: "https://parallel-stormy-spica.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x507aaa2a", + rpcTarget: "https://mainnet.skalenodes.com/v1/parallel-stormy-spica", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Mainnet", + blockExplorer: "https://parallel-stormy-spica.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x507aaa2a", + rpcTarget: "https://mainnet.skalenodes.com/v1/parallel-stormy-spica", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Mainnet", + blockExplorer: "https://parallel-stormy-spica.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x507aaa2a", + rpcTarget: "https://mainnet.skalenodes.com/v1/parallel-stormy-spica", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Mainnet", + blockExplorer: "https://parallel-stormy-spica.explorer.mainnet.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +### Testnet + +### Testnet + +#### SKALE Europa Hub Testnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1c6199cc", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Europa Hub Testnet", + blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Calypso NFT Hub Testnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1482a7b2", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Calypso NFT Hub Testnet", + blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Nebula Gaming Hub Testnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x1dfd2731", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Nebula Gaming Hub Testnet", + blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Titan Community Hub + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x5a79c44e", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Titan Community Hub Testnet", + blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +#### SKALE Chaos Testnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +## Get User Info + + + +## Get Account and Balance + + + +## Send Transaction + + + +## Sign Transaction + + + +## Sign Message + +### Personal Sign + + + +### Sign Typed Data v1 + + + +### Sign Typed Data v3 + + + +### Sign Typed Data v4 + + + +## Smart Contract + + + +### Deploy Contract + + + +### Read From Contract + + + +### Write to Contract + + + +## Fetch User's Private Key + + diff --git a/docs/connect-blockchain/temp.mdx b/docs/connect-blockchain/temp.mdx new file mode 100644 index 000000000..374f35811 --- /dev/null +++ b/docs/connect-blockchain/temp.mdx @@ -0,0 +1,212 @@ +#### SKALE Chaos Testnet + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x50877ed6", + rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "SKALE Chaos Testnet", + blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + diff --git a/docs/connect-blockchain/zkatana.mdx b/docs/connect-blockchain/zkatana.mdx new file mode 100644 index 000000000..8b644852e --- /dev/null +++ b/docs/connect-blockchain/zkatana.mdx @@ -0,0 +1,316 @@ +--- +title: Integrate Web3Auth with the zKatana Blockchain +sidebar_label: zKatana +image: "content-hub/guides/banners/optimism.png" +displayed_sidebar: docs +keywords: [zkatana, blockchain, web3auth] +description: "Integrate Web3Auth with the zKatana Blockchain | Documentation - Web3Auth" +--- + +import InstallationSnippet from "@site/src/common/docs/_evm-installation.mdx"; +import GetUserInfoSnippet from "@site/src/common/docs/_get-userinfo.mdx"; +import GetAccountAndBalanceSnippet from "@site/src/common/docs/_evm-get-account-n-balance.mdx"; +import SendTransactionSnippet from "@site/src/common/docs/_evm-send-transaction.mdx"; +import SignTransactionSnippet from "@site/src/common/docs/_evm-sign-transaction.mdx"; +import SignPersonalMessageSnippet from "@site/src/common/docs/_evm-sign-message-personal-sign.mdx"; +import SignTypedDataV1Snippet from "@site/src/common/docs/_evm-sign-message-v1.mdx"; +import SignTypedDataV3Snippet from "@site/src/common/docs/_evm-sign-message-v3.mdx"; +import SignTypedDataV4Snippet from "@site/src/common/docs/_evm-sign-message-v4.mdx"; +import SmartContractSoliditySnippet from "@site/src/common/docs/_smart-contract-solidity.mdx"; +import DeployContractSolidityDeploySnippet from "@site/src/common/docs/_smart-contract-solidity-deploy.mdx"; +import DeployContractSolidityReadSnippet from "@site/src/common/docs/_smart-contract-solidity-read.mdx"; +import DeployContractSolidityWriteSnippet from "@site/src/common/docs/_smart-contract-solidity-write.mdx"; +import FetchUserPrivateKeySnippet from "@site/src/common/docs/_evm-fetch-user-private-key.mdx"; +import TabItem from "@theme/TabItem"; +import Tabs from "@theme/Tabs"; + +While using the Web3Auth Web SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the +[Metamask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like +[`web3.js`](https://web3js.readthedocs.io/en/v1.2.8/getting-started.html), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make +[zKatana](https://astar.network/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, +`read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started quickly on that. + +:::info + +This reference is for the `Web`, however, you can use zKatana on `Android`, `iOS`, `React Native`, `Flutter`, & `Unity` as well. Please follow our +reference for [Ethereum](/connect-blockchain/ethereum/), and change the RPC Provider URL & configurations corresponding to zKatana. + +::: + +## Installation + +To interact with the zKatana blockchain, you can use either [web3.js](https://web3js.readthedocs.io/en/v1.2.8/getting-started.html) or +[ethers.js](https://docs.ethers.io/v5/getting-started/) libraries with Web3Auth. + + + +## Initializing Provider (zKatana) + +### Testnet + +Testnet Block Explorer URL: https://zkatana.blockscout.com + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x133120", // hex of 1261120 + rpcTarget: "https://rpc.zkatana.gelato.digital", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "zKatana Testnet", + blockExplorer: "https://zkatana.blockscout.com", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import Web3 from "web3"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x133120", // hex of 1261120 + rpcTarget: "https://rpc.zkatana.gelato.digital", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "zKatana Testnet", + blockExplorer: "https://zkatana.blockscout.com", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const Web3 = require("web3"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x133120", // hex of 1261120 + rpcTarget: "https://rpc.zkatana.gelato.digital", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "zKatana Testnet", + blockExplorer: "https://zkatana.blockscout.com", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const web3 = new Web3(web3authProvider); // web3auth.provider +``` + + + + + + + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x133120", // hex of 1261120 + rpcTarget: "https://rpc.zkatana.gelato.digital", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "zKatana Testnet", + blockExplorer: "https://zkatana.blockscout.com", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +import { Web3Auth } from "@web3auth/modal"; +import { CHAIN_NAMESPACES } from "@web3auth/base"; +import { ethers } from "ethers"; + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x133120", // hex of 1261120 + rpcTarget: "https://rpc.zkatana.gelato.digital", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "zKatana Testnet", + blockExplorer: "https://zkatana.blockscout.com", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + +```tsx +const { Web3Auth } = require("@web3auth/modal"); +const ethers = require("ethers"); + +const web3auth = new Web3Auth({ + clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard + web3AuthNetwork: "sapphire_mainnet", + chainConfig: { + chainNamespace: "eip155", + chainId: "0x133120", // hex of 1261120 + rpcTarget: "https://rpc.zkatana.gelato.digital", + // Avoid using public rpcTarget in production. + // Use services like Infura, Quicknode etc + displayName: "zKatana Testnet", + blockExplorer: "https://zkatana.blockscout.com", + ticker: "ETH", + tickerName: "ETH", + }, +}); +await web3auth.initModal(); + +const web3authProvider = await web3auth.connect(); + +const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider +``` + + + + + + + +## Get User Info + + + +## Get Account and Balance + + + +## Send Transaction + + + +## Sign Transaction + + + +## Sign Message + +### Personal Sign + + + +### Sign Typed Data v1 + + + +### Sign Typed Data v3 + + + +### Sign Typed Data v4 + + + +## Smart Contract + + + +### Deploy Contract + + + +### Read From Contract + + + +### Write to Contract + + + +## Fetch User's Private Key + + diff --git a/sidebars.js b/sidebars.js index 0a4faa336..0f1612fd8 100644 --- a/sidebars.js +++ b/sidebars.js @@ -235,6 +235,8 @@ module.exports = { "connect-blockchain/klaytn", "connect-blockchain/flare", "connect-blockchain/songbird", + "connect-blockchain/zkatana", + "connect-blockchain/skale", ], collapsible: true, collapsed: false, From bffbec2d8cb65a3bd84ed816d871053e6ef38f78 Mon Sep 17 00:00:00 2001 From: Maharshi Mishra Date: Mon, 23 Oct 2023 11:27:19 +0530 Subject: [PATCH 4/5] added banners for skale and zkatana --- docs/connect-blockchain/new.mdx | 1066 ----------------- docs/connect-blockchain/skale.mdx | 2 +- docs/connect-blockchain/temp.mdx | 212 ---- docs/connect-blockchain/zkatana.mdx | 2 +- static/content-hub/guides/banners/skale.png | Bin 0 -> 36974 bytes static/content-hub/guides/banners/zkatana.png | Bin 0 -> 69217 bytes 6 files changed, 2 insertions(+), 1280 deletions(-) delete mode 100644 docs/connect-blockchain/new.mdx delete mode 100644 docs/connect-blockchain/temp.mdx create mode 100644 static/content-hub/guides/banners/skale.png create mode 100644 static/content-hub/guides/banners/zkatana.png diff --git a/docs/connect-blockchain/new.mdx b/docs/connect-blockchain/new.mdx deleted file mode 100644 index 2bb92071a..000000000 --- a/docs/connect-blockchain/new.mdx +++ /dev/null @@ -1,1066 +0,0 @@ -### Testnet - -#### SKALE Europa Hub Testnet - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1c6199cc", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Europa Hub Testnet", - blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1c6199cc", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Europa Hub Testnet", - blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const Web3 = require("web3"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1c6199cc", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Europa Hub Testnet", - blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1c6199cc", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Europa Hub Testnet", - blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1c6199cc", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Europa Hub Testnet", - blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const ethers = require("ethers"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1c6199cc", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-legal-crazy-castor", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Europa Hub Testnet", - blockExplorer: "https://staging-legal-crazy-castor.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - - - - -#### SKALE Calypso NFT Hub Testnet - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1482a7b2", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Calypso NFT Hub Testnet", - blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1482a7b2", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Calypso NFT Hub Testnet", - blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const Web3 = require("web3"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1482a7b2", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Calypso NFT Hub Testnet", - blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1482a7b2", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Calypso NFT Hub Testnet", - blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1482a7b2", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Calypso NFT Hub Testnet", - blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const ethers = require("ethers"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1482a7b2", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-utter-unripe-menkar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Calypso NFT Hub Testnet", - blockExplorer: "https://staging-utter-unripe-menkar.explorer.staging-v3.skalenodes.com/ ", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - - - - -#### SKALE Nebula Gaming Hub Testnet - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1dfd2731", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Nebula Gaming Hub Testnet", - blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1dfd2731", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Nebula Gaming Hub Testnet", - blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const Web3 = require("web3"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1dfd2731", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Nebula Gaming Hub Testnet", - blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1dfd2731", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Nebula Gaming Hub Testnet", - blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1dfd2731", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Nebula Gaming Hub Testnet", - blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const ethers = require("ethers"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x1dfd2731", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-faint-slimy-achird", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Nebula Gaming Hub Testnet", - blockExplorer: "https://staging-faint-slimy-achird.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - - - - -#### SKALE Titan Community Hub - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x5a79c44e", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Titan Community Hub Testnet", - blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x5a79c44e", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Titan Community Hub Testnet", - blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const Web3 = require("web3"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x5a79c44e", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Titan Community Hub Testnet", - blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x5a79c44e", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Titan Community Hub Testnet", - blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x5a79c44e", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Titan Community Hub Testnet", - blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const ethers = require("ethers"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x5a79c44e", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-aware-chief-gianfar", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Titan Community Hub Testnet", - blockExplorer: "https://staging-aware-chief-gianfar.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - - - - -#### SKALE Chaos Testnet - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const Web3 = require("web3"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const ethers = require("ethers"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - - - diff --git a/docs/connect-blockchain/skale.mdx b/docs/connect-blockchain/skale.mdx index 510a5257d..43af86262 100644 --- a/docs/connect-blockchain/skale.mdx +++ b/docs/connect-blockchain/skale.mdx @@ -1,7 +1,7 @@ --- title: Integrate Web3Auth with the Skale Blockchain sidebar_label: Skale -image: "content-hub/guides/banners/optimism.png" +image: "content-hub/guides/banners/skale.png" displayed_sidebar: docs keywords: [skale, blockchain, web3auth] description: "Integrate Web3Auth with the Skale Blockchain | Documentation - Web3Auth" diff --git a/docs/connect-blockchain/temp.mdx b/docs/connect-blockchain/temp.mdx deleted file mode 100644 index 374f35811..000000000 --- a/docs/connect-blockchain/temp.mdx +++ /dev/null @@ -1,212 +0,0 @@ -#### SKALE Chaos Testnet - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import Web3 from "web3"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const Web3 = require("web3"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const web3 = new Web3(web3authProvider); // web3auth.provider -``` - - - - - - - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -import { Web3Auth } from "@web3auth/modal"; -import { CHAIN_NAMESPACES } from "@web3auth/base"; -import { ethers } from "ethers"; - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - -```tsx -const { Web3Auth } = require("@web3auth/modal"); -const ethers = require("ethers"); - -const web3auth = new Web3Auth({ - clientId: "BPi5PB_UiIZ-cPz1GtV5i1I2iOSOHuimiXBI0e-Oe_u6X3oVAbCiAZOTEBtTXw4tsluTITPqA8zMsfxIKMjiqNQ", // get it from Web3Auth Dashboard - web3AuthNetwork: "sapphire_mainnet", - chainConfig: { - chainNamespace: "eip155", - chainId: "0x50877ed6", - rpcTarget: "https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix", - // Avoid using public rpcTarget in production. - // Use services like Infura, Quicknode etc - displayName: "SKALE Chaos Testnet", - blockExplorer: "https://staging-fast-active-bellatrix.explorer.staging-v3.skalenodes.com/", - ticker: "ETH", - tickerName: "ETH", - }, -}); -await web3auth.initModal(); - -const web3authProvider = await web3auth.connect(); - -const provider = new ethers.providers.Web3Provider(web3authProvider); // web3auth.provider -``` - - - - - - diff --git a/docs/connect-blockchain/zkatana.mdx b/docs/connect-blockchain/zkatana.mdx index 8b644852e..e7aff2f4c 100644 --- a/docs/connect-blockchain/zkatana.mdx +++ b/docs/connect-blockchain/zkatana.mdx @@ -1,7 +1,7 @@ --- title: Integrate Web3Auth with the zKatana Blockchain sidebar_label: zKatana -image: "content-hub/guides/banners/optimism.png" +image: "content-hub/guides/banners/zkatana.png" displayed_sidebar: docs keywords: [zkatana, blockchain, web3auth] description: "Integrate Web3Auth with the zKatana Blockchain | Documentation - Web3Auth" diff --git a/static/content-hub/guides/banners/skale.png b/static/content-hub/guides/banners/skale.png new file mode 100644 index 0000000000000000000000000000000000000000..611bdba0918df91bac574d5a378ced6d871e2a81 GIT binary patch literal 36974 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 Date: Mon, 23 Oct 2023 12:12:43 +0530 Subject: [PATCH 5/5] added to contentHubMaps --- docs/connect-blockchain/skale.mdx | 2 -- src/components/ContentHubMaps/index.ts | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/docs/connect-blockchain/skale.mdx b/docs/connect-blockchain/skale.mdx index 43af86262..4d2a8a732 100644 --- a/docs/connect-blockchain/skale.mdx +++ b/docs/connect-blockchain/skale.mdx @@ -902,8 +902,6 @@ const provider = new ethers.providers.Web3Provider(web3authProvider); // web3aut ### Testnet -### Testnet - #### SKALE Europa Hub Testnet