thirdweb 5.50.0-nightly-5475551e5de0750ff1b780522cb01e974a828dd2-20240902000412 → 5.50.0-nightly-aa556f17b6a1de4b889e7f58cd13ca8a3cc41d71-20240903000507
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/extensions/erc20/read/isERC20.js +26 -8
- package/dist/cjs/extensions/erc20/read/isERC20.js.map +1 -1
- package/dist/cjs/react/core/hooks/wallets/useActiveWallet.js +29 -0
- package/dist/cjs/react/core/hooks/wallets/useActiveWallet.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/extensions/erc20/read/isERC20.js +26 -8
- package/dist/esm/extensions/erc20/read/isERC20.js.map +1 -1
- package/dist/esm/react/core/hooks/wallets/useActiveWallet.js +29 -0
- package/dist/esm/react/core/hooks/wallets/useActiveWallet.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/extensions/erc20/read/isERC20.d.ts +3 -4
- package/dist/types/extensions/erc20/read/isERC20.d.ts.map +1 -1
- package/dist/types/react/core/hooks/wallets/useActiveWallet.d.ts +29 -0
- package/dist/types/react/core/hooks/wallets/useActiveWallet.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/extensions/erc1155/read/getOwnedNFTs.test.ts +62 -0
- package/src/extensions/erc20/read/isERC20.ts +27 -9
- package/src/react/core/hooks/wallets/useActiveWallet.ts +29 -0
- package/src/version.ts +1 -1
@@ -1,11 +1,19 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.isERC20 = isERC20;
|
4
|
-
const
|
4
|
+
const name_js_1 = require("../../common/__generated__/IContractMetadata/read/name.js");
|
5
|
+
const symbol_js_1 = require("../../common/__generated__/IContractMetadata/read/symbol.js");
|
6
|
+
const allowance_js_1 = require("../__generated__/IERC20/read/allowance.js");
|
7
|
+
const balanceOf_js_1 = require("../__generated__/IERC20/read/balanceOf.js");
|
8
|
+
const decimals_js_1 = require("../__generated__/IERC20/read/decimals.js");
|
9
|
+
const totalSupply_js_1 = require("../__generated__/IERC20/read/totalSupply.js");
|
10
|
+
const approve_js_1 = require("../__generated__/IERC20/write/approve.js");
|
11
|
+
const transfer_js_1 = require("../__generated__/IERC20/write/transfer.js");
|
12
|
+
const transferFrom_js_1 = require("../__generated__/IERC20/write/transferFrom.js");
|
5
13
|
/**
|
6
|
-
* Check if a contract
|
14
|
+
* Check if a contract is an ERC20 token.
|
7
15
|
* @param options - The transaction options.
|
8
|
-
* @returns A boolean indicating whether the contract
|
16
|
+
* @returns A boolean indicating whether the contract is an ERC20 token.
|
9
17
|
* @extension ERC20
|
10
18
|
* @example
|
11
19
|
* ```ts
|
@@ -13,10 +21,20 @@ const supportsInterface_js_1 = require("../../erc165/__generated__/IERC165/read/
|
|
13
21
|
* const result = await isERC20({ contract });
|
14
22
|
* ```
|
15
23
|
*/
|
16
|
-
function isERC20(
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
24
|
+
function isERC20(availableSelectors) {
|
25
|
+
// there is no trustworthy way to check if a contract is ERC20 via ERC165, so we do this manually.
|
26
|
+
// see: https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3575
|
27
|
+
// see: https://ethereum.org/en/developers/docs/standards/tokens/erc-20/
|
28
|
+
return [
|
29
|
+
(0, name_js_1.isNameSupported)(availableSelectors),
|
30
|
+
(0, symbol_js_1.isSymbolSupported)(availableSelectors),
|
31
|
+
(0, decimals_js_1.isDecimalsSupported)(availableSelectors),
|
32
|
+
(0, totalSupply_js_1.isTotalSupplySupported)(availableSelectors),
|
33
|
+
(0, balanceOf_js_1.isBalanceOfSupported)(availableSelectors),
|
34
|
+
(0, transfer_js_1.isTransferSupported)(availableSelectors),
|
35
|
+
(0, transferFrom_js_1.isTransferFromSupported)(availableSelectors),
|
36
|
+
(0, approve_js_1.isApproveSupported)(availableSelectors),
|
37
|
+
(0, allowance_js_1.isAllowanceSupported)(availableSelectors),
|
38
|
+
].every(Boolean);
|
21
39
|
}
|
22
40
|
//# sourceMappingURL=isERC20.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"isERC20.js","sourceRoot":"","sources":["../../../../../src/extensions/erc20/read/isERC20.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"isERC20.js","sourceRoot":"","sources":["../../../../../src/extensions/erc20/read/isERC20.ts"],"names":[],"mappings":";;AAqBA,0BAgBC;AArCD,uFAA4F;AAC5F,2FAAgG;AAChG,4EAAiF;AACjF,4EAAiF;AACjF,0EAA+E;AAC/E,gFAAqF;AACrF,yEAA8E;AAC9E,2EAAgF;AAChF,mFAAwF;AAExF;;;;;;;;;;GAUG;AACH,SAAgB,OAAO,CAAC,kBAA4B;IAClD,kGAAkG;IAClG,0EAA0E;IAC1E,wEAAwE;IAExE,OAAO;QACL,IAAA,yBAAe,EAAC,kBAAkB,CAAC;QACnC,IAAA,6BAAiB,EAAC,kBAAkB,CAAC;QACrC,IAAA,iCAAmB,EAAC,kBAAkB,CAAC;QACvC,IAAA,uCAAsB,EAAC,kBAAkB,CAAC;QAC1C,IAAA,mCAAoB,EAAC,kBAAkB,CAAC;QACxC,IAAA,iCAAmB,EAAC,kBAAkB,CAAC;QACvC,IAAA,yCAAuB,EAAC,kBAAkB,CAAC;QAC3C,IAAA,+BAAkB,EAAC,kBAAkB,CAAC;QACtC,IAAA,mCAAoB,EAAC,kBAAkB,CAAC;KACzC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC"}
|
@@ -7,11 +7,40 @@ const connection_manager_js_1 = require("../../providers/connection-manager.js")
|
|
7
7
|
* A hook that returns the active wallet
|
8
8
|
* @returns The active `Wallet` or `undefined` if no active wallet is set.
|
9
9
|
* @example
|
10
|
+
*
|
11
|
+
* ### Basic usage
|
10
12
|
* ```jsx
|
11
13
|
* import { useActiveWallet } from "thirdweb/react";
|
12
14
|
*
|
13
15
|
* const wallet = useActiveWallet();
|
14
16
|
* ```
|
17
|
+
*
|
18
|
+
* ### Listen to account change event
|
19
|
+
* ```jsx
|
20
|
+
* const wallet = useActiveWallet();
|
21
|
+
*
|
22
|
+
* wallet?.subscribe("accountChanged", (account) => {
|
23
|
+
* console.log(account);
|
24
|
+
* });
|
25
|
+
* ```
|
26
|
+
*
|
27
|
+
* ### Listen to multiple accounts changed event
|
28
|
+
* ```jsx
|
29
|
+
* const wallet = useActiveWallet();
|
30
|
+
*
|
31
|
+
* wallet?.subscribe("accountsChanged", (addresses) => {
|
32
|
+
* console.log(addresses);
|
33
|
+
* });
|
34
|
+
* ```
|
35
|
+
*
|
36
|
+
* ### Listen to network change event
|
37
|
+
* ```jsx
|
38
|
+
* const wallet = useActiveWallet();
|
39
|
+
*
|
40
|
+
* wallet?.subscribe("chainChanged", (chain) => {
|
41
|
+
* console.log(chain);
|
42
|
+
* });
|
43
|
+
* ```
|
15
44
|
* @walletConnection
|
16
45
|
*/
|
17
46
|
function useActiveWallet() {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useActiveWallet.js","sourceRoot":"","sources":["../../../../../../src/react/core/hooks/wallets/useActiveWallet.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"useActiveWallet.js","sourceRoot":"","sources":["../../../../../../src/react/core/hooks/wallets/useActiveWallet.ts"],"names":[],"mappings":";;AA2CA,0CAIC;AA/CD,iCAA6C;AAC7C,iFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,SAAgB,eAAe;IAC7B,MAAM,OAAO,GAAG,IAAA,+CAAuB,EAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACxC,OAAO,IAAA,4BAAoB,EAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC/E,CAAC"}
|
package/dist/cjs/version.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.version = void 0;
|
4
|
-
exports.version = "5.50.0-nightly-
|
4
|
+
exports.version = "5.50.0-nightly-aa556f17b6a1de4b889e7f58cd13ca8a3cc41d71-20240903000507";
|
5
5
|
//# sourceMappingURL=version.js.map
|
@@ -1,8 +1,16 @@
|
|
1
|
-
import {
|
1
|
+
import { isNameSupported } from "../../common/__generated__/IContractMetadata/read/name.js";
|
2
|
+
import { isSymbolSupported } from "../../common/__generated__/IContractMetadata/read/symbol.js";
|
3
|
+
import { isAllowanceSupported } from "../__generated__/IERC20/read/allowance.js";
|
4
|
+
import { isBalanceOfSupported } from "../__generated__/IERC20/read/balanceOf.js";
|
5
|
+
import { isDecimalsSupported } from "../__generated__/IERC20/read/decimals.js";
|
6
|
+
import { isTotalSupplySupported } from "../__generated__/IERC20/read/totalSupply.js";
|
7
|
+
import { isApproveSupported } from "../__generated__/IERC20/write/approve.js";
|
8
|
+
import { isTransferSupported } from "../__generated__/IERC20/write/transfer.js";
|
9
|
+
import { isTransferFromSupported } from "../__generated__/IERC20/write/transferFrom.js";
|
2
10
|
/**
|
3
|
-
* Check if a contract
|
11
|
+
* Check if a contract is an ERC20 token.
|
4
12
|
* @param options - The transaction options.
|
5
|
-
* @returns A boolean indicating whether the contract
|
13
|
+
* @returns A boolean indicating whether the contract is an ERC20 token.
|
6
14
|
* @extension ERC20
|
7
15
|
* @example
|
8
16
|
* ```ts
|
@@ -10,10 +18,20 @@ import { supportsInterface } from "../../erc165/__generated__/IERC165/read/suppo
|
|
10
18
|
* const result = await isERC20({ contract });
|
11
19
|
* ```
|
12
20
|
*/
|
13
|
-
export function isERC20(
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
21
|
+
export function isERC20(availableSelectors) {
|
22
|
+
// there is no trustworthy way to check if a contract is ERC20 via ERC165, so we do this manually.
|
23
|
+
// see: https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3575
|
24
|
+
// see: https://ethereum.org/en/developers/docs/standards/tokens/erc-20/
|
25
|
+
return [
|
26
|
+
isNameSupported(availableSelectors),
|
27
|
+
isSymbolSupported(availableSelectors),
|
28
|
+
isDecimalsSupported(availableSelectors),
|
29
|
+
isTotalSupplySupported(availableSelectors),
|
30
|
+
isBalanceOfSupported(availableSelectors),
|
31
|
+
isTransferSupported(availableSelectors),
|
32
|
+
isTransferFromSupported(availableSelectors),
|
33
|
+
isApproveSupported(availableSelectors),
|
34
|
+
isAllowanceSupported(availableSelectors),
|
35
|
+
].every(Boolean);
|
18
36
|
}
|
19
37
|
//# sourceMappingURL=isERC20.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"isERC20.js","sourceRoot":"","sources":["../../../../../src/extensions/erc20/read/isERC20.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"isERC20.js","sourceRoot":"","sources":["../../../../../src/extensions/erc20/read/isERC20.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2DAA2D,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AAExF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,kBAA4B;IAClD,kGAAkG;IAClG,0EAA0E;IAC1E,wEAAwE;IAExE,OAAO;QACL,eAAe,CAAC,kBAAkB,CAAC;QACnC,iBAAiB,CAAC,kBAAkB,CAAC;QACrC,mBAAmB,CAAC,kBAAkB,CAAC;QACvC,sBAAsB,CAAC,kBAAkB,CAAC;QAC1C,oBAAoB,CAAC,kBAAkB,CAAC;QACxC,mBAAmB,CAAC,kBAAkB,CAAC;QACvC,uBAAuB,CAAC,kBAAkB,CAAC;QAC3C,kBAAkB,CAAC,kBAAkB,CAAC;QACtC,oBAAoB,CAAC,kBAAkB,CAAC;KACzC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC"}
|
@@ -4,11 +4,40 @@ import { useConnectionManagerCtx } from "../../providers/connection-manager.js";
|
|
4
4
|
* A hook that returns the active wallet
|
5
5
|
* @returns The active `Wallet` or `undefined` if no active wallet is set.
|
6
6
|
* @example
|
7
|
+
*
|
8
|
+
* ### Basic usage
|
7
9
|
* ```jsx
|
8
10
|
* import { useActiveWallet } from "thirdweb/react";
|
9
11
|
*
|
10
12
|
* const wallet = useActiveWallet();
|
11
13
|
* ```
|
14
|
+
*
|
15
|
+
* ### Listen to account change event
|
16
|
+
* ```jsx
|
17
|
+
* const wallet = useActiveWallet();
|
18
|
+
*
|
19
|
+
* wallet?.subscribe("accountChanged", (account) => {
|
20
|
+
* console.log(account);
|
21
|
+
* });
|
22
|
+
* ```
|
23
|
+
*
|
24
|
+
* ### Listen to multiple accounts changed event
|
25
|
+
* ```jsx
|
26
|
+
* const wallet = useActiveWallet();
|
27
|
+
*
|
28
|
+
* wallet?.subscribe("accountsChanged", (addresses) => {
|
29
|
+
* console.log(addresses);
|
30
|
+
* });
|
31
|
+
* ```
|
32
|
+
*
|
33
|
+
* ### Listen to network change event
|
34
|
+
* ```jsx
|
35
|
+
* const wallet = useActiveWallet();
|
36
|
+
*
|
37
|
+
* wallet?.subscribe("chainChanged", (chain) => {
|
38
|
+
* console.log(chain);
|
39
|
+
* });
|
40
|
+
* ```
|
12
41
|
* @walletConnection
|
13
42
|
*/
|
14
43
|
export function useActiveWallet() {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useActiveWallet.js","sourceRoot":"","sources":["../../../../../../src/react/core/hooks/wallets/useActiveWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAEhF
|
1
|
+
{"version":3,"file":"useActiveWallet.js","sourceRoot":"","sources":["../../../../../../src/react/core/hooks/wallets/useActiveWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACxC,OAAO,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC/E,CAAC"}
|
package/dist/esm/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export const version = "5.50.0-nightly-
|
1
|
+
export const version = "5.50.0-nightly-aa556f17b6a1de4b889e7f58cd13ca8a3cc41d71-20240903000507";
|
2
2
|
//# sourceMappingURL=version.js.map
|
@@ -1,8 +1,7 @@
|
|
1
|
-
import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
2
1
|
/**
|
3
|
-
* Check if a contract
|
2
|
+
* Check if a contract is an ERC20 token.
|
4
3
|
* @param options - The transaction options.
|
5
|
-
* @returns A boolean indicating whether the contract
|
4
|
+
* @returns A boolean indicating whether the contract is an ERC20 token.
|
6
5
|
* @extension ERC20
|
7
6
|
* @example
|
8
7
|
* ```ts
|
@@ -10,5 +9,5 @@ import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
|
10
9
|
* const result = await isERC20({ contract });
|
11
10
|
* ```
|
12
11
|
*/
|
13
|
-
export declare function isERC20(
|
12
|
+
export declare function isERC20(availableSelectors: string[]): boolean;
|
14
13
|
//# sourceMappingURL=isERC20.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"isERC20.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/erc20/read/isERC20.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"isERC20.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/erc20/read/isERC20.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,kBAAkB,EAAE,MAAM,EAAE,WAgBnD"}
|
@@ -2,11 +2,40 @@
|
|
2
2
|
* A hook that returns the active wallet
|
3
3
|
* @returns The active `Wallet` or `undefined` if no active wallet is set.
|
4
4
|
* @example
|
5
|
+
*
|
6
|
+
* ### Basic usage
|
5
7
|
* ```jsx
|
6
8
|
* import { useActiveWallet } from "thirdweb/react";
|
7
9
|
*
|
8
10
|
* const wallet = useActiveWallet();
|
9
11
|
* ```
|
12
|
+
*
|
13
|
+
* ### Listen to account change event
|
14
|
+
* ```jsx
|
15
|
+
* const wallet = useActiveWallet();
|
16
|
+
*
|
17
|
+
* wallet?.subscribe("accountChanged", (account) => {
|
18
|
+
* console.log(account);
|
19
|
+
* });
|
20
|
+
* ```
|
21
|
+
*
|
22
|
+
* ### Listen to multiple accounts changed event
|
23
|
+
* ```jsx
|
24
|
+
* const wallet = useActiveWallet();
|
25
|
+
*
|
26
|
+
* wallet?.subscribe("accountsChanged", (addresses) => {
|
27
|
+
* console.log(addresses);
|
28
|
+
* });
|
29
|
+
* ```
|
30
|
+
*
|
31
|
+
* ### Listen to network change event
|
32
|
+
* ```jsx
|
33
|
+
* const wallet = useActiveWallet();
|
34
|
+
*
|
35
|
+
* wallet?.subscribe("chainChanged", (chain) => {
|
36
|
+
* console.log(chain);
|
37
|
+
* });
|
38
|
+
* ```
|
10
39
|
* @walletConnection
|
11
40
|
*/
|
12
41
|
export declare function useActiveWallet(): import("../../../../exports/wallets.js").Wallet | undefined;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useActiveWallet.d.ts","sourceRoot":"","sources":["../../../../../../src/react/core/hooks/wallets/useActiveWallet.ts"],"names":[],"mappings":"AAGA
|
1
|
+
{"version":3,"file":"useActiveWallet.d.ts","sourceRoot":"","sources":["../../../../../../src/react/core/hooks/wallets/useActiveWallet.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,eAAe,gEAI9B"}
|
package/dist/types/version.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "5.50.0-nightly-
|
1
|
+
export declare const version = "5.50.0-nightly-aa556f17b6a1de4b889e7f58cd13ca8a3cc41d71-20240903000507";
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "thirdweb",
|
3
|
-
"version": "5.50.0-nightly-
|
3
|
+
"version": "5.50.0-nightly-aa556f17b6a1de4b889e7f58cd13ca8a3cc41d71-20240903000507",
|
4
4
|
"repository": {
|
5
5
|
"type": "git",
|
6
6
|
"url": "git+https://github.com/thirdweb-dev/js.git#main"
|
@@ -204,7 +204,7 @@
|
|
204
204
|
"mipd": "0.0.7",
|
205
205
|
"node-libs-browser": "2.2.1",
|
206
206
|
"uqr": "0.1.2",
|
207
|
-
"viem": "2.
|
207
|
+
"viem": "2.21.1"
|
208
208
|
},
|
209
209
|
"peerDependencies": {
|
210
210
|
"@aws-sdk/client-lambda": "^3",
|
@@ -0,0 +1,62 @@
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
|
+
import { ANVIL_CHAIN } from "~test/chains.js";
|
3
|
+
import { TEST_CONTRACT_URI } from "~test/ipfs-uris.js";
|
4
|
+
import { TEST_CLIENT } from "~test/test-clients.js";
|
5
|
+
import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
|
6
|
+
import { getContract } from "../../../contract/contract.js";
|
7
|
+
import { sendAndConfirmTransaction } from "../../../transaction/actions/send-and-confirm-transaction.js";
|
8
|
+
import { deployERC1155Contract } from "../../prebuilts/deploy-erc1155.js";
|
9
|
+
import { mintTo } from "../write/mintTo.js";
|
10
|
+
import { getOwnedNFTs } from "./getOwnedNFTs.js";
|
11
|
+
|
12
|
+
const account = TEST_ACCOUNT_A;
|
13
|
+
const client = TEST_CLIENT;
|
14
|
+
const chain = ANVIL_CHAIN;
|
15
|
+
|
16
|
+
describe.runIf(process.env.TW_SECRET_KEY)("ERC1155 getOwnedTokenIds", () => {
|
17
|
+
it("should fetch owned tokenIds", async () => {
|
18
|
+
const address = await deployERC1155Contract({
|
19
|
+
type: "TokenERC1155",
|
20
|
+
chain,
|
21
|
+
client,
|
22
|
+
account,
|
23
|
+
params: {
|
24
|
+
name: "edition",
|
25
|
+
contractURI: TEST_CONTRACT_URI,
|
26
|
+
},
|
27
|
+
});
|
28
|
+
|
29
|
+
const contract = getContract({
|
30
|
+
address,
|
31
|
+
chain,
|
32
|
+
client,
|
33
|
+
});
|
34
|
+
|
35
|
+
const transaction = mintTo({
|
36
|
+
contract,
|
37
|
+
nft: { name: "token 0" },
|
38
|
+
to: account.address,
|
39
|
+
supply: 20n,
|
40
|
+
});
|
41
|
+
await sendAndConfirmTransaction({ transaction, account });
|
42
|
+
|
43
|
+
const ownedTokenIds = await getOwnedNFTs({
|
44
|
+
contract,
|
45
|
+
address: account.address,
|
46
|
+
});
|
47
|
+
|
48
|
+
expect(ownedTokenIds).toStrictEqual([
|
49
|
+
{
|
50
|
+
id: 0n,
|
51
|
+
metadata: {
|
52
|
+
name: "token 0",
|
53
|
+
},
|
54
|
+
owner: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
|
55
|
+
quantityOwned: 20n,
|
56
|
+
supply: 20n,
|
57
|
+
tokenURI: "ipfs://QmPZ6LpGqMuFbHKTXrNW1NRNLHf1nrxS4dtoFqdZZTKvPX/0",
|
58
|
+
type: "ERC1155",
|
59
|
+
},
|
60
|
+
]);
|
61
|
+
});
|
62
|
+
});
|
@@ -1,10 +1,17 @@
|
|
1
|
-
import
|
2
|
-
import {
|
1
|
+
import { isNameSupported } from "../../common/__generated__/IContractMetadata/read/name.js";
|
2
|
+
import { isSymbolSupported } from "../../common/__generated__/IContractMetadata/read/symbol.js";
|
3
|
+
import { isAllowanceSupported } from "../__generated__/IERC20/read/allowance.js";
|
4
|
+
import { isBalanceOfSupported } from "../__generated__/IERC20/read/balanceOf.js";
|
5
|
+
import { isDecimalsSupported } from "../__generated__/IERC20/read/decimals.js";
|
6
|
+
import { isTotalSupplySupported } from "../__generated__/IERC20/read/totalSupply.js";
|
7
|
+
import { isApproveSupported } from "../__generated__/IERC20/write/approve.js";
|
8
|
+
import { isTransferSupported } from "../__generated__/IERC20/write/transfer.js";
|
9
|
+
import { isTransferFromSupported } from "../__generated__/IERC20/write/transferFrom.js";
|
3
10
|
|
4
11
|
/**
|
5
|
-
* Check if a contract
|
12
|
+
* Check if a contract is an ERC20 token.
|
6
13
|
* @param options - The transaction options.
|
7
|
-
* @returns A boolean indicating whether the contract
|
14
|
+
* @returns A boolean indicating whether the contract is an ERC20 token.
|
8
15
|
* @extension ERC20
|
9
16
|
* @example
|
10
17
|
* ```ts
|
@@ -12,9 +19,20 @@ import { supportsInterface } from "../../erc165/__generated__/IERC165/read/suppo
|
|
12
19
|
* const result = await isERC20({ contract });
|
13
20
|
* ```
|
14
21
|
*/
|
15
|
-
export function isERC20(
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
export function isERC20(availableSelectors: string[]) {
|
23
|
+
// there is no trustworthy way to check if a contract is ERC20 via ERC165, so we do this manually.
|
24
|
+
// see: https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3575
|
25
|
+
// see: https://ethereum.org/en/developers/docs/standards/tokens/erc-20/
|
26
|
+
|
27
|
+
return [
|
28
|
+
isNameSupported(availableSelectors),
|
29
|
+
isSymbolSupported(availableSelectors),
|
30
|
+
isDecimalsSupported(availableSelectors),
|
31
|
+
isTotalSupplySupported(availableSelectors),
|
32
|
+
isBalanceOfSupported(availableSelectors),
|
33
|
+
isTransferSupported(availableSelectors),
|
34
|
+
isTransferFromSupported(availableSelectors),
|
35
|
+
isApproveSupported(availableSelectors),
|
36
|
+
isAllowanceSupported(availableSelectors),
|
37
|
+
].every(Boolean);
|
20
38
|
}
|
@@ -5,11 +5,40 @@ import { useConnectionManagerCtx } from "../../providers/connection-manager.js";
|
|
5
5
|
* A hook that returns the active wallet
|
6
6
|
* @returns The active `Wallet` or `undefined` if no active wallet is set.
|
7
7
|
* @example
|
8
|
+
*
|
9
|
+
* ### Basic usage
|
8
10
|
* ```jsx
|
9
11
|
* import { useActiveWallet } from "thirdweb/react";
|
10
12
|
*
|
11
13
|
* const wallet = useActiveWallet();
|
12
14
|
* ```
|
15
|
+
*
|
16
|
+
* ### Listen to account change event
|
17
|
+
* ```jsx
|
18
|
+
* const wallet = useActiveWallet();
|
19
|
+
*
|
20
|
+
* wallet?.subscribe("accountChanged", (account) => {
|
21
|
+
* console.log(account);
|
22
|
+
* });
|
23
|
+
* ```
|
24
|
+
*
|
25
|
+
* ### Listen to multiple accounts changed event
|
26
|
+
* ```jsx
|
27
|
+
* const wallet = useActiveWallet();
|
28
|
+
*
|
29
|
+
* wallet?.subscribe("accountsChanged", (addresses) => {
|
30
|
+
* console.log(addresses);
|
31
|
+
* });
|
32
|
+
* ```
|
33
|
+
*
|
34
|
+
* ### Listen to network change event
|
35
|
+
* ```jsx
|
36
|
+
* const wallet = useActiveWallet();
|
37
|
+
*
|
38
|
+
* wallet?.subscribe("chainChanged", (chain) => {
|
39
|
+
* console.log(chain);
|
40
|
+
* });
|
41
|
+
* ```
|
13
42
|
* @walletConnection
|
14
43
|
*/
|
15
44
|
export function useActiveWallet() {
|
package/src/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = "5.50.0-nightly-
|
1
|
+
export const version = "5.50.0-nightly-aa556f17b6a1de4b889e7f58cd13ca8a3cc41d71-20240903000507";
|