Compare commits

..
Author SHA1 Message Date
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
046603ac54 Version Packages (#2068)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-12-08 22:29:51 -08:00
YashandGitHub bcfa9463bb Fix deployments (#2067) 2023-12-09 04:37:58 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
42bda873b4 Version Packages (#2054)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-12-08 18:04:02 -08:00
Joaquim VergesandGitHub d2001ca464 sync chains (#2066) 2023-12-09 00:14:35 +00:00
Manan TankandGitHub c8ba5cf863 [react] - Add option to only show Official WC Modal, Fix focus trap when CW Modal is hidden (#2063) 2023-12-08 13:14:04 +00:00
Joaquim VergesandGitHub 85842c1596 [SDK] expose BaseFee in getDynamicFeeData() (#2062) 2023-12-07 23:29:17 +00:00
FirekeeperandGitHub 0fb2f1fc5e [Unity] Support for sdk.wallet.GetEmail (#2061) 2023-12-07 22:21:23 +00:00
Jonas DanielsandGitHub 497677f359 fix(sdk): roles.setAll.prepare() correctly sorts role removals (#2059) 2023-12-07 18:48:16 +00:00
Manan TankandGitHub 15ae5e7f95 [react] Add "Open Official WalletConnect Modal" in ConnectWallet (#2058) 2023-12-07 16:57:52 +00:00
FirekeeperandGitHub 5a0283d083 [Unity] Reload local wallet in case of reconnection (sw) (#2056) 2023-12-07 00:32:24 +00:00
Winston YeoandGitHub 9496606964 [wallets]: Winston/custom auth endpoint (#2052) 2023-12-06 23:35:47 +00:00
Manan TankandGitHub b50e4a41b5 [react] Use WalletConnect to connect MM on mobile by default (#2029) 2023-12-06 19:52:46 +00:00
YashandGitHub e595d4d92f [SDK] Update implementation (#2053) 2023-12-06 19:29:10 +00:00
98 changed files with 2130 additions and 296 deletions
+14
View File
@@ -1,5 +1,19 @@
# @thirdweb-dev/auth
## 4.1.16
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.2.1
## 4.1.15
### Patch Changes
- Updated dependencies [[`94966069`](https://github.com/thirdweb-dev/js/commit/9496606964d65268f8ee6bf9f78b2786e99d33ac), [`15ae5e7f`](https://github.com/thirdweb-dev/js/commit/15ae5e7f95a482a9736923c0e10916a0a6115c3d)]:
- @thirdweb-dev/wallets@2.2.0
## 4.1.14
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/auth",
"version": "4.1.14",
"version": "4.1.16",
"main": "dist/thirdweb-dev-auth.cjs.js",
"module": "dist/thirdweb-dev-auth.esm.js",
"browser": {
+6
View File
@@ -1,5 +1,11 @@
# @thirdweb-dev/chains
## 0.1.61
### Patch Changes
- [#2066](https://github.com/thirdweb-dev/js/pull/2066) [`d2001ca4`](https://github.com/thirdweb-dev/js/commit/d2001ca464aa699ac821c97eb37de7409ba865f3) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Updatechains
## 0.1.60
### Patch Changes
+6 -9
View File
@@ -20,20 +20,17 @@ export default {
"format": "png"
},
"infoURL": "https://shimmer.network",
"name": "ShimmerEVM Testnet",
"name": "ShimmerEVM Testnet Deprecated 1072",
"nativeCurrency": {
"name": "SMR",
"symbol": "SMR",
"decimals": 6
},
"networkId": 1072,
"rpc": [
"https://shimmerevm-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1072.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://json-rpc.evm.testnet.shimmer.network"
],
"shortName": "shimmerevm-testnet",
"slug": "shimmerevm-testnet",
"rpc": [],
"shortName": "shimmerevm-testnet-deprecated-1072",
"slug": "shimmerevm-testnet-deprecated-1072",
"status": "deprecated",
"testnet": true,
"title": "ShimmerEVM Testnet"
"title": "ShimmerEVM Testnet Deprecated 1072"
} as const satisfies Chain;
+39
View File
@@ -0,0 +1,39 @@
import type { Chain } from "../src/types";
export default {
"chain": "ShimmerEVM",
"chainId": 1073,
"explorers": [
{
"name": "explorer",
"url": "https://explorer.evm.testnet.shimmer.network",
"standard": "EIP3091"
}
],
"faucets": [
"https://evm-toolkit.evm.testnet.shimmer.network",
"https://evm-faucet.testnet.shimmer.network"
],
"icon": {
"url": "ipfs://bafkreibky2sy6qhi6arktayvologkrgu5kudpgdxfkx4uosbvmstz7v4di",
"width": 720,
"height": 720,
"format": "png"
},
"infoURL": "https://shimmer.network",
"name": "ShimmerEVM Testnet",
"nativeCurrency": {
"name": "SMR",
"symbol": "SMR",
"decimals": 6
},
"networkId": 1073,
"rpc": [
"https://shimmerevm-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1073.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://json-rpc.evm.testnet.shimmer.network"
],
"shortName": "shimmerevm-testnet",
"slug": "shimmerevm-testnet",
"testnet": true,
"title": "ShimmerEVM Testnet"
} as const satisfies Chain;
+37
View File
@@ -0,0 +1,37 @@
import type { Chain } from "../src/types";
export default {
"chain": "ETH",
"chainId": 11155420,
"explorers": [
{
"name": "opscout",
"url": "https://optimism-sepolia.blockscout.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
}
}
],
"faucets": [
"https://app.optimism.io/faucet"
],
"infoURL": "https://optimism.io",
"name": "OP Sepolia Testnet",
"nativeCurrency": {
"name": "Sepolia Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 11155420,
"rpc": [
"https://op-sepolia-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://11155420.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://sepolia.optimism.io"
],
"shortName": "opsep",
"slug": "op-sepolia-testnet",
"testnet": true
} as const satisfies Chain;
+33
View File
@@ -0,0 +1,33 @@
import type { Chain } from "../src/types";
export default {
"chain": "TILTYARD",
"chainId": 1127469,
"explorers": [
{
"name": "TILTYARD Explorer",
"url": "http://testnet-explorer.tiltyard.gg",
"standard": "EIP3091"
}
],
"faucets": [],
"features": [
{
"name": "EIP1559"
}
],
"name": "Tiltyard Subnet",
"nativeCurrency": {
"name": "Tiltyard Token",
"symbol": "TILTG",
"decimals": 18
},
"networkId": 1127469,
"rpc": [
"https://tiltyard-subnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1127469.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/tiltyard/testnet/rpc"
],
"shortName": "tiltyard",
"slug": "tiltyard-subnet",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 12035,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": ".svg"
},
"infoURL": "https://avacloud.io",
"name": "QI M 11272",
"nativeCurrency": {
"name": "QI M 11272 Token",
"symbol": "JZW",
"decimals": 18
},
"networkId": 12035,
"redFlags": [],
"rpc": [
"https://qi-m-11272.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://12035.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avacloud-dev.io/b19c9e32-f359-451f-ad15-7ec784625c04"
],
"shortName": "QI M 11272",
"slug": "qi-m-11272",
"testnet": true
} as const satisfies Chain;
+1 -7
View File
@@ -6,13 +6,7 @@ export default {
{
"name": "Blockscout",
"url": "https://wan-red-ain.explorer.mainnet.skalenodes.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmT5KKrpNt6duU8QfwaYw3xf4ifTBPtjahpWsMi3gsFmcS",
"width": 440,
"height": 600,
"format": "png"
}
"standard": "EIP3091"
}
],
"faucets": [
+1 -13
View File
@@ -6,22 +6,10 @@ export default {
{
"name": "etndscan",
"url": "https://scan.etnd.pro",
"standard": "none",
"icon": {
"url": "ipfs://Qmd26eRJxPb1jJg5Q4mC2M4kD9Jrs5vmcnr5LczHFMGwSD",
"width": 128,
"height": 128,
"format": "png"
}
"standard": "none"
}
],
"faucets": [],
"icon": {
"url": "ipfs://Qmd26eRJxPb1jJg5Q4mC2M4kD9Jrs5vmcnr5LczHFMGwSD",
"width": 128,
"height": 128,
"format": "png"
},
"infoURL": "https://www.etnd.pro",
"name": "ETND Chain Mainnets",
"nativeCurrency": {
+43
View File
@@ -0,0 +1,43 @@
import type { Chain } from "../src/types";
export default {
"chain": "Immutable zkEVM",
"chainId": 13473,
"explorers": [
{
"name": "Immutable Testnet explorer",
"url": "https://explorer.testnet.immutable.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmXFUYFW4e6wifbU9LKVq7owM14bnE6ZbbYq3bn1jBP3Mw",
"width": 1168,
"height": 1168,
"format": "png"
}
}
],
"faucets": [
"https://docs.immutable.com/docs/zkEVM/guides/faucet"
],
"icon": {
"url": "ipfs://QmXFUYFW4e6wifbU9LKVq7owM14bnE6ZbbYq3bn1jBP3Mw",
"width": 1168,
"height": 1168,
"format": "png"
},
"infoURL": "https://www.immutable.com",
"name": "Immutable zkEVM Testnet",
"nativeCurrency": {
"name": "Test IMX",
"symbol": "tIMX",
"decimals": 18
},
"networkId": 13473,
"rpc": [
"https://immutable-zkevm-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://13473.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.testnet.immutable.com"
],
"shortName": "imx-testnet",
"slug": "immutable-zkevm-testnet",
"testnet": true
} as const satisfies Chain;
+43
View File
@@ -0,0 +1,43 @@
import type { Chain } from "../src/types";
export default {
"chain": "Immutable zkEVM",
"chainId": 15003,
"explorers": [
{
"name": "Immutable Devnet explorer",
"url": "https://explorer.dev.immutable.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmXFUYFW4e6wifbU9LKVq7owM14bnE6ZbbYq3bn1jBP3Mw",
"width": 1168,
"height": 1168,
"format": "png"
}
}
],
"faucets": [
"https://docs.immutable.com/docs/zkEVM/guides/faucet"
],
"icon": {
"url": "ipfs://QmXFUYFW4e6wifbU9LKVq7owM14bnE6ZbbYq3bn1jBP3Mw",
"width": 1168,
"height": 1168,
"format": "png"
},
"infoURL": "https://www.immutable.com",
"name": "Immutable zkEVM Devnet",
"nativeCurrency": {
"name": "Dev IMX",
"symbol": "dIMX",
"decimals": 18
},
"networkId": 15003,
"rpc": [
"https://immutable-zkevm-devnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://15003.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.dev.immutable.com"
],
"shortName": "imx-devnet",
"slug": "immutable-zkevm-devnet",
"testnet": false
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 17026,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": ".svg"
},
"infoURL": "https://avacloud.io",
"name": "QI1204I3",
"nativeCurrency": {
"name": "QI1204I3 Token",
"symbol": "BHOX",
"decimals": 18
},
"networkId": 17026,
"redFlags": [],
"rpc": [
"https://qi1204i3.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://17026.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avacloud-test.io/e7aeac38-06b2-4aaa-87b4-2c2da10fa43e"
],
"shortName": "QI1204I3",
"slug": "qi1204i3",
"testnet": true
} as const satisfies Chain;
+3 -7
View File
@@ -12,7 +12,7 @@ export default {
"format": ".png"
},
"infoURL": "https://tryroll.com/",
"name": "Roll Testnet",
"name": "Form Testnet",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
@@ -20,13 +20,9 @@ export default {
},
"networkId": 1748,
"redFlags": [],
"rpc": [
"https://roll-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1748.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://roll.calderachain.xyz/http"
],
"rpc": [],
"shortName": "Roll",
"slug": "roll-testnet",
"slug": "form-testnet",
"testnet": true,
"title": "Roll Testnet"
} as const satisfies Chain;
-6
View File
@@ -10,12 +10,6 @@ export default {
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmePhfibWz9jnGUqF9Rven4x734br1h3LxrChYTEjbbQvo",
"width": 256,
"height": 256,
"format": "png"
},
"infoURL": "https://proofofmemes.org",
"name": "Proof Of Memes",
"nativeCurrency": {
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "MRK",
"chainId": 1909,
"explorers": [
{
"name": "blockscout",
"url": "https://merklescan.com",
"standard": "none"
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmZocJpCSLoQqoYFkF1kn7uKDuAiFRNTK8P5PoVeiigDBU",
"width": 114,
"height": 132,
"format": "png"
},
"infoURL": "https://merklescan.com",
"name": "Merkle Scan",
"nativeCurrency": {
"name": "Merkle",
"symbol": "MRK",
"decimals": 18
},
"networkId": 1909,
"rpc": [
"https://merkle-scan.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1909.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://marklechain-rpc.merklescan.com"
],
"shortName": "MRK",
"slug": "merkle-scan",
"testnet": false
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 19683,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": ".svg"
},
"infoURL": "https://avacloud.io",
"name": "ST 12-07 V1",
"nativeCurrency": {
"name": "ST 12-07 V1 Token",
"symbol": "XRL",
"decimals": 18
},
"networkId": 19683,
"redFlags": [],
"rpc": [
"https://st-12-07-v1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://19683.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avacloud-test.io/d26b972e-1832-4d3a-bf7b-d0ce1f4331c2"
],
"shortName": "ST 12-07 V1",
"slug": "st-12-07-v1",
"testnet": true
} as const satisfies Chain;
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "X1",
"chainId": 202212,
"explorers": [
{
"name": "Blockscout",
"url": "https://explorer.x1-devnet.xen.network",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
}
}
],
"faucets": [],
"infoURL": "https://docs.xen.network/x1/",
"name": "X1 Devnet",
"nativeCurrency": {
"name": "XN",
"symbol": "XN",
"decimals": 18
},
"networkId": 202212,
"rpc": [
"https://x1-devnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://202212.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://x1-devnet.xen.network"
],
"shortName": "x1-devnet",
"slug": "x1-devnet",
"testnet": false
} as const satisfies Chain;
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "X1",
"chainId": 204005,
"explorers": [
{
"name": "Blockscout",
"url": "https://explorer.x1-testnet.xen.network",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
}
}
],
"faucets": [],
"infoURL": "https://docs.xen.network/go-x1/",
"name": "X1 Network",
"nativeCurrency": {
"name": "XN",
"symbol": "XN",
"decimals": 18
},
"networkId": 204005,
"rpc": [
"https://x1-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://204005.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://x1-testnet.xen.network"
],
"shortName": "x1-testnet",
"slug": "x1-network",
"testnet": true
} as const satisfies Chain;
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "BSL",
"chainId": 21912,
"explorers": [
{
"name": "BSL Mainnet Explorer",
"url": "https://scan.nftruth.io",
"standard": "EIP3091"
}
],
"faucets": [],
"infoURL": "https://bsquarelab.com/",
"name": "BSL Mainnet",
"nativeCurrency": {
"name": "Origin NFT",
"symbol": "ONF",
"decimals": 18
},
"networkId": 21912,
"rpc": [
"https://bsl.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://21912.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"http://rpc-mainnet.nftruth.io:8545",
"ws://rpc-mainnet.nftruth.io:8645"
],
"shortName": "onf",
"slug": "bsl",
"testnet": false
} as const satisfies Chain;
+23
View File
@@ -0,0 +1,23 @@
import type { Chain } from "../src/types";
export default {
"chain": "ebro",
"chainId": 2306,
"explorers": [],
"faucets": [],
"infoURL": "https://www.ebrochain.com",
"name": "Ebro Network",
"nativeCurrency": {
"name": "Ebro",
"symbol": "ebro",
"decimals": 18
},
"networkId": 2306,
"rpc": [
"https://ebro-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://2306.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://greendinoswap.com"
],
"shortName": "ebro",
"slug": "ebro-network",
"testnet": false
} as const satisfies Chain;
+1 -6
View File
@@ -14,11 +14,6 @@ export default {
"format": "png"
}
},
{
"name": "native",
"url": "https://devnet.explorer.neon-labs.org",
"standard": "EIP3091"
},
{
"name": "neonscan",
"url": "https://devnet.neonscan.org",
@@ -35,7 +30,7 @@ export default {
"format": "png"
},
"infoURL": "https://neon-labs.org",
"name": "Neon EVM DevNet",
"name": "Neon EVM Devnet",
"nativeCurrency": {
"name": "Neon",
"symbol": "NEON",
+6 -2
View File
@@ -22,14 +22,18 @@ export default {
"format": "png"
},
"infoURL": "https://neonevm.org",
"name": "Neon EVM MainNet",
"name": "Neon EVM Mainnet",
"nativeCurrency": {
"name": "Neon",
"symbol": "NEON",
"decimals": 18
},
"networkId": 245022934,
"rpc": [],
"rpc": [
"https://neon-evm.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://245022934.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://neon-proxy-mainnet.solana.p2p.org"
],
"shortName": "neonevm-mainnet",
"slug": "neon-evm",
"testnet": false
+1
View File
@@ -36,5 +36,6 @@ export default {
],
"shortName": "neonevm-testnet",
"slug": "neon-evm-testnet",
"status": "deprecated",
"testnet": true
} as const satisfies Chain;
+1 -1
View File
@@ -5,7 +5,7 @@ export default {
"explorers": [
{
"name": "Cronos Explorer",
"url": "https://cronoscan.com",
"url": "https://explorer.cronos.org",
"standard": "none"
}
],
+28
View File
@@ -0,0 +1,28 @@
import type { Chain } from "../src/types";
export default {
"chain": "FRAX",
"chainId": 252,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "ipfs://QmQLJk5G7zF8ZDxSxkRcpHqEqcifrJEhGmEKC6zwyPXWAw/fraxchain.png",
"width": 512,
"height": 512,
"format": "PNG"
},
"infoURL": "https://mainnet.frax.com",
"name": "Fraxchain Mainnet",
"nativeCurrency": {
"name": "Frax Ether",
"symbol": "frxETH",
"decimals": 18
},
"networkId": 252,
"redFlags": [],
"rpc": [],
"shortName": "fraxchain",
"slug": "fraxchain",
"status": "incubating",
"testnet": false
} as const satisfies Chain;
+32
View File
@@ -0,0 +1,32 @@
import type { Chain } from "../src/types";
export default {
"chain": "FRAX",
"chainId": 2522,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "ipfs://QmQLJk5G7zF8ZDxSxkRcpHqEqcifrJEhGmEKC6zwyPXWAw/fraxchain.png",
"width": 512,
"height": 512,
"format": "PNG"
},
"infoURL": "https://testnet.frax.com",
"name": "Fraxchain Testnet",
"nativeCurrency": {
"name": "Frax Ether",
"symbol": "frxETH",
"decimals": 18
},
"networkId": 2522,
"redFlags": [],
"rpc": [
"https://fraxchain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://2522.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.testnet.frax.com"
],
"shortName": "fraxchain-testnet",
"slug": "fraxchain-testnet",
"status": "active",
"testnet": false
} as const satisfies Chain;
+8 -8
View File
@@ -4,14 +4,14 @@ export default {
"chainId": 2710,
"explorers": [
{
"name": "Morphism Testnet Explorer",
"url": "https://explorer-testnet.morphism.xyz",
"name": "Morph Testnet Explorer",
"url": "https://explorer-testnet.morphl2.io",
"standard": "EIP3091"
}
],
"faucets": [],
"infoURL": "https://morphism.xyz",
"name": "Morphism Testnet",
"infoURL": "https://morphl2.io",
"name": "Morph Testnet",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
@@ -23,16 +23,16 @@ export default {
"chain": "eip155-1",
"bridges": [
{
"url": "https://bridge-testnet.morphism.xyz"
"url": "https://bridge-testnet.morphl2.io"
}
]
},
"rpc": [
"https://morphism-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://morph-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://2710.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-testnet.morphism.xyz"
"https://rpc-testnet.morphl2.io"
],
"shortName": "tmorph",
"slug": "morphism-testnet",
"slug": "morph-testnet",
"testnet": true
} as const satisfies Chain;
+7 -8
View File
@@ -15,17 +15,15 @@ export default {
}
}
],
"faucets": [
"https://goerli.portal.zksync.io/faucet"
],
"faucets": [],
"icon": {
"url": "ipfs://QmRkhUD6J3B9WhT4hEWLrcFVTrBhx3CQgNC783aJsrwxSN",
"width": 512,
"height": 512,
"format": "svg"
},
"infoURL": "https://era.zksync.io/docs/",
"name": "zkSync Era Testnet",
"infoURL": "https://zksync.io/",
"name": "zkSync Era Goerli Testnet (deprecated)",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
@@ -37,16 +35,17 @@ export default {
"chain": "eip155-1",
"bridges": [
{
"url": "https://goerli.portal.zksync.io/bridge"
"url": "https://bridge.zksync.io/"
}
]
},
"rpc": [
"https://zksync-era-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://zksync-era-goerli-testnet-deprecated.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://280.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.era.zksync.dev"
],
"shortName": "zksync-goerli",
"slug": "zksync-era-testnet",
"slug": "zksync-era-goerli-testnet-deprecated",
"status": "deprecated",
"testnet": true
} as const satisfies Chain;
+44 -11
View File
@@ -1,20 +1,53 @@
import type { Chain } from "../src/types";
export default {
"chain": "OGC",
"chain": "ETH",
"chainId": 300,
"explorers": [],
"explorers": [
{
"name": "zkSync Block Explorer",
"url": "https://sepolia.explorer.zksync.io",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmRkhUD6J3B9WhT4hEWLrcFVTrBhx3CQgNC783aJsrwxSN",
"width": 512,
"height": 512,
"format": "svg"
}
}
],
"faucets": [],
"infoURL": "https://docs.gnosischain.com",
"name": "(deprecated) Optimism on GC",
"icon": {
"url": "ipfs://QmRkhUD6J3B9WhT4hEWLrcFVTrBhx3CQgNC783aJsrwxSN",
"width": 512,
"height": 512,
"format": "svg"
},
"infoURL": "https://zksync.io/",
"name": "zkSync Sepolia Testnet",
"nativeCurrency": {
"name": "xDAI",
"symbol": "xDAI",
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 300,
"rpc": [],
"shortName": "ogc",
"slug": "deprecated-optimism-on-gc",
"status": "deprecated",
"testnet": false
"parent": {
"type": "L2",
"chain": "eip155-1",
"bridges": [
{
"url": "https://bridge.zksync.io/"
}
]
},
"redFlags": [
"reusedChainId"
],
"rpc": [
"https://zksync-sepolia-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://300.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://sepolia.era.zksync.dev"
],
"shortName": "zksync-sepolia",
"slug": "zksync-sepolia-testnet",
"testnet": true
} as const satisfies Chain;
+3 -3
View File
@@ -23,7 +23,7 @@ export default {
"format": "svg"
},
"infoURL": "https://zksync.io/",
"name": "zkSync Era Mainnet",
"name": "zkSync Mainnet",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
@@ -40,11 +40,11 @@ export default {
]
},
"rpc": [
"https://zksync-era.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://zksync.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://324.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet.era.zksync.io"
],
"shortName": "zksync",
"slug": "zksync-era",
"slug": "zksync",
"testnet": false
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 35730,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": ".svg"
},
"infoURL": "https://avacloud.io",
"name": "QR1129I1",
"nativeCurrency": {
"name": "QR1129I1 Token",
"symbol": "YXAX",
"decimals": 18
},
"networkId": 35730,
"redFlags": [],
"rpc": [
"https://qr1129i1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://35730.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/qr1129i1/testnet/rpc"
],
"shortName": "QR1129I1",
"slug": "qr1129i1",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 36908,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": ".svg"
},
"infoURL": "https://avacloud.io",
"name": "QR1205s1",
"nativeCurrency": {
"name": "QR1205s1 Token",
"symbol": "MDN",
"decimals": 18
},
"networkId": 36908,
"redFlags": [],
"rpc": [
"https://qr1205s1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://36908.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/qr1205s1/testnet/rpc"
],
"shortName": "QR1205s1",
"slug": "qr1205s1",
"testnet": true
} as const satisfies Chain;
+24
View File
@@ -0,0 +1,24 @@
import type { Chain } from "../src/types";
export default {
"chain": "Firechain",
"chainId": 3885,
"explorers": [],
"faucets": [],
"infoURL": "https://docs.thefirechain.com/",
"name": "Firechain zkEVM Ghostrider",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 3885,
"rpc": [
"https://firechain-zkevm-ghostrider.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://3885.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.zkevm.ghostrider.thefirechain.com"
],
"shortName": "firechain-zkEVM-ghostrider",
"slug": "firechain-zkevm-ghostrider",
"testnet": false,
"title": "Firechain zkEVM Ghostrider"
} as const satisfies Chain;
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "X1",
"chainId": 4003,
"explorers": [
{
"name": "Blockscout",
"url": "https://explorer.x1-fastnet.xen.network",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
}
}
],
"faucets": [],
"infoURL": "https://docs.xen.network/go-x1/",
"name": "X1 Fastnet",
"nativeCurrency": {
"name": "XN",
"symbol": "XN",
"decimals": 18
},
"networkId": 4003,
"rpc": [
"https://x1-fastnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://4003.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://x1-fastnet.xen.network"
],
"shortName": "x1-fastnet",
"slug": "x1-fastnet",
"testnet": false
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "XFI",
"chainId": 4157,
"explorers": [
{
"name": "Scan Testnet",
"url": "https://scan.testnet.ms/",
"standard": "EIP1559"
}
],
"faucets": [],
"features": [],
"name": "CrossFi Testnet",
"nativeCurrency": {
"name": "XFI",
"symbol": "XFI",
"decimals": 18
},
"networkId": 4157,
"redFlags": [],
"rpc": [
"https://crossfi-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://4157.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.testnet.ms/"
],
"shortName": "XFI",
"slug": "crossfi-testnet",
"testnet": true,
"title": "https://scan.testnet.ms/"
} as const satisfies Chain;
+49
View File
@@ -0,0 +1,49 @@
import type { Chain } from "../src/types";
export default {
"chain": "ETH",
"chainId": 43851,
"explorers": [
{
"name": "ZKFair Testnet Info",
"url": "https://testnet-scan.zkfair.io",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmVb682D4mUXkKNP28xxJDNgSYbDLvEc3kVYx7TQxEa6Cw",
"width": 400,
"height": 400,
"format": "jpg"
}
}
],
"faucets": [],
"features": [
{
"name": "EIP155"
},
{
"name": "EIP1559"
}
],
"icon": {
"url": "ipfs://QmVb682D4mUXkKNP28xxJDNgSYbDLvEc3kVYx7TQxEa6Cw",
"width": 400,
"height": 400,
"format": "jpg"
},
"infoURL": "https://zkfair.io",
"name": "ZKFair Testnet",
"nativeCurrency": {
"name": "USDC Token",
"symbol": "USDC",
"decimals": 18
},
"networkId": 43851,
"rpc": [
"https://zkfair-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://43851.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rpc.zkfair.io"
],
"shortName": "ZKFair-Testnet",
"slug": "zkfair-testnet",
"testnet": true
} as const satisfies Chain;
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "Areon",
"chainId": 463,
"explorers": [
{
"name": "AreonScan",
"url": "https://areonscan.com",
"standard": "none"
}
],
"faucets": [],
"icon": {
"url": "ipfs://bafkreihs2nrnizpcuzjmuu2yi7wrtwd7qlqje46qnil5bnntfbfkb2roea",
"width": 1000,
"height": 1000,
"format": "png"
},
"infoURL": "https://areon.network",
"name": "Areon Network Mainnet",
"nativeCurrency": {
"name": "Areon",
"symbol": "AREA",
"decimals": 18
},
"networkId": 463,
"rpc": [
"https://areon-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://463.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-rpc.areon.network"
],
"shortName": "area",
"slug": "areon-network",
"testnet": false
} as const satisfies Chain;
+2 -2
View File
@@ -5,7 +5,7 @@ export default {
"explorers": [
{
"name": "Scroll Sepolia Etherscan",
"url": "https://sepolia.scrollscan.dev",
"url": "https://sepolia.scrollscan.com",
"standard": "EIP3091"
},
{
@@ -28,7 +28,7 @@ export default {
"chain": "eip155-11155111",
"bridges": [
{
"url": "https://scroll.io/bridge"
"url": "https://sepolia.scroll.io/bridge"
}
]
},
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 56914,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "KK1223",
"nativeCurrency": {
"name": "KK1223 Token",
"symbol": "KLK",
"decimals": 18
},
"networkId": 56914,
"redFlags": [],
"rpc": [
"https://kk1223.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://56914.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avacloud-dev.io/bf540c23-4601-4768-9e26-f2e5f0f89c18"
],
"shortName": "KK1223",
"slug": "kk1223",
"testnet": true
} as const satisfies Chain;
+41
View File
@@ -0,0 +1,41 @@
import type { Chain } from "../src/types";
export default {
"chain": "GCODE",
"chainId": 59971,
"explorers": [
{
"name": "Genesys Scan",
"url": "https://genesysscan.io",
"standard": "none",
"icon": {
"url": "ipfs://bafkreihgmpaceze7rxpajv7yrlx3cb6daqubippkpvgryzairtaubsjjoe",
"width": 512,
"height": 512,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://bafkreihgmpaceze7rxpajv7yrlx3cb6daqubippkpvgryzairtaubsjjoe",
"width": 512,
"height": 512,
"format": "png"
},
"infoURL": "https://genesyscode.io",
"name": "Genesys Code Mainnet",
"nativeCurrency": {
"name": "GenesysCode",
"symbol": "GCODE",
"decimals": 18
},
"networkId": 59971,
"rpc": [
"https://genesys-code.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://59971.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet.genesyscode.io/"
],
"shortName": "gcode",
"slug": "genesys-code",
"testnet": false
} as const satisfies Chain;
+11 -10
View File
@@ -1,11 +1,11 @@
import type { Chain } from "../src/types";
export default {
"chain": "RTH",
"chain": "HYP",
"chainId": 622277,
"explorers": [
{
"name": "rethereum",
"url": "https://explorer.rethereum.org",
"name": "hypra",
"url": "https://explorer.hypra.network",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
@@ -30,22 +30,23 @@ export default {
"height": 830,
"format": "png"
},
"infoURL": "https://www.rethereum.org",
"name": "Rethereum Mainnet",
"infoURL": "https://www.hypra.network",
"name": "Hypra Mainnet",
"nativeCurrency": {
"name": "Rethereum",
"symbol": "RTH",
"name": "Hypra",
"symbol": "HYP",
"decimals": 18
},
"networkId": 622277,
"rpc": [
"https://rethereum.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://hypra.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://622277.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.hypra.network",
"https://rpc.rethereum.org",
"https://rethereum.rpc.restratagem.com",
"https://rpc.rthcentral.org"
],
"shortName": "rth",
"slug": "rethereum",
"shortName": "hyp",
"slug": "hypra",
"testnet": false
} as const satisfies Chain;
@@ -1,7 +1,7 @@
import type { Chain } from "../src/types";
export default {
"chain": "AUT",
"chainId": 65010000,
"chainId": 65010001,
"explorers": [
{
"name": "autonity-blockscout",
@@ -19,20 +19,20 @@ export default {
"format": "png"
},
"infoURL": "https://autonity.org/",
"name": "Autonity Bakerloo (Thames) Testnet",
"name": "Autonity Bakerloo (Barada) Testnet",
"nativeCurrency": {
"name": "Bakerloo Auton",
"symbol": "ATN",
"decimals": 18
},
"networkId": 65010000,
"networkId": 65010001,
"rpc": [
"https://autonity-bakerloo-thames-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://65010000.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://autonity-bakerloo-barada-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://65010001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc1.bakerloo.autonity.org/",
"wss://rpc1.bakerloo.autonity.org/ws/"
],
"shortName": "bakerloo-0",
"slug": "autonity-bakerloo-thames-testnet",
"shortName": "bakerloo-01",
"slug": "autonity-bakerloo-barada-testnet",
"testnet": true
} as const satisfies Chain;
+29
View File
@@ -0,0 +1,29 @@
import type { Chain } from "../src/types";
export default {
"chain": "Kalichain",
"chainId": 653,
"explorers": [
{
"name": "kalichain explorer",
"url": "https://explorer.kalichain.com",
"standard": "EIP3091"
}
],
"faucets": [],
"infoURL": "https://kalichain.com",
"name": "Kalichain Mainnet",
"nativeCurrency": {
"name": "kalis",
"symbol": "KALIS",
"decimals": 18
},
"networkId": 653,
"rpc": [
"https://kalichain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://653.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.kalichain.com"
],
"shortName": "kalichain",
"slug": "kalichain",
"testnet": false
} as const satisfies Chain;
+27
View File
@@ -0,0 +1,27 @@
import type { Chain } from "../src/types";
export default {
"chain": "OCASH",
"chainId": 660868,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://ipfs.io/ipfs/QmbwuoezvkfZBY9nrZ65n3iHGyhJG6yDRyhPjqE6k3uCiM",
"width": 350,
"height": 350,
"format": "PNG"
},
"infoURL": "https://www.overline.network",
"name": "Ocash testnet",
"nativeCurrency": {
"name": "OCASH",
"symbol": "OCASH",
"decimals": 18
},
"networkId": 660868,
"redFlags": [],
"rpc": [],
"shortName": "ocash",
"slug": "ocash-testnet",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 69740,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": ".svg"
},
"infoURL": "https://avacloud.io",
"name": "Will's Testnet",
"nativeCurrency": {
"name": "Will's Testnet Token",
"symbol": "WLDVNT",
"decimals": 18
},
"networkId": 69740,
"redFlags": [],
"rpc": [
"https://will-s-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://69740.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "Will's Testnet",
"slug": "will-s-testnet",
"testnet": true
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 70466,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": "svg"
},
"infoURL": "https://avacloud.io",
"name": "Cohan test3",
"nativeCurrency": {
"name": "Cohan test3 Token",
"symbol": "HYN",
"decimals": 18
},
"networkId": 70466,
"redFlags": [],
"rpc": [
"https://cohan-test3.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://70466.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avacloud-dev.io/f44b72ee-0574-44d2-a10b-363a74964145"
],
"shortName": "Cohan test3",
"slug": "cohan-test3",
"testnet": true
} as const satisfies Chain;
+24
View File
@@ -0,0 +1,24 @@
import type { Chain } from "../src/types";
export default {
"chain": "BLU",
"chainId": 727,
"explorers": [],
"faucets": [],
"infoURL": "https://www.blucrates.com",
"name": "Blucrates",
"nativeCurrency": {
"name": "Blucrates",
"symbol": "BLU",
"decimals": 18
},
"networkId": 727,
"rpc": [
"https://blucrates.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://727.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://data.bluchain.pro"
],
"shortName": "blu",
"slip44": 727,
"slug": "blucrates",
"testnet": false
} as const satisfies Chain;
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 80182,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": ".svg"
},
"infoURL": "https://avacloud.io",
"name": "QI M 12051",
"nativeCurrency": {
"name": "QI M 12051 Token",
"symbol": "VTV",
"decimals": 18
},
"networkId": 80182,
"redFlags": [],
"rpc": [
"https://qi-m-12051.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://80182.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avacloud-dev.io/b19c9e32-f359-451f-ad15-7ec784625c04"
],
"shortName": "QI M 12051",
"slug": "qi-m-12051",
"testnet": true
} as const satisfies Chain;
+29
View File
@@ -0,0 +1,29 @@
import type { Chain } from "../src/types";
export default {
"chain": "Nordek",
"chainId": 81041,
"explorers": [
{
"name": "nordek",
"url": "https://nordekscan.com",
"standard": "EIP3091"
}
],
"faucets": [],
"infoURL": "https://nordekscan.com",
"name": "Nordek Mainnet",
"nativeCurrency": {
"name": "NRK",
"symbol": "NRK",
"decimals": 18
},
"networkId": 81041,
"rpc": [
"https://nordek.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://81041.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-rpc.nordekscan.com"
],
"shortName": "nordek",
"slug": "nordek",
"testnet": false
} as const satisfies Chain;
+39
View File
@@ -0,0 +1,39 @@
import type { Chain } from "../src/types";
export default {
"chain": "Firechain",
"chainId": 814,
"explorers": [],
"faucets": [],
"icon": {
"url": "ipfs://QmYjuztyURb3Fc6ZTLgCbwQa64CcVoigF5j9cafzuSbqgf",
"width": 512,
"height": 512,
"format": "png"
},
"infoURL": "https://docs.thefirechain.com/",
"name": "Firechain zkEVM",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 814,
"parent": {
"type": "L2",
"chain": "eip155-1",
"bridges": [
{
"url": "https://zkevm.bridge.rpc.thefirechain.com"
}
]
},
"rpc": [
"https://firechain-zkevm.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://814.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.zkevm.thefirechain.com"
],
"shortName": "firechan-zkEVM",
"slug": "firechain-zkevm",
"testnet": false,
"title": "Firechain zkEVM"
} as const satisfies Chain;
+1 -1
View File
@@ -5,7 +5,7 @@ export default {
"explorers": [
{
"name": "blockscout",
"url": "https://testnet.torusscan.com",
"url": "https://testnet.toruscan.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
+31
View File
@@ -0,0 +1,31 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 88883,
"explorers": [],
"faucets": [],
"features": [],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
"height": 256,
"format": ".svg"
},
"infoURL": "https://avacloud.io",
"name": "Proj Orc Testnet Alpha",
"nativeCurrency": {
"name": "Proj Orc Testnet Alpha Token",
"symbol": "STX",
"decimals": 18
},
"networkId": 88883,
"redFlags": [],
"rpc": [
"https://proj-orc-testnet-alpha.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://88883.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/projorctes/testnet/rpc"
],
"shortName": "Proj Orc Testnet Alpha",
"slug": "proj-orc-testnet-alpha",
"testnet": true
} as const satisfies Chain;
+2 -1
View File
@@ -29,7 +29,8 @@ export default {
"rpc": [
"https://jibchain-l1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://8899.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-l1.jibchain.net"
"https://rpc-l1.jibchain.net",
"https://jib-rpc.inan.in.th"
],
"shortName": "jbc",
"slug": "jibchain-l1",
+17 -5
View File
@@ -2,12 +2,24 @@ import type { Chain } from "../src/types";
export default {
"chain": "Oort Mainnet",
"chainId": 970,
"explorers": [],
"explorers": [
{
"name": "Oort Mainnet Explorer",
"url": "https://mainnet-scan.oortech.com",
"standard": "none",
"icon": {
"url": "ipfs://bafkreidrbvklkb52sgmg7cmy42fhf7vqpig7qj7bnrq24ijdwywkzr2tfy",
"width": 1440,
"height": 1440,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmZ1jbxFZcuotj3eZ6iKFrg9ZXnaV8AK6sGRa7ELrceWyD",
"width": 1043,
"height": 1079,
"url": "ipfs://bafkreidrbvklkb52sgmg7cmy42fhf7vqpig7qj7bnrq24ijdwywkzr2tfy",
"width": 1440,
"height": 1440,
"format": "png"
},
"infoURL": "https://oortech.com",
@@ -21,7 +33,7 @@ export default {
"rpc": [
"https://oort.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://970.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.oortech.com"
"https://mainnet-rpc.oortech.com"
],
"shortName": "ccn",
"slug": "oort",
+21 -5
View File
@@ -2,12 +2,24 @@ import type { Chain } from "../src/types";
export default {
"chain": "MainnetDev",
"chainId": 9700,
"explorers": [],
"explorers": [
{
"name": "Oort MainnetDev Scan",
"url": "https://dev-scan.oortech.com",
"standard": "none",
"icon": {
"url": "ipfs://bafkreidrbvklkb52sgmg7cmy42fhf7vqpig7qj7bnrq24ijdwywkzr2tfy",
"width": 1440,
"height": 1440,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmZ1jbxFZcuotj3eZ6iKFrg9ZXnaV8AK6sGRa7ELrceWyD",
"width": 1043,
"height": 1079,
"url": "ipfs://bafkreidrbvklkb52sgmg7cmy42fhf7vqpig7qj7bnrq24ijdwywkzr2tfy",
"width": 1440,
"height": 1440,
"format": "png"
},
"infoURL": "https://oortech.com",
@@ -18,7 +30,11 @@ export default {
"decimals": 18
},
"networkId": 9700,
"rpc": [],
"rpc": [
"https://oort-dev.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://9700.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://dev-rpc.oortech.com"
],
"shortName": "MainnetDev",
"slug": "oort-dev",
"testnet": false,
+16 -4
View File
@@ -2,12 +2,24 @@ import type { Chain } from "../src/types";
export default {
"chain": "Ascraeus",
"chainId": 972,
"explorers": [],
"explorers": [
{
"name": "Oort Ascraeus Explorer",
"url": "https://ascraeus-scan.oortech.com",
"standard": "none",
"icon": {
"url": "ipfs://bafkreidrbvklkb52sgmg7cmy42fhf7vqpig7qj7bnrq24ijdwywkzr2tfy",
"width": 1440,
"height": 1440,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmZ1jbxFZcuotj3eZ6iKFrg9ZXnaV8AK6sGRa7ELrceWyD",
"width": 1043,
"height": 1079,
"url": "ipfs://bafkreidrbvklkb52sgmg7cmy42fhf7vqpig7qj7bnrq24ijdwywkzr2tfy",
"width": 1440,
"height": 1440,
"format": "png"
},
"infoURL": "https://oortech.com",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/chains",
"version": "0.1.60",
"version": "0.1.61",
"main": "dist/thirdweb-dev-chains.cjs.js",
"module": "dist/thirdweb-dev-chains.esm.js",
"exports": {
File diff suppressed because one or more lines are too long
+19
View File
@@ -1,5 +1,24 @@
# thirdweb
## 0.13.24
### Patch Changes
- Updated dependencies [[`bcfa9463`](https://github.com/thirdweb-dev/js/commit/bcfa9463bbae6bf1d3b6389b7a141f65ef3e1173)]:
- @thirdweb-dev/sdk@4.0.21
- @thirdweb-dev/wallets@2.2.1
- @thirdweb-dev/auth@4.1.16
## 0.13.23
### Patch Changes
- Updated dependencies [[`d2001ca4`](https://github.com/thirdweb-dev/js/commit/d2001ca464aa699ac821c97eb37de7409ba865f3), [`85842c15`](https://github.com/thirdweb-dev/js/commit/85842c1596c901e228be1894b6702a8871d9e794), [`e595d4d9`](https://github.com/thirdweb-dev/js/commit/e595d4d92f03e36cbe61e1f00a366e37ede5d814), [`497677f3`](https://github.com/thirdweb-dev/js/commit/497677f3596977fa90ebc0fa76cb5842d46d8dcf), [`94966069`](https://github.com/thirdweb-dev/js/commit/9496606964d65268f8ee6bf9f78b2786e99d33ac), [`15ae5e7f`](https://github.com/thirdweb-dev/js/commit/15ae5e7f95a482a9736923c0e10916a0a6115c3d)]:
- @thirdweb-dev/chains@0.1.61
- @thirdweb-dev/sdk@4.0.20
- @thirdweb-dev/wallets@2.2.0
- @thirdweb-dev/auth@4.1.15
## 0.13.22
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "thirdweb",
"main": "dist/cli/index.js",
"version": "0.13.22",
"version": "0.13.24",
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/cli",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
+19
View File
@@ -1,5 +1,24 @@
# @thirdweb-dev/react-core
## 4.1.14
### Patch Changes
- Updated dependencies [[`bcfa9463`](https://github.com/thirdweb-dev/js/commit/bcfa9463bbae6bf1d3b6389b7a141f65ef3e1173)]:
- @thirdweb-dev/sdk@4.0.21
- @thirdweb-dev/wallets@2.2.1
- @thirdweb-dev/auth@4.1.16
## 4.1.13
### Patch Changes
- Updated dependencies [[`d2001ca4`](https://github.com/thirdweb-dev/js/commit/d2001ca464aa699ac821c97eb37de7409ba865f3), [`85842c15`](https://github.com/thirdweb-dev/js/commit/85842c1596c901e228be1894b6702a8871d9e794), [`e595d4d9`](https://github.com/thirdweb-dev/js/commit/e595d4d92f03e36cbe61e1f00a366e37ede5d814), [`497677f3`](https://github.com/thirdweb-dev/js/commit/497677f3596977fa90ebc0fa76cb5842d46d8dcf), [`94966069`](https://github.com/thirdweb-dev/js/commit/9496606964d65268f8ee6bf9f78b2786e99d33ac), [`15ae5e7f`](https://github.com/thirdweb-dev/js/commit/15ae5e7f95a482a9736923c0e10916a0a6115c3d)]:
- @thirdweb-dev/chains@0.1.61
- @thirdweb-dev/sdk@4.0.20
- @thirdweb-dev/wallets@2.2.0
- @thirdweb-dev/auth@4.1.15
## 4.1.12
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/react-core",
"version": "4.1.12",
"version": "4.1.14",
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react-core",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
@@ -1,5 +1,9 @@
# @thirdweb-dev/react-native-compat
## 0.4.14
## 0.4.13
## 0.4.12
## 0.4.11
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@thirdweb-dev/react-native-compat",
"description": "Shims for Thirdweb in React Native Projects",
"version": "0.4.12",
"version": "0.4.14",
"author": "thirdweb eng <[email protected]>",
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react-native-compat",
"license": "Apache-2.0",
+19
View File
@@ -1,5 +1,24 @@
# @thirdweb-dev/react-native
## 0.4.14
### Patch Changes
- Updated dependencies [[`bcfa9463`](https://github.com/thirdweb-dev/js/commit/bcfa9463bbae6bf1d3b6389b7a141f65ef3e1173)]:
- @thirdweb-dev/sdk@4.0.21
- @thirdweb-dev/react-core@4.1.14
- @thirdweb-dev/wallets@2.2.1
## 0.4.13
### Patch Changes
- Updated dependencies [[`d2001ca4`](https://github.com/thirdweb-dev/js/commit/d2001ca464aa699ac821c97eb37de7409ba865f3), [`85842c15`](https://github.com/thirdweb-dev/js/commit/85842c1596c901e228be1894b6702a8871d9e794), [`e595d4d9`](https://github.com/thirdweb-dev/js/commit/e595d4d92f03e36cbe61e1f00a366e37ede5d814), [`497677f3`](https://github.com/thirdweb-dev/js/commit/497677f3596977fa90ebc0fa76cb5842d46d8dcf), [`94966069`](https://github.com/thirdweb-dev/js/commit/9496606964d65268f8ee6bf9f78b2786e99d33ac), [`15ae5e7f`](https://github.com/thirdweb-dev/js/commit/15ae5e7f95a482a9736923c0e10916a0a6115c3d)]:
- @thirdweb-dev/chains@0.1.61
- @thirdweb-dev/sdk@4.0.20
- @thirdweb-dev/wallets@2.2.0
- @thirdweb-dev/react-core@4.1.13
## 0.4.12
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/react-native",
"version": "0.4.12",
"version": "0.4.14",
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react-native",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
+77
View File
@@ -1,5 +1,82 @@
# @thirdweb-dev/react
## 4.1.14
### Patch Changes
- Updated dependencies [[`bcfa9463`](https://github.com/thirdweb-dev/js/commit/bcfa9463bbae6bf1d3b6389b7a141f65ef3e1173)]:
- @thirdweb-dev/sdk@4.0.21
- @thirdweb-dev/react-core@4.1.14
- @thirdweb-dev/wallets@2.2.1
## 4.1.13
### Patch Changes
- [#2029](https://github.com/thirdweb-dev/js/pull/2029) [`b50e4a41`](https://github.com/thirdweb-dev/js/commit/b50e4a41b560eb647fec1224d6b6782be7132034) Thanks [@MananTank](https://github.com/MananTank)! - Connect to MetaMask on mobile device using WalletConnect instead of opening the web app in MetaMask browser by default
This behavior can be changed by setting `connectionMethod` option to `metamaskWallet`
```tsx
<ThirdwebProvider
supportedWallets={[
metamaskWallet({
connectionMethod: "walletConnect", // default
}),
]}
>
<App />
</ThirdwebProvider>
```
this is same as not setting `connectionMethod` option:
```tsx
<ThirdwebProvider supportedWallets={[metamaskWallet()]}>
<App />
</ThirdwebProvider>
```
If you want to revert to old behavior of opening the web app in Metamask browser, set `connectionMethod` to `metamaskBrowser`
```tsx
<ThirdwebProvider
supportedWallets={[
metamaskWallet({
connectionMethod: "metamaskBrowser",
}),
]}
>
<App />
</ThirdwebProvider>
```
- [#2063](https://github.com/thirdweb-dev/js/pull/2063) [`c8ba5cf8`](https://github.com/thirdweb-dev/js/commit/c8ba5cf863b7b2a92e0cb2c50776511782d4e2b6) Thanks [@MananTank](https://github.com/MananTank)! - - Add option to only show the Official WalletConnect Modal for `walletConnect` in ConnectWallet Modal
```ts
walletConnect({
qrModal: "walletConnect", // hide the ConnectWallet Modal and only show the WalletConnect Modal
});
```
If no, `qrModal` is set, it defaults to `"custom"` as shown below:
```ts
walletConnect({
qrModal: "custom", // render QR code in ConnectWallet Modal
});
```
- Stop Focus trapping the ConnectWallet Modal when it is rendered but hidden
- [#2058](https://github.com/thirdweb-dev/js/pull/2058) [`15ae5e7f`](https://github.com/thirdweb-dev/js/commit/15ae5e7f95a482a9736923c0e10916a0a6115c3d) Thanks [@MananTank](https://github.com/MananTank)! - Add option to open the official wallet connect modal in ConnectWallet
- Updated dependencies [[`d2001ca4`](https://github.com/thirdweb-dev/js/commit/d2001ca464aa699ac821c97eb37de7409ba865f3), [`85842c15`](https://github.com/thirdweb-dev/js/commit/85842c1596c901e228be1894b6702a8871d9e794), [`e595d4d9`](https://github.com/thirdweb-dev/js/commit/e595d4d92f03e36cbe61e1f00a366e37ede5d814), [`497677f3`](https://github.com/thirdweb-dev/js/commit/497677f3596977fa90ebc0fa76cb5842d46d8dcf), [`94966069`](https://github.com/thirdweb-dev/js/commit/9496606964d65268f8ee6bf9f78b2786e99d33ac), [`15ae5e7f`](https://github.com/thirdweb-dev/js/commit/15ae5e7f95a482a9736923c0e10916a0a6115c3d)]:
- @thirdweb-dev/[email protected]
- @thirdweb-dev/[email protected]
- @thirdweb-dev/[email protected]
- @thirdweb-dev/[email protected]
## 4.1.12
### Patch Changes
+5 -4
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/react",
"version": "4.1.12",
"version": "4.1.14",
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
@@ -104,16 +104,17 @@
"react": "^18.2.0",
"react-dom": "^18.2.0",
"stream": "npm:stream-browserify@^3.0.0",
"typescript": "^5.1.6",
"typedoc-gen": "workspace:*"
"typedoc-gen": "workspace:*",
"typescript": "^5.1.6"
},
"dependencies": {
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
"@google/model-viewer": "^2.1.1",
"@radix-ui/colors": "^0.1.9",
"@radix-ui/react-dialog": "^1.0.4",
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-dropdown-menu": "^2.0.5",
"@radix-ui/react-focus-scope": "^1.0.4",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-popover": "^1.0.6",
"@radix-ui/react-tabs": "^1.0.4",
+44 -41
View File
@@ -16,6 +16,7 @@ import { DynamicHeight } from "./DynamicHeight";
import { useEffect, useRef, useState } from "react";
import { useCustomTheme } from "../design-system/CustomThemeProvider";
import { StyledDiv } from "../design-system/elements";
import { FocusScope } from "@radix-ui/react-focus-scope";
export const Modal: React.FC<{
trigger?: React.ReactNode;
@@ -74,48 +75,50 @@ export const Modal: React.FC<{
</Dialog.Overlay>
)}
<Dialog.Content asChild>
<DialogContent
ref={contentRef}
style={
props.hide
? { width: 0, height: 0, overflow: "hidden", opacity: 0 }
: {
height:
props.size === "compact" ? "auto" : wideModalMaxHeight,
maxWidth:
props.size === "compact"
? modalMaxWidthCompact
: modalMaxWidthWide,
}
}
>
{props.size === "compact" ? (
<DynamicHeight maxHeight={compactModalMaxHeight}>
{props.children}{" "}
</DynamicHeight>
) : (
props.children
)}
<FocusScope trapped={!props.hide}>
<Dialog.Content asChild>
<DialogContent
ref={contentRef}
style={
props.hide
? { width: 0, height: 0, overflow: "hidden", opacity: 0 }
: {
height:
props.size === "compact" ? "auto" : wideModalMaxHeight,
maxWidth:
props.size === "compact"
? modalMaxWidthCompact
: modalMaxWidthWide,
}
}
>
{props.size === "compact" ? (
<DynamicHeight maxHeight={compactModalMaxHeight}>
{props.children}{" "}
</DynamicHeight>
) : (
props.children
)}
{/* Close Icon */}
{!props.hideCloseIcon && (
<CrossContainer>
<Dialog.Close asChild>
<IconButton type="button" aria-label="Close">
<Cross2Icon
width={iconSize.md}
height={iconSize.md}
style={{
color: "inherit",
}}
/>
</IconButton>
</Dialog.Close>
</CrossContainer>
)}
</DialogContent>
</Dialog.Content>
{/* Close Icon */}
{!props.hideCloseIcon && (
<CrossContainer>
<Dialog.Close asChild>
<IconButton type="button" aria-label="Close">
<Cross2Icon
width={iconSize.md}
height={iconSize.md}
style={{
color: "inherit",
}}
/>
</IconButton>
</Dialog.Close>
</CrossContainer>
)}
</DialogContent>
</Dialog.Content>
</FocusScope>
</Dialog.Portal>
</Dialog.Root>
);
@@ -71,7 +71,9 @@ export const ConnectModalContent = (props: {
? false
: !!authConfig?.authUrl && !user?.address;
setHideModal(false);
onModalUnmount(() => {
setHideModal(false);
});
// show sign in screen if required
if (requiresSignIn) {
@@ -242,7 +244,9 @@ export const ConnectModal = () => {
useEffect(() => {
if (!isWalletModalOpen) {
setHideModal(false);
onModalUnmount(() => {
setHideModal(false);
});
}
}, [isWalletModalOpen, setIsWalletModalOpen, screen]);
@@ -268,6 +272,10 @@ export const ConnectModal = () => {
size={modalSize}
open={isWalletModalOpen}
setOpen={(value) => {
if (hideModal) {
return;
}
setIsWalletModalOpen(value);
if (!value) {
const requiresSignIn = auth?.loginOptional
@@ -29,10 +29,11 @@ export const HeadlessConnectUI = ({
} catch (e) {
if (!singleWallet) {
goBack();
show();
}
console.error(e);
}
show();
})();
}, [walletConfig, connect, singleWallet, connected, hide, show, goBack]);
@@ -7,16 +7,30 @@ import { GetStartedScreen } from "../../ConnectWallet/screens/GetStartedScreen";
import { MetaMaskWallet } from "@thirdweb-dev/wallets";
import { wait } from "../../../utils/wait";
import { useTWLocale } from "../../../evm/providers/locale-provider";
import { metamaskUris } from "./metamaskUris";
import { WCOpenURI } from "../../ConnectWallet/screens/WCOpenUri";
export const MetamaskConnectUI = (props: ConnectUIProps<MetaMaskWallet>) => {
export const MetamaskConnectUI = (
props: ConnectUIProps<MetaMaskWallet> & {
connectionMethod: "walletConnect" | "metamaskBrowser";
},
) => {
const [screen, setScreen] = useState<
"connecting" | "scanning" | "get-started"
"connecting" | "scanning" | "get-started" | "open-wc-uri"
>("connecting");
const locale = useTWLocale().wallets.metamaskWallet;
const { walletConfig, connected } = props;
const connect = useConnect();
const [errorConnecting, setErrorConnecting] = useState(false);
const connectingLocale = {
getStartedLink: locale.getStartedLink,
instruction: locale.connectionScreen.instruction,
tryAgain: locale.connectionScreen.retry,
inProgress: locale.connectionScreen.inProgress,
failed: locale.connectionScreen.failed,
};
const hideBackButton = props.supportedWallets.length === 1;
const connectToExtension = useCallback(async () => {
@@ -53,27 +67,25 @@ export const MetamaskConnectUI = (props: ConnectUIProps<MetaMaskWallet>) => {
else {
// on mobile, open metamask app link
if (isMobile()) {
window.open(
`https://metamask.app.link/dapp/${window.location.toString()}`,
);
if (props.connectionMethod === "walletConnect") {
setScreen("open-wc-uri");
} else {
window.open(
`https://metamask.app.link/dapp/${window.location.toString()}`,
);
}
} else {
// on desktop, show the metamask scan qr code
setScreen("scanning");
}
}
})();
}, [connectToExtension, walletConfig]);
}, [connectToExtension, props.connectionMethod, walletConfig]);
if (screen === "connecting") {
return (
<ConnectingScreen
locale={{
getStartedLink: locale.getStartedLink,
instruction: locale.connectionScreen.instruction,
tryAgain: locale.connectionScreen.retry,
inProgress: locale.connectionScreen.inProgress,
failed: locale.connectionScreen.failed,
}}
locale={connectingLocale}
errorConnecting={errorConnecting}
onGetStarted={() => {
setScreen("get-started");
@@ -103,6 +115,26 @@ export const MetamaskConnectUI = (props: ConnectUIProps<MetaMaskWallet>) => {
);
}
if (screen === "open-wc-uri") {
return (
<WCOpenURI
locale={connectingLocale}
onRetry={() => {
// NOOP - TODO make onRetry optional
}}
errorConnecting={errorConnecting}
onGetStarted={() => {
setScreen("get-started");
}}
hideBackButton={hideBackButton}
onBack={props.goBack}
onConnected={connected}
walletConfig={walletConfig}
appUriPrefix={metamaskUris}
/>
);
}
if (screen === "scanning") {
return (
<MetamaskScan
@@ -4,6 +4,8 @@ import {
getInjectedMetamaskProvider,
} from "@thirdweb-dev/wallets";
import { MetamaskConnectUI } from "./MetamaskConnectUI";
import { metamaskUris } from "./metamaskUris";
import { handelWCSessionRequest } from "../handleWCSessionRequest";
export type MetamaskWalletConfigOptions = {
/**
@@ -18,6 +20,16 @@ export type MetamaskWalletConfigOptions = {
* If true, the wallet will be tagged as "reccomended" in ConnectWallet Modal
*/
recommended?: boolean;
/**
* Specify how the connection to metamask app should be established if the user is on a mobile device.
* There are two options: "walletconnect" and "browser".
* 1. "walletconnect" - User will be redirected to MetaMask app and upon successful connection, user can return back to the web page.
* 2. "browser" - User will be redirected to MetaMask app and the web page will be opened in MetaMask browser.
*
* @defaultValue "walletconnect"
*/
connectionMethod?: "walletConnect" | "metamaskBrowser";
};
/**
@@ -61,6 +73,8 @@ export type MetamaskWalletConfigOptions = {
export const metamaskWallet = (
options?: MetamaskWalletConfigOptions,
): WalletConfig<MetaMaskWallet> => {
const connectionMethod = options?.connectionMethod || "walletConnect";
return {
id: MetaMaskWallet.id,
recommended: options?.recommended,
@@ -76,9 +90,17 @@ export const metamaskWallet = (
qrcode: false,
});
if (connectionMethod === "walletConnect") {
handelWCSessionRequest(wallet, metamaskUris);
}
return wallet;
},
connectUI: MetamaskConnectUI,
connectUI(props) {
return (
<MetamaskConnectUI {...props} connectionMethod={connectionMethod} />
);
},
isInstalled() {
return !!getInjectedMetamaskProvider();
},
@@ -4,14 +4,17 @@ import {
} from "@thirdweb-dev/react-core";
import { useEffect, useRef, useState } from "react";
import type { WalletConnect } from "@thirdweb-dev/wallets";
import type { WalletConfig } from "@thirdweb-dev/react-core";
import type { ConnectUIProps, WalletConfig } from "@thirdweb-dev/react-core";
import { QRCode } from "../../../components/QRCode";
import { Img } from "../../../components/Img";
import { Spacer } from "../../../components/Spacer";
import { ModalHeader, Container } from "../../../components/basic";
import { ModalHeader, Container, Line } from "../../../components/basic";
import { iconSize } from "../../../design-system";
import { Text } from "../../../components/text";
import { useTWLocale } from "../../../evm/providers/locale-provider";
import { Button } from "../../../components/buttons";
import { Spinner } from "../../../components/Spinner";
import { wait } from "../../../utils/wait";
export const WalletConnectScan: React.FC<{
onBack: () => void;
@@ -19,41 +22,40 @@ export const WalletConnectScan: React.FC<{
walletConfig: WalletConfig<WalletConnect>;
hideBackButton: boolean;
modalSize: "wide" | "compact";
}> = ({ onBack, onConnected, walletConfig }) => {
hide: ConnectUIProps["hide"];
show: ConnectUIProps["show"];
}> = ({ onBack, onConnected, walletConfig, hide, show }) => {
const locale = useTWLocale().wallets.walletConnect;
const createInstance = useCreateWalletInstance();
const [qrCodeUri, setQrCodeUri] = useState<string | undefined>();
const { setConnectedWallet, chainToConnect, setConnectionStatus } =
useWalletContext();
const [isWCModalOpen, setIsWCModalOpen] = useState(false);
const scanStarted = useRef(false);
useEffect(() => {
if (scanStarted.current) {
return;
}
scanStarted.current = true;
const handleWCModalConnect = async () => {
const walletInstance = createInstance(walletConfig);
setConnectionStatus("connecting");
walletInstance.connectWithQrCode({
chainId: chainToConnect?.chainId,
onQrCodeUri(uri) {
setQrCodeUri(uri);
},
onConnected() {
setConnectedWallet(walletInstance);
onConnected();
},
});
}, [
createInstance,
setConnectedWallet,
chainToConnect,
onConnected,
walletConfig,
setConnectionStatus,
]);
try {
setQrCodeUri(undefined);
setIsWCModalOpen(true);
wait(1000).then(() => {
hide();
});
await walletInstance.connectWithModal({
chainId: chainToConnect?.chainId,
});
setConnectedWallet(walletInstance);
onConnected();
show();
} catch {
show();
setIsWCModalOpen(false);
}
};
return (
<Container fullHeight animate="fadein" flex="column">
@@ -64,20 +66,30 @@ export const WalletConnectScan: React.FC<{
<Spacer y="sm" />
<Container flex="column" center={"both"} px="lg" expand>
<QRCode
qrCodeUri={qrCodeUri}
QRIcon={
<Img
width={iconSize.xxl}
height={iconSize.xxl}
src={walletConfig.meta.iconURL}
/>
}
/>
{isWCModalOpen ? (
<Container
style={{
minHeight: "300px",
}}
flex="column"
center="both"
>
<Spinner size="xl" color="accentText" />
</Container>
) : (
<WalletConnectQRScanConnect
createInstance={createInstance}
onConnected={onConnected}
qrCodeUri={qrCodeUri}
setConnectedWallet={setConnectedWallet}
setConnectionStatus={setConnectionStatus}
setQrCodeUri={setQrCodeUri}
walletConfig={walletConfig}
chainIdToConnect={chainToConnect?.chainId}
/>
)}
</Container>
<Spacer y="lg" />
{/* <Spacer y="xl" /> */}
{/* <Spacer y="lg" />
@@ -95,10 +107,84 @@ export const WalletConnectScan: React.FC<{
{locale.scanInstruction}
</Text>
</Container>
<Line />
<Container py="lg" flex="row" center="x">
<Button variant="link" onClick={handleWCModalConnect}>
{"Open Official WalletConnect Modal"}
</Button>
</Container>
</Container>
);
};
function WalletConnectQRScanConnect(props: {
qrCodeUri: string | undefined;
setQrCodeUri: (uri: string) => void;
walletConfig: WalletConfig<WalletConnect>;
onConnected: () => void;
setConnectedWallet: (wallet: WalletConnect) => void;
createInstance: (walletConfig: WalletConfig<WalletConnect>) => WalletConnect;
setConnectionStatus: (
status: "disconnected" | "connecting" | "connected",
) => void;
chainIdToConnect?: number;
}) {
const {
qrCodeUri,
walletConfig,
onConnected,
setConnectedWallet,
createInstance,
setQrCodeUri,
chainIdToConnect,
setConnectionStatus,
} = props;
const scanStarted = useRef(false);
useEffect(() => {
if (scanStarted.current) {
return;
}
scanStarted.current = true;
const walletInstance = createInstance(walletConfig);
setConnectionStatus("connecting");
walletInstance.connectWithQrCode({
chainId: chainIdToConnect,
onQrCodeUri(uri) {
setQrCodeUri(uri);
},
onConnected() {
setConnectedWallet(walletInstance);
onConnected();
},
});
}, [
createInstance,
setConnectedWallet,
chainIdToConnect,
onConnected,
walletConfig,
setConnectionStatus,
setQrCodeUri,
]);
return (
<QRCode
qrCodeUri={qrCodeUri}
QRIcon={
<Img
width={iconSize.xxl}
height={iconSize.xxl}
src={walletConfig.meta.iconURL}
/>
}
/>
);
}
// export const CopyButton: React.FC<{
// text: string;
// tip: string;
@@ -27,6 +27,15 @@ export type walletConnectConfigOptions = {
* If true, the wallet will be tagged as "reccomended" in ConnectWallet Modal
*/
recommended?: boolean;
/**
* Specify wheher a custom QR Modal or the Official WalletConnect Modal should be used on desktop. The custom screen has an option to open the official WalletConnect Modal too.
*
* Note that the official WalletConnect Modal is always used on mobile devices.
*
* The default is `"custom"` ( for desktop )
*/
qrModal?: "custom" | "walletConnect";
};
/**
@@ -71,6 +80,15 @@ export const walletConnect = (
config?: walletConnectConfigOptions,
): WalletConfig<WalletConnect> => {
const projectId = config?.projectId || TW_WC_PROJECT_ID;
// on mobile - always use the official WalletConnect Modal
// on desktop - use the official WalletConnect Modal if qrModal is set to "walletconnect"
const showOfficialModal = isMobile()
? true
: config?.qrModal === "walletConnect"
? true
: false;
return {
recommended: config?.recommended,
id: WalletConnect.id,
@@ -82,13 +100,14 @@ export const walletConnect = (
create(options: WalletOptions) {
return new WalletConnect({
...options,
qrcode: isMobile() ? true : false,
qrcode: showOfficialModal,
projectId,
qrModalOptions: config?.qrModalOptions,
});
},
connectUI(props) {
if (isMobile()) {
if (showOfficialModal) {
return <HeadlessConnectUI {...props} />;
}
@@ -99,6 +118,8 @@ export const walletConnect = (
walletConfig={props.walletConfig}
hideBackButton={props.supportedWallets.length > 1}
modalSize={props.modalSize}
hide={props.hide}
show={props.show}
/>
);
},
+19
View File
@@ -1,5 +1,24 @@
# @thirdweb-dev/sdk
## 4.0.21
### Patch Changes
- [#2067](https://github.com/thirdweb-dev/js/pull/2067) [`bcfa9463`](https://github.com/thirdweb-dev/js/commit/bcfa9463bbae6bf1d3b6389b7a141f65ef3e1173) Thanks [@kumaryash90](https://github.com/kumaryash90)! - fix deployments
## 4.0.20
### Patch Changes
- [#2062](https://github.com/thirdweb-dev/js/pull/2062) [`85842c15`](https://github.com/thirdweb-dev/js/commit/85842c1596c901e228be1894b6702a8871d9e794) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Expose baseFee in getDynamicFeeData()
- [#2053](https://github.com/thirdweb-dev/js/pull/2053) [`e595d4d9`](https://github.com/thirdweb-dev/js/commit/e595d4d92f03e36cbe61e1f00a366e37ede5d814) Thanks [@kumaryash90](https://github.com/kumaryash90)! - Fix error message
- [#2059](https://github.com/thirdweb-dev/js/pull/2059) [`497677f3`](https://github.com/thirdweb-dev/js/commit/497677f3596977fa90ebc0fa76cb5842d46d8dcf) Thanks [@jnsdls](https://github.com/jnsdls)! - contract.roles.setAll now allows passing a actingAddress explictly to "prepare()" to correctly prepare the txn when there are multiple roles being removed
- Updated dependencies [[`d2001ca4`](https://github.com/thirdweb-dev/js/commit/d2001ca464aa699ac821c97eb37de7409ba865f3)]:
- @thirdweb-dev/chains@0.1.61
## 4.0.19
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/sdk",
"version": "4.0.19",
"version": "4.0.21",
"description": "The main thirdweb SDK.",
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/sdk",
"license": "Apache-2.0",
+10 -8
View File
@@ -6,6 +6,7 @@ import { isBrowser } from "./utils";
type FeeData = {
maxFeePerGas: null | BigNumber;
maxPriorityFeePerGas: null | BigNumber;
baseFee: null | BigNumber;
};
export async function getDefaultGasOverrides(provider: providers.Provider) {
@@ -63,16 +64,17 @@ export async function getDynamicFeeData(
maxPriorityFeePerGas = feeData.maxPriorityFeePerGas;
if (!maxPriorityFeePerGas) {
// chain does not support eip-1559, return null for both
return { maxFeePerGas: null, maxPriorityFeePerGas: null };
return { maxFeePerGas: null, maxPriorityFeePerGas: null, baseFee: null };
}
}
// eip-1559 formula, with an extra 10% tip to account for gas volatility
maxFeePerGas = baseBlockFee
.mul(2)
.add(getPreferredPriorityFee(maxPriorityFeePerGas));
// add 10% tip to maxPriorityFeePerGas for faster processing
maxPriorityFeePerGas = getPreferredPriorityFee(maxPriorityFeePerGas);
// eip-1559 formula, doubling the base fee ensures that the tx can be included in the next 6 blocks no matter how busy the network is
// good article on the subject: https://www.blocknative.com/blog/eip-1559-fees
maxFeePerGas = baseBlockFee.mul(2).add(maxPriorityFeePerGas);
return { maxFeePerGas, maxPriorityFeePerGas };
return { maxFeePerGas, maxPriorityFeePerGas, baseFee: baseBlockFee };
}
function getPreferredPriorityFee(
@@ -80,8 +82,8 @@ function getPreferredPriorityFee(
percentMultiplier: number = 10,
): BigNumber {
const extraTip = defaultPriorityFeePerGas.div(100).mul(percentMultiplier); // + 10%
const txGasPrice = defaultPriorityFeePerGas.add(extraTip);
return txGasPrice;
const totalPriorityFee = defaultPriorityFeePerGas.add(extraTip);
return totalPriorityFee;
}
export async function getGasPrice(
@@ -135,9 +135,17 @@ export class ContractRoles<TContract extends IPermissions, TRole extends Role>
*
* */
setAll = /* @__PURE__ */ buildTransactionFunction(
async (rolesWithAddresses: {
[key in TRole]?: AddressOrEns[];
}): Promise<Transaction> => {
async (
rolesWithAddresses: {
[key in TRole]?: AddressOrEns[];
},
actingAddress?: string,
): Promise<Transaction> => {
// if we are removing multiple roles, we need to allways remove the connected wallet address *last*
// this is so we don't renounce (i.e.) admin role first and then try to revoke someone else's (i.e.) admin role after (which will revert the entire txn because we are no longer an admin)
// if it is explicitly passed in (i.e. for estimation) we use that value, otherwise we get it from the connected signer
const connectedWalletAddress =
actingAddress || (await this.contractWrapper.getSignerAddress());
const contractEncoder = new ContractEncoder(this.contractWrapper);
const roles = Object.keys(rolesWithAddresses) as TRole[];
@@ -170,11 +178,9 @@ export class ContractRoles<TContract extends IPermissions, TRole extends Role>
const toRemove = currentAddresses.filter(
(address) => !addresses.includes(address),
);
// if we are removing multiple roles, we need to allways remove the connected wallet address *last*
// this is so we don't renounce (i.e.) admin role first and then try to revoke someone else's (i.e.) admin role after (which will revert the entire txn because we are no longer an admin)
const connectedWalletAddress =
await this.contractWrapper.getSignerAddress();
// only need to do this path if the toRemove is longer than 1 (i.e. we are removing multiple addresses from a role)
// if we're removing more than one address we have to make sure we always remove the *connected* (acting) wallet address first
// otherwise we'll revoke the connected wallet address and then try to revoke someone else's address which will revert the entire txn
if (toRemove.length > 1) {
const index = toRemove.indexOf(connectedWalletAddress);
if (index > -1) {
+1
View File
@@ -1887,6 +1887,7 @@ export class ContractDeployer extends RPCConnectionHandler {
`Error deploying contract at ${tx.predictedAddress}`,
(e as any)?.message,
);
throw e;
}
}
@@ -14,12 +14,12 @@ export const CONTRACT_ADDRESSES: Record<
}
> = {
[280]: {
openzeppelinForwarder: "0x12A305cc7168fa3b7B172fE53c57b9a22716F667",
openzeppelinForwarder: AddressZero,
openzeppelinForwarderEOA: AddressZero,
biconomyForwarder: AddressZero,
},
[324]: {
openzeppelinForwarder: "0x4e0C3577335961Ff800FFDA24981EB2F38D94483",
openzeppelinForwarder: AddressZero,
openzeppelinForwarderEOA: AddressZero,
biconomyForwarder: AddressZero,
},
@@ -92,18 +92,10 @@ export function getImplementation(
* @returns the array of trusted forwarders for the given chain id
* @internal
*/
/* eslint-disable @typescript-eslint/no-unused-vars */
export function zkGetDefaultTrustedForwarders(
chainId: number,
contractName?: string,
): string[] {
const biconomyForwarder =
CONTRACT_ADDRESSES[chainId]?.biconomyForwarder || AddressZero;
const openzeppelinForwarder =
CONTRACT_ADDRESSES[chainId]?.openzeppelinForwarder || AddressZero;
return contractName && contractName === "Pack"
? []
: [openzeppelinForwarder, biconomyForwarder].filter(
(a) => a !== AddressZero,
);
return [];
}
@@ -53,7 +53,7 @@ export async function zkDeployContractFromUri(
compilerMetadata.name,
extendedMetadata.version,
);
if (implementationAddress) {
if (!implementationAddress) {
throw new Error("Contract not supported yet.");
}
+23
View File
@@ -1,5 +1,28 @@
# @thirdweb-dev/unity-js-bridge
## 0.2.110
### Patch Changes
- Updated dependencies [[`bcfa9463`](https://github.com/thirdweb-dev/js/commit/bcfa9463bbae6bf1d3b6389b7a141f65ef3e1173)]:
- @thirdweb-dev/sdk@4.0.21
- @thirdweb-dev/wallets@2.2.1
- @thirdweb-dev/auth@4.1.16
## 0.2.109
### Patch Changes
- [#2061](https://github.com/thirdweb-dev/js/pull/2061) [`0fb2f1fc`](https://github.com/thirdweb-dev/js/commit/0fb2f1fc5e2241f8b0fff2ad9219eeed40a8d1d0) Thanks [@0xFirekeeper](https://github.com/0xFirekeeper)! - [Unity] Support for sdk.wallet.GetEmail
- [#2056](https://github.com/thirdweb-dev/js/pull/2056) [`5a0283d0`](https://github.com/thirdweb-dev/js/commit/5a0283d083b47a8f26ce61ce59c914e27d60401c) Thanks [@0xFirekeeper](https://github.com/0xFirekeeper)! - [Unity] Reload local wallet in case of reconnection (sw)
- Updated dependencies [[`d2001ca4`](https://github.com/thirdweb-dev/js/commit/d2001ca464aa699ac821c97eb37de7409ba865f3), [`85842c15`](https://github.com/thirdweb-dev/js/commit/85842c1596c901e228be1894b6702a8871d9e794), [`e595d4d9`](https://github.com/thirdweb-dev/js/commit/e595d4d92f03e36cbe61e1f00a366e37ede5d814), [`497677f3`](https://github.com/thirdweb-dev/js/commit/497677f3596977fa90ebc0fa76cb5842d46d8dcf), [`94966069`](https://github.com/thirdweb-dev/js/commit/9496606964d65268f8ee6bf9f78b2786e99d33ac), [`15ae5e7f`](https://github.com/thirdweb-dev/js/commit/15ae5e7f95a482a9736923c0e10916a0a6115c3d)]:
- @thirdweb-dev/chains@0.1.61
- @thirdweb-dev/sdk@4.0.20
- @thirdweb-dev/wallets@2.2.0
- @thirdweb-dev/auth@4.1.15
## 0.2.108
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/unity-js-bridge",
"version": "0.2.108",
"version": "0.2.110",
"main": "dist/thirdweb-unity-bridge.js",
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/unity-js-bridge",
"license": "Apache-2.0",
@@ -96,6 +96,7 @@ interface TWBridge {
getLatestBlockNumber: () => Promise<string>;
getBlock: (blockNumber: string) => Promise<string>;
getBlockWithTransactions: (blockNumber: string) => Promise<string>;
getEmail: () => Promise<string>;
}
const w = window;
@@ -652,10 +653,16 @@ class ThirdwebBridge implements TWBridge {
const localWallet = this.walletMap.get(
walletIds.localWallet,
) as LocalWallet;
await localWallet.loadOrCreate({
strategy: "encryptedJson",
password,
});
try {
await localWallet.loadOrCreate({
strategy: "encryptedJson",
password,
});
} catch(e) {
console.warn(e);
return localWallet;
}
return localWallet;
}
@@ -730,6 +737,14 @@ class ThirdwebBridge implements TWBridge {
return JSON.stringify({ result: res }, bigNumberReplacer);
}
public async getEmail(){
const embeddedWallet = this.walletMap.get(
walletIds.embeddedWallet,
) as EmbeddedWallet;
const email = await embeddedWallet.getEmail();
return JSON.stringify({ result: email });
}
public openPopupWindow() {
const win = window.open("", undefined, "width=350, height=500");
if (win) {
+31
View File
@@ -1,5 +1,36 @@
# @thirdweb-dev/wallets
## 2.2.1
### Patch Changes
- Updated dependencies [[`bcfa9463`](https://github.com/thirdweb-dev/js/commit/bcfa9463bbae6bf1d3b6389b7a141f65ef3e1173)]:
- @thirdweb-dev/sdk@4.0.21
## 2.2.0
### Minor Changes
- [#2052](https://github.com/thirdweb-dev/js/pull/2052) [`94966069`](https://github.com/thirdweb-dev/js/commit/9496606964d65268f8ee6bf9f78b2786e99d33ac) Thanks [@ElasticBottle](https://github.com/ElasticBottle)! - feat: add custom auth endpoint authentication strategy support for embeddedWallet
Configure the endpoint for where the payload is to be sent too over at thirdweb.com/dashboard.
```typsecript
await embeddedWallet.authenticate({
strategy: "auth_endpoint",
payload: "SOME_STRING",
encryptionKey: ""
});
```
### Patch Changes
- [#2058](https://github.com/thirdweb-dev/js/pull/2058) [`15ae5e7f`](https://github.com/thirdweb-dev/js/commit/15ae5e7f95a482a9736923c0e10916a0a6115c3d) Thanks [@MananTank](https://github.com/MananTank)! - Add option to open the official wallet connect modal in ConnectWallet
- Updated dependencies [[`d2001ca4`](https://github.com/thirdweb-dev/js/commit/d2001ca464aa699ac821c97eb37de7409ba865f3), [`85842c15`](https://github.com/thirdweb-dev/js/commit/85842c1596c901e228be1894b6702a8871d9e794), [`e595d4d9`](https://github.com/thirdweb-dev/js/commit/e595d4d92f03e36cbe61e1f00a366e37ede5d814), [`497677f3`](https://github.com/thirdweb-dev/js/commit/497677f3596977fa90ebc0fa76cb5842d46d8dcf)]:
- @thirdweb-dev/chains@0.1.61
- @thirdweb-dev/sdk@4.0.20
## 2.1.11
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/wallets",
"version": "2.1.11",
"version": "2.2.1",
"main": "dist/thirdweb-dev-wallets.cjs.js",
"module": "dist/thirdweb-dev-wallets.esm.js",
"browser": {
@@ -14,6 +14,7 @@ export enum AuthProvider {
GOOGLE = "Google",
EMAIL_OTP = "EmailOtp",
CUSTOM_JWT = "CustomJWT",
CUSTOM_AUTH_ENDPOINT = "CustomAuthEndpoint",
FACEBOOK = "Facebook",
APPLE = "Apple",
}
@@ -10,6 +10,7 @@ import type {
import type { EmbeddedWalletIframeCommunicator } from "../../utils/iFrameCommunication/EmbeddedWalletIframeCommunicator";
export type LoginQuerierTypes = {
loginWithCustomAuthEndpoint: { payload: string; encryptionKey: string };
loginWithCustomJwt: { jwt: string; encryptionKey?: string };
loginWithThirdwebModal: undefined | { email: string };
sendThirdwebEmailLoginOtp: { email: string };
@@ -68,6 +69,10 @@ export abstract class AbstractLogin<
jwt: string;
encryptionKey: string;
}): Promise<AuthLoginReturnType>;
abstract loginWithCustomAuthEndpoint(args: {
payload: string;
encryptionKey: string;
}): Promise<AuthLoginReturnType>;
abstract loginWithModal(args?: MODAL): Promise<AuthLoginReturnType>;
abstract loginWithEmailOtp(args: EMAIL_MODAL): Promise<AuthLoginReturnType>;
abstract loginWithOauth(
@@ -184,6 +184,7 @@ export class BaseLogin extends AbstractLogin<
encryptionKey,
jwt,
}: LoginQuerierTypes["loginWithCustomJwt"]): Promise<AuthLoginReturnType> {
await this.preLogin();
const result = await this.LoginQuerier.call<AuthAndWalletRpcReturnType>({
procedureName: "loginWithCustomJwt",
params: { encryptionKey, jwt },
@@ -191,6 +192,18 @@ export class BaseLogin extends AbstractLogin<
return this.postLogin(result);
}
override async loginWithCustomAuthEndpoint({
encryptionKey,
payload,
}: LoginQuerierTypes["loginWithCustomAuthEndpoint"]): Promise<AuthLoginReturnType> {
await this.preLogin();
const result = await this.LoginQuerier.call<AuthAndWalletRpcReturnType>({
procedureName: "loginWithCustomAuthEndpoint",
params: { encryptionKey, payload },
});
return this.postLogin(result);
}
override async verifyEmailLoginOtp({
email,
otp,
@@ -96,8 +96,6 @@ export class Auth {
* @returns `{{user: InitializedUser}}` An InitializedUser object. See {@link EmbeddedWalletSdk.getUser} for more
*/
async loginWithModal(): Promise<AuthLoginReturnType> {
await this.preLogin();
return this.BaseLogin.loginWithModal();
}
@@ -133,6 +131,12 @@ export class Auth {
return this.BaseLogin.loginWithCustomJwt(args);
}
async loginWithCustomAuthEndpoint(
args: Parameters<BaseLogin["loginWithCustomAuthEndpoint"]>[0],
): Promise<AuthLoginReturnType> {
return this.BaseLogin.loginWithCustomAuthEndpoint(args);
}
async loginWithOauth(
args: Parameters<BaseLogin["loginWithOauth"]>[0],
): Promise<AuthLoginReturnType> {
@@ -250,13 +250,18 @@ export class EmbeddedWalletConnector extends Connector<EmbeddedWalletConnectionA
encryptionKey: params.encryptionKey,
});
}
case "auth_endpoint": {
return ewSDK.auth.loginWithCustomAuthEndpoint({
payload: params.payload,
encryptionKey: params.encryptionKey,
});
}
case "iframe_email_verification": {
return ewSDK.auth.loginWithEmailOtp({
email: params.email,
});
}
case "iframe":
case undefined: {
case "iframe": {
return ewSDK.auth.loginWithModal();
}
default:
@@ -40,6 +40,12 @@ type JwtAuthParams = {
encryptionKey?: string;
};
type AuthEndpointParams = {
strategy: "auth_endpoint";
payload: string;
encryptionKey: string;
};
// open iFrame to send and input the OTP
type IframeOtpAuthParams = {
strategy: "iframe_email_verification";
@@ -56,6 +62,7 @@ export type AuthParams =
| EmailVerificationAuthParams
| OauthAuthParams
| JwtAuthParams
| AuthEndpointParams
| IframeOtpAuthParams
| IframeAuthParams;
@@ -229,6 +229,10 @@ export abstract class BaseAccountAPI {
}));
}
// callGasLimit = callGasLimit.mul(10); // add 100k for entrypoint checks
console.log("callGasLimit", callGasLimit.toString());
return {
callData,
callGasLimit,
@@ -291,6 +295,11 @@ export abstract class BaseAccountAPI {
await this.getVerificationGasLimit(),
).add(initGas);
console.log("initGas", initGas.toString());
console.log("initGas", verificationGasLimit.toString());
// verificationGasLimit = verificationGasLimit.mul(3);
let { maxFeePerGas, maxPriorityFeePerGas } = info;
if (!maxFeePerGas || !maxPriorityFeePerGas) {
const feeData = await getDynamicFeeData(
@@ -301,16 +310,32 @@ export abstract class BaseAccountAPI {
}
if (!maxFeePerGas) {
maxFeePerGas = feeData.maxFeePerGas ?? undefined;
maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? undefined;
const network = await this.provider.getNetwork();
const chainId = network.chainId;
console.log(
"CELO maxFeePerGas",
ethers.utils.formatUnits(maxFeePerGas || 0, "gwei"),
);
console.log(
"CELO maxPriorityFeePerGas",
ethers.utils.formatUnits(maxPriorityFeePerGas || 0, "gwei"),
);
if (
chainId === Celo.chainId ||
chainId === CeloAlfajoresTestnet.chainId ||
chainId === CeloBaklavaTestnet.chainId
) {
maxFeePerGas = maxFeePerGas?.mul(50);
maxPriorityFeePerGas = maxFeePerGas;
}
console.log(
"CELO final",
ethers.utils.formatUnits(maxPriorityFeePerGas || 0, "gwei"),
);
}
}
@@ -82,6 +82,7 @@ export class WalletConnectConnector extends WagmiConnector<
#initProviderPromise?: Promise<void>;
#storage: AsyncStorage;
filteredChains: Chain[];
showWalletConnectModal: boolean;
constructor(config: { chains?: Chain[]; options: WalletConnectOptions }) {
super({
@@ -97,6 +98,8 @@ export class WalletConnectConnector extends WagmiConnector<
return chainsToRequest.has(c.chainId);
})
: this.chains;
this.showWalletConnectModal = this.options.qrcode !== false;
}
async connect({ chainId: chainIdP, pairingTopic }: ConnectConfig = {}) {
@@ -323,12 +326,12 @@ export class WalletConnectConnector extends WagmiConnector<
async #createProvider() {
if (!this.#initProviderPromise && typeof window !== "undefined") {
this.#initProviderPromise = this.#initProvider();
this.#initProviderPromise = this.initProvider();
}
return this.#initProviderPromise;
}
async #initProvider() {
async initProvider() {
const {
default: EthereumProvider,
OPTIONAL_EVENTS,
@@ -341,7 +344,7 @@ export class WalletConnectConnector extends WagmiConnector<
if (defaultChain) {
// EthereumProvider populates & deduplicates required methods and events internally
this.#provider = await EthereumProvider.init({
showQrModal: this.options.qrcode !== false,
showQrModal: this.showWalletConnectModal,
projectId: this.options.projectId,
optionalMethods: OPTIONAL_METHODS,
optionalEvents: OPTIONAL_EVENTS,
@@ -166,6 +166,8 @@ export class WalletConnect extends AbstractClientWallet<WalletConnectOptions> {
throw new Error("WalletConnect connector not found");
}
wcConnector.showWalletConnectModal = false;
const wcProvider = await wcConnector.getProvider();
wcProvider.on("display_uri", (uri) => {
@@ -175,4 +177,19 @@ export class WalletConnect extends AbstractClientWallet<WalletConnectOptions> {
// trigger connect flow
this.connect({ chainId: options.chainId }).then(options.onConnected);
}
async connectWithModal(options?: { chainId?: number }) {
await this.getConnector();
const wcConnector = this.#walletConnectConnector;
if (!wcConnector) {
throw new Error("WalletConnect connector not found");
}
wcConnector.showWalletConnectModal = true;
await wcConnector.initProvider();
await this.connect({ chainId: options?.chainId });
}
}
+79 -7
View File
@@ -575,11 +575,14 @@ importers:
specifier: ^0.1.9
version: 0.1.9
'@radix-ui/react-dialog':
specifier: ^1.0.4
version: 1.0.4(@types/[email protected])(@types/[email protected])([email protected])([email protected])
specifier: ^1.0.5
version: 1.0.5(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-dropdown-menu':
specifier: ^2.0.5
version: 2.0.5(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-focus-scope':
specifier: ^1.0.4
version: 1.0.4(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-icons':
specifier: ^1.3.0
version: 1.3.0([email protected])
@@ -10185,8 +10188,8 @@ packages:
react: 18.2.0
dev: false
/@radix-ui/[email protected].4(@types/[email protected])(@types/[email protected])([email protected])([email protected]):
resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==}
/@radix-ui/[email protected].5(@types/[email protected])(@types/[email protected])([email protected])([email protected]):
resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -10202,11 +10205,11 @@ packages:
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-compose-refs': 1.0.1(@types/[email protected])([email protected])
'@radix-ui/react-context': 1.0.1(@types/[email protected])([email protected])
'@radix-ui/react-dismissable-layer': 1.0.4(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-dismissable-layer': 1.0.5(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-focus-guards': 1.0.1(@types/[email protected])([email protected])
'@radix-ui/react-focus-scope': 1.0.3(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-focus-scope': 1.0.4(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-id': 1.0.1(@types/[email protected])([email protected])
'@radix-ui/react-portal': 1.0.3(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-portal': 1.0.4(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-presence': 1.0.1(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-primitive': 1.0.3(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-slot': 1.0.2(@types/[email protected])([email protected])
@@ -10258,6 +10261,31 @@ packages:
react-dom: 18.2.0([email protected])
dev: false
/@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected])([email protected]):
resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0
react-dom: ^16.8 || ^17.0 || ^18.0
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
dependencies:
'@babel/runtime': 7.22.6
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-compose-refs': 1.0.1(@types/[email protected])([email protected])
'@radix-ui/react-primitive': 1.0.3(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-use-callback-ref': 1.0.1(@types/[email protected])([email protected])
'@radix-ui/react-use-escape-keydown': 1.0.3(@types/[email protected])([email protected])
'@types/react': 18.2.17
'@types/react-dom': 18.2.7
react: 18.2.0
react-dom: 18.2.0([email protected])
dev: false
/@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected])([email protected]):
resolution: {integrity: sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==}
peerDependencies:
@@ -10322,6 +10350,29 @@ packages:
react-dom: 18.2.0([email protected])
dev: false
/@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected])([email protected]):
resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0
react-dom: ^16.8 || ^17.0 || ^18.0
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
dependencies:
'@babel/runtime': 7.22.6
'@radix-ui/react-compose-refs': 1.0.1(@types/[email protected])([email protected])
'@radix-ui/react-primitive': 1.0.3(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@radix-ui/react-use-callback-ref': 1.0.1(@types/[email protected])([email protected])
'@types/react': 18.2.17
'@types/react-dom': 18.2.7
react: 18.2.0
react-dom: 18.2.0([email protected])
dev: false
/@radix-ui/[email protected]([email protected]):
resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==}
peerDependencies:
@@ -10469,6 +10520,27 @@ packages:
react-dom: 18.2.0([email protected])
dev: false
/@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected])([email protected]):
resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0
react-dom: ^16.8 || ^17.0 || ^18.0
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
dependencies:
'@babel/runtime': 7.22.6
'@radix-ui/react-primitive': 1.0.3(@types/[email protected])(@types/[email protected])([email protected])([email protected])
'@types/react': 18.2.17
'@types/react-dom': 18.2.7
react: 18.2.0
react-dom: 18.2.0([email protected])
dev: false
/@radix-ui/[email protected](@types/[email protected])(@types/[email protected])([email protected])([email protected]):
resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==}
peerDependencies: