Compare commits

...
Author SHA1 Message Date
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
149160bec6 Version Packages (#2930)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-05-08 08:53:44 +12:00
gregandGitHub 55d519b537 Remove faulty test check to fix typedoc (#2952) 2024-05-08 08:31:40 +12:00
gregandGitHub 49d4494008 Fix(Marketplace): Increase gas on writes (#2951) 2024-05-07 19:37:32 +00:00
gregandGitHub 44680c65c1 Adds extraGas override for transaction preparation (#2948) 2024-05-07 18:13:18 +00:00
0e19911668 Docs: Fix typos + add code snippet (#2949)
Co-authored-by: Kien Ngo <[email protected]>
2024-05-07 17:10:22 +00:00
gregandGitHub ec149f3834 Read RPC on Viem chain adapter (#2946) 2024-05-07 11:02:47 +00:00
gregandGitHub b64c8e7b6e Remove old CLI templates (#2945) 2024-05-07 02:06:30 +00:00
gregandGitHub 795a59e436 Feature: Adds blockRange option to getContractEvents (#2941) 2024-05-07 00:02:29 +00:00
82e89116af feat: show auth provider icon when connected to inapp wallet (#2944)
Co-authored-by: Manan Tank <[email protected]>
2024-05-06 23:28:47 +00:00
gregandGitHub bdb919f32a Update CLI to v5 templates (#2934) 2024-05-06 21:13:36 +00:00
Manan TankandGitHub a692154924 Fix OTP input entered by clicking on “from messages” option in iOS safari (#2936) 2024-05-06 20:23:18 +00:00
Manan TankandGitHub 1d327b6bb7 Fix radix warning for switch network button ref (#2935) 2024-05-06 19:36:12 +00:00
Manan TankandGitHub 8e0a3cea1e Integrate Pay Modal with TransactionButton, disable Pay Modal for gasless (#2933) 2024-05-06 18:17:31 +00:00
86105c9d91 TransactionButton: Throw error on reverted txn (#2932)
Co-authored-by: Joaquim Verges <[email protected]>
2024-05-06 05:17:46 +00:00
gregandGitHub cea736c7e4 Filter out invalid listings with invalid currencies (#2928) 2024-05-06 10:41:56 +12:00
Joaquim VergesandGitHub 9f817cf812 feat: tweak connected modal UI layout (#2929) 2024-05-05 09:35:59 +00:00
gregandGitHub b3dd90b886 Improve useReadContract example (#2924) 2024-05-04 06:16:02 +00:00
Jonas DanielsGitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>GitHub Action
bb80b1d758 Version Packages (#2909)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: GitHub Action <[email protected]>
2024-05-04 15:28:53 +12:00
Joaquim VergesandGitHub 5b0c37a0d9 feat: default account factory for smart accounts + switch chain support (#2917) 2024-05-03 20:03:28 -07:00
gregandGitHub d77b6f67ad Adds use client directives (#2921) 2024-05-03 19:33:45 -07:00
github-actions[bot]GitHubgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2c4af9a85d chore(chains): update chains (#2920)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-03 18:25:16 -07:00
Jonas DanielsandGitHub 47de345b60 chore(wallets): add support for several new wallets (#2919) 2024-05-03 18:25:01 -07:00
github-actions[bot]GitHubgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
7485f6bb41 chore(chains): update chains (#2918)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-03 16:33:27 -07:00
github-actions[bot]GitHubgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
c280112bba chore(chains): update chains (#2910)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-03 12:15:06 -07:00
Joaquim VergesandGitHub 664082e5e6 feat: prepareDeployDeterministicTransaction (#2915) 2024-05-03 01:50:10 +00:00
Joaquim VergesandGitHub 24a3ee49d1 fix: legacy transactions with in-app wallet (#2914) 2024-05-03 13:44:55 +12:00
gregandGitHub 5525a0e336 Filter invalid auction listings on getAllAuctions (#2913) 2024-05-02 13:53:57 -07:00
gregandGitHub 35acbcd10e Update mintWithSignature ABIs with proper return types (#2911) 2024-05-02 16:05:35 +00:00
github-actions[bot]GitHubgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
83d1d6f397 chore(chains): update chains (#2908)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-05-02 09:16:38 +12:00
gregandGitHub 1f3e5c4726 Create wallet ID constants file (#2900) 2024-05-01 16:29:01 +00:00
477 changed files with 3624 additions and 13646 deletions
+14
View File
@@ -1,5 +1,19 @@
# @thirdweb-dev/auth
## 4.1.74
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.5.16
## 4.1.73
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/wallets@2.5.15
## 4.1.72
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/auth",
"version": "4.1.72",
"version": "4.1.74",
"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.105
### Patch Changes
- [#2908](https://github.com/thirdweb-dev/js/pull/2908) [`83d1d6f`](https://github.com/thirdweb-dev/js/commit/83d1d6f397982dfda87a835743a2ef1fecd5d919) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
## 0.1.104
### Patch Changes
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 10154,
"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": "QIM2405023 Interop",
"nativeCurrency": {
"name": "QIM2405023 Interop Token",
"symbol": "UZP",
"decimals": 18
},
"networkId": 10154,
"redFlags": [],
"rpc": [
"https://10154.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "QIM2405023 Interop",
"slug": "qim2405023-interop",
"testnet": true
} as const satisfies Chain;
+35
View File
@@ -0,0 +1,35 @@
import type { Chain } from "../src/types";
export default {
"chain": "ETH",
"chainId": 1135,
"explorers": [
{
"name": "blockscout",
"url": "https://blockscout.lisk.com",
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYtUimyqHkkFxYdbXXRbUqNg2VLPUg6Uu2C2nmFWowiZM",
"width": 551,
"height": 540,
"format": "png"
}
}
],
"faucets": [],
"infoURL": "https://lisk.com",
"name": "Lisk",
"nativeCurrency": {
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 1135,
"rpc": [
"https://1135.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.api.lisk.com"
],
"shortName": "lisk",
"slip44": 134,
"slug": "lisk",
"testnet": false
} as const satisfies Chain;
+3
View File
@@ -15,6 +15,7 @@ export default {
}
],
"faucets": [],
"features": [],
"icon": {
"url": "ipfs://QmcHdmVr5VRUJq13jnM6tgah5Ge7hn3Dm14eY6vwivJ5ui",
"width": 288,
@@ -29,8 +30,10 @@ export default {
"decimals": 18
},
"networkId": 167009,
"redFlags": [],
"rpc": [
"https://167009.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://taiko-hekla.blockpi.network/v1/rpc/public",
"https://rpc.hekla.taiko.xyz",
"wss://ws.hekla.taiko.xyz"
],
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 1853,
"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": "HighOctane",
"nativeCurrency": {
"name": "HighOctane Token",
"symbol": "HO",
"decimals": 18
},
"networkId": 1853,
"redFlags": [],
"rpc": [
"https://1853.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/highoctane/mainnet/rpc"
],
"shortName": "HighOctane",
"slug": "highoctane",
"testnet": false
} as const satisfies Chain;
+3 -3
View File
@@ -5,7 +5,7 @@ export default {
"explorers": [
{
"name": "edexa-testnet",
"url": "https://explorer.testnet.edexa.com",
"url": "https://explorer.testnet.edexa.network",
"standard": "EIP3091"
}
],
@@ -18,7 +18,7 @@ export default {
"height": 1042,
"format": "png"
},
"infoURL": "https://edexa.com/",
"infoURL": "https://edexa.network/",
"name": "edeXa Testnet",
"nativeCurrency": {
"name": "EDEXA",
@@ -28,7 +28,7 @@ export default {
"networkId": 1995,
"rpc": [
"https://1995.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.edexa.com/rpc",
"https://testnet.edexa.network/rpc",
"https://io-dataseed1.testnet.edexa.io-market.com/rpc"
],
"shortName": "edx",
+49
View File
@@ -0,0 +1,49 @@
import type { Chain } from "../src/types";
export default {
"chain": "TEL",
"chainId": 2017,
"explorers": [
{
"name": "telscan",
"url": "https://telscan.io",
"standard": "EIP3091",
"icon": {
"url": "ipfs://bafkreih4obvrymfdqohzhiafhvpcy6zwqbgpfm26aahrv3qx2dtcei7hk4",
"width": 79,
"height": 80,
"format": "svg"
}
}
],
"faucets": [
"https://telcoin.network/faucet"
],
"icon": {
"url": "ipfs://bafkreih4obvrymfdqohzhiafhvpcy6zwqbgpfm26aahrv3qx2dtcei7hk4",
"width": 79,
"height": 80,
"format": "svg"
},
"infoURL": "https://telcoin.network",
"name": "Adiri",
"nativeCurrency": {
"name": "Telcoin",
"symbol": "TEL",
"decimals": 18
},
"networkId": 2017,
"rpc": [
"https://2017.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.telcoin.network",
"https://adiri.tel",
"https://node1.telcoin.network",
"https://node2.telcoin.network",
"https://node3.telcoin.network",
"https://node4.telcoin.network"
],
"shortName": "tel",
"slip44": 1,
"slug": "adiri",
"testnet": true,
"title": "Telcoin Network Testnet"
} as const satisfies Chain;
+5 -3
View File
@@ -25,7 +25,7 @@ export default {
"format": "png"
},
"infoURL": "https://atleta.network",
"name": "Atleta Testnet",
"name": "Atleta Olympia",
"nativeCurrency": {
"name": "Atla",
"symbol": "ATLA",
@@ -33,10 +33,12 @@ export default {
},
"networkId": 2340,
"rpc": [
"wss://testnet-rpc.atleta.network:9944"
"https://2340.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"wss://testnet-rpc.atleta.network:9944",
"https://testnet-rpc.atleta.network:9944"
],
"shortName": "atla",
"slip44": 1,
"slug": "atleta-testnet",
"slug": "atleta-olympia",
"testnet": true
} as const satisfies Chain;
+2
View File
@@ -23,8 +23,10 @@ export default {
"decimals": 18
},
"networkId": 25,
"redFlags": [],
"rpc": [
"https://25.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://cronos.blockpi.network/v1/rpc/public",
"https://evm.cronos.org",
"https://cronos-evm-rpc.publicnode.com",
"wss://cronos-evm-rpc.publicnode.com",
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 25284,
"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": "QIM2405021",
"nativeCurrency": {
"name": "QIM2405021 Token",
"symbol": "UZP",
"decimals": 18
},
"networkId": 25284,
"redFlags": [],
"rpc": [
"https://25284.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "QIM2405021",
"slug": "qim2405021",
"testnet": true
} as const satisfies Chain;
+2 -2
View File
@@ -14,8 +14,8 @@ export default {
"networkId": 3100,
"rpc": [
"https://3100.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://fraa-dancebox-3043-rpc.a.dancebox.tanssi.network",
"wss://fraa-dancebox-3043-rpc.a.dancebox.tanssi.network"
"https://fraa-flashbox-2800-rpc.a.stagenet.tanssi.network",
"wss://fraa-flashbox-2800-rpc.a.stagenet.tanssi.network"
],
"shortName": "Immu3",
"slug": "immu3-evm",
+9 -15
View File
@@ -1,29 +1,23 @@
import type { Chain } from "../src/types";
export default {
"chain": "Web3Q",
"chain": "EthStorage",
"chainId": 3333,
"explorers": [
{
"name": "w3q-testnet",
"url": "https://explorer.testnet.web3q.io",
"standard": "EIP3091"
}
],
"explorers": [],
"faucets": [],
"infoURL": "https://testnet.web3q.io/home.w3q/",
"name": "Web3Q Testnet",
"infoURL": "https://ethstorage.io/",
"name": "EthStorage Testnet",
"nativeCurrency": {
"name": "Web3Q",
"symbol": "W3Q",
"name": "Ether",
"symbol": "ETH",
"decimals": 18
},
"networkId": 3333,
"rpc": [
"https://3333.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://testnet.web3q.io:8545"
"http://testnet.ethstorage.io:9540"
],
"shortName": "w3q-t",
"shortName": "es-t",
"slip44": 1,
"slug": "web3q-testnet",
"slug": "ethstorage-testnet",
"testnet": true
} as const satisfies Chain;
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"chain": "GAN",
"chainId": 4048,
"explorers": [
{
"name": "ganscan",
"url": "https://ganscan.gpu.net",
"standard": "none"
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmTYgL4PMNJya3XchuRx99ggNzMHL9kWaZvj3wycdEwpQA",
"width": 1248,
"height": 1197,
"format": "png"
},
"infoURL": "https://docs.gpu.net/",
"name": "GAN Testnet",
"nativeCurrency": {
"name": "GP Token",
"symbol": "GP",
"decimals": 18
},
"networkId": 4048,
"rpc": [
"https://4048.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.gpu.net"
],
"shortName": "GANTestnet",
"slug": "gan-testnet",
"testnet": true
} as const satisfies Chain;
+3 -3
View File
@@ -19,9 +19,9 @@ export default {
}
],
"icon": {
"url": "ipfs://bafkreih6nnkha6t3oiy6qkqpgyb46p3ddg5nff5ayizpum2ljexlc3gc54",
"width": 128,
"height": 128,
"url": "ipfs://bafkreidyrvphfojaf7iev57trxk3sxbo6qikg26pdy66ke4n22dgm52wwa",
"width": 320,
"height": 320,
"format": "png"
},
"infoURL": "https://www.verylabs.io/",
+6
View File
@@ -10,6 +10,12 @@ export default {
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmWvfA2usnYp1ktzLcqFS8eTLgdp4ifrxjiify46KyG9NZ",
"width": 512,
"height": 512,
"format": "png"
},
"infoURL": "https://yooldo.gg/",
"name": "Yooldo Verse Mainnet",
"nativeCurrency": {
+6
View File
@@ -10,6 +10,12 @@ export default {
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmWvfA2usnYp1ktzLcqFS8eTLgdp4ifrxjiify46KyG9NZ",
"width": 512,
"height": 512,
"format": "png"
},
"infoURL": "https://yooldo.gg/",
"name": "Yooldo Verse Testnet",
"nativeCurrency": {
+1
View File
@@ -34,6 +34,7 @@ export default {
"networkId": 5424,
"rpc": [
"https://5424.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://mainnet.edexa.network/rpc",
"https://mainnet.edexa.com/rpc",
"https://io-dataseed1.mainnet.edexa.io-market.com/rpc"
],
+20 -2
View File
@@ -6,15 +6,33 @@ export default {
{
"name": "Imversed EVM explorer (Blockscout)",
"url": "https://txe.imversed.network",
"standard": "EIP3091"
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYwvmJZ1bgTdiZUKXk4SifTpTj286CkZjMCshUyJuBFH1",
"width": 400,
"height": 400,
"format": "png"
}
},
{
"name": "Imversed Cosmos Explorer (Big Dipper)",
"url": "https://tex-c.imversed.com",
"standard": "none"
"standard": "none",
"icon": {
"url": "ipfs://QmYwvmJZ1bgTdiZUKXk4SifTpTj286CkZjMCshUyJuBFH1",
"width": 400,
"height": 400,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmYwvmJZ1bgTdiZUKXk4SifTpTj286CkZjMCshUyJuBFH1",
"width": 400,
"height": 400,
"format": "png"
},
"infoURL": "https://imversed.com",
"name": "Imversed Mainnet",
"nativeCurrency": {
+20 -2
View File
@@ -6,15 +6,33 @@ export default {
{
"name": "Imversed EVM Explorer (Blockscout)",
"url": "https://txe-test.imversed.network",
"standard": "EIP3091"
"standard": "EIP3091",
"icon": {
"url": "ipfs://QmYwvmJZ1bgTdiZUKXk4SifTpTj286CkZjMCshUyJuBFH1",
"width": 400,
"height": 400,
"format": "png"
}
},
{
"name": "Imversed Cosmos Explorer (Big Dipper)",
"url": "https://tex-t.imversed.com",
"standard": "none"
"standard": "none",
"icon": {
"url": "ipfs://QmYwvmJZ1bgTdiZUKXk4SifTpTj286CkZjMCshUyJuBFH1",
"width": 400,
"height": 400,
"format": "png"
}
}
],
"faucets": [],
"icon": {
"url": "ipfs://QmYwvmJZ1bgTdiZUKXk4SifTpTj286CkZjMCshUyJuBFH1",
"width": 400,
"height": 400,
"format": "png"
},
"infoURL": "https://imversed.com",
"name": "Imversed Testnet",
"nativeCurrency": {
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 58050,
"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": "QaUser0417",
"nativeCurrency": {
"name": "QaUser0417 Token",
"symbol": "HAR",
"decimals": 18
},
"networkId": 58050,
"redFlags": [],
"rpc": [
"https://58050.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "QaUser0417",
"slug": "qauser0417",
"testnet": true
} as const satisfies Chain;
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 70457,
"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": "QaUser9604",
"nativeCurrency": {
"name": "QaUser9604 Token",
"symbol": "CEB",
"decimals": 18
},
"networkId": 70457,
"redFlags": [],
"rpc": [
"https://70457.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "QaUser9604",
"slug": "qauser9604",
"testnet": true
} as const satisfies Chain;
+6
View File
@@ -4,6 +4,12 @@ export default {
"chainId": 7118,
"explorers": [],
"faucets": [],
"icon": {
"url": "ipfs://QmNR4Y3cUxefV7KGpGxMkjp5ofeJvbaUkR1GavsmTtK248",
"width": 1000,
"height": 1000,
"format": "png"
},
"infoURL": "https://hth.world",
"name": "Help The Homeless",
"nativeCurrency": {
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 73486,
"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": "QIM2405024 NO INTEROP",
"nativeCurrency": {
"name": "QIM2405024 NO INTEROP Token",
"symbol": "UZP",
"decimals": 18
},
"networkId": 73486,
"redFlags": [],
"rpc": [
"https://73486.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
],
"shortName": "QIM2405024 NO INTEROP",
"slug": "qim2405024-no-interop",
"testnet": true
} as const satisfies Chain;
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 939359,
"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": "QR0501T1TS",
"nativeCurrency": {
"name": "QR0501T1TS Token",
"symbol": "ZGM",
"decimals": 18
},
"networkId": 939359,
"redFlags": [],
"rpc": [
"https://939359.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/qr0501t1ts/testnet/rpc"
],
"shortName": "QR0501T1TS",
"slug": "qr0501t1ts",
"testnet": true
} as const satisfies Chain;
+30
View File
@@ -0,0 +1,30 @@
import type { Chain } from "../src/types";
export default {
"chain": "Avalanche",
"chainId": 96040,
"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": "FIZIT",
"nativeCurrency": {
"name": "FIZIT Token",
"symbol": "FIZIT",
"decimals": 18
},
"networkId": 96040,
"redFlags": [],
"rpc": [
"https://96040.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://subnets.avax.network/fizit/testnet/rpc"
],
"shortName": "FIZIT",
"slug": "fizit",
"testnet": true
} as const satisfies Chain;
+34
View File
@@ -0,0 +1,34 @@
import type { Chain } from "../src/types";
export default {
"chain": "EthXY",
"chainId": 979,
"explorers": [
{
"name": "EthXY Testnet Network Explorer",
"url": "https://explorer.testnet.ethxy.com",
"standard": "EIP3091"
}
],
"faucets": [],
"icon": {
"url": "ipfs://bafkreihq3b3cqbg2ttlp4dfbgmirrwdw6bbpmmbr5wolddd2izbyqay4xq",
"width": 480,
"height": 480,
"format": "png"
},
"infoURL": "https://ethxy.com",
"name": "EthXY Testnet",
"nativeCurrency": {
"name": "Settled EthXY Token",
"symbol": "SEXY",
"decimals": 18
},
"networkId": 979,
"rpc": [
"https://979.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
"https://rpc.testnet.ethxy.com"
],
"shortName": "sexyTestnet",
"slug": "ethxy-testnet",
"testnet": true
} as const satisfies Chain;
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/chains",
"version": "0.1.104",
"version": "0.1.105",
"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
+28
View File
@@ -1,5 +1,33 @@
# thirdweb
## 0.13.82
### Patch Changes
- [#2934](https://github.com/thirdweb-dev/js/pull/2934) [`bdb919f`](https://github.com/thirdweb-dev/js/commit/bdb919f32ae459608b29dd1e4d511afc226470c6) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Updates the CLI `create` command to use the v5 templates for Next.js and Vite
Other templates will be updated in the future from within their existing repositories
Removes React Native starters from the CLI menu
Removes JS template support from the CLI
- [#2945](https://github.com/thirdweb-dev/js/pull/2945) [`b64c8e7`](https://github.com/thirdweb-dev/js/commit/b64c8e7b6efaf09be2afc73b92624c5576a4b24e) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Removes deprecated template options from the CLI, specifically PWA Vite, Express, and React
- Updated dependencies []:
- @thirdweb-dev/sdk@4.0.76
- @thirdweb-dev/wallets@2.5.16
- @thirdweb-dev/auth@4.1.74
## 0.13.81
### Patch Changes
- Updated dependencies [[`83d1d6f`](https://github.com/thirdweb-dev/js/commit/83d1d6f397982dfda87a835743a2ef1fecd5d919)]:
- @thirdweb-dev/chains@0.1.105
- @thirdweb-dev/sdk@4.0.75
- @thirdweb-dev/wallets@2.5.15
- @thirdweb-dev/auth@4.1.73
## 0.13.80
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@thirdweb-dev/cli",
"main": "dist/cli/index.js",
"version": "0.13.80",
"version": "0.13.82",
"repository": "https://github.com/thirdweb-dev/js/tree/main/legacy_packages/cli",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
-6
View File
@@ -250,18 +250,12 @@ const main = async () => {
)
.option("--app", "Create a web3 app.")
.option("--contract", "Create a web3 contract project")
.option("--ts, --typescript", "Initialize as a TypeScript project.")
.option("--js, --javascript", "Initialize as a JavaScript project.")
.option("--forge", "Initialize as a Forge project.")
.option("--hardhat", "Initialize as a Hardhat project.")
.option("--extension", "Create a smart contract extension.")
.option("--react", "Initialize as a Create React App project.")
.option("--next", "Initialize as a Next.js project.")
.option("--vite", "Initialize as a Vite project.")
.option("--reactNative", "Initialize as a React Native project.")
.option("--express", "Initialize as a Express project.")
.option("--node", "Initialize as a Node project.")
.option("--pwaVite", "Initialize as a PWA project.")
.option(
"--use-npm",
"Explicitly tell the CLI to bootstrap the app using npm",
-92
View File
@@ -16,7 +16,6 @@ let contractName: string = "";
let projectPath: string = "";
let projectType: string = "";
let framework: string = "";
let language: string = "";
let baseContract: string = "";
let chain: string = "";
let createExtension: boolean = false;
@@ -45,78 +44,32 @@ export async function twCreate(
// case where users use `npx thirdweb create --option` directly
if (!projectType && Object.keys(options).length > 0) {
if (options.react) {
projectType = "app";
language = "typescript";
framework = "cra";
}
if (options.next) {
projectType = "app";
language = "typescript";
framework = "next";
}
if (options.vite) {
projectType = "app";
language = "typescript";
framework = "vite";
}
if (options.node) {
projectType = "app";
language = "typescript";
framework = "node";
}
if (options.express) {
projectType = "app";
language = "typescript";
framework = "express";
}
if (options.pwaVite) {
projectType = "app";
language = "typescript";
framework = "pwa-vite";
}
if (options.reactNative) {
projectType = "app";
language = "typescript";
framework = "react-native";
}
}
if (projectType === "app") {
if (options.typescript) {
language = "typescript";
}
if (options.javascript) {
language = "javascript";
}
if (options.next) {
framework = "next";
}
if (options.react) {
framework = "cra";
}
if (options.vite) {
framework = "vite";
}
if (options.node) {
framework = "node";
}
if (options.express) {
framework = "express";
}
if (options.reactNative) {
framework = "react-native";
}
if (options.pwaVite) {
framework = "pwa-vite";
}
if (options.evm) {
chain = "evm";
@@ -258,12 +211,7 @@ export async function twCreate(
message: CREATE_MESSAGES.framework,
choices: [
{ title: "Next.js", value: "next" },
{ title: "Create React App", value: "cra" },
{ title: "Vite", value: "vite" },
{ title: "PWA Vite", value: "pwa-vite" },
{ title: "React Native", value: "react-native" },
{ title: "Node.js", value: "node" },
{ title: "Express", value: "express" },
],
});
@@ -272,40 +220,6 @@ export async function twCreate(
}
}
if (projectType === "app" && !language) {
if (framework === "react-native") {
const res = await prompts({
type: "select",
name: "project",
message: CREATE_MESSAGES.reactNative,
choices: [
{ title: "Expo Project", value: "expo" },
{ title: "React Native CLI", value: "typescript" },
],
});
if (typeof res.project === "string") {
language = res.project.trim();
}
} else if (framework === "pwa-vite" || framework === "pwa-next") {
language = "typescript";
} else {
const res = await prompts({
type: "select",
name: "language",
message: CREATE_MESSAGES.language,
choices: [
{ title: "JavaScript", value: "javascript" },
{ title: "TypeScript", value: "typescript" },
],
});
if (typeof res.language === "string") {
language = res.language.trim();
}
}
}
if (
(projectType === "contract" || projectType === "extension") &&
framework !== "forge" &&
@@ -330,11 +244,6 @@ export async function twCreate(
console.log("Please specify a framework");
process.exit(1);
}
if (!language) {
// Default = JavaScript
language = "javascript";
}
}
}
@@ -483,7 +392,6 @@ export async function twCreate(
appPath: projectPath,
packageManager,
framework,
language,
template,
});
} else {
@@ -22,13 +22,11 @@ export async function createApp({
appPath,
packageManager,
framework,
language,
template,
}: {
appPath: string;
packageManager: PackageManager;
framework?: string;
language?: string;
template?: string;
}): Promise<void> {
let frameworkPath = "";
@@ -45,7 +43,7 @@ export async function createApp({
process.exit(1);
}
} else if (framework) {
frameworkPath = `${framework}-${language || "javascript"}-starter`;
frameworkPath = `${framework}-starter`;
const found = await hasTemplate(frameworkPath);
if (!found) {
@@ -63,7 +61,7 @@ export async function createApp({
function isReactNativeCLI() {
return (
isReactNative &&
(language === "typescript" || (template && !template.includes("expo")))
(template && !template.includes("expo"))
);
}
+1 -1
View File
@@ -467,4 +467,4 @@
"build": "bun ./scripts/revert-exports.ts && pnpm typechain && tsc && pnpm preconstruct build && pnpm extract-abi",
"push": "yalc push"
}
}
}
+19
View File
@@ -1,5 +1,24 @@
# @thirdweb-dev/react-core
## 4.6.15
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/sdk@4.0.76
- @thirdweb-dev/wallets@2.5.16
- @thirdweb-dev/auth@4.1.74
## 4.6.14
### Patch Changes
- Updated dependencies [[`83d1d6f`](https://github.com/thirdweb-dev/js/commit/83d1d6f397982dfda87a835743a2ef1fecd5d919)]:
- @thirdweb-dev/chains@0.1.105
- @thirdweb-dev/sdk@4.0.75
- @thirdweb-dev/wallets@2.5.15
- @thirdweb-dev/auth@4.1.73
## 4.6.13
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/react-core",
"version": "4.6.13",
"version": "4.6.15",
"repository": "https://github.com/thirdweb-dev/js/tree/main/legacy_packages/react-core",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
@@ -1,5 +1,9 @@
# @thirdweb-dev/react-native-compat
## 0.7.47
## 0.7.46
## 0.7.45
## 0.7.44
@@ -1,7 +1,7 @@
{
"name": "@thirdweb-dev/react-native-compat",
"description": "Shims for Thirdweb in React Native Projects",
"version": "0.7.45",
"version": "0.7.47",
"author": "thirdweb eng <[email protected]>",
"repository": "https://github.com/thirdweb-dev/js/tree/main/legacy_packages/react-native-compat",
"license": "Apache-2.0",
+19
View File
@@ -1,5 +1,24 @@
# @thirdweb-dev/react-native
## 0.7.47
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/sdk@4.0.76
- @thirdweb-dev/react-core@4.6.15
- @thirdweb-dev/wallets@2.5.16
## 0.7.46
### Patch Changes
- Updated dependencies [[`83d1d6f`](https://github.com/thirdweb-dev/js/commit/83d1d6f397982dfda87a835743a2ef1fecd5d919)]:
- @thirdweb-dev/chains@0.1.105
- @thirdweb-dev/sdk@4.0.75
- @thirdweb-dev/react-core@4.6.14
- @thirdweb-dev/wallets@2.5.15
## 0.7.45
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/react-native",
"version": "0.7.45",
"version": "0.7.47",
"repository": "https://github.com/thirdweb-dev/js/tree/main/legacy_packages/react-native",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
+21
View File
@@ -1,5 +1,26 @@
# @thirdweb-dev/react
## 4.6.15
### Patch Changes
- [#2936](https://github.com/thirdweb-dev/js/pull/2936) [`a692154`](https://github.com/thirdweb-dev/js/commit/a6921549244e3a0a959fa0611f3ab92328c06f4b) Thanks [@MananTank](https://github.com/MananTank)! - Fix OTP input entered by by clicking on “from messages” option in iOS safari
- Updated dependencies []:
- @thirdweb-dev/sdk@4.0.76
- @thirdweb-dev/react-core@4.6.15
- @thirdweb-dev/wallets@2.5.16
## 4.6.14
### Patch Changes
- Updated dependencies [[`83d1d6f`](https://github.com/thirdweb-dev/js/commit/83d1d6f397982dfda87a835743a2ef1fecd5d919)]:
- @thirdweb-dev/chains@0.1.105
- @thirdweb-dev/sdk@4.0.75
- @thirdweb-dev/react-core@4.6.14
- @thirdweb-dev/wallets@2.5.15
## 4.6.13
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/react",
"version": "4.6.13",
"version": "4.6.15",
"repository": "https://github.com/thirdweb-dev/js/tree/main/legacy_packages/react",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
@@ -94,13 +94,11 @@ export function OTPInput(props: {
}
}}
onChange={(e) => {
let value = e.target.value;
const value = e.target.value;
if (value.length > 1) {
const lastValue = value[value.length - 1];
if (lastValue) {
value = lastValue;
}
setOTP(value.split("").filter((n) => /\d/.test(n)).map(Number));
return;
}
if (!/\d/.test(value) && value !== "") {
Binary file not shown.
+15
View File
@@ -1,5 +1,20 @@
# @thirdweb-dev/sdk
## 4.0.76
### Patch Changes
- Updated dependencies [[`a692154`](https://github.com/thirdweb-dev/js/commit/a6921549244e3a0a959fa0611f3ab92328c06f4b), [`bdb919f`](https://github.com/thirdweb-dev/js/commit/bdb919f32ae459608b29dd1e4d511afc226470c6), [`795a59e`](https://github.com/thirdweb-dev/js/commit/795a59e436d791fcfef093971d295622951c832c), [`b64c8e7`](https://github.com/thirdweb-dev/js/commit/b64c8e7b6efaf09be2afc73b92624c5576a4b24e), [`49d4494`](https://github.com/thirdweb-dev/js/commit/49d44940084dc43fb48836f9d628b8e36dcb917a), [`44680c6`](https://github.com/thirdweb-dev/js/commit/44680c65c1cb8aeb0643fff5084b3b013460c610), [`86105c9`](https://github.com/thirdweb-dev/js/commit/86105c9d918852da86215ec0806aadbcf8eafdea), [`ec149f3`](https://github.com/thirdweb-dev/js/commit/ec149f383415722d34e0de68b0807c84ad3dc55a), [`cea736c`](https://github.com/thirdweb-dev/js/commit/cea736c7e4031b5eaebcd788488314f24d5cab83), [`0e19911`](https://github.com/thirdweb-dev/js/commit/0e199116682727f72b87b81f027f67b223bccfad), [`82e8911`](https://github.com/thirdweb-dev/js/commit/82e89116af8ef6e8c3c7faef1829e0e323e146ae), [`8e0a3ce`](https://github.com/thirdweb-dev/js/commit/8e0a3cea1e354f45e7aa107851909e7d57604f0d), [`9f817cf`](https://github.com/thirdweb-dev/js/commit/9f817cf812e3fff6f64382778df1f99739fc3379)]:
- thirdweb@5.16.1
## 4.0.75
### Patch Changes
- Updated dependencies [[`5b0c37a`](https://github.com/thirdweb-dev/js/commit/5b0c37a0d9b7ba3d7f38647bb41463e91cc91a49), [`24a3ee4`](https://github.com/thirdweb-dev/js/commit/24a3ee49d182a840c864a221eee4dd7d05c5c469), [`5525a0e`](https://github.com/thirdweb-dev/js/commit/5525a0e336177407d508da37058ca24a3abfae37), [`35acbcd`](https://github.com/thirdweb-dev/js/commit/35acbcd10e146b886dfe8a83cd485e96b8c70928), [`664082e`](https://github.com/thirdweb-dev/js/commit/664082e5e613b8748713522353585839fe018fc2), [`d77b6f6`](https://github.com/thirdweb-dev/js/commit/d77b6f67adc6eaf7c306ef738714e8d650ed5af3), [`83d1d6f`](https://github.com/thirdweb-dev/js/commit/83d1d6f397982dfda87a835743a2ef1fecd5d919), [`47de345`](https://github.com/thirdweb-dev/js/commit/47de345b604dbd9afbaaa95a76569b9029d69b00)]:
- thirdweb@5.16.0
- @thirdweb-dev/chains@0.1.105
## 4.0.74
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/sdk",
"version": "4.0.74",
"version": "4.0.76",
"description": "The main thirdweb SDK.",
"repository": "https://github.com/thirdweb-dev/js/tree/main/legacy_packages/sdk",
"license": "Apache-2.0",
Binary file not shown.
@@ -1,5 +1,24 @@
# @thirdweb-dev/unity-js-bridge
## 0.6.25
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/sdk@4.0.76
- @thirdweb-dev/wallets@2.5.16
- @thirdweb-dev/auth@4.1.74
## 0.6.24
### Patch Changes
- Updated dependencies [[`83d1d6f`](https://github.com/thirdweb-dev/js/commit/83d1d6f397982dfda87a835743a2ef1fecd5d919)]:
- @thirdweb-dev/chains@0.1.105
- @thirdweb-dev/sdk@4.0.75
- @thirdweb-dev/wallets@2.5.15
- @thirdweb-dev/auth@4.1.73
## 0.6.23
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/unity-js-bridge",
"version": "0.6.23",
"version": "0.6.25",
"main": "dist/thirdweb-unity-bridge.js",
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/unity-js-bridge",
"license": "Apache-2.0",
+15
View File
@@ -1,5 +1,20 @@
# @thirdweb-dev/wallets
## 2.5.16
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/sdk@4.0.76
## 2.5.15
### Patch Changes
- Updated dependencies [[`83d1d6f`](https://github.com/thirdweb-dev/js/commit/83d1d6f397982dfda87a835743a2ef1fecd5d919)]:
- @thirdweb-dev/chains@0.1.105
- @thirdweb-dev/sdk@4.0.75
## 2.5.14
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@thirdweb-dev/wallets",
"version": "2.5.14",
"version": "2.5.16",
"main": "dist/thirdweb-dev-wallets.cjs.js",
"module": "dist/thirdweb-dev-wallets.esm.js",
"browser": {
@@ -116,8 +116,9 @@ describeIf(!!SECRET_KEY)(
expect(balance.toNumber()).toEqual(7);
});
it("can sign and verify 1271 old factory", {
timeout: 240_000,
// FIXME flaky test
it.todo("can sign and verify 1271 old factory", {
timeout: 300_000,
}, async () => {
const message = "0x1234";
const sig = await smartWallet.signMessage(message);
@@ -139,8 +140,9 @@ describeIf(!!SECRET_KEY)(
expect(isValidV2).toEqual(true);
});
it("can sign and verify 1271 new factory", {
timeout: 240_000,
// FIXME flaky test
it.todo("can sign and verify 1271 new factory", {
timeout: 300_000,
}, async () => {
smartWallet = new SmartWallet({
chain,
+1 -1
View File
@@ -25,7 +25,7 @@
{
"name": "thirdweb/react (minimal + tree-shaking)",
"path": "./dist/esm/exports/react.js",
"limit": "15 kB",
"limit": "16 kB",
"import": "{ ThirdwebProvider, useConnect }"
}
]
+131
View File
@@ -1,5 +1,136 @@
# thirdweb
## 5.16.1
### Patch Changes
- [#2936](https://github.com/thirdweb-dev/js/pull/2936) [`a692154`](https://github.com/thirdweb-dev/js/commit/a6921549244e3a0a959fa0611f3ab92328c06f4b) Thanks [@MananTank](https://github.com/MananTank)! - Fix OTP input entered by by clicking on “from messages” option in iOS safari
- [#2934](https://github.com/thirdweb-dev/js/pull/2934) [`bdb919f`](https://github.com/thirdweb-dev/js/commit/bdb919f32ae459608b29dd1e4d511afc226470c6) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Updates the CLI `create` command to use the v5 templates for Next.js and Vite
Other templates will be updated in the future from within their existing repositories
Removes React Native starters from the CLI menu
Removes JS template support from the CLI
- [#2941](https://github.com/thirdweb-dev/js/pull/2941) [`795a59e`](https://github.com/thirdweb-dev/js/commit/795a59e436d791fcfef093971d295622951c832c) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Can now optionally specify `blockRange` on `getContractEvents` in combination with `toBlock` and `fromBlock`.
## Usage
Specify a `blockRange`, defaulting `toBlock` to the current block number.
```ts
await getContractEvents({
contract: myContract,
blockRange: 123456n,
events: [preparedEvent, preparedEvent2],
});
```
Specify a block range with `toBlock`.
```ts
await getContractEvents({
contract: myContract,
toBlock: endBlock,
blockRange: 123456n,
events: [preparedEvent, preparedEvent2],
});
```
Specify a block range starting from `fromBlock` (great for pagination).
```ts
await getContractEvents({
contract: myContract,
fromBlock: lastBlockFetched,
blockRange: 123456n,
events: [preparedEvent, preparedEvent2],
});
```
- [#2945](https://github.com/thirdweb-dev/js/pull/2945) [`b64c8e7`](https://github.com/thirdweb-dev/js/commit/b64c8e7b6efaf09be2afc73b92624c5576a4b24e) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Removes deprecated template options from the CLI, specifically PWA Vite, Express, and React
- [#2951](https://github.com/thirdweb-dev/js/pull/2951) [`49d4494`](https://github.com/thirdweb-dev/js/commit/49d44940084dc43fb48836f9d628b8e36dcb917a) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Increase gas on MarketplaceV3 writes
- [#2948](https://github.com/thirdweb-dev/js/pull/2948) [`44680c6`](https://github.com/thirdweb-dev/js/commit/44680c65c1cb8aeb0643fff5084b3b013460c610) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Adds extraGas override to transactions. Useful when gas estimates are faulty or to ensure a transaction goes through.
## Usage
```ts
const transaction = prepareTransaction({
to: "0x1234567890123456789012345678901234567890",
chain: ethereum,
client: thirdwebClient,
value: toWei("1.0"),
gasPrice: 30n,
extraGas: 50_000n,
});
```
- [#2932](https://github.com/thirdweb-dev/js/pull/2932) [`86105c9`](https://github.com/thirdweb-dev/js/commit/86105c9d918852da86215ec0806aadbcf8eafdea) Thanks [@gregfromstl](https://github.com/gregfromstl)! - TransactionButton throws error on reverted transaction
- [#2946](https://github.com/thirdweb-dev/js/pull/2946) [`ec149f3`](https://github.com/thirdweb-dev/js/commit/ec149f383415722d34e0de68b0807c84ad3dc55a) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Read RPC url from viem chain in viem chain adapter
- [#2928](https://github.com/thirdweb-dev/js/pull/2928) [`cea736c`](https://github.com/thirdweb-dev/js/commit/cea736c7e4031b5eaebcd788488314f24d5cab83) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Filters invalid listings and auctions from marketplace
- [#2949](https://github.com/thirdweb-dev/js/pull/2949) [`0e19911`](https://github.com/thirdweb-dev/js/commit/0e199116682727f72b87b81f027f67b223bccfad) Thanks [@kien-ngo](https://github.com/kien-ngo)! - Docs update: fix typos and add code snippet
- [#2944](https://github.com/thirdweb-dev/js/pull/2944) [`82e8911`](https://github.com/thirdweb-dev/js/commit/82e89116af8ef6e8c3c7faef1829e0e323e146ae) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Show auth provider icon in connect UI when connected to in app wallet
- [#2933](https://github.com/thirdweb-dev/js/pull/2933) [`8e0a3ce`](https://github.com/thirdweb-dev/js/commit/8e0a3cea1e354f45e7aa107851909e7d57604f0d) Thanks [@MananTank](https://github.com/MananTank)! - ### Integrate Pay Modal with TransactionButton
By default, the Pay Modal is integrated with the `TransactionButton` component. If the user performs a transaction and does not have enough funds to execute it and if [thirdweb pay](https://portal.thirdweb.com/connect/pay/buy-with-crypto) is available for that blockchain, the Pay Modal will be displayed to allow user to buy the required amount of tokens
A new prop `payModal` is added to the `TransactionButton` component customize the Pay Modal UI or disable it entirely
Example: Disable Pay Modal
```tsx
<TransactionButton payModal={false}> Example 1 </TransactionButton>
```
Example: Customize Pay Modal UI
```tsx
<TransactionButton
payModal={{
theme: "light",
}}
>
Example 2
</TransactionButton>
```
### Disable Pay Modal for certain configurations in `useSendTransaction` hook
If `useSendTransaction` hook is passed `gasless: true` configuration or if current active wallet is a smart wallet with `sponsorGas: true` configuration - the Pay Modal will be disabled
- [#2929](https://github.com/thirdweb-dev/js/pull/2929) [`9f817cf`](https://github.com/thirdweb-dev/js/commit/9f817cf812e3fff6f64382778df1f99739fc3379) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Tweaked connected modal UI layout
## 5.16.0
### Minor Changes
- [#2917](https://github.com/thirdweb-dev/js/pull/2917) [`5b0c37a`](https://github.com/thirdweb-dev/js/commit/5b0c37a0d9b7ba3d7f38647bb41463e91cc91a49) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Factory address is now optional in `accountAbstraction` and `smartWallet` options.
- Defaults to a global permissionless factory deployed on all chains.
- Also enables switching chains for smart wallets, as long as the factory is deployed
- [#2915](https://github.com/thirdweb-dev/js/pull/2915) [`664082e`](https://github.com/thirdweb-dev/js/commit/664082e5e613b8748713522353585839fe018fc2) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - New `prepareDeterministicDeployTransaction` extension for deploying published contracts with the same address on multiple chains
- [#2921](https://github.com/thirdweb-dev/js/pull/2921) [`d77b6f6`](https://github.com/thirdweb-dev/js/commit/d77b6f67adc6eaf7c306ef738714e8d650ed5af3) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Adds the 'use client' directive to all client-only components
- [#2919](https://github.com/thirdweb-dev/js/pull/2919) [`47de345`](https://github.com/thirdweb-dev/js/commit/47de345b604dbd9afbaaa95a76569b9029d69b00) Thanks [@jnsdls](https://github.com/jnsdls)! - Add support for several additional wallets
### Patch Changes
- [#2914](https://github.com/thirdweb-dev/js/pull/2914) [`24a3ee4`](https://github.com/thirdweb-dev/js/commit/24a3ee49d182a840c864a221eee4dd7d05c5c469) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix legacy transactions with in-app wallets
- [#2913](https://github.com/thirdweb-dev/js/pull/2913) [`5525a0e`](https://github.com/thirdweb-dev/js/commit/5525a0e336177407d508da37058ca24a3abfae37) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Filter invalid auctions in getAllAuctions
- [#2911](https://github.com/thirdweb-dev/js/pull/2911) [`35acbcd`](https://github.com/thirdweb-dev/js/commit/35acbcd10e146b886dfe8a83cd485e96b8c70928) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Updates mintWithSignature return types to properly parse
## 5.15.0
### Minor Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "thirdweb",
"version": "5.15.0",
"version": "5.16.1",
"repository": {
"type": "git",
"url": "git+https://github.com/thirdweb-dev/js.git#main"
@@ -1,5 +1,5 @@
[
"event TokensMintedWithSignature(address indexed signer, address indexed mintedTo, uint256 indexed tokenIdMinted, (address to, address royaltyRecipient, uint256 royaltyBps, address primarySaleRecipient, uint256 tokenId, string uri, uint256 quantity, uint256 pricePerToken, address currency, uint128 validityStartTimestamp, uint128 validityEndTimestamp, bytes32 uid) mintRequest)",
"function mintWithSignature((address to, address royaltyRecipient, uint256 royaltyBps, address primarySaleRecipient, uint256 tokenId, string uri, uint256 quantity, uint256 pricePerToken, address currency, uint128 validityStartTimestamp, uint128 validityEndTimestamp, bytes32 uid) payload, bytes signature) payable returns (address signer)",
"function mintWithSignature((address to, address royaltyRecipient, uint256 royaltyBps, address primarySaleRecipient, uint256 tokenId, string uri, uint256 quantity, uint256 pricePerToken, address currency, uint128 validityStartTimestamp, uint128 validityEndTimestamp, bytes32 uid) payload, bytes signature) payable",
"function verify((address to, address royaltyRecipient, uint256 royaltyBps, address primarySaleRecipient, uint256 tokenId, string uri, uint256 quantity, uint256 pricePerToken, address currency, uint128 validityStartTimestamp, uint128 validityEndTimestamp, bytes32 uid) req, bytes signature) view returns (bool success, address signer)"
]
@@ -1,5 +1,5 @@
[
"event TokensMintedWithSignature(address indexed signer, address indexed mintedTo, (address to, address primarySaleRecipient, uint256 quantity, uint256 price, address currency, uint128 validityStartTimestamp, uint128 validityEndTimestamp, bytes32 uid) mintRequest)",
"function mintWithSignature((address to, address primarySaleRecipient, uint256 quantity, uint256 price, address currency, uint128 validityStartTimestamp, uint128 validityEndTimestamp, bytes32 uid) payload, bytes signature) payable returns (address signer)",
"function mintWithSignature((address to, address primarySaleRecipient, uint256 quantity, uint256 price, address currency, uint128 validityStartTimestamp, uint128 validityEndTimestamp, bytes32 uid) payload, bytes signature) payable",
"function verify((address to, address primarySaleRecipient, uint256 quantity, uint256 price, address currency, uint128 validityStartTimestamp, uint128 validityEndTimestamp, bytes32 uid) req, bytes signature) view returns (bool success, address signer)"
]
@@ -1,5 +1,5 @@
[
"event TokensMintedWithSignature(address indexed signer, address indexed mintedTo, uint256 indexed tokenIdMinted, (address to,address royaltyRecipient,uint256 royaltyBps,address primarySaleRecipient,string uri,uint256 price,address currency,uint128 validityStartTimestamp,uint128 validityEndTimestamp,bytes32 uid) mintpayload)",
"function mintWithSignature((address to,address royaltyRecipient,uint256 royaltyBps,address primarySaleRecipient,string uri,uint256 price,address currency,uint128 validityStartTimestamp,uint128 validityEndTimestamp,bytes32 uid) payload, bytes signature) payable returns (address signer)",
"function mintWithSignature((address to,address royaltyRecipient,uint256 royaltyBps,address primarySaleRecipient,string uri,uint256 price,address currency,uint128 validityStartTimestamp,uint128 validityEndTimestamp,bytes32 uid) payload, bytes signature) payable returns (uint256 tokenIdMinted)",
"function verify((address to,address royaltyRecipient,uint256 royaltyBps,address primarySaleRecipient,string uri,uint256 price,address currency,uint128 validityStartTimestamp,uint128 validityEndTimestamp,bytes32 uid) payload, bytes signature) view returns (bool success, address signer)"
]
@@ -275,6 +275,7 @@ export function ${f.name}(
maxFeePerGas: async () => (await asyncOptions()).overrides?.maxFeePerGas,
maxPriorityFeePerGas: async () => (await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
`
: ""
}
@@ -0,0 +1,6 @@
### how to add new wallets that are not included in the wallet connect registry
1. Add the wallet into the `extra-wallets.json` file
2. add an icon for the wallet in the `extra-wallets-icons` folder
3. reference that icon's file-name in the `image_id` field in the `extra-wallets.json` file
4. then run the generate script
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="38" height="38" viewBox="0 0 38 38" fill="none">
<path d="M0 8.44444C0 3.78071 3.78071 0 8.44444 0H29.5556C34.2193 0 38 3.78071 38 8.44444V29.5556C38 34.2193 34.2193 38 29.5556 38H8.44444C3.78071 38 0 34.2193 0 29.5556V8.44444Z" fill="#7331FF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.44434 8.44446V21.4733C8.44434 22.5931 8.88918 23.6671 9.681 24.4589L13.541 28.3189C14.3328 29.1107 15.4068 29.5556 16.5266 29.5556H29.5554V21.1111H16.8888V8.44446H8.44434Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 539 B

@@ -0,0 +1,32 @@
[
{
"id": "com.lootrush",
"name": "LootRush",
"homepage": "https://www.lootrush.com/lootrush-wallet",
"image_id": "lootrush.svg",
"order": 9999999,
"app": {
"browser": null,
"ios": null,
"android": null,
"mac": null,
"windows": null,
"linux": null,
"chrome": "https://chrome.google.com/webstore/detail/lootrush-wallet/lfmmjkfllhmfmkcobchabopkcefjkoip",
"firefox": "https://addons.mozilla.org/en-US/firefox/addon/lootrush-wallet/",
"safari": null,
"edge": null,
"opera": null
},
"injected": [],
"rdns": "com.lootrush",
"mobile": {
"native": null,
"universal": null
},
"desktop": {
"native": null,
"universal": null
}
}
]
+50 -10
View File
@@ -1,11 +1,15 @@
import { writeFile } from "node:fs/promises";
import { rm, mkdir, readFile } from "node:fs/promises";
import { mkdir, readFile, rm } from "node:fs/promises";
import { join } from "node:path";
import { format } from "prettier";
import sharp from "sharp";
const allWalletsJson = JSON.parse(
await readFile(join(__dirname, "./all-wallets.json"), "utf-8"),
const walletConnectWalletsJson = await fetch(
"https://explorer-api.walletconnect.com/w3m/v1/getAllListings?projectId=145769e410f16970a79ff77b2d89a1e0",
).then((res) => res.json());
const extraWalletsJson = JSON.parse(
await readFile(join(__dirname, "./extra-wallets.json"), "utf-8"),
);
type Wallet = {
@@ -40,9 +44,17 @@ type Wallet = {
native: string | null;
universal: string | null;
};
_type: "wc" | "extra";
};
const allWalletsArray = Object.values(allWalletsJson.listings) as Wallet[];
const allWalletsArray = Object.values(walletConnectWalletsJson.listings)
.map((w) => ({ ...(w as Omit<Wallet, "type">), _type: "wc" }))
.concat(
extraWalletsJson.map((w) => ({
...(w as Omit<Wallet, "type">),
_type: "extra",
})),
) as Wallet[];
function rdns(wallet: Wallet) {
// prefer the rdns if it exists
@@ -175,6 +187,13 @@ export default ALL_MINIMAL_WALLET_INFOS;
},
),
);
function stripType(wallet: Wallet) {
const copy = { ...wallet };
// biome-ignore lint/performance/noDelete: aware it's bad but it's OK in generate script
// biome-ignore lint/suspicious/noExplicitAny: aware it's bad but it's OK in generate script
delete (copy as any)._type;
return copy;
}
// for each wallet, generate a folder within the `src/wallets/__generated__` directory
// and write a `index.ts` file with the wallet's information
@@ -191,7 +210,7 @@ for (const wallet of allSupportedWallets) {
`// This file is auto-generated by the \`scripts/wallets/generate.ts\` script.
// Do not modify this file manually.
export const wallet = ${JSON.stringify(wallet, null, 2)} as const;
export const wallet = ${JSON.stringify(stripType(wallet), null, 2)} as const;
`,
{
parser: "babel-ts",
@@ -200,12 +219,33 @@ export const wallet = ${JSON.stringify(wallet, null, 2)} as const;
);
// download the wallet's image
const image = await fetch(
`https://explorer-api.walletconnect.com/w3m/v1/getWalletImage/${wallet.image_id}?projectId=145769e410f16970a79ff77b2d89a1e0&`,
);
const arrBuff = await image.arrayBuffer();
let resized: Buffer;
if (wallet._type === "extra") {
// directly fetch, this will be a URL always
resized = await sharp(
await readFile(
join(__dirname, `./extra-wallet-icons/${wallet.image_id}`),
),
)
.resize(128, 128)
.webp()
.toBuffer();
} else {
// fetch from the explorer api
const imageRes = await fetch(
`https://explorer-api.walletconnect.com/w3m/v1/getWalletImage/${wallet.image_id}?projectId=145769e410f16970a79ff77b2d89a1e0&`,
);
if (!imageRes.ok) {
console.error(`Failed to fetch image for ${wallet.id}`);
return;
}
resized = await sharp(await imageRes.arrayBuffer())
.resize(128, 128)
.webp()
.toBuffer();
}
const resized = await sharp(arrBuff).resize(128, 128).webp().toBuffer();
// arrayBuffer to base64 webp
const base64Flag = "data:image/webp;base64,";
+1 -1
View File
@@ -14,7 +14,7 @@ import { verifyLoginPayload } from "./core/verify-login-payload.js";
*
* const auth = createAuth({...});
*
* // 1. genererate a login payload for a client on the server side
* // 1. generate a login payload for a client on the server side
* const loginPayload = await auth.generatePayload({ address: '0x123...' });
*
* // 2. send the login payload to the client
@@ -0,0 +1,32 @@
import { defineChain as viemChain } from "viem";
import { describe, expect, it } from "vitest";
import { defineChain } from "./utils.js";
describe("defineChain", () => {
it("should convert viem chain to thirdweb chain", () => {
const zoraViem = viemChain({
id: 7777777,
name: "Zora",
nativeCurrency: {
decimals: 18,
name: "Ether",
symbol: "ETH",
},
rpcUrls: {
default: {
http: ["https://rpc.zora.energy"],
webSocket: ["wss://rpc.zora.energy"],
},
},
blockExplorers: {
default: { name: "Explorer", url: "https://explorer.zora.energy" },
},
});
const thirdwebViem = defineChain(zoraViem);
expect(thirdwebViem.id).toEqual(zoraViem.id);
expect(thirdwebViem.name).toEqual(zoraViem.name);
expect(thirdwebViem.nativeCurrency).toEqual(zoraViem.nativeCurrency);
expect(thirdwebViem.rpc).toEqual(zoraViem.rpcUrls.default.http[0]);
});
});
+3
View File
@@ -91,6 +91,9 @@ function convertViemChain(viemChain: ViemChain): Chain {
symbol: viemChain.nativeCurrency.symbol,
decimals: viemChain.nativeCurrency.decimals,
},
rpc:
viemChain.rpcUrls.default.http[0] ??
`https://${viemChain.id}.rpc.thirdweb.com`,
blockExplorers: viemChain?.blockExplorers
? Object.values(viemChain?.blockExplorers).map((explorer) => {
return {
@@ -0,0 +1,55 @@
import { describe, expect, it } from "vitest";
import {
FORKED_ETHEREUM_CHAIN,
FORKED_OPTIMISM_CHAIN,
} from "../../../test/src/chains.js";
import { TEST_CLIENT } from "../../../test/src/test-clients.js";
import { TEST_ACCOUNT_A } from "../../../test/src/test-wallets.js";
import { simulateTransaction } from "../../transaction/actions/simulate.js";
import { ENTRYPOINT_ADDRESS_v0_6 } from "../../wallets/smart/lib/constants.js";
import { prepareDeterministicDeployTransaction } from "./deploy-deterministic.js";
// skip this test suite if there is no secret key available to test with
// TODO: remove reliance on secret key during unit tests entirely
describe.runIf(process.env.TW_SECRET_KEY)("deployFromMetadata", () => {
it("should deploy contracts at the same address", async () => {
const tx1 = prepareDeterministicDeployTransaction({
chain: FORKED_ETHEREUM_CHAIN,
client: TEST_CLIENT,
contractId: "AccountFactory",
constructorParams: [TEST_ACCOUNT_A.address, ENTRYPOINT_ADDRESS_v0_6],
});
const tx2 = prepareDeterministicDeployTransaction({
chain: FORKED_OPTIMISM_CHAIN,
client: TEST_CLIENT,
contractId: "AccountFactory",
constructorParams: [TEST_ACCOUNT_A.address, ENTRYPOINT_ADDRESS_v0_6],
});
const [tx1Result, tx2Result] = await Promise.all([
simulateTransaction({ transaction: tx1 }),
simulateTransaction({ transaction: tx2 }),
]);
expect(tx1Result).toEqual(tx2Result);
});
it("should respect salt param", async () => {
const tx1 = prepareDeterministicDeployTransaction({
chain: FORKED_ETHEREUM_CHAIN,
client: TEST_CLIENT,
contractId: "AccountFactory",
constructorParams: [TEST_ACCOUNT_A.address, ENTRYPOINT_ADDRESS_v0_6],
salt: "some-salt",
});
const tx2 = prepareDeterministicDeployTransaction({
chain: FORKED_OPTIMISM_CHAIN,
client: TEST_CLIENT,
contractId: "AccountFactory",
constructorParams: [TEST_ACCOUNT_A.address, ENTRYPOINT_ADDRESS_v0_6],
});
const [tx1Result, tx2Result] = await Promise.all([
simulateTransaction({ transaction: tx1 }),
simulateTransaction({ transaction: tx2 }),
]);
expect(tx1Result !== tx2Result).toBe(true);
});
});
@@ -0,0 +1,55 @@
import { prepareTransaction } from "../../transaction/prepare-transaction.js";
import { computeDeploymentInfoFromContractId } from "../../utils/any-evm/compute-published-contract-deploy-info.js";
import type { Prettify } from "../../utils/type-utils.js";
import type { ClientAndChain } from "../../utils/types.js";
import { computeCreate2FactoryAddress } from "./utils/create-2-factory.js";
export type DeployDetemisiticParams = Prettify<
ClientAndChain & {
contractId: string;
constructorParams: unknown[];
publisher?: string;
version?: string;
salt?: string;
}
>;
/**
* Deploy a contract deterministically - will maintain the same address across chains.
* This is meant to be used with published contracts configured with the 'direct deploy' method.
* Under the hood, this uses a keyless transaction with a common create2 factory.
* @param options - the options to deploy the contract
* @returns - the transaction to deploy the contract
* @extension DEPLOY
* @example
* ```ts
* import { prepareDeterministicDeployTransaction } from "thirdweb/deploys";
* import { sepolia } from "thirdweb/chains";
*
* const tx = prepareDeterministicDeployTransaction({
* client,
* chain: sepolia,
* contractId: "AccountFactory",
* constructorParams: [123],
* });
* ```
*/
export function prepareDeterministicDeployTransaction(
options: DeployDetemisiticParams,
) {
const { client, chain } = options;
return prepareTransaction({
client,
chain,
to: () =>
computeCreate2FactoryAddress({
client,
chain,
}),
data: async () => {
const infraContractInfo =
await computeDeploymentInfoFromContractId(options);
return infraContractInfo.initBytecodeWithsalt;
},
});
}
@@ -33,7 +33,7 @@ export type PrepareDirectDeployTransactionOptions<
* @returns - The prepared transaction.
* @example
* ```ts
* import { prepareDirectDeployTransaction } from "thirdweb/contract";
* import { prepareDirectDeployTransaction } from "thirdweb/deploys";
* import { ethereum } from "thirdweb/chains";
* const tx = prepareDirectDeployTransaction({
* client,
@@ -33,7 +33,7 @@ type VerifyContractOptions = {
* @example
* ```ts
* import { getContract } from "thirdweb/contract";
* import { verifyContract } from "thirdweb/contract/verification";
* import { verifyContract } from "thirdweb/contract";
*
* const contract = getContract({ ... });
* const verificationResult = await verifyContract({
@@ -162,7 +162,7 @@ type CheckVerificationStatusOptions = {
* @throws An error if the verification status check fails.
* @example
* ```ts
* import { checkVerificationStatus } from "thirdweb/contract/verification";
* import { checkVerificationStatus } from "thirdweb/contract";
* const verificationStatus = await checkVerificationStatus({
* explorerApiUrl: "https://api.polygonscan.com/api",
* explorerApiKey: "YOUR_API_KEY",
@@ -7,21 +7,72 @@ import { transferEvent } from "../../extensions/erc721/__generated__/IERC721A/ev
import { prepareEvent } from "../prepare-event.js";
import { getContractEvents } from "./get-events.js";
const LATEST_SIMULATED_BLOCK = 19139495n;
// skip this test suite if there is no secret key available to test with
// TODO: remove reliance on secret key during unit tests entirely
describe.runIf(process.env.TW_SECRET_KEY)("getEvents", () => {
it("should get all events", async () => {
const events = await getContractEvents({
contract: USDT_CONTRACT,
fromBlock: 19139495n - 10n,
fromBlock: LATEST_SIMULATED_BLOCK - 10n,
});
expect(events.length).toBe(261);
});
it("should get events for blockHash", async () => {
const BLOCK_HASH =
"0xb0ad5ee7b4912b50e5a2d7993796944653a4c0632c57740fe4a7a1c61e426324";
const events = await getContractEvents({
contract: USDT_CONTRACT,
blockHash: BLOCK_HASH,
});
expect(events.length).toBe(14);
});
it("should get events for blockRange", async () => {
const events = await getContractEvents({
contract: USDT_CONTRACT,
blockRange: 10n,
});
expect(events.length).toBe(261);
const explicitEvents = await getContractEvents({
contract: USDT_CONTRACT,
fromBlock: LATEST_SIMULATED_BLOCK - 10n,
toBlock: LATEST_SIMULATED_BLOCK,
});
expect(explicitEvents.length).toEqual(events.length);
});
it("should get events for blockRange using fromBlock and toBlock", async () => {
const eventsFromBlock = await getContractEvents({
contract: USDT_CONTRACT,
fromBlock: LATEST_SIMULATED_BLOCK - 50n,
blockRange: 20n,
});
expect(eventsFromBlock.length).toBe(426);
const eventsToBlock = await getContractEvents({
contract: USDT_CONTRACT,
toBlock: LATEST_SIMULATED_BLOCK - 30n,
blockRange: 20n,
});
expect(eventsToBlock.length).toBe(426);
const explicitEvents = await getContractEvents({
contract: USDT_CONTRACT,
fromBlock: LATEST_SIMULATED_BLOCK - 50n,
toBlock: LATEST_SIMULATED_BLOCK - 30n,
});
expect(explicitEvents.length).toEqual(eventsFromBlock.length);
});
it("should get individual events with signature", async () => {
const events = await getContractEvents({
contract: USDT_CONTRACT,
fromBlock: 19139495n - 100n,
fromBlock: LATEST_SIMULATED_BLOCK - 100n,
events: [
prepareEvent({
signature: "event Burn(address indexed burner, uint256 amount)",
@@ -34,7 +85,7 @@ describe.runIf(process.env.TW_SECRET_KEY)("getEvents", () => {
it("should get specified events", async () => {
const events = await getContractEvents({
contract: USDT_CONTRACT,
fromBlock: 19139495n - 10n,
fromBlock: LATEST_SIMULATED_BLOCK - 10n,
events: [
prepareEvent({
signature: "event Burn(address indexed burner, uint256 amount)",
@@ -74,7 +125,7 @@ describe.runIf(process.env.TW_SECRET_KEY)("getEvents", () => {
it("should get individual events with extension", async () => {
const events = await getContractEvents({
contract: DOODLES_CONTRACT,
fromBlock: 19139495n - 1000n,
fromBlock: LATEST_SIMULATED_BLOCK - 1000n,
events: [transferEvent()],
});
expect(events.length).toBe(38);
@@ -13,6 +13,7 @@ import type {
} from "abitype";
import { resolveContractAbi } from "../../contract/actions/resolve-abi.js";
import type { ThirdwebContract } from "../../contract/contract.js";
import { eth_blockNumber } from "../../rpc/actions/eth_blockNumber.js";
import {
type GetLogsBlockParams,
type GetLogsParams,
@@ -61,6 +62,37 @@ export type GetContractEventsResult<
* events: [preparedEvent, preparedEvent2],
* });
* ```
* @example
* Optionally specify a blockRange as the number of blocks to retrieve. toBlock will default to the current block number.
* ```ts
* import { getContractEvents } from "thirdweb";
* const events = await getContractEvents({
* contract: myContract,
* blockRange: 123456n,
* events: [preparedEvent, preparedEvent2],
* });
* ```
* @example
* Use fromBlock with blockRange for pagination.
* ```ts
* import { getContractEvents } from "thirdweb";
* const events = await getContractEvents({
* contract: myContract,
* fromBlock: lastBlockFetched,
* blockRange: 123456n,
* events: [preparedEvent, preparedEvent2],
* });
* ```
* @example
* Retrieve events for a specific block hash.
* ```ts
* import { getContractEvents } from "thirdweb";
* const events = await getContractEvents({
* contract: myContract,
* blockHash: "0x...",
* events: [preparedEvent, preparedEvent2],
* });
* ```
* @contract
*/
export async function getContractEvents<
@@ -72,7 +104,42 @@ export async function getContractEvents<
>(
options: GetContractEventsOptions<abi, abiEvents, TStrict>,
): Promise<GetContractEventsResult<abiEvents, TStrict>> {
const { contract, events, ...restParams } = options;
const { contract, events, blockRange, ...restParams } = options;
const rpcRequest = getRpcClient(contract);
if (
restParams.blockHash &&
(blockRange || restParams.fromBlock || restParams.toBlock)
) {
throw new Error("Cannot specify blockHash and range simultaneously,");
}
// Compute toBlock and fromBlock if blockRange was passed
if (blockRange) {
const { fromBlock, toBlock } = restParams;
// Make sure the inputs were properly defined
if (
fromBlock &&
toBlock &&
BigInt(toBlock) - BigInt(fromBlock) !== BigInt(blockRange)
) {
throw new Error(
"Incompatible blockRange with specified fromBlock and toBlock. Please only define fromBlock or toBlock when specifying blockRange.",
);
}
if (fromBlock) {
restParams.toBlock = BigInt(fromBlock) + BigInt(blockRange);
} else if (toBlock) {
restParams.fromBlock = BigInt(toBlock) - BigInt(blockRange);
} else {
// If no from or to block specified, use the latest block as the to block
restParams.toBlock = await eth_blockNumber(rpcRequest);
restParams.fromBlock = BigInt(restParams.toBlock) - BigInt(blockRange);
}
}
let resolvedEvents = events ?? [];
@@ -104,7 +171,6 @@ export async function getContractEvents<
: // otherwise we want "all" events (aka not pass any topics at all)
[{ ...restParams, address: contract?.address }];
const rpcRequest = getRpcClient(contract);
const logs = await Promise.all(
logsParams.map((ethLogParams) => eth_getLogs(rpcRequest, ethLogParams)),
);
+2
View File
@@ -26,8 +26,10 @@ export {
export { prepareDirectDeployTransaction } from "../contract/deployment/deploy-with-abi.js";
export { prepareAutoFactoryDeployTransaction } from "../contract/deployment/deploy-via-autofactory.js";
export { prepareDeterministicDeployTransaction } from "../contract/deployment/deploy-deterministic.js";
export { deployViaAutoFactory } from "../contract/deployment/deploy-via-autofactory.js";
export {
deployContract,
type PrepareDirectDeployTransactionOptions,
} from "../contract/deployment/deploy-with-abi.js";
export { computePublishedContractAddress } from "../utils/any-evm/compute-published-contract-address.js";
+1
View File
@@ -61,6 +61,7 @@ export { useReadContract } from "../react/core/hooks/contract/useReadContract.js
export {
useSendTransaction,
type SendTransactionConfig,
type SendTransactionPayModalConfig,
} from "../react/web/hooks/useSendTransaction.js";
export { useSendBatchTransaction } from "../react/core/hooks/contract/useSendBatchTransaction.js";
export { useSendAndConfirmTransaction } from "../react/core/hooks/contract/useSendAndConfirmTransaction.js";
+5
View File
@@ -141,3 +141,8 @@ export { resolvePromisedValue } from "../utils/promise/resolve-promised-value.js
// json
// ------------------------------------------------
export { stringify } from "../utils/json.js";
// ------------------------------------------------
// values
// ------------------------------------------------
export { maxUint256 } from "viem";
@@ -7,4 +7,7 @@ export type {
PaymasterResult,
} from "../../wallets/smart/types.js";
// TODO: add exports for smart wallet utils here
export {
ENTRYPOINT_ADDRESS_v0_6,
DEFAULT_ACCOUNT_FACTORY,
} from "../../wallets/smart/lib/constants.js";
@@ -177,5 +177,6 @@ export function airdropERC1155(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -210,5 +210,6 @@ export function airdropERC1155WithSignature(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -169,5 +169,6 @@ export function airdropERC20(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -204,5 +204,6 @@ export function airdropERC20WithSignature(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -171,5 +171,6 @@ export function airdropERC721(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -204,5 +204,6 @@ export function airdropERC721WithSignature(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -157,5 +157,6 @@ export function airdropNativeToken(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -201,5 +201,6 @@ export function claimERC1155(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -186,5 +186,6 @@ export function claimERC20(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -186,5 +186,6 @@ export function claimERC721(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -137,5 +137,6 @@ export function initialize(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -173,5 +173,6 @@ export function setMerkleRoot(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -135,5 +135,6 @@ export function setOwner(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -200,5 +200,6 @@ export function setClaimConditions(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -134,5 +134,6 @@ export function setContractURI(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -137,5 +137,6 @@ export function multicall(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}
@@ -130,5 +130,6 @@ export function setOwner(
maxPriorityFeePerGas: async () =>
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
nonce: async () => (await asyncOptions()).overrides?.nonce,
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
});
}

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