Compare commits

..
Author SHA1 Message Date
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
7b52c6bba0 Version Packages (#2467)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-03-13 11:56:41 -07:00
Edward SunandGitHub e024d78ed0 Add pay to usageEventSchema (#2465) 2024-03-13 05:02:40 +00:00
Joaquim VergesandGitHub a2002d1637 [SDK] Better return type for getProofsForAllowListEntry (#2469) 2024-03-13 01:20:22 +00:00
FirekeeperandGitHub 607ab7e860 [Unity] Expose SW isDeployed (#2466) 2024-03-12 22:37:02 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
f27989741a Version Packages (#2461)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-03-12 12:55:05 -07:00
Joaquim VergesandGitHub b2be63ada4 handle l2 estimations when forcing gasLimit (#2457) 2024-03-12 19:37:02 +00:00
Winston YeoandGitHub eee200f8d4 chore: whitelist embedded-wallet.thirdweb.com in service utils (#2453) 2024-03-12 15:45:09 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
817ab2249f Version Packages (#2446)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-03-11 17:22:24 -07:00
Joaquim VergesandGitHub 173777ade4 [SDK] update OP SDK to fix pnpm preinstall script issue (#2455) 2024-03-11 23:53:16 +00:00
Manan TankandGitHub 838233075a [react] Fix onConnect called multiple times in EmbeddedWalletSocialLogin (#2447) 2024-03-11 19:03:32 +00:00
FirekeeperandGitHub cabfc29119 [Smart Wallet] Use bundler eth_getUserOperationReceipt instead of rpc eth_getLogs (#2443) 2024-03-11 17:12:35 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
f02570db88 Version Packages (#2442)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-03-08 16:56:41 -08:00
Joaquim VergesandGitHub c6b025e844 [SDK] handle estimateGasCost for OP chains (#2441) 2024-03-08 16:49:28 -08:00
Joaquim VergesandGitHub 332a14552b [Wallets] make accountInfo/factoryInfo internal props optional in SmartWalletConfig (#2439) 2024-03-09 00:45:04 +00:00
FirekeeperandGitHub c894270401 [Smart Wallet] try fetch sw abi if deployed (#2440) 2024-03-09 00:02:46 +00:00
Joaquim VergesandGitHub 595815dc3e Update README.md (#2438)
Signed-off-by: Joaquim Verges <[email protected]>
2024-03-08 12:42:35 -08:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
b959cafccc Version Packages (#2435)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-03-08 09:21:46 -08:00
Edward SunandGitHub 4cf0aede0e Update service-utils change to patch (#2434) 2024-03-08 01:53:20 +00:00
Edward SunandGitHub 6cf298a29a Add pay to Services list (#2431) 2024-03-08 01:15:42 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
62b2508a6c Version Packages (#2420)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-03-07 13:57:31 -08:00
c3967b798e chore(chains): update chains (#2426)
Co-authored-by: GitHub Action <[email protected]>
2024-03-07 13:21:11 -08:00
588897d1b0 chore(chains): update chains (#2416)
Co-authored-by: GitHub Action <[email protected]>
2024-03-07 11:59:05 -08:00
862905e161 refactor: Move checkContractWalletSignature function to a separate file (#2417)
Co-authored-by: 0xFirekeeper <[email protected]>
2024-03-07 06:09:48 +00:00
saminaandGitHub 5f81e246f2 Update README.md (#2418)
Signed-off-by: samina <[email protected]>
2024-03-07 02:43:38 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
1b052d63e9 Version Packages (#2409)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-03-06 15:23:29 -08:00
FirekeeperandGitHub a3f6878649 [Unity] Remove unnecessary logs, add getEmail check (#2415) 2024-03-06 22:44:51 +00:00
Jonas DanielsandGitHub 74a92dcb7d feat(wallets): pass clientId and secretKey to verifySignature functions (#2414) 2024-03-06 22:20:10 +00:00
38fc0b796a chore(chains): update chains (#2412)
Co-authored-by: GitHub Action <[email protected]>
2024-03-06 13:07:04 -08:00
YashandGitHub ef76a96c2d [CLI] Option to link external libraries (#2400) 2024-03-06 18:45:04 +00:00
2667706d8d chore(chains): update chains (#2408)
Co-authored-by: GitHub Action <[email protected]>
2024-03-06 00:03:24 -08:00
047fbe2918 chore(chains): update chains (#2406)
Co-authored-by: GitHub Action <[email protected]>
2024-03-05 23:58:43 -08:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
af01c63b45 Version Packages (#2384)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-03-05 20:54:31 -08:00
3796204372 chore(chains): update chains (#2402)
Co-authored-by: GitHub Action <[email protected]>
2024-03-05 20:48:29 -08:00
Joaquim VergesandGitHub 9c7fbc1603 [SDK] update NFT drop metadata (#2404) 2024-03-06 04:41:47 +00:00
iketwandGitHub 156950423b [RN] cap expo-app version for automatic installation (#2405) 2024-03-06 04:13:01 +00:00
FirekeeperandGitHub f80f6307a3 [Smart Wallet] ERC20Paymaster Generic Support (#2388) 2024-03-05 21:38:43 +00:00
5f243bba0d chore(chains): update chains (#2378)
Co-authored-by: GitHub Action <[email protected]>
2024-03-05 10:16:45 -08:00
Joaquim VergesandGitHub 7d8697ec3f [React] expose useUpdateNFTMetadata hook (#2382) 2024-03-04 19:41:31 +00:00
FirekeeperandGitHub ab44b8f0ae [Smart Wallet] Do not deploy to sign typed data, allow presigned deploy+session key (#2379) 2024-03-02 15:13:56 +00:00
ad135b67b9 add factory v2 unit test (#2357)
Co-authored-by: Jonas Daniels <[email protected]>
2024-03-01 12:52:31 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
5a648f7e74 Version Packages (#2377)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-02-29 16:17:22 -08:00
e87292ab60 chore(chains): update chains (#2372)
Co-authored-by: GitHub Action <[email protected]>
2024-02-29 15:09:34 -08:00
Manan TankandGitHub d5d7d542ce [react] Make OTPInput numeric ( EmbeddedWallet UI ) (#2376) 2024-02-29 22:11:51 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
bc694a1823 Version Packages (#2338)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-02-29 11:30:35 -08:00
Manan TankandGitHub 553f7fda47 [react] Remove unnecessary ConnectModal opening (#2375) 2024-02-29 19:13:01 +00:00
Manan TankandGitHub bc198e215e Use private for private members in classes instead of # (#2374) 2024-02-29 17:49:32 +00:00
73e34c083c [wallet, react] Add Magic Eden wallet (#2347)
Co-authored-by: Manan Tank <[email protected]>
Co-authored-by: Jonas Daniels <[email protected]>
2024-02-29 10:24:00 +00:00
cc22fa84e5 chore(chains): update chains (#2371)
Co-authored-by: GitHub Action <[email protected]>
2024-02-29 02:08:13 -08:00
58b9dbc17d chore(chains): update chains (#2368)
Co-authored-by: GitHub Action <[email protected]>
2024-02-28 21:18:28 -08:00
Joaquim VergesandGitHub 8d2811dd13 [SDK] handle updating metadata for ERC1155Token contracts (#2369) 2024-02-29 03:38:45 +00:00
YashandGitHub 7d74d30b9f [SDK] Resolve EIP7511 minimal proxy (#2362) 2024-02-28 23:25:12 +00:00
f3a0154b5a chore(chains): update chains (#2367)
Co-authored-by: GitHub Action <[email protected]>
2024-02-28 15:08:03 -08:00
Jonas DanielsandGitHub 10b71dd7a0 revert: 4d89dc1efa (#2364)
Signed-off-by: Jonas Daniels <[email protected]>
2024-02-28 20:21:54 +00:00
FirekeeperandGitHub 1ac06b9286 Unity 4.7.1 (#2363) 2024-02-28 19:51:11 +00:00
cff6ef2c97 [react] remove const enums (#2354)
Co-authored-by: Jonas Daniels <[email protected]>
2024-02-28 19:15:39 +00:00
574f180dde chore(chains): update chains (#2358)
Co-authored-by: GitHub Action <[email protected]>
2024-02-28 11:04:22 -08:00
YashandGitHub bac0c9b4a1 [SDK] Fix joinABI filtering (#2359) 2024-02-28 18:57:12 +00:00
a11f27be4e chore(chains): update chains (#2345)
Co-authored-by: GitHub Action <[email protected]>
2024-02-27 09:55:25 -08:00
FirekeeperandGitHub e7528af48f [Smart Wallet] Always force deploy on sign/auth, support 1271 (#2341) 2024-02-26 23:03:51 +00:00
Kien NgoandGitHub a50d3b04f6 [React] Update code snippet for XDEFI wallet (#2348) 2024-02-26 05:33:13 +00:00
fb5c185319 chore(chains): update chains (#2339)
Co-authored-by: GitHub Action <[email protected]>
2024-02-23 10:36:27 -08:00
Joaquim VergesandGitHub a00917cca4 [SDK] updateMetadata for edition drop contracts (#2343) 2024-02-22 18:18:22 +00:00
Jonas DanielsandGitHub 7bbf3e235e refactor(utils): update RPC URLs and remove unnecessary code (#2337) 2024-02-21 13:11:13 +00:00
abc0a53dc3 chore(chains): update chains (#2336)
Co-authored-by: GitHub Action <[email protected]>
2024-02-21 05:01:20 -08:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
38ea61c649 Version Packages (#2293)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-02-21 04:36:32 -08:00
652275834e chore(chains): update chains (#2322)
Co-authored-by: GitHub Action <[email protected]>
2024-02-21 03:54:12 -08:00
Joaquim VergesandGitHub 64f05ad040 Doc Grouping (#2262) 2024-02-21 05:24:44 +00:00
Manan TankandGitHub b5337bcfc3 Add hideSendButton and hideReceiveButton props in ConnectWallet (#2331) 2024-02-20 08:56:48 +00:00
YashandGitHub 2348417114 [SDK] Custom gas for Xpla create2 factory deployment (#1529) 2024-02-19 21:15:43 +00:00
Manan TankandGitHub e6a2407ee5 Add ABI in useContract query key (#2311) 2024-02-19 15:50:33 +00:00
b2a493f748 chore(chains): update chains (#2314)
Co-authored-by: GitHub Action <[email protected]>
2024-02-16 15:57:07 -08:00
Jonas DanielsandGitHub 440f5f1b9e fix storage test (#2319) 2024-02-16 15:28:40 -08:00
Gerry SaporitoandGitHub 42d7510daf fix: respect usage limits (#2318) 2024-02-16 22:33:28 +00:00
Manan TankandGitHub 73a374aac2 [wallets] Ignore Rabby in MM injected provider detection (#2316) 2024-02-16 15:58:27 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
4bb65cf8be Bump @changesets/changelog-github from 0.4.8 to 0.5.0 (#2263)
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-16 02:55:24 -08:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
7bcecc5628 Bump yaml from 2.3.1 to 2.3.4 (#2264)
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-16 02:55:12 -08:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
e13b0d8cf3 Bump @types/crypto-js from 4.1.3 to 4.2.2 (#2265)
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-16 02:54:55 -08:00
db50b2fcc5 chore(chains): update chains (#2310)
Co-authored-by: GitHub Action <[email protected]>
2024-02-15 23:33:10 -08:00
Manan TankandGitHub 23820b2771 [wallets, react] Update supported networks in Safe (#2309) 2024-02-15 18:22:28 +00:00
a4722053bd chore(chains): update chains (#2306)
Co-authored-by: GitHub Action <[email protected]>
2024-02-15 09:10:31 -08:00
FirekeeperandGitHub b33d13161c Unity 4.6.4 (#2307) 2024-02-14 19:13:47 +00:00
fa637c2e3c chore(chains): update chains (#2305)
Co-authored-by: GitHub Action <[email protected]>
2024-02-13 23:41:05 -08:00
Joaquim VergesandGitHub 3137e45bb8 [SDK] expose rpcBatchingOptions (#2294) 2024-02-14 00:32:02 +00:00
ed4ad8658e chore(chains): update chains (#2295)
Co-authored-by: GitHub Action <[email protected]>
2024-02-13 16:32:36 -08:00
Manan TankandGitHub 9e6b3e5764 ConnectWallet fixes and Improvements (#2303) 2024-02-13 15:46:51 +00:00
YashandGitHub 94a699caae Resolve implementation update (#2300) 2024-02-12 22:46:35 +00:00
Manan TankandGitHub ecd82b4619 [react] Fix usage of dashed props instead of camel case on SVG (#2299) 2024-02-12 14:52:17 +00:00
FirekeeperandGitHub c44d6f2f9d [Unity] Support Wallet.GetSignerAddress (#2298) 2024-02-12 14:07:03 +00:00
ca70cd3882 chore(chains): update chains (#2285)
Co-authored-by: GitHub Action <[email protected]>
2024-02-09 22:56:42 -08:00
Joaquim VergesandGitHub 0f9a7b2571 [SDK] Lower max RPC batch size (#2292) 2024-02-10 05:41:34 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
d33227ab2b Version Packages (#2282)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-02-09 17:37:26 -08:00
Joaquim VergesandGitHub 53786fc306 [SDK] memoize extensions (#2291) 2024-02-10 01:00:42 +00:00
Manan TankandGitHub f85806c067 Update EmbeddedWallet name in CW (#2290) 2024-02-09 22:40:40 +00:00
Manan TankandGitHub 0155adcea4 Show EmbeddedWallet UI as initial screen in CW (#2289) 2024-02-09 20:57:32 +00:00
Manan TankandGitHub 74d76ff580 Add "Powered By Thirdweb" Branding in CW (#2288) 2024-02-09 16:32:27 +00:00
farhanW3andGitHub 537e5e063d [Usage]: Usage Schema to have new field (#2287) 2024-02-09 00:47:33 +00:00
Isaac DubuqueandGitHub a86478bf24 add sdk support for engine relayer options (#2233) 2024-02-09 00:40:52 +00:00
Joaquim VergesandGitHub 09de55f13c [SDK] Export MerkleTree helper functions (#2286) 2024-02-08 22:43:13 +00:00
23d0e55308 chore(chains): update chains (#2280)
Co-authored-by: GitHub Action <[email protected]>
2024-02-08 09:44:22 -08:00
FirekeeperandGitHub 185093c185 Unity 4.6.2 (#2284) 2024-02-08 14:35:00 +00:00
farhanW3andGitHub 77400fcf21 Added new properties to usage (#2281) 2024-02-08 01:34:19 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
6a41fe9829 Version Packages (#2274)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-02-07 13:11:26 -08:00
0092e2a317 fix(auth): Next.js App Router handler return type (#2278)
Signed-off-by: Jonas Daniels <[email protected]>
Co-authored-by: Jonas Daniels <[email protected]>
2024-02-07 12:47:09 -08:00
87b9e6d42d chore(chains): update chains (#2279)
Co-authored-by: GitHub Action <[email protected]>
2024-02-07 10:29:29 -08:00
github-actions[bot]andGitHub 336dfd3b37 chore(chains): update chains (#2277) 2024-02-07 08:52:01 -08:00
957c75a36e chore(chains): update chains (#2276)
Co-authored-by: GitHub Action <[email protected]>
2024-02-06 22:27:49 -08:00
357886e31b chore(chains): update chains (#2258)
Co-authored-by: GitHub Action <[email protected]>
2024-02-06 15:46:46 -08:00
DustinandGitHub 330c270f3c Update .env.example (#2272) 2024-02-06 13:52:51 -08:00
Joaquim VergesandGitHub 9096bdc0f1 [ServiceUtils] Add latency prop to CF worker logs (#2273) 2024-02-06 21:44:43 +00:00
saminaandGitHub 62ef83c9e0 Update pull_request_template.md (#2267)
Signed-off-by: samina <[email protected]>
2024-02-06 18:15:54 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
1e7a7a5f3c Version Packages (#2261)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-02-06 09:36:14 -08:00
Manan TankandGitHub 433d49e3ab [react-core] keep wallet states in sync (#2270) 2024-02-06 17:18:46 +00:00
Joaquim VergesandGitHub 5a3f7fa123 [ServiceUtil] add latency prop to logHttpRequest (#2266) 2024-02-06 05:08:46 +00:00
FirekeeperandGitHub 3857cba8ab Unity v4.6.1 (#2268) 2024-02-06 01:57:02 +00:00
Manan TankandGitHub 6a3cacb622 [react] Enforce compact CW modal size based on available space (#2260) 2024-02-02 17:35:52 +00:00
1643 changed files with 11566 additions and 4751 deletions
+2 -1
View File
@@ -3,4 +3,5 @@
# used for unit tests that hit real IPFS gateway
# get a secret key from https://thirdweb.com/create-api-key
TW_SECRET_KEY=""
# Learn more about API keys. https://portal.thirdweb.com/account/api-keys
TW_SECRET_KEY=""
+6
View File
@@ -11,3 +11,9 @@ Short description of the bug fixed or feature added
- [ ] Automated tests: link to unit test file
- [ ] Manual tests: step by step instructions on how to test
## Contributor NFT
Paste in your wallet address below and we will airdrop you a special NFT when your pull request is merged.
```Address: ```
+57 -23
View File
@@ -5,7 +5,7 @@
<br />
</p>
<h1 align="center"><a href='https://thirdweb.com/'>thirdweb</a> JavaScript/TypeScript monorepo</h1>
<h1 align="center"><a href='https://thirdweb.com/'>thirdweb</a> TypeScript SDK</h1>
<p align="center">
<a href="https://github.com/thirdweb-dev/js/actions/workflows/build-test-lint.yml">
@@ -16,38 +16,72 @@
</a>
</p>
<p align="center"><strong>Best in class web3 SDKs for Browser, Node and Mobile apps</strong></p>
<p align="center"><strong>All-in-one web3 SDK for Browser, Node and Mobile apps</strong></p>
> [!IMPORTANT]
> We rewrote the thirdweb SDK from scratch for performance! Head over to the [Beta version unified SDK](https://github.com/thirdweb-dev/js/tree/beta/packages/thirdweb).
## Features
- Support for React & React-Native
- First party support for [Embedded Wallets](https://portal.thirdweb.com/connect/embedded-wallet/overview) (social/email login)
- First party support for [Account Abstraction](https://portal.thirdweb.com/connect/account-abstraction)
- Instant connection to any chain with RPC Edge integration
- Integrated IPFS upload/download
- UI Components for connection, transactions, nft rendering
- High level contract extensions for interacting with common standards
- Automatic ABI resolution
## Library Comparison
| | thirdweb | Wagmi | Viem | Ethers@6 |
| ----------------------------------------- | -------- | ------------------ | ------------------ | -------- |
| Type safe contract API | ✅ | ✅ | ✅ | ✅ |
| Type safe wallet API | ✅ | ✅ | ✅ | ✅ |
| EVM utils | ✅ | ❌ | ✅ | ✅ |
| RPC for any EVM | ✅  | ⚠️ public RPC only | ⚠️ public RPC only | ❌ |
| Automatic ABI Resolution | ✅ | ❌ | ❌ | ❌ |
| IPFS Upload/Download | ✅ | ❌ | ❌ | ❌ |
| Embedded wallet (email/ social login) | ✅ | ⚠️ via 3rd party | ❌ | ❌ |
| Account abstraction (ERC4337) support | ✅ | ⚠️ via 3rd party | ⚠️ via 3rd party | ❌ |
| Web3 wallet connectors | ✅ | ✅ | ❌ | ❌ |
| Local wallet creation | ✅ | ❌ | ✅ | ✅ |
| Auth (SIWE) | ✅ | ⚠️ via 3rd party | ❌ | ❌ |
| Extensions functions for common standards | ✅ | ❌ | ❌ | ❌ |
| React Hooks | ✅ | ✅ | ❌ | ❌ |
| React UI components | ✅ | ❌ | ❌ | ❌ |
| React Native Hooks | ✅ | ❌ | ❌ | ❌ |
| React Native UI Components | ✅ | ❌ | ❌ | ❌ |
## Packages
| Package | Description | Latest Version |
| ---------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [/sdk](./packages/sdk) | Best in class web3 SDK for Browser, Node and Mobile apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/sdk"><img src="https://img.shields.io/npm/v/@thirdweb-dev/sdk?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/wallets](./packages/wallets) | Unified web3 Wallet library to integrate any wallet into your applications. | <a href="https://www.npmjs.com/package/@thirdweb-dev/wallets"><img src="https://img.shields.io/npm/v/@thirdweb-dev/wallets?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/react](./packages/react) | Ultimate collection of React hooks for your web3 apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/react"><img src="https://img.shields.io/npm/v/@thirdweb-dev/react?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/react-native](./packages/react-native) | Ultimate collection of React hooks for your native mobile web3 apps | <a href="https://www.npmjs.com/package/@thirdweb-dev/react-native"><img src="https://img.shields.io/npm/v/@thirdweb-dev/react-native?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/auth](./packages/auth) | Best in class wallet authentication for Node backends | <a href="https://www.npmjs.com/package/@thirdweb-dev/auth"><img src="https://img.shields.io/npm/v/@thirdweb-dev/auth?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/storage](./packages/storage) | Best in class decentralized storage SDK for Browser and Node | <a href="https://www.npmjs.com/package/@thirdweb-dev/storage"><img src="https://img.shields.io/npm/v/@thirdweb-dev/storage?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/cli](./packages/cli) | Publish and deploy smart contracts without dealing with private keys | <a href="https://www.npmjs.com/package/thirdweb"><img src="https://img.shields.io/npm/v/thirdweb?color=red&label=npm&logo=npm" alt="npm version"/></a> |
| [/chains](./packages/chains) | All EVM chain information as JS objects for easy handling | <a href="https://www.npmjs.com/package/@thirdweb-dev/chains"><img src="https://img.shields.io/npm/v/@thirdweb-dev/chains?color=red&label=npm&logo=npm" alt="npm version"/></a> |
## Documentation
Visit [https://portal.thirdweb.com/](https://portal.thirdweb.com/) to view the full documentation.
<br />
| Package | Description
| -----------------------------------------|-----------------------------------------------------------------------------|
| [/sdk](./packages/sdk) | Best in class web3 SDK for Browser, Node and Mobile apps |
| [/wallets](./packages/wallets) | Unified web3 Wallet library to integrate any wallet into your applications. |
| [/react](./packages/react) | Ultimate collection of React hooks for your web3 apps |
| [/react-native](./packages/react-native) | Ultimate collection of React hooks for your native mobile web3 apps |
| [/auth](./packages/auth) | Best in class wallet authentication for Node backends |
| [/storage](./packages/storage) | Best in class decentralized storage SDK for Browser and Node |
| [/cli](./packages/cli) | Publish and deploy smart contracts without dealing with private keys |
| [/chains](./packages/chains) | All EVM chain information as JS objects for easy handling |
## Contributing
We welcome contributions from all developers, regardless of experience level. If you are interested in contributing, please read our [Contributing Guide](.github/contributing.md) where you'll learn how the repo works, how to test your changes, and how to submit a pull request.
We welcome contributions from all developers regardless of experience level. If you are interested in contributing, please read our [Contributing Guide](.github/contributing.md) to learn how the repo works, how to test your changes, and how to submit a pull request.
<br />
See our [open source page](https://thirdweb.com/open-source) for more information on our open-source bounties and program.
## Community
## Additional Resources
The best place to discuss your ideas, ask questions, and troubleshoot issues is our [Discord server](https://discord.gg/thirdweb).
- [SDK Documentation](https://portal.thirdweb.com/typescript/v5)
- [Templates](https://thirdweb.com/templates)
- [YouTube](https://www.youtube.com/c/thirdweb_)
<br/>
## Support
For help or feedback, please [visit our support site](https://thirdweb.com/support)
## Security
+1 -1
View File
@@ -37,7 +37,7 @@
},
"packageManager": "[email protected]",
"dependencies": {
"@changesets/changelog-github": "^0.4.8",
"@changesets/changelog-github": "^0.5.0",
"@changesets/cli": "^2.26.2",
"@changesets/get-dependents-graph": "^1.3.6",
"@changesets/get-release-plan": "^3.0.17",
+88
View File
@@ -1,5 +1,93 @@
# @thirdweb-dev/auth
## 4.1.42
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.4.20
## 4.1.41
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.4.19
## 4.1.40
### Patch Changes
- Updated dependencies [[`cabfc29`](https://github.com/thirdweb-dev/js/commit/cabfc29119f25a78010f59f766bdcb8c392afa2d)]:
- @thirdweb-dev/wallets@2.4.18
## 4.1.39
### Patch Changes
- Updated dependencies [[`c894270`](https://github.com/thirdweb-dev/js/commit/c894270401850575d1a4df73e16198177b46477a), [`332a145`](https://github.com/thirdweb-dev/js/commit/332a14552bf95e13e5220b1bd73414f000088568)]:
- @thirdweb-dev/wallets@2.4.17
## 4.1.38
### Patch Changes
- [#2417](https://github.com/thirdweb-dev/js/pull/2417) [`862905e`](https://github.com/thirdweb-dev/js/commit/862905e161a091c15eb9b054cfcca0e5d2879fd6) Thanks [@jnsdls](https://github.com/jnsdls)! - make verify login payload be self-sufficient
- Updated dependencies [[`862905e`](https://github.com/thirdweb-dev/js/commit/862905e161a091c15eb9b054cfcca0e5d2879fd6)]:
- @thirdweb-dev/wallets@2.4.16
## 4.1.37
### Patch Changes
- Updated dependencies [[`74a92dc`](https://github.com/thirdweb-dev/js/commit/74a92dcb7dc4be7d03bcb8b7211e87016f52a81f)]:
- @thirdweb-dev/wallets@2.4.15
## 4.1.36
### Patch Changes
- Updated dependencies [[`ab44b8f`](https://github.com/thirdweb-dev/js/commit/ab44b8f0ae760065f400f76d69703e26bcbcc022), [`f80f630`](https://github.com/thirdweb-dev/js/commit/f80f6307a3ebe1adaaf072dd2e02aecf83bfa43f)]:
- @thirdweb-dev/wallets@2.4.14
## 4.1.35
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.4.13
## 4.1.34
### Patch Changes
- Updated dependencies [[`73e34c0`](https://github.com/thirdweb-dev/js/commit/73e34c083cd9c0d634e39657a4fad0f49f6fec89), [`e7528af`](https://github.com/thirdweb-dev/js/commit/e7528af48ff2dda622ed47074611499cfd66f819), [`10b71dd`](https://github.com/thirdweb-dev/js/commit/10b71dd7a0c6e91bb1ebe8250ca7fac7bac76635), [`bc198e2`](https://github.com/thirdweb-dev/js/commit/bc198e215e57094aac525b262fe91add4786df92)]:
- @thirdweb-dev/wallets@2.4.12
## 4.1.33
### Patch Changes
- Updated dependencies [[`23820b2`](https://github.com/thirdweb-dev/js/commit/23820b277118ae0845d4f0189ac58ef4e75896ba), [`73a374a`](https://github.com/thirdweb-dev/js/commit/73a374aac25c2396dd2a895629737c6e8d024f45)]:
- @thirdweb-dev/wallets@2.4.11
## 4.1.32
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.4.10
## 4.1.31
### Patch Changes
- [#2278](https://github.com/thirdweb-dev/js/pull/2278) [`0092e2a3`](https://github.com/thirdweb-dev/js/commit/0092e2a3177364ad26af15ecafb4381591dc9be1) Thanks [@hsynlms](https://github.com/hsynlms)! - fix(auth): Next.js App Router handler return type
- Updated dependencies []:
- @thirdweb-dev/wallets@2.4.9
## 4.1.30
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/auth",
"version": "4.1.30",
"version": "4.1.42",
"main": "dist/thirdweb-dev-auth.cjs.js",
"module": "dist/thirdweb-dev-auth.esm.js",
"browser": {
@@ -61,7 +61,7 @@
"lint": "eslint src/ && bunx publint --strict --level warning",
"fix": "eslint src/ --fix",
"clean": "rm -rf dist/ && rm -rf node_modules/",
"test": "mocha --config './test/.mocharc.json' --timeout 30000 --parallel './test/**/*.test.ts'",
"test": "mocha --config './test/.mocharc.json' --timeout 240000 --parallel './test/**/*.test.ts'",
"push": "yalc push"
},
"preconstruct": {
+11 -2
View File
@@ -23,14 +23,21 @@ import {
AuthenticateOptionsWithOptionalDomain,
AuthenticationPayload,
} from "./schema/authenticate";
import { ThirdwebAuthOptions } from "./types";
export class ThirdwebAuth {
private domain: string;
private wallet: GenericAuthWallet;
private options: ThirdwebAuthOptions;
constructor(wallet: GenericAuthWallet, domain: string) {
constructor(
wallet: GenericAuthWallet,
domain: string,
options: ThirdwebAuthOptions = {},
) {
this.wallet = wallet;
this.domain = domain;
this.options = options;
}
public updateWallet(wallet: GenericAuthWallet) {
@@ -66,9 +73,9 @@ export class ThirdwebAuth {
options?: VerifyOptionsWithOptionalDomain,
): Promise<string> {
return verifyLoginPayload({
wallet: this.wallet,
payload,
options: this.formatOptions(options),
clientOptions: this.options,
});
}
@@ -80,6 +87,7 @@ export class ThirdwebAuth {
wallet: this.wallet,
payload,
options: this.formatOptions(options),
clientOptions: this.options,
});
}
@@ -99,6 +107,7 @@ export class ThirdwebAuth {
wallet: this.wallet,
jwt,
options: this.formatOptions(options),
clientOptions: this.options,
});
}
+7 -2
View File
@@ -14,6 +14,7 @@ import {
import { GenerateOptionsSchema } from "../schema/generate";
import { RefreshOptionsSchema } from "../schema/refresh";
import { verifyLoginPayload } from "./login";
import { verifySignature } from "./verify-signature";
function isBrowser() {
return typeof window !== "undefined";
@@ -71,15 +72,16 @@ export async function generateJWT({
wallet,
payload,
options,
clientOptions,
}: GenerateJwtParams): Promise<string> {
const parsedOptions = GenerateOptionsSchema.parse(options);
const userAddress = await verifyLoginPayload({
wallet,
payload,
options: {
domain: parsedOptions.domain,
...parsedOptions.verifyOptions,
},
clientOptions,
});
let session: Json | undefined = undefined;
@@ -156,6 +158,7 @@ export async function authenticateJWT<TSession extends Json = Json>({
wallet,
jwt,
options,
clientOptions,
}: AuthenticateJwtParams): Promise<User<TSession>> {
const parsedOptions = AuthenticateOptionsSchema.parse(options);
const { payload, signature } = parseJWT(jwt);
@@ -210,11 +213,13 @@ export async function authenticateJWT<TSession extends Json = Json>({
}
}
const verified = await wallet.verifySignature(
const verified = await verifySignature(
JSON.stringify(payload),
signature,
issuerAddress,
chainId,
clientOptions.clientId,
clientOptions.secretKey,
);
if (!verified) {
throw new Error(
+10 -12
View File
@@ -10,6 +10,7 @@ import {
LoginPayloadDataSchema,
} from "../schema/login";
import { VerifyOptionsSchema } from "../schema/verify";
import { verifySignature } from "./verify-signature";
/**
* Create an EIP-4361 & CAIP-122 compliant message to sign based on the login payload
@@ -113,18 +114,12 @@ export async function buildAndSignLoginPayload({
}
export async function verifyLoginPayload({
wallet,
payload,
options,
clientOptions,
}: VerifyLoginPayloadParams): Promise<string> {
const parsedOptions = VerifyOptionsSchema.parse(options);
if (payload.payload.type !== wallet.type) {
throw new Error(
`Expected chain type '${wallet.type}' does not match chain type on payload '${payload.payload.type}'`,
);
}
// Check that the intended domain matches the domain of the payload
if (payload.payload.domain !== parsedOptions.domain) {
throw new Error(
@@ -204,16 +199,19 @@ export async function verifyLoginPayload({
// Check that the signing address is the claimed wallet address
const message = createLoginMessage(payload.payload);
const chainId =
wallet.type === "evm" && payload.payload.chain_id
? parseInt(payload.payload.chain_id)
: undefined;
const verified = await wallet.verifySignature(
const chainId = payload.payload.chain_id
? parseInt(payload.payload.chain_id)
: undefined;
const verified = await verifySignature(
message,
payload.signature,
payload.payload.address,
chainId,
clientOptions?.clientId,
clientOptions?.secretKey,
);
if (!verified) {
throw new Error(
`Signer address does not match payload address '${payload.payload.address.toLowerCase()}'`,
@@ -0,0 +1,35 @@
import { checkContractWalletSignature } from "@thirdweb-dev/wallets";
import { utils } from "ethers";
export async function verifySignature(
message: string,
signature: string,
address: string,
chainId?: number,
clientId?: string,
secretKey?: string,
): Promise<boolean> {
try {
const messageHash = utils.hashMessage(message);
const messageHashBytes = utils.arrayify(messageHash);
const recoveredAddress = utils.recoverAddress(messageHashBytes, signature);
if (recoveredAddress === address) {
return true;
}
} catch {
// no-op
}
if (!chainId) {
return false;
}
return checkContractWalletSignature(
message,
signature,
address,
chainId,
clientId,
secretKey,
);
}
+4 -1
View File
@@ -7,6 +7,7 @@ import {
} from "./authenticate";
import { RefreshOptions } from "./refresh";
import { GenerateOptions } from "./generate";
import { ThirdwebAuthOptions } from "../types";
export type BuildLoginPayloadParams = {
wallet: GenericAuthWallet;
@@ -19,9 +20,9 @@ export type SignLoginPayloadParams = {
};
export type VerifyLoginPayloadParams = {
wallet: GenericAuthWallet;
payload: LoginPayload;
options: VerifyOptions;
clientOptions: ThirdwebAuthOptions;
};
export type BuildJwtParams = {
@@ -33,6 +34,7 @@ export type GenerateJwtParams = {
wallet: GenericAuthWallet;
payload: LoginPayload;
options: GenerateOptions;
clientOptions: ThirdwebAuthOptions;
};
export type RefreshJwtParams = {
@@ -45,4 +47,5 @@ export type AuthenticateJwtParams = {
wallet: GenericAuthWallet;
jwt: string;
options: AuthenticateOptions;
clientOptions: ThirdwebAuthOptions;
};
+4
View File
@@ -0,0 +1,4 @@
export type ThirdwebAuthOptions = {
clientId?: string;
secretKey?: string;
};
+1 -1
View File
@@ -41,7 +41,7 @@ export function ThirdwebAuth<
): ThirdwebAuthReturnType<TData, TSession> {
const ctx = {
...cfg,
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain, cfg.thirdwebAuthOptions),
};
const router = express.Router();
+2
View File
@@ -1,4 +1,5 @@
import { ThirdwebAuth } from "../../core";
import { ThirdwebAuthOptions } from "../../core/types";
import { Json, LoginPayloadOutputSchema, User } from "../../core";
import type { GenericAuthWallet } from "@thirdweb-dev/wallets";
import { Request } from "express";
@@ -68,6 +69,7 @@ export type ThirdwebAuthConfig<
| ((user: User, req: Request) => void)
| ((user: User, req: Request) => Promise<void>);
};
thirdwebAuthOptions?: ThirdwebAuthOptions;
};
export type ThirdwebAuthContext<
+1 -1
View File
@@ -44,7 +44,7 @@ export function ThirdwebAuth<
): ThirdwebAuthReturnType<TData, TSession> {
const ctx = {
...cfg,
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain, cfg.thirdwebAuthOptions),
};
const authRouter = async (
+2
View File
@@ -9,6 +9,7 @@ import {
import { z } from "zod";
import { IncomingMessage, ServerResponse } from "http";
import { ZodTypeProvider } from "fastify-type-provider-zod";
import { ThirdwebAuthOptions } from "../../core/types";
export const PayloadBodySchema = z.object({
address: z.string(),
@@ -76,6 +77,7 @@ export type ThirdwebAuthConfig<
| ((user: User, req: FastifyRequest) => void)
| ((user: User, req: FastifyRequest) => Promise<void>);
};
thirdwebAuthOptions?: ThirdwebAuthOptions;
};
export type ThirdwebAuthContext<
+3 -1
View File
@@ -2,6 +2,7 @@ import type { GenericAuthWallet } from "@thirdweb-dev/wallets";
import { z } from "zod";
import { Json, LoginPayloadOutputSchema, User } from "../../core";
import { ThirdwebAuthOptions } from "../../core/types";
export const PayloadBodySchema = z.object({
address: z.string(),
@@ -55,8 +56,9 @@ export type ThirdwebAuthConfigShared = {
sameSite?: "lax" | "strict" | "none";
secure?: boolean;
};
thirdwebAuthOptions?: ThirdwebAuthOptions;
};
export type ThirdwebNextContext = {
params?: Record<string, string | string[]>
params?: Record<string, string | string[]>;
};
+10 -21
View File
@@ -8,19 +8,10 @@ import loginHandler from "./routes/login";
import logoutHandler from "./routes/logout";
import userHandler from "./routes/user";
import switchAccountHandler from "./routes/switch-account";
import type {
ThirdwebAuthConfig,
ThirdwebAuthContext,
} from "./types";
import type {
ThirdwebAuthRoute,
ThirdwebNextContext,
} from "../common/types";
import type { ThirdwebAuthConfig, ThirdwebAuthContext } from "./types";
import type { ThirdwebAuthRoute, ThirdwebNextContext } from "../common/types";
export type {
ThirdwebAuthConfig,
ThirdwebAuthContext,
} from "./types";
export type { ThirdwebAuthConfig, ThirdwebAuthContext } from "./types";
export async function ThirdwebAuthRouter(
req: NextRequest,
@@ -44,7 +35,7 @@ export async function ThirdwebAuthRouter(
default:
return Response.json(
{ message: "Invalid route for authentication." },
{ status: 400},
{ status: 400 },
);
}
}
@@ -55,16 +46,14 @@ export function ThirdwebAuth<
>(cfg: ThirdwebAuthConfig<TData, TSession>) {
const authCtx = {
...cfg,
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain, cfg.thirdwebAuthOptions),
};
async function ThirdwebAuthHandler(...args: [] | [NextRequest, ThirdwebNextContext]) {
if (args.length === 0) {
return async (req: NextRequest, ctx: ThirdwebNextContext): Promise<void | Response> =>
await ThirdwebAuthRouter(req, ctx, authCtx as ThirdwebAuthContext);
}
return ThirdwebAuthRouter(args[0], args[1], authCtx as ThirdwebAuthContext);
async function ThirdwebAuthHandler(
req: NextRequest,
ctx: ThirdwebNextContext,
) {
return await ThirdwebAuthRouter(req, ctx, authCtx as ThirdwebAuthContext);
}
return {
+1 -1
View File
@@ -52,7 +52,7 @@ export function ThirdwebAuth<
>(cfg: ThirdwebAuthConfig<TData, TSession>) {
const ctx = {
...cfg,
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain),
auth: new ThirdwebAuthSDK(cfg.wallet, cfg.domain, cfg.thirdwebAuthOptions),
};
function ThirdwebAuthHandler(
+5 -1
View File
@@ -3,6 +3,8 @@ import { EthersWallet } from "@thirdweb-dev/wallets/evm/wallets/ethers";
import { expect } from "chai";
import { Wallet } from "ethers";
require("dotenv-mono").load();
describe("Wallet Authentication - EVM", async () => {
let adminWallet: any, signerWallet: any, attackerWallet: any;
let auth: ThirdwebAuth;
@@ -18,7 +20,9 @@ describe("Wallet Authentication - EVM", async () => {
signerWallet = new EthersWallet(signerSigner);
attackerWallet = new EthersWallet(attackerSigner);
auth = new ThirdwebAuth(signerWallet, "thirdweb.com");
auth = new ThirdwebAuth(signerWallet, "thirdweb.com", {
secretKey: process.env.TW_SECRET_KEY,
});
});
beforeEach(async () => {
+384
View File
@@ -0,0 +1,384 @@
import { LocalWallet, SmartWallet } from "@thirdweb-dev/wallets";
import { ThirdwebAuth } from "../src/core";
import { EthersWallet } from "@thirdweb-dev/wallets/evm/wallets/ethers";
import { expect } from "chai";
import { Wallet } from "ethers";
require("dotenv-mono").load();
describe("Wallet Authentication - EVM - Smart Wallet", async () => {
let adminWallet: any, signerWallet: any, attackerWallet: any;
let auth: ThirdwebAuth;
before(async () => {
const factoryAddress = "0x13947435c2fe6BE51ED82F6f59C38617a323dB9B";
const chain = 80001;
const localWallet = new LocalWallet();
await localWallet.generate();
const smartWallet = new SmartWallet({
chain: chain,
factoryAddress: factoryAddress,
gasless: true,
secretKey: process.env.TW_SECRET_KEY,
});
await smartWallet.connect({ personalWallet: localWallet });
adminWallet = new EthersWallet(Wallet.createRandom());
signerWallet = smartWallet;
attackerWallet = new EthersWallet(Wallet.createRandom());
auth = new ThirdwebAuth(signerWallet, "thirdweb.com", {
secretKey: process.env.TW_SECRET_KEY,
});
});
beforeEach(async () => {
auth.updateWallet(signerWallet);
});
it("Should verify logged in wallet", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const address = await auth.verify(payload);
expect(address).to.equal(await signerWallet.getAddress());
});
it("Should verify logged in wallet with chain ID and expiration", async () => {
const payload = await auth.login({
expirationTime: new Date(Date.now() + 1000 * 60 * 5),
chainId: "80001",
});
auth.updateWallet(adminWallet);
const address = await auth.verify(payload, {
chainId: "80001",
});
expect(address).to.equal(await signerWallet.getAddress());
});
it("Should verify payload with resources", async () => {
const payload = await auth.login({
resources: ["https://example.com", "https://test.com"],
});
auth.updateWallet(adminWallet);
const address = await auth.verify(payload, {
resources: ["https://example.com", "https://test.com"],
});
expect(address).to.equal(await signerWallet.getAddress());
});
it("Should reject payload without necessary resources", async () => {
const payload = await auth.login({
resources: ["https://example.com"],
});
auth.updateWallet(adminWallet);
try {
await auth.verify(payload, {
resources: ["https://example.com", "https://test.com"],
});
expect.fail();
} catch (err: any) {
expect(err.message).to.equal(
"Login request is missing required resources: https://test.com",
);
}
});
it("Should verify payload with customized statement", async () => {
const payload = await auth.login({
statement: "Please sign!",
});
auth.updateWallet(adminWallet);
const address = await auth.verify(payload, {
statement: "Please sign!",
});
expect(address).to.equal(await signerWallet.getAddress());
});
it("Should reject payload with incorrect statement", async () => {
const payload = await auth.login({
statement: "Please sign!",
});
auth.updateWallet(adminWallet);
try {
await auth.verify(payload, {
statement: "Please sign again!",
});
expect.fail();
} catch (err: any) {
expect(err.message).to.include(
"Expected statement 'Please sign again!' does not match statement on payload",
);
}
});
it("Should reject invalid nonce", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
try {
await auth.verify(payload, {
validateNonce: (nonce: string) => {
if (nonce === payload.payload.nonce) {
throw new Error();
}
},
});
expect.fail();
} catch (err: any) {
expect(err.message).to.equal("Login request nonce is invalid");
}
});
it("Should accept valid nonce", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const address = await auth.verify(payload, {
validateNonce: (nonce: string) => {
if (nonce !== payload.payload.nonce) {
throw new Error();
}
},
});
expect(address).to.equal(await signerWallet.getAddress());
});
it("Should reject payload with incorrect domain", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
try {
await auth.verify(payload, { domain: "test.thirdweb.com" });
expect.fail();
} catch (err: any) {
expect(err.message).to.equal(
"Expected domain 'test.thirdweb.com' does not match domain on payload 'thirdweb.com'",
);
}
});
it("Should reject expired login payload", async () => {
const payload = await auth.login({
expirationTime: new Date(Date.now() - 1000 * 60 * 5),
});
auth.updateWallet(adminWallet);
try {
await auth.verify(payload);
expect.fail();
} catch (err: any) {
expect(err.message).to.equal("Login request has expired");
}
});
it("Should reject payload with incorrect chain ID", async () => {
const payload = await auth.login({
chainId: "1",
});
auth.updateWallet(adminWallet);
try {
await auth.verify(payload, {
chainId: "137",
});
expect.fail();
} catch (err: any) {
expect(err.message).to.equal(
"Expected chain ID '137' does not match chain ID on payload '1'",
);
}
});
it("Should reject payload with incorrect signer", async () => {
const payload = await auth.login();
payload.payload.address = await attackerWallet.getAddress();
auth.updateWallet(adminWallet);
try {
await auth.verify(payload);
expect.fail();
} catch (err: any) {
expect(err.message).to.contain("does not match payload address");
}
});
it("Should generate valid authentication token", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload);
const user = await auth.authenticate(token);
expect(user.address).to.equal(await signerWallet.getAddress());
});
it("Should reject token with incorrect domain", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload);
try {
await auth.authenticate(token, { domain: "test.thirdweb.com" });
expect.fail();
} catch (err: any) {
expect(err.message).to.contain(
"Expected token to be for the domain 'test.thirdweb.com', but found token with domain 'thirdweb.com'",
);
}
});
it("Should reject token before invalid before", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload, {
invalidBefore: new Date(Date.now() + 1000 * 60 * 5),
});
try {
await auth.authenticate(token);
expect.fail();
} catch (err: any) {
expect(err.message).to.contain("This token is invalid before");
}
});
it("Should reject expired authentication token", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload, {
expirationTime: new Date(Date.now() - 1000 * 60 * 5),
});
try {
await auth.authenticate(token);
expect.fail();
} catch (err: any) {
expect(err.message).to.contain("This token expired");
}
});
it("Should reject if admin address is not connected wallet address", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload);
auth.updateWallet(signerWallet);
try {
await auth.authenticate(token);
expect.fail();
} catch (err: any) {
expect(err.message).to.contain(
`The expected issuer address '${await signerWallet.getAddress()}' did not match the token issuer address '${await adminWallet.getAddress()}'`,
);
}
});
it("Should accept token with valid token ID", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload, {
tokenId: "test",
});
const user = await auth.authenticate(token, {
validateTokenId: (tokenId: string) => {
if (tokenId !== "test") {
throw new Error();
}
},
});
expect(user.address).to.equal(await signerWallet.getAddress());
});
it("Should reject token with invalid token ID", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload, {
tokenId: "test",
});
try {
await auth.authenticate(token, {
validateTokenId: (tokenId: string) => {
if (tokenId !== "invalid") {
throw new Error();
}
},
});
expect.fail();
} catch (err: any) {
expect(err.message).to.contain("Token ID is invalid");
}
});
it("Should propagate session on token", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload, {
session: { role: "admin" },
});
const user = await auth.authenticate(token);
expect(user.address).to.equal(await signerWallet.getAddress());
expect(user.session).to.deep.equal({ role: "admin" });
});
it("Should call session callback function", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload, {
session: (address: string) => {
return { address, role: "admin" };
},
});
const user = await auth.authenticate(token);
expect(user.address).to.equal(await signerWallet.getAddress());
expect(user.session).to.deep.equal({
address: await signerWallet.getAddress(),
role: "admin",
});
});
it("Should authenticate with issuer address", async () => {
const payload = await auth.login();
auth.updateWallet(adminWallet);
const token = await auth.generate(payload);
auth.updateWallet(attackerWallet);
try {
await auth.authenticate(token);
expect.fail();
} catch (err: any) {
expect(err.message).to.contain("The expected issuer address");
}
const user = await auth.authenticate(token, {
issuerAddress: await adminWallet.getAddress(),
});
expect(user.address).to.equal(await signerWallet.getAddress());
});
});
+48
View File
@@ -1,5 +1,53 @@
# @thirdweb-dev/chains
## 0.1.78
### Patch Changes
- [#2416](https://github.com/thirdweb-dev/js/pull/2416) [`588897d`](https://github.com/thirdweb-dev/js/commit/588897d1b04e6c63da13639aeb47ca701308e1b2) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.77
### Patch Changes
- [#2406](https://github.com/thirdweb-dev/js/pull/2406) [`047fbe2`](https://github.com/thirdweb-dev/js/commit/047fbe2918808cbc8fded90104458b6e38d1207d) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.76
### Patch Changes
- [#2378](https://github.com/thirdweb-dev/js/pull/2378) [`5f243bb`](https://github.com/thirdweb-dev/js/commit/5f243bba0ded5dace9344c79e8904a4a342d16af) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.75
### Patch Changes
- [#2372](https://github.com/thirdweb-dev/js/pull/2372) [`e87292a`](https://github.com/thirdweb-dev/js/commit/e87292ab604897ddfc337d24d2d1fe0f3560baae) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.74
### Patch Changes
- [#2336](https://github.com/thirdweb-dev/js/pull/2336) [`abc0a53`](https://github.com/thirdweb-dev/js/commit/abc0a53dc398264f205d194e3f87a79f74e91eb1) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.73
### Patch Changes
- [#2285](https://github.com/thirdweb-dev/js/pull/2285) [`ca70cd3`](https://github.com/thirdweb-dev/js/commit/ca70cd3882b39ffd56275d267e6af9c04fae179b) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.72
### Patch Changes
- [#2280](https://github.com/thirdweb-dev/js/pull/2280) [`23d0e553`](https://github.com/thirdweb-dev/js/commit/23d0e553088321edfe3971950c2e7f27209d9aaf) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.71
### Patch Changes
- [#2258](https://github.com/thirdweb-dev/js/pull/2258) [`357886e3`](https://github.com/thirdweb-dev/js/commit/357886e31b37aad950731ce8f013a101190ebd07) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.70
### Patch Changes
+2 -3
View File
@@ -59,15 +59,14 @@ export default {
"networkId": 1,
"redFlags": [],
"rpc": [
"https://ethereum.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet.infura.io/v3/${INFURA_API_KEY}",
"wss://mainnet.infura.io/ws/v3/${INFURA_API_KEY}",
"https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}",
"https://api.mycryptoapi.com/eth",
"https://cloudflare-eth.com",
"https://ethereum.publicnode.com",
"wss://ethereum.publicnode.com",
"https://ethereum-rpc.publicnode.com",
"wss://ethereum-rpc.publicnode.com",
"https://mainnet.gateway.tenderly.co",
"wss://mainnet.gateway.tenderly.co",
"https://rpc.blocknative.com/boost",
+3 -3
View File
@@ -49,15 +49,15 @@ export default {
"networkId": 10,
"redFlags": [],
"rpc": [
"https://optimism.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://optimism-mainnet.infura.io/v3/${INFURA_API_KEY}",
"https://opt-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}",
"https://mainnet.optimism.io",
"https://optimism.publicnode.com",
"wss://optimism.publicnode.com",
"https://optimism.gateway.tenderly.co",
"wss://optimism.gateway.tenderly.co"
"wss://optimism.gateway.tenderly.co",
"https://optimism-rpc.publicnode.com",
"wss://optimism-rpc.publicnode.com"
],
"shortName": "oeth",
"slug": "optimism",
+2 -3
View File
@@ -51,7 +51,6 @@ export default {
},
"networkId": 100,
"rpc": [
"https://gnosis.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://100.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.gnosischain.com",
"https://rpc.gnosis.gateway.fm",
@@ -63,8 +62,8 @@ export default {
"https://web3endpoints.com/gnosischain-mainnet",
"https://gnosis.oat.farm",
"wss://rpc.gnosischain.com/wss",
"https://gnosis.publicnode.com",
"wss://gnosis.publicnode.com"
"https://gnosis-rpc.publicnode.com",
"wss://gnosis-rpc.publicnode.com"
],
"shortName": "gno",
"slip44": 700,
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-1"
},
"rpc": [
"https://gton.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1000.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.gton.network/"
],
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 10000,
"rpc": [
"https://smart-bitcoin-cash.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10000.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://smartbch.greyh.at",
"https://rpc-mainnet.smartbch.org",
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 100000,
"rpc": [
"https://quarkchain-root.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://100000.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"http://jrpc.mainnet.quarkchain.io:38391"
],
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-100000"
},
"rpc": [
"https://quarkchain-shard-0.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://100001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-s0-ethapi.quarkchain.io",
"http://eth-jrpc.mainnet.quarkchain.io:39000"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-100000"
},
"rpc": [
"https://quarkchain-shard-1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://100002.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-s1-ethapi.quarkchain.io",
"http://eth-jrpc.mainnet.quarkchain.io:39001"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-100000"
},
"rpc": [
"https://quarkchain-shard-2.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://100003.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-s2-ethapi.quarkchain.io",
"http://eth-jrpc.mainnet.quarkchain.io:39002"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-100000"
},
"rpc": [
"https://quarkchain-shard-3.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://100004.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-s3-ethapi.quarkchain.io",
"http://eth-jrpc.mainnet.quarkchain.io:39003"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-100000"
},
"rpc": [
"https://quarkchain-shard-4.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://100005.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-s4-ethapi.quarkchain.io",
"http://eth-jrpc.mainnet.quarkchain.io:39004"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-100000"
},
"rpc": [
"https://quarkchain-shard-5.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://100006.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-s5-ethapi.quarkchain.io",
"http://eth-jrpc.mainnet.quarkchain.io:39005"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-100000"
},
"rpc": [
"https://quarkchain-shard-6.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://100007.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-s6-ethapi.quarkchain.io",
"http://eth-jrpc.mainnet.quarkchain.io:39006"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-100000"
},
"rpc": [
"https://quarkchain-shard-7.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://100008.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-s7-ethapi.quarkchain.io",
"http://eth-jrpc.mainnet.quarkchain.io:39007"
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 10001,
"rpc": [
"https://smart-bitcoin-cash-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-testnet.smartbch.org",
"https://smartbch.devops.cash/testnet"
-2
View File
@@ -23,9 +23,7 @@ export default {
"networkId": 1001,
"redFlags": [],
"rpc": [
"https://klaytn-testnet-baobab.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://klaytn-baobab.blockpi.network/v1/rpc/public",
"https://api.baobab.klaytn.net:8651"
],
"shortName": "Baobab",
-1
View File
@@ -24,7 +24,6 @@ export default {
},
"networkId": 10024,
"rpc": [
"https://gon-chain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10024.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://node1.testnet.gaiaopen.network",
"https://node1.mainnet.gon.network",
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 1003,
"rpc": [
"https://tectum-emission-token.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1003.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.softnote.com/"
],
-1
View File
@@ -31,7 +31,6 @@ export default {
},
"networkId": 1004,
"rpc": [
"https://t-ekta.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1004.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://test.ekta.io:8545"
],
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-16658437"
},
"rpc": [
"https://plian-testnet-subchain-1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10067275.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.plian.io/child_test"
],
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 1007,
"rpc": [
"https://newton-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1007.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc1.newchain.newtonproject.org"
],
-1
View File
@@ -31,7 +31,6 @@ export default {
},
"networkId": 1008,
"rpc": [
"https://eurus.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1008.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet.eurus.network/"
],
-1
View File
@@ -19,7 +19,6 @@ export default {
},
"networkId": 10081,
"rpc": [
"https://japan-open-chain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10081.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-1.testnet.japanopenchain.org:8545",
"https://rpc-2.testnet.japanopenchain.org:8545"
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 10086,
"rpc": [
"https://sjatsh.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10086.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"http://geth.free.idcfengye.com"
],
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 1,
"rpc": [
"https://etherinc.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://101.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://api.einc.io/jsonrpc/mainnet"
],
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 1010,
"rpc": [
"https://evrice-network.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1010.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://meta.evrice.com"
],
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 10101,
"rpc": [
"https://blockchain-genesis.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10101.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://eu.mainnet.xixoio.com",
"https://us.mainnet.xixoio.com",
-1
View File
@@ -27,7 +27,6 @@ export default {
},
"networkId": 101010,
"rpc": [
"https://soverun-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://101010.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rpc.soverun.com"
],
-1
View File
@@ -27,7 +27,6 @@ export default {
},
"networkId": 10101010,
"rpc": [
"https://soverun.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10101010.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-rpc.soverun.com"
],
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 1012,
"rpc": [
"https://newton.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1012.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://global.rpc.mainnet.newtonproject.org"
],
-1
View File
@@ -19,7 +19,6 @@ export default {
},
"networkId": 102,
"rpc": [
"https://web3games-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://102.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet-rpc-0.web3games.org/evm",
"https://testnet-rpc-1.web3games.org/evm",
+2 -3
View File
@@ -33,13 +33,12 @@ export default {
},
"networkId": 10200,
"rpc": [
"https://gnosis-chiado-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10200.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.chiadochain.net",
"https://rpc.chiado.gnosis.gateway.fm",
"wss://rpc.chiadochain.net/wss",
"https://gnosis-chiado.publicnode.com",
"wss://gnosis-chiado.publicnode.com"
"https://gnosis-chiado-rpc.publicnode.com",
"wss://gnosis-chiado-rpc.publicnode.com"
],
"shortName": "chi",
"slip44": 1,
-1
View File
@@ -27,7 +27,6 @@ export default {
},
"networkId": 10201,
"rpc": [
"https://maxxchain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10201.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.maxxchain.org",
"https://rpc1.maxxchain.org",
+38
View File
@@ -0,0 +1,38 @@
import type { Chain } from "../src/types";
export default {
"chain": "aware-fake-trim-testnet",
"chainId": 1020352220,
"explorers": [
{
"name": "Blockscout",
"url": "https://aware-fake-trim-testnet.explorer.testnet.skalenodes.com",
"standard": "EIP3091"
}
],
"faucets": [
"https://www.sfuelstation.com/"
],
"icon": {
"url": "ipfs://bafkreiagrt5dhgltg2kmw7hf24kslstr5h42e745luuxwp2wbg24gm6zza",
"width": 500,
"height": 500,
"format": "png"
},
"name": "SKALE Titan Hub Testnet",
"nativeCurrency": {
"name": "sFUEL",
"symbol": "sFUEL",
"decimals": 18
},
"networkId": 1020352220,
"rpc": [
"https://1020352220.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.skalenodes.com/v1/aware-fake-trim-testnet",
"wss://testnet.skalenodes.com/v1/ws/aware-fake-trim-testnet"
],
"shortName": "titan-testnet",
"slip44": 1,
"slug": "skale-titan-hub-testnet",
"testnet": true,
"title": "SKALE Titan Hub Testnet"
} as const satisfies Chain;
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 1024,
"rpc": [
"https://clv-parachain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1024.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://api-para.clover.finance"
],
-1
View File
@@ -31,7 +31,6 @@ export default {
},
"networkId": 10242,
"rpc": [
"https://arthera.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10242.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.arthera.net"
],
-1
View File
@@ -33,7 +33,6 @@ export default {
},
"networkId": 10243,
"rpc": [
"https://arthera-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10243.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc-test.arthera.net"
],
-1
View File
@@ -19,7 +19,6 @@ export default {
},
"networkId": 10248,
"rpc": [
"https://0xtade.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10248.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://node.0xtchain.com"
],
-1
View File
@@ -19,7 +19,6 @@ export default {
},
"networkId": 1028,
"rpc": [
"https://bittorrent-chain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1028.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testrpc.bittorrentchain.io/"
],
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 103,
"rpc": [
"https://worldland.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://103.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://seoul.worldland.foundation"
],
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 1030,
"rpc": [
"https://conflux-espace.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1030.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://evm.confluxrpc.com"
],
-1
View File
@@ -31,7 +31,6 @@ export default {
},
"networkId": 1,
"rpc": [
"https://crystaleum.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://103090.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://evm.cryptocurrencydevs.org",
"https://rpc.crystaleum.org"
-1
View File
@@ -19,7 +19,6 @@ export default {
},
"networkId": 1031,
"rpc": [
"https://proxy-network-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1031.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"http://128.199.94.183:8041"
],
+12 -3
View File
@@ -2,9 +2,19 @@ import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 103454,
"explorers": [],
"explorers": [
{
"name": "Masa Testnet Explorer",
"url": "https://subnets-test.avax.network/masatestnet",
"standard": "EIP3091"
}
],
"faucets": [],
"features": [],
"features": [
{
"name": "EIP1559"
}
],
"icon": {
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
"width": 256,
@@ -21,7 +31,6 @@ export default {
"networkId": 103454,
"redFlags": [],
"rpc": [
"https://masa-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://103454.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/masatestne/testnet/rpc"
],
-1
View File
@@ -33,7 +33,6 @@ export default {
},
"networkId": 1038,
"rpc": [
"https://bronos-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1038.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://evm-testnet.bronos.org"
],
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 10395,
"rpc": [
"https://worldland-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10395.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://gwangju.worldland.foundation"
],
-1
View File
@@ -31,7 +31,6 @@ export default {
},
"networkId": 104,
"rpc": [
"https://kaiba-lightning-chain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://104.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://klc.live/"
],
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 105,
"rpc": [
"https://web3games-devnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://105.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://devnet.web3games.org/evm"
],
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 10507,
"rpc": [
"https://numbers.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10507.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnetrpc.num.network"
],
-1
View File
@@ -28,7 +28,6 @@ export default {
},
"networkId": 10508,
"rpc": [
"https://numbers-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10508.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnetrpc.num.network"
],
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 106,
"rpc": [
"https://velas-evm.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://106.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://evmexplorer.velas.com/rpc",
"https://explorer.velas.com/rpc"
-1
View File
@@ -21,7 +21,6 @@ export default {
"networkId": 10671,
"redFlags": [],
"rpc": [
"https://qi-m-12131.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10671.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avacloud-test.io/c3c8cc74-5101-4380-937f-4f534cad0128"
],
-1
View File
@@ -27,7 +27,6 @@ export default {
},
"networkId": 107,
"rpc": [
"https://nebula-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://107.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.rpc.novanetwork.io"
],
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "ETH",
"chainId": 107107114116,
"explorers": [],
"faucets": [],
"icon": {
"url": "ipfs://QmNTZ9nEomAXK6bLxUbMfTS1TvrsN22HU1zTtxHUpMkUhz",
"width": 1000,
"height": 1000,
"format": "png"
},
"infoURL": "https://kakarot.org",
"name": "Kakarot Sepolia",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 107107114116,
"parent": {
"type": "L2",
"chain": "eip155-11155111",
"bridges": []
},
"rpc": [],
"shortName": "kkrt-sepolia",
"slug": "kakarot-sepolia",
"testnet": false
} as const satisfies Chain;
-1
View File
@@ -28,7 +28,6 @@ export default {
},
"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"
],
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 1079,
"rpc": [
"https://mintara-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1079.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/mintara/testnet/rpc"
],
-1
View File
@@ -19,7 +19,6 @@ export default {
},
"networkId": 108,
"rpc": [
"https://thundercore.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://108.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet-rpc.thundercore.com",
"https://mainnet-rpc.thundertoken.net",
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 1080,
"rpc": [
"https://mintara.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1080.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/mintara/mainnet/rpc"
],
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 10823,
"rpc": [
"https://cryptocoinpay.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10823.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"http://node106.cryptocoinpay.info:8545",
"ws://node106.cryptocoinpay.info:8546"
-1
View File
@@ -36,7 +36,6 @@ export default {
},
"redFlags": [],
"rpc": [
"https://metis-andromeda.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1088.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://andromeda.metis.io/?owner=1088"
],
-1
View File
@@ -19,7 +19,6 @@ export default {
},
"networkId": 108801,
"rpc": [
"https://brochain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://108801.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.brochain.org",
"http://rpc.brochain.org",
-1
View File
@@ -39,7 +39,6 @@ export default {
},
"networkId": 1089,
"rpc": [
"https://humans-ai.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1089.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://jsonrpc.humans.nodestake.top",
"https://humans-mainnet-evm.itrocket.net",
-1
View File
@@ -25,7 +25,6 @@ export default {
},
"networkId": 109,
"rpc": [
"https://shibarium.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://109.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://www.shibrpc.com"
],
-1
View File
@@ -31,7 +31,6 @@ export default {
},
"networkId": 10946,
"rpc": [
"https://quadrans-blockchain.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10946.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.quadrans.io",
"https://rpcna.quadrans.io",
-1
View File
@@ -33,7 +33,6 @@ export default {
},
"networkId": 10947,
"rpc": [
"https://quadrans-blockchain-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://10947.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpctest.quadrans.io",
"https://rpctest2.quadrans.io"
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 11,
"rpc": [
"https://metadium.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://11.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://api.metadium.com/prod"
],
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 110,
"rpc": [
"https://proton-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://110.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://protontestnet.greymass.com/"
],
+16 -4
View File
@@ -2,8 +2,20 @@ import type { Chain } from "../src/types";
export default {
"chain": "Dymension",
"chainId": 1100,
"explorers": [],
"explorers": [
{
"name": "dym.fyi",
"url": "https://dym.fyi",
"standard": "EIP3091"
}
],
"faucets": [],
"icon": {
"url": "ipfs://bafkreic4sjyqikz33xzpcctczvkiwfj44q5i3i7zslycnjiqmyx5ybc3fi",
"width": 1200,
"height": 1200,
"format": "png"
},
"infoURL": "https://dymension.xyz",
"name": "Dymension",
"nativeCurrency": {
@@ -13,12 +25,12 @@ export default {
},
"networkId": 1100,
"rpc": [
"https://dymension.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1100.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://dymension-evm.blockpi.network/v1/rpc/public"
"https://dymension-evm.blockpi.network/v1/rpc/public",
"https://dymension-evm-rpc.publicnode.com",
"wss://dymension-evm-rpc.publicnode.com"
],
"shortName": "dymension",
"slug": "dymension",
"status": "incubating",
"testnet": false
} as const satisfies Chain;
-1
View File
@@ -13,7 +13,6 @@ export default {
},
"networkId": 110000,
"rpc": [
"https://quarkchain-devnet-root.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://110000.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"http://jrpc.devnet.quarkchain.io:38391"
],
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-110000"
},
"rpc": [
"https://quarkchain-devnet-shard-0.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://110001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://devnet-s0-ethapi.quarkchain.io",
"http://eth-jrpc.devnet.quarkchain.io:39900"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-110000"
},
"rpc": [
"https://quarkchain-devnet-shard-1.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://110002.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://devnet-s1-ethapi.quarkchain.io",
"http://eth-jrpc.devnet.quarkchain.io:39901"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-110000"
},
"rpc": [
"https://quarkchain-devnet-shard-2.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://110003.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://devnet-s2-ethapi.quarkchain.io",
"http://eth-jrpc.devnet.quarkchain.io:39902"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-110000"
},
"rpc": [
"https://quarkchain-devnet-shard-3.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://110004.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://devnet-s3-ethapi.quarkchain.io",
"http://eth-jrpc.devnet.quarkchain.io:39903"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-110000"
},
"rpc": [
"https://quarkchain-devnet-shard-4.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://110005.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://devnet-s4-ethapi.quarkchain.io",
"http://eth-jrpc.devnet.quarkchain.io:39904"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-110000"
},
"rpc": [
"https://quarkchain-devnet-shard-5.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://110006.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://devnet-s5-ethapi.quarkchain.io",
"http://eth-jrpc.devnet.quarkchain.io:39905"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-110000"
},
"rpc": [
"https://quarkchain-devnet-shard-6.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://110007.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://devnet-s6-ethapi.quarkchain.io",
"http://eth-jrpc.devnet.quarkchain.io:39906"
-1
View File
@@ -23,7 +23,6 @@ export default {
"chain": "eip155-110000"
},
"rpc": [
"https://quarkchain-devnet-shard-7.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://110008.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://devnet-s7-ethapi.quarkchain.io",
"http://eth-jrpc.devnet.quarkchain.io:39907"
-1
View File
@@ -40,7 +40,6 @@ export default {
]
},
"rpc": [
"https://polygon-zkevm.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://1101.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://zkevm-rpc.com"
],

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