thirdweb 5.61.2 → 5.61.3
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/erc721/read/getNFT.js +1 -1
- package/dist/cjs/extensions/erc721/read/getNFT.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/wallets/smart/lib/calls.js +8 -3
- package/dist/cjs/wallets/smart/lib/calls.js.map +1 -1
- package/dist/esm/extensions/erc721/read/getNFT.js +1 -1
- package/dist/esm/extensions/erc721/read/getNFT.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/wallets/smart/lib/calls.js +9 -4
- package/dist/esm/wallets/smart/lib/calls.js.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/wallets/smart/lib/calls.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/extensions/erc721/read/getNFT.test.ts +66 -0
- package/src/extensions/erc721/read/getNFT.ts +1 -1
- package/src/extensions/erc721/read/getNFTs.test.ts +44 -2
- package/src/extensions/erc721/read/getOwnedTokenIds.test.ts +15 -1
- package/src/version.ts +1 -1
- package/src/wallets/smart/lib/calls.ts +11 -4
- package/src/wallets/smart/smart-wallet-integration.test.ts +4 -6
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getNFT.js","sourceRoot":"","sources":["../../../../../src/extensions/erc721/read/getNFT.ts"],"names":[],"mappings":";;;AAsCA,wBA6CC;AAlFD,oFAA8E;AAC9E,gEAAoE;AAEpE,4EAGoD;AAEpD,0EAAsG;AAA7F,gHAAA,mBAAmB,OAAqB;AAejD;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,MAAM,CAC1B,OAA6C;IAE7C,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrC,IAAA,sBAAQ,EAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACnC,OAAO,CAAC,YAAY;YAClB,CAAC,CAAC,qCAAO,2CAA2C,GAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAC/B,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YACtB,CAAC,CAAC,IAAI;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,EAAE,CAAC;
|
1
|
+
{"version":3,"file":"getNFT.js","sourceRoot":"","sources":["../../../../../src/extensions/erc721/read/getNFT.ts"],"names":[],"mappings":";;;AAsCA,wBA6CC;AAlFD,oFAA8E;AAC9E,gEAAoE;AAEpE,4EAGoD;AAEpD,0EAAsG;AAA7F,gHAAA,mBAAmB,OAAqB;AAejD;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,MAAM,CAC1B,OAA6C;IAE7C,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrC,IAAA,sBAAQ,EAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACnC,OAAO,CAAC,YAAY;YAClB,CAAC,CAAC,qCAAO,2CAA2C,GAC/C,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAC/B,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YACtB,CAAC,CAAC,IAAI;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;QACjB,OAAO,IAAA,sBAAQ,EACb;YACE,EAAE,EAAE,OAAO,CAAC,OAAO;YACnB,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,EAAE;SACR,EACD;YACE,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,KAAK;SACN,CACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAA,sBAAQ,EACb,MAAM,IAAA,0CAAkB,EAAC;QACvB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;QAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,GAAG;KACd,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACd,EAAE,EAAE,OAAO,CAAC,OAAO;QACnB,IAAI,EAAE,QAAQ;QACd,GAAG;KACJ,CAAC,CAAC,EACH;QACE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,QAAQ;QACd,KAAK;KACN,CACF,CAAC;AACJ,CAAC"}
|
package/dist/cjs/version.js
CHANGED
@@ -34,11 +34,13 @@ async function predictAddress(args) {
|
|
34
34
|
if (!adminAddress) {
|
35
35
|
throw new Error("Account address is required to predict the smart wallet address.");
|
36
36
|
}
|
37
|
-
const
|
37
|
+
const saltHex = accountSalt && (0, hex_js_1.isHex)(accountSalt)
|
38
|
+
? accountSalt
|
39
|
+
: (0, hex_js_1.stringToHex)(accountSalt ?? "");
|
38
40
|
return (0, read_contract_js_1.readContract)({
|
39
41
|
contract: factoryContract,
|
40
42
|
method: "function getAddress(address, bytes) returns (address)",
|
41
|
-
params: [adminAddress,
|
43
|
+
params: [adminAddress, saltHex],
|
42
44
|
});
|
43
45
|
}
|
44
46
|
/**
|
@@ -49,10 +51,13 @@ function prepareCreateAccount(args) {
|
|
49
51
|
if (createAccount) {
|
50
52
|
return createAccount(factoryContract);
|
51
53
|
}
|
54
|
+
const saltHex = accountSalt && (0, hex_js_1.isHex)(accountSalt)
|
55
|
+
? accountSalt
|
56
|
+
: (0, hex_js_1.stringToHex)(accountSalt ?? "");
|
52
57
|
return (0, prepare_contract_call_js_1.prepareContractCall)({
|
53
58
|
contract: factoryContract,
|
54
59
|
method: "function createAccount(address, bytes) returns (address)",
|
55
|
-
params: [adminAddress,
|
60
|
+
params: [adminAddress, saltHex],
|
56
61
|
});
|
57
62
|
}
|
58
63
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../../../src/wallets/smart/lib/calls.ts"],"names":[],"mappings":";;AAuBA,
|
1
|
+
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../../../src/wallets/smart/lib/calls.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getNFT.js","sourceRoot":"","sources":["../../../../../src/extensions/erc721/read/getNFT.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAY,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAEL,QAAQ,GACT,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,mBAAmB,IAAI,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAetG;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAA6C;IAE7C,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACnC,OAAO,CAAC,YAAY;YAClB,CAAC,CAAC,MAAM,CAAC,2CAA2C,CAAC;iBAChD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAC/B,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YACtB,CAAC,CAAC,IAAI;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,EAAE,CAAC;
|
1
|
+
{"version":3,"file":"getNFT.js","sourceRoot":"","sources":["../../../../../src/extensions/erc721/read/getNFT.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAY,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAEL,QAAQ,GACT,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,mBAAmB,IAAI,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAetG;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAA6C;IAE7C,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACnC,OAAO,CAAC,YAAY;YAClB,CAAC,CAAC,MAAM,CAAC,2CAA2C,CAAC;iBAChD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAC/B,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YACtB,CAAC,CAAC,IAAI;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;QACjB,OAAO,QAAQ,CACb;YACE,EAAE,EAAE,OAAO,CAAC,OAAO;YACnB,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,EAAE;SACR,EACD;YACE,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,KAAK;SACN,CACF,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CACb,MAAM,kBAAkB,CAAC;QACvB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;QAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,GAAG;KACd,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACd,EAAE,EAAE,OAAO,CAAC,OAAO;QACnB,IAAI,EAAE,QAAQ;QACd,GAAG;KACJ,CAAC,CAAC,EACH;QACE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,QAAQ;QACd,KAAK;KACN,CACF,CAAC;AACJ,CAAC"}
|
package/dist/esm/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export const version = "5.61.
|
1
|
+
export const version = "5.61.3";
|
2
2
|
//# sourceMappingURL=version.js.map
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { prepareContractCall } from "../../../transaction/prepare-contract-call.js";
|
2
2
|
import { readContract } from "../../../transaction/read-contract.js";
|
3
|
-
import { stringToHex } from "../../../utils/encoding/hex.js";
|
3
|
+
import { isHex, stringToHex } from "../../../utils/encoding/hex.js";
|
4
4
|
/**
|
5
5
|
* Predict the address of a smart account.
|
6
6
|
* @param args - The options for predicting the address of a smart account.
|
@@ -28,11 +28,13 @@ export async function predictAddress(args) {
|
|
28
28
|
if (!adminAddress) {
|
29
29
|
throw new Error("Account address is required to predict the smart wallet address.");
|
30
30
|
}
|
31
|
-
const
|
31
|
+
const saltHex = accountSalt && isHex(accountSalt)
|
32
|
+
? accountSalt
|
33
|
+
: stringToHex(accountSalt ?? "");
|
32
34
|
return readContract({
|
33
35
|
contract: factoryContract,
|
34
36
|
method: "function getAddress(address, bytes) returns (address)",
|
35
|
-
params: [adminAddress,
|
37
|
+
params: [adminAddress, saltHex],
|
36
38
|
});
|
37
39
|
}
|
38
40
|
/**
|
@@ -43,10 +45,13 @@ export function prepareCreateAccount(args) {
|
|
43
45
|
if (createAccount) {
|
44
46
|
return createAccount(factoryContract);
|
45
47
|
}
|
48
|
+
const saltHex = accountSalt && isHex(accountSalt)
|
49
|
+
? accountSalt
|
50
|
+
: stringToHex(accountSalt ?? "");
|
46
51
|
return prepareContractCall({
|
47
52
|
contract: factoryContract,
|
48
53
|
method: "function createAccount(address, bytes) returns (address)",
|
49
|
-
params: [adminAddress,
|
54
|
+
params: [adminAddress, saltHex],
|
50
55
|
});
|
51
56
|
}
|
52
57
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../../../src/wallets/smart/lib/calls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;
|
1
|
+
{"version":3,"file":"calls.js","sourceRoot":"","sources":["../../../../../src/wallets/smart/lib/calls.ts"],"names":[],"mappings":"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"}
|
package/dist/types/version.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "5.61.
|
1
|
+
export declare const version = "5.61.3";
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../../../../src/wallets/smart/lib/calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAGvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,eAAe,EAAE,gBAAgB,CAAC;IAClC,sBAAsB,CAAC,EAAE,CACvB,eAAe,EAAE,gBAAgB,KAC9B,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,CAAC,
|
1
|
+
{"version":3,"file":"calls.d.ts","sourceRoot":"","sources":["../../../../../src/wallets/smart/lib/calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAGvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,eAAe,EAAE,gBAAgB,CAAC;IAClC,sBAAsB,CAAC,EAAE,CACvB,eAAe,EAAE,gBAAgB,KAC9B,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BlB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,eAAe,EAAE,gBAAgB,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,CACtB,eAAe,EAAE,gBAAgB,KAC9B,mBAAmB,CAAC;CAC1B,GAAG,mBAAmB,CAmBtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,eAAe,EAAE,gBAAgB,CAAC;IAClC,WAAW,EAAE,qBAAqB,CAAC;IACnC,eAAe,CAAC,EAAE,CAChB,eAAe,EAAE,gBAAgB,EACjC,WAAW,EAAE,qBAAqB,KAC/B,mBAAmB,CAAC;CAC1B,GAAG,mBAAmB,CAkBtB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,eAAe,EAAE,gBAAgB,CAAC;IAClC,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,oBAAoB,CAAC,EAAE,CACrB,eAAe,EAAE,gBAAgB,EACjC,YAAY,EAAE,qBAAqB,EAAE,KAClC,mBAAmB,CAAC;CAC1B,GAAG,mBAAmB,CAkBtB"}
|
package/package.json
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
2
2
|
|
3
|
+
import { ANVIL_CHAIN } from "~test/chains.js";
|
4
|
+
import { TEST_CONTRACT_URI } from "~test/ipfs-uris.js";
|
5
|
+
import { TEST_CLIENT } from "~test/test-clients.js";
|
3
6
|
import { DOODLES_CONTRACT } from "~test/test-contracts.js";
|
7
|
+
import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
|
8
|
+
import { getContract } from "../../../contract/contract.js";
|
9
|
+
import { deployERC721Contract } from "../../../extensions/prebuilts/deploy-erc721.js";
|
10
|
+
import { sendAndConfirmTransaction } from "../../../transaction/actions/send-and-confirm-transaction.js";
|
11
|
+
import { parseNFT } from "../../../utils/nft/parseNft.js";
|
12
|
+
import { setTokenURI } from "../__generated__/INFTMetadata/write/setTokenURI.js";
|
13
|
+
import { mintTo } from "../write/mintTo.js";
|
4
14
|
import { getNFT } from "./getNFT.js";
|
5
15
|
|
6
16
|
describe.runIf(process.env.TW_SECRET_KEY)("erc721.getNFT", () => {
|
@@ -89,4 +99,60 @@ describe.runIf(process.env.TW_SECRET_KEY)("erc721.getNFT", () => {
|
|
89
99
|
}
|
90
100
|
`);
|
91
101
|
});
|
102
|
+
|
103
|
+
it("should return a default value if the URI of the token doesn't exist", async () => {
|
104
|
+
/**
|
105
|
+
* To create this test scenario, we first deploy an NFTCollection/Edition contract,
|
106
|
+
* mint a token, then purposefully change that token's URI to an empty string, using setTokenURI
|
107
|
+
*/
|
108
|
+
const contract = getContract({
|
109
|
+
address: await deployERC721Contract({
|
110
|
+
chain: ANVIL_CHAIN,
|
111
|
+
client: TEST_CLIENT,
|
112
|
+
account: TEST_ACCOUNT_A,
|
113
|
+
type: "TokenERC721",
|
114
|
+
params: {
|
115
|
+
name: "",
|
116
|
+
contractURI: TEST_CONTRACT_URI,
|
117
|
+
},
|
118
|
+
}),
|
119
|
+
chain: ANVIL_CHAIN,
|
120
|
+
client: TEST_CLIENT,
|
121
|
+
});
|
122
|
+
|
123
|
+
await sendAndConfirmTransaction({
|
124
|
+
transaction: mintTo({
|
125
|
+
contract,
|
126
|
+
nft: { name: "token 0" },
|
127
|
+
to: TEST_ACCOUNT_A.address,
|
128
|
+
}),
|
129
|
+
account: TEST_ACCOUNT_A,
|
130
|
+
});
|
131
|
+
|
132
|
+
await sendAndConfirmTransaction({
|
133
|
+
transaction: setTokenURI({
|
134
|
+
contract,
|
135
|
+
tokenId: 0n,
|
136
|
+
// Need to have some spaces because NFTMetadata.sol does not allow to update an empty valud
|
137
|
+
uri: " ",
|
138
|
+
}),
|
139
|
+
account: TEST_ACCOUNT_A,
|
140
|
+
});
|
141
|
+
|
142
|
+
expect(await getNFT({ contract, tokenId: 0n })).toStrictEqual(
|
143
|
+
parseNFT(
|
144
|
+
{
|
145
|
+
id: 0n,
|
146
|
+
type: "ERC721",
|
147
|
+
uri: "",
|
148
|
+
},
|
149
|
+
{
|
150
|
+
tokenId: 0n,
|
151
|
+
tokenUri: "",
|
152
|
+
type: "ERC721",
|
153
|
+
owner: null,
|
154
|
+
},
|
155
|
+
),
|
156
|
+
);
|
157
|
+
});
|
92
158
|
});
|
@@ -1,6 +1,17 @@
|
|
1
|
+
import { type Abi, toFunctionSelector } from "viem";
|
1
2
|
import { describe, expect, it } from "vitest";
|
2
|
-
|
3
|
-
import {
|
3
|
+
import { ANVIL_CHAIN } from "~test/chains.js";
|
4
|
+
import { TEST_CONTRACT_URI } from "~test/ipfs-uris.js";
|
5
|
+
import { TEST_CLIENT } from "~test/test-clients.js";
|
6
|
+
import {
|
7
|
+
DOODLES_CONTRACT,
|
8
|
+
UNISWAPV3_FACTORY_CONTRACT,
|
9
|
+
} from "~test/test-contracts.js";
|
10
|
+
import { TEST_ACCOUNT_B } from "~test/test-wallets.js";
|
11
|
+
import { resolveContractAbi } from "../../../contract/actions/resolve-abi.js";
|
12
|
+
import { getContract } from "../../../contract/contract.js";
|
13
|
+
import { deployERC721Contract } from "../../../extensions/prebuilts/deploy-erc721.js";
|
14
|
+
import { isGetNFTSupported } from "./getNFT.js";
|
4
15
|
import { getNFTs } from "./getNFTs.js";
|
5
16
|
|
6
17
|
describe.runIf(process.env.TW_SECRET_KEY)("erc721.getNFTs", () => {
|
@@ -185,4 +196,35 @@ describe.runIf(process.env.TW_SECRET_KEY)("erc721.getNFTs", () => {
|
|
185
196
|
it.todo("works for a contract with `1` indexed NFTs", async () => {
|
186
197
|
// TODO find a contract that we can use that has "1 indexed" NFTs, then re-enable this test
|
187
198
|
});
|
199
|
+
|
200
|
+
it("isGetNFTsSupported should work", async () => {
|
201
|
+
const contract = getContract({
|
202
|
+
address: await deployERC721Contract({
|
203
|
+
chain: ANVIL_CHAIN,
|
204
|
+
client: TEST_CLIENT,
|
205
|
+
type: "TokenERC721",
|
206
|
+
params: {
|
207
|
+
name: "",
|
208
|
+
contractURI: TEST_CONTRACT_URI,
|
209
|
+
},
|
210
|
+
account: TEST_ACCOUNT_B,
|
211
|
+
}),
|
212
|
+
chain: ANVIL_CHAIN,
|
213
|
+
client: TEST_CLIENT,
|
214
|
+
});
|
215
|
+
|
216
|
+
const abi = await resolveContractAbi<Abi>(contract);
|
217
|
+
const selectors = abi
|
218
|
+
.filter((f) => f.type === "function")
|
219
|
+
.map((f) => toFunctionSelector(f));
|
220
|
+
expect(isGetNFTSupported(selectors)).toBe(true);
|
221
|
+
});
|
222
|
+
|
223
|
+
it("should throw error if totalSupply and nextTokenIdToMint are not supported", async () => {
|
224
|
+
await expect(() =>
|
225
|
+
getNFTs({ contract: UNISWAPV3_FACTORY_CONTRACT }),
|
226
|
+
).rejects.toThrowError(
|
227
|
+
"Contract requires either `nextTokenIdToMint` or `totalSupply` function available to determine the next token ID to mint",
|
228
|
+
);
|
229
|
+
});
|
188
230
|
});
|
@@ -1,5 +1,9 @@
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
2
|
-
import {
|
2
|
+
import {
|
3
|
+
DOODLES_CONTRACT,
|
4
|
+
UNISWAPV3_FACTORY_CONTRACT,
|
5
|
+
} from "~test/test-contracts.js";
|
6
|
+
import { TEST_ACCOUNT_B } from "~test/test-wallets.js";
|
3
7
|
import { getOwnedTokenIds } from "./getOwnedTokenIds.js";
|
4
8
|
|
5
9
|
describe.runIf(process.env.TW_SECRET_KEY)("erc721.getOwnedTokenIds", () => {
|
@@ -14,4 +18,14 @@ describe.runIf(process.env.TW_SECRET_KEY)("erc721.getOwnedTokenIds", () => {
|
|
14
18
|
// so the data should not change
|
15
19
|
expect(tokenIds.length).toBe(81);
|
16
20
|
});
|
21
|
+
|
22
|
+
it("should throw if tokenOfOwnerByIndex or tokensOfOwner not supported", async () => {
|
23
|
+
// We know current Lens contract on Polygon doesn't have this.
|
24
|
+
const contract = UNISWAPV3_FACTORY_CONTRACT;
|
25
|
+
await expect(() =>
|
26
|
+
getOwnedTokenIds({ contract, owner: TEST_ACCOUNT_B.address }),
|
27
|
+
).rejects.toThrowError(
|
28
|
+
`The contract at ${contract.address} on chain ${contract.chain.id} does not support the tokenOfOwnerByIndex or tokensOfOwner interface`,
|
29
|
+
);
|
30
|
+
});
|
17
31
|
});
|
package/src/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = "5.61.
|
1
|
+
export const version = "5.61.3";
|
@@ -2,7 +2,7 @@ import type { ThirdwebContract } from "../../../contract/contract.js";
|
|
2
2
|
import { prepareContractCall } from "../../../transaction/prepare-contract-call.js";
|
3
3
|
import type { PreparedTransaction } from "../../../transaction/prepare-transaction.js";
|
4
4
|
import { readContract } from "../../../transaction/read-contract.js";
|
5
|
-
import { stringToHex } from "../../../utils/encoding/hex.js";
|
5
|
+
import { isHex, stringToHex } from "../../../utils/encoding/hex.js";
|
6
6
|
import type { SendTransactionOption } from "../../interfaces/wallet.js";
|
7
7
|
|
8
8
|
/**
|
@@ -48,11 +48,14 @@ export async function predictAddress(args: {
|
|
48
48
|
"Account address is required to predict the smart wallet address.",
|
49
49
|
);
|
50
50
|
}
|
51
|
-
const
|
51
|
+
const saltHex =
|
52
|
+
accountSalt && isHex(accountSalt)
|
53
|
+
? accountSalt
|
54
|
+
: stringToHex(accountSalt ?? "");
|
52
55
|
return readContract({
|
53
56
|
contract: factoryContract,
|
54
57
|
method: "function getAddress(address, bytes) returns (address)",
|
55
|
-
params: [adminAddress,
|
58
|
+
params: [adminAddress, saltHex],
|
56
59
|
});
|
57
60
|
}
|
58
61
|
|
@@ -76,10 +79,14 @@ export function prepareCreateAccount(args: {
|
|
76
79
|
if (createAccount) {
|
77
80
|
return createAccount(factoryContract);
|
78
81
|
}
|
82
|
+
const saltHex =
|
83
|
+
accountSalt && isHex(accountSalt)
|
84
|
+
? accountSalt
|
85
|
+
: stringToHex(accountSalt ?? "");
|
79
86
|
return prepareContractCall({
|
80
87
|
contract: factoryContract,
|
81
88
|
method: "function createAccount(address, bytes) returns (address)",
|
82
|
-
params: [adminAddress,
|
89
|
+
params: [adminAddress, saltHex],
|
83
90
|
});
|
84
91
|
}
|
85
92
|
|
@@ -225,14 +225,12 @@ describe.runIf(process.env.TW_SECRET_KEY).sequential(
|
|
225
225
|
client,
|
226
226
|
});
|
227
227
|
expect(isValidV1).toEqual(true);
|
228
|
-
const isValidV2 = await
|
228
|
+
const isValidV2 = await verifySignature({
|
229
229
|
message,
|
230
230
|
signature,
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
client,
|
235
|
-
}),
|
231
|
+
address: newAccount.address,
|
232
|
+
chain,
|
233
|
+
client,
|
236
234
|
});
|
237
235
|
expect(isValidV2).toEqual(true);
|
238
236
|
|