thirdweb 5.50.0-nightly-5475551e5de0750ff1b780522cb01e974a828dd2-20240902000412 → 5.50.0
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/merkletree/MerkleTree.js +1 -1
- package/dist/cjs/merkletree/MerkleTree.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/utils/extensions/drops/fetch-proofs-for-claimers.js +3 -3
- package/dist/cjs/utils/extensions/drops/fetch-proofs-for-claimers.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +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/merkletree/MerkleTree.js +1 -1
- package/dist/esm/merkletree/MerkleTree.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/utils/extensions/drops/fetch-proofs-for-claimers.js +4 -4
- package/dist/esm/utils/extensions/drops/fetch-proofs-for-claimers.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +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/dist/types/version.d.ts.map +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/merkletree/MerkleTree.test.ts +30 -0
- package/src/merkletree/MerkleTree.ts +1 -1
- package/src/react/core/hooks/wallets/useActiveWallet.ts +29 -0
- package/src/utils/extensions/drops/fetch-proofs-for-claimers.ts +4 -4
- 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"}
|
@@ -25,7 +25,7 @@ class MerkleTree {
|
|
25
25
|
value: []
|
26
26
|
});
|
27
27
|
this.leaves = leaves.map((el) => el instanceof Uint8Array ? el : (0, to_bytes_js_1.hexToBytes)(el));
|
28
|
-
this.leaves = this.leaves.sort();
|
28
|
+
this.leaves = this.leaves.sort(uint8_array_js_1.compareUint8Arrays);
|
29
29
|
this.createHashes(this.leaves);
|
30
30
|
}
|
31
31
|
getHexRoot() {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MerkleTree.js","sourceRoot":"","sources":["../../../src/merkletree/MerkleTree.ts"],"names":[],"mappings":";;;AAAA,4DAA4D;AAC5D,qDAAqE;AACrE,+DAA2D;AAC3D,gEAA0D;AAC1D,4DAIiC;AAOjC;;;GAGG;AACH,MAAa,UAAU;IAIrB,YAAY,MAA4B;QAHhC;;;;mBAAkB,EAAE;WAAC;QACrB;;;;mBAAmB,EAAE;WAAC;QAG5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC9B,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,wBAAU,EAAC,EAAE,CAAC,CAC/C,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,
|
1
|
+
{"version":3,"file":"MerkleTree.js","sourceRoot":"","sources":["../../../src/merkletree/MerkleTree.ts"],"names":[],"mappings":"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"}
|
@@ -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"}
|
@@ -51,8 +51,8 @@ async function fetchProofsForClaimer(options) {
|
|
51
51
|
tokenDecimals: options.tokenDecimals,
|
52
52
|
});
|
53
53
|
}));
|
54
|
-
const tree = new MerkleTree_js_1.MerkleTree(hashedEntries);
|
55
54
|
// 5. get the proof for the claimer + the sub merkle tree root
|
55
|
+
const tree = new MerkleTree_js_1.MerkleTree(hashedEntries);
|
56
56
|
const entry = shardData.entries.find((i) => i.address.toLowerCase() === claimer.toLowerCase());
|
57
57
|
if (!entry) {
|
58
58
|
return null;
|
@@ -66,10 +66,10 @@ async function fetchProofsForClaimer(options) {
|
|
66
66
|
}))
|
67
67
|
.concat(shardData.proofs);
|
68
68
|
// 6. return the proof and the entry data for the contract call
|
69
|
-
const currencyAddress = (entry.currencyAddress || addresses_js_1.
|
69
|
+
const currencyAddress = (entry.currencyAddress || addresses_js_1.ZERO_ADDRESS);
|
70
70
|
const currencyDecimals = await (async () => {
|
71
71
|
if ((0, addresses_js_1.isNativeTokenAddress)(currencyAddress) ||
|
72
|
-
currencyAddress === addresses_js_1.
|
72
|
+
currencyAddress === addresses_js_1.ZERO_ADDRESS) {
|
73
73
|
return 18;
|
74
74
|
}
|
75
75
|
const [{ getContract }, { decimals: getDecimals }] = await Promise.all([
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"fetch-proofs-for-claimers.js","sourceRoot":"","sources":["../../../../../src/utils/extensions/drops/fetch-proofs-for-claimers.ts"],"names":[],"mappings":";;AAiBA,sDAyGC;AA1HD,kEAGyC;AAEzC,mGAA6F;AAC7F,qEAA+D;AAC/D,8DAAwD;AAExD,+DAAwD;AACxD,mDAA4C;AAOrC,KAAK,UAAU,qBAAqB,CAAC,OAK3C;IACC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAClD,yCAAyC;IACzC,MAAM,QAAQ,GAAG,MAAM,IAAA,4CAAmB,EAAC;QACzC,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,UAAU,GAA2B,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;IACjE,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAE3C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,IAAA,sBAAQ,EAAC;QAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG,EAAE,WAAW;KACjB,CAAC,CAAC;IACH,MAAM,UAAU,GAA0B,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhE,oDAAoD;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5E,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC1C,CAAC,CAAC,UAAU,CAAC,OAAO;QACpB,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC;IAC7B,IAAI,SAAoB,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG,GAAG,GAAG,GAAG,OAAO,OAAO,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,IAAA,sBAAQ,EAAC;YAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,GAAG,EAAE,mBAAmB;SACzB,CAAC,CAAC;QACH,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0EAA0E;IAC1E,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACpC,OAAO,IAAA,yBAAS,EAAC;YACf,KAAK;YACL,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,0BAAU,CAAC,aAAa,CAAC,CAAC;IAC3C,
|
1
|
+
{"version":3,"file":"fetch-proofs-for-claimers.js","sourceRoot":"","sources":["../../../../../src/utils/extensions/drops/fetch-proofs-for-claimers.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/version.js
CHANGED
package/dist/cjs/version.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC"}
|
@@ -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"}
|
@@ -22,7 +22,7 @@ export class MerkleTree {
|
|
22
22
|
value: []
|
23
23
|
});
|
24
24
|
this.leaves = leaves.map((el) => el instanceof Uint8Array ? el : hexToBytes(el));
|
25
|
-
this.leaves = this.leaves.sort();
|
25
|
+
this.leaves = this.leaves.sort(compareUint8Arrays);
|
26
26
|
this.createHashes(this.leaves);
|
27
27
|
}
|
28
28
|
getHexRoot() {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MerkleTree.js","sourceRoot":"","sources":["../../../src/merkletree/MerkleTree.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAY,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAOjC;;;GAGG;AACH,MAAM,OAAO,UAAU;IAIrB,YAAY,MAA4B;QAHhC;;;;mBAAkB,EAAE;WAAC;QACrB;;;;mBAAmB,EAAE;WAAC;QAG5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC9B,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAC/C,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,
|
1
|
+
{"version":3,"file":"MerkleTree.js","sourceRoot":"","sources":["../../../src/merkletree/MerkleTree.ts"],"names":[],"mappings":"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"}
|
@@ -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"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { ZERO_ADDRESS, isNativeTokenAddress, } from "../../../constants/addresses.js";
|
2
2
|
import { getContractMetadata } from "../../../extensions/common/read/getContractMetadata.js";
|
3
3
|
import { MerkleTree } from "../../../merkletree/MerkleTree.js";
|
4
4
|
import { download } from "../../../storage/download.js";
|
@@ -48,8 +48,8 @@ export async function fetchProofsForClaimer(options) {
|
|
48
48
|
tokenDecimals: options.tokenDecimals,
|
49
49
|
});
|
50
50
|
}));
|
51
|
-
const tree = new MerkleTree(hashedEntries);
|
52
51
|
// 5. get the proof for the claimer + the sub merkle tree root
|
52
|
+
const tree = new MerkleTree(hashedEntries);
|
53
53
|
const entry = shardData.entries.find((i) => i.address.toLowerCase() === claimer.toLowerCase());
|
54
54
|
if (!entry) {
|
55
55
|
return null;
|
@@ -63,10 +63,10 @@ export async function fetchProofsForClaimer(options) {
|
|
63
63
|
}))
|
64
64
|
.concat(shardData.proofs);
|
65
65
|
// 6. return the proof and the entry data for the contract call
|
66
|
-
const currencyAddress = (entry.currencyAddress ||
|
66
|
+
const currencyAddress = (entry.currencyAddress || ZERO_ADDRESS);
|
67
67
|
const currencyDecimals = await (async () => {
|
68
68
|
if (isNativeTokenAddress(currencyAddress) ||
|
69
|
-
currencyAddress ===
|
69
|
+
currencyAddress === ZERO_ADDRESS) {
|
70
70
|
return 18;
|
71
71
|
}
|
72
72
|
const [{ getContract }, { decimals: getDecimals }] = await Promise.all([
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"fetch-proofs-for-claimers.js","sourceRoot":"","sources":["../../../../../src/utils/extensions/drops/fetch-proofs-for-claimers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,oBAAoB,GACrB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wDAAwD,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO5C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAK3C;IACC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAClD,yCAAyC;IACzC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC;QACzC,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,UAAU,GAA2B,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;IACjE,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAE3C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC;QAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG,EAAE,WAAW;KACjB,CAAC,CAAC;IACH,MAAM,UAAU,GAA0B,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhE,oDAAoD;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5E,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC1C,CAAC,CAAC,UAAU,CAAC,OAAO;QACpB,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC;IAC7B,IAAI,SAAoB,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG,GAAG,GAAG,GAAG,OAAO,OAAO,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC;YAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,GAAG,EAAE,mBAAmB;SACzB,CAAC,CAAC;QACH,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0EAA0E;IAC1E,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACpC,OAAO,SAAS,CAAC;YACf,KAAK;YACL,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3C,
|
1
|
+
{"version":3,"file":"fetch-proofs-for-claimers.js","sourceRoot":"","sources":["../../../../../src/utils/extensions/drops/fetch-proofs-for-claimers.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export const version = "5.50.0
|
1
|
+
export const version = "5.50.0";
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/dist/esm/version.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC"}
|
@@ -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
|
1
|
+
export declare const version = "5.50.0";
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "thirdweb",
|
3
|
-
"version": "5.50.0
|
3
|
+
"version": "5.50.0",
|
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
|
}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
2
|
+
import type { Hex } from "../utils/encoding/hex.js";
|
2
3
|
import { stringToBytes } from "../utils/encoding/to-bytes.js";
|
3
4
|
import { MerkleTree } from "./MerkleTree.js";
|
4
5
|
|
@@ -14,6 +15,35 @@ describe("MerkleTree", () => {
|
|
14
15
|
`"0xebd2ffa91ce49e68a5ae1283e5babdf2655f8ea9ea0ee36ed525cc41d171a882"`,
|
15
16
|
);
|
16
17
|
});
|
18
|
+
|
19
|
+
it("should return root for large merkle trees", () => {
|
20
|
+
const leaves: Hex[] = [
|
21
|
+
"0xe1b12834247548c6bf6a9d37d2090a5f41beda62be633f705bc7c6e924342b4d",
|
22
|
+
"0x232570d6677f4e4b8947d8369750a4da492511d19e104db19dfae1200c3ff4db",
|
23
|
+
"0xe30d909533984527552083c16f23927cb9928c2e01b7252989f1c4fb9714deca",
|
24
|
+
"0xd13d5d1bf095147532482f25aac6d72905850864aab58f9dac28beb655dc4726",
|
25
|
+
"0xa0eea66d581045e22cbeccd59027e62b5d753fd3118f068b444bceec601be03f",
|
26
|
+
"0x222cd80957bf16ed8ce63a492a5035830cc2bfe04e2d46cc28e3aacb5db1277a",
|
27
|
+
"0xb1525c3a1a9d0fa632857acd0216609a80c19293fc3273f4cac664ca49a9e323",
|
28
|
+
"0x18b19c2a11bd54e98cc841bc8863d3e8582da3dd21903aedfe6745d41083653b",
|
29
|
+
"0xc198129437401b73388fa41dfaa82457015716050c6632364a1db94db1f0fb19",
|
30
|
+
"0x7621bd1c73bb5d8487459d8be36c5445a65a7fda457972d7f9de22a826739281",
|
31
|
+
"0x1cc9ca923d763f8de998921de43da79d6415eaff9b875e3e619c246fc26160b7",
|
32
|
+
"0xb4526c4f954e3230701cb7a392081007c050e950d886a25bac5fb14e3639e258",
|
33
|
+
"0x7d00f9a67344ed46afab13a398ea4bbf40915283f08f5caaf7d128a836361943",
|
34
|
+
"0xb11d4116f885aa50e9e9cbddf61b4d582413cd959302c68bfc0430fe8d5f609b",
|
35
|
+
"0xd474bee9ba879f0e0ae0827601642460e5439b4c3acb69da07b77ae2779a4eb2",
|
36
|
+
"0xb2b902dfab66d5dbee090467f02abd14c49e11f92a7d58fda53982f006f4360c",
|
37
|
+
"0x7ed8ec6456a2418c91d362f5ef5b4865d68a1df05722fe0fa9ecf23e0fc7e935",
|
38
|
+
"0xb1efbe628e4a0062c6f241f2ccd3663269fafb4305d2cbe33c6f94d0aea8e195",
|
39
|
+
];
|
40
|
+
const merkleTree = new MerkleTree(leaves);
|
41
|
+
const hexProof = merkleTree.getHexRoot();
|
42
|
+
|
43
|
+
expect(hexProof).toBe(
|
44
|
+
"0x58053466a63f980211c457688c927035d61a7717b7744afe3758138ce66a6fda",
|
45
|
+
);
|
46
|
+
});
|
17
47
|
});
|
18
48
|
|
19
49
|
describe("getHexProof", () => {
|
@@ -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() {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import {
|
2
|
-
|
2
|
+
ZERO_ADDRESS,
|
3
3
|
isNativeTokenAddress,
|
4
4
|
} from "../../../constants/addresses.js";
|
5
5
|
import type { ThirdwebContract } from "../../../contract/contract.js";
|
@@ -69,8 +69,8 @@ export async function fetchProofsForClaimer(options: {
|
|
69
69
|
});
|
70
70
|
}),
|
71
71
|
);
|
72
|
-
const tree = new MerkleTree(hashedEntries);
|
73
72
|
// 5. get the proof for the claimer + the sub merkle tree root
|
73
|
+
const tree = new MerkleTree(hashedEntries);
|
74
74
|
const entry = shardData.entries.find(
|
75
75
|
(i) => i.address.toLowerCase() === claimer.toLowerCase(),
|
76
76
|
);
|
@@ -88,11 +88,11 @@ export async function fetchProofsForClaimer(options: {
|
|
88
88
|
)
|
89
89
|
.concat(shardData.proofs);
|
90
90
|
// 6. return the proof and the entry data for the contract call
|
91
|
-
const currencyAddress = (entry.currencyAddress ||
|
91
|
+
const currencyAddress = (entry.currencyAddress || ZERO_ADDRESS) as Address;
|
92
92
|
const currencyDecimals = await (async () => {
|
93
93
|
if (
|
94
94
|
isNativeTokenAddress(currencyAddress) ||
|
95
|
-
currencyAddress ===
|
95
|
+
currencyAddress === ZERO_ADDRESS
|
96
96
|
) {
|
97
97
|
return 18;
|
98
98
|
}
|
package/src/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = "5.50.0
|
1
|
+
export const version = "5.50.0";
|