thirdweb 5.50.0-nightly-6432e8dc6bdd0ed985fe0d76e47b36601bfa8be3-20240831000359 → 5.50.0-nightly-5475551e5de0750ff1b780522cb01e974a828dd2-20240902000412
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/adapters/ethers5.js +3 -0
- package/dist/cjs/adapters/ethers5.js.map +1 -1
- package/dist/cjs/extensions/erc1155/drops/write/updateMetadata.js +2 -1
- package/dist/cjs/extensions/erc1155/drops/write/updateMetadata.js.map +1 -1
- package/dist/cjs/extensions/erc1155/write/sigMint.js +9 -1
- package/dist/cjs/extensions/erc1155/write/sigMint.js.map +1 -1
- package/dist/cjs/extensions/erc20/write/sigMint.js +9 -2
- package/dist/cjs/extensions/erc20/write/sigMint.js.map +1 -1
- package/dist/cjs/extensions/erc721/drops/write/updateMetadata.js +1 -0
- package/dist/cjs/extensions/erc721/drops/write/updateMetadata.js.map +1 -1
- package/dist/cjs/extensions/erc721/write/sigMint.js +9 -1
- package/dist/cjs/extensions/erc721/write/sigMint.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.js +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/wallets/smart/index.js +1 -1
- package/dist/cjs/wallets/smart/index.js.map +1 -1
- package/dist/esm/adapters/ethers5.js +3 -3
- package/dist/esm/adapters/ethers5.js.map +1 -1
- package/dist/esm/extensions/erc1155/drops/write/updateMetadata.js +2 -1
- package/dist/esm/extensions/erc1155/drops/write/updateMetadata.js.map +1 -1
- package/dist/esm/extensions/erc1155/write/sigMint.js +9 -1
- package/dist/esm/extensions/erc1155/write/sigMint.js.map +1 -1
- package/dist/esm/extensions/erc20/write/sigMint.js +9 -2
- package/dist/esm/extensions/erc20/write/sigMint.js.map +1 -1
- package/dist/esm/extensions/erc721/drops/write/updateMetadata.js +1 -0
- package/dist/esm/extensions/erc721/drops/write/updateMetadata.js.map +1 -1
- package/dist/esm/extensions/erc721/write/sigMint.js +9 -1
- package/dist/esm/extensions/erc721/write/sigMint.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.js +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/wallets/smart/index.js +1 -1
- package/dist/esm/wallets/smart/index.js.map +1 -1
- package/dist/types/adapters/ethers5.d.ts +24 -0
- package/dist/types/adapters/ethers5.d.ts.map +1 -1
- package/dist/types/extensions/erc1155/drops/write/updateMetadata.d.ts +2 -1
- package/dist/types/extensions/erc1155/drops/write/updateMetadata.d.ts.map +1 -1
- package/dist/types/extensions/erc1155/write/sigMint.d.ts +1 -2
- package/dist/types/extensions/erc1155/write/sigMint.d.ts.map +1 -1
- package/dist/types/extensions/erc20/write/sigMint.d.ts +1 -2
- package/dist/types/extensions/erc20/write/sigMint.d.ts.map +1 -1
- package/dist/types/extensions/erc721/drops/write/updateMetadata.d.ts +1 -0
- package/dist/types/extensions/erc721/drops/write/updateMetadata.d.ts.map +1 -1
- package/dist/types/extensions/erc721/write/sigMint.d.ts +1 -2
- package/dist/types/extensions/erc721/write/sigMint.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/adapters/ethers5.test.ts +42 -3
- package/src/adapters/ethers5.ts +3 -3
- package/src/extensions/erc1155/drops/write/claimTo.test.ts +128 -16
- package/src/extensions/erc1155/drops/write/updateMetadata.test.ts +55 -0
- package/src/extensions/erc1155/drops/write/updateMetadata.ts +2 -1
- package/src/extensions/erc1155/write/sigMint.ts +10 -3
- package/src/extensions/erc1155/write/sigMint1155.test.ts +34 -0
- package/src/extensions/erc20/write/sigMint.ts +10 -4
- package/src/extensions/erc20/write/sigMint20.test.ts +31 -0
- package/src/extensions/erc721/drops/write/updateMetadata.test.ts +56 -0
- package/src/extensions/erc721/drops/write/updateMetadata.ts +1 -0
- package/src/extensions/erc721/write/sigMint.ts +10 -3
- package/src/extensions/erc721/write/sigMint721.test.ts +37 -0
- package/src/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.tsx +1 -1
- package/src/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.tsx +1 -1
- package/src/version.ts +1 -1
- package/src/wallets/smart/index.ts +1 -1
@@ -1,7 +1,6 @@
|
|
1
1
|
import type { Address } from "abitype";
|
2
2
|
import type { ThirdwebContract } from "../../../contract/contract.js";
|
3
3
|
import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
4
|
-
import type { Hex } from "../../../utils/encoding/hex.js";
|
5
4
|
import type { NFTInput } from "../../../utils/nft/parseNft.js";
|
6
5
|
import type { Account } from "../../../wallets/interfaces/wallet.js";
|
7
6
|
import { type MintWithSignatureParams } from "../__generated__/ISignatureMintERC1155/write/mintWithSignature.js";
|
@@ -94,7 +93,7 @@ type GeneratePayloadInput = {
|
|
94
93
|
currency?: Address;
|
95
94
|
validityStartTimestamp?: Date;
|
96
95
|
validityEndTimestamp?: Date;
|
97
|
-
uid?:
|
96
|
+
uid?: string;
|
98
97
|
} & ({
|
99
98
|
metadata: NFTInput | string;
|
100
99
|
} | {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sigMint.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/erc1155/write/sigMint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,OAAO,EAAE,MAAM,SAAS,CAAC;AAMpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;
|
1
|
+
{"version":3,"file":"sigMint.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/erc1155/write/sigMint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,OAAO,EAAE,MAAM,SAAS,CAAC;AAMpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAI5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,mEAAmE,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,kMAWzD;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,WAAW,EAAE,oBAAoB,CAAC;IAClC,YAAY,CAAC,EAAE,cAAc,GAAG,sBAAsB,CAAC;CACxD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,4BAA4B;;;;;;;;;;;;;;;;GAqFtC;AAQD,KAAK,oBAAoB,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sBAAsB,CAAC,EAAE,IAAI,CAAC;IAC9B,oBAAoB,CAAC,EAAE,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,CACA;IACE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC7B,GACD;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CACtB,CAAC"}
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import type { Address } from "abitype";
|
2
2
|
import type { ThirdwebContract } from "../../../contract/contract.js";
|
3
3
|
import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
4
|
-
import type { Hex } from "../../../utils/encoding/hex.js";
|
5
4
|
import type { Account } from "../../../wallets/interfaces/wallet.js";
|
6
5
|
import { type MintWithSignatureParams } from "../__generated__/ISignatureMintERC20/write/mintWithSignature.js";
|
7
6
|
/**
|
@@ -82,7 +81,7 @@ type GeneratePayloadInput = {
|
|
82
81
|
currency?: Address;
|
83
82
|
validityStartTimestamp?: Date;
|
84
83
|
validityEndTimestamp?: Date;
|
85
|
-
uid?:
|
84
|
+
uid?: string;
|
86
85
|
} & ({
|
87
86
|
quantity: string;
|
88
87
|
} | {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sigMint.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/erc20/write/sigMint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,OAAO,EAAE,MAAM,SAAS,CAAC;AAKpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;
|
1
|
+
{"version":3,"file":"sigMint.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/erc20/write/sigMint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,OAAO,EAAE,MAAM,SAAS,CAAC;AAKpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAI5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAErE,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,iEAAiE,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,kMAoBzD;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,WAAW,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,4BAA4B;;;;;;;;;;;;GAoFtC;AAQD,KAAK,oBAAoB,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sBAAsB,CAAC,EAAE,IAAI,CAAC;IAC9B,oBAAoB,CAAC,EAAE,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAErD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;EAShB,CAAC"}
|
@@ -27,6 +27,7 @@ export declare function getUpdateMetadataParams(options: BaseTransactionOptions<
|
|
27
27
|
* const transaction = updateMetadata({
|
28
28
|
* contract,
|
29
29
|
* targetTokenId: 0n,
|
30
|
+
* client: thirdwebClient,
|
30
31
|
* newMetadata: {
|
31
32
|
* name: "this is the new nft name",
|
32
33
|
* description: "...",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"updateMetadata.d.ts","sourceRoot":"","sources":["../../../../../../src/extensions/erc721/drops/write/updateMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,KAAK,EAAO,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,4DAA4D,CAAC;AAGpE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,QAAQ,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,GACpD,OAAO,CAAC,wBAAwB,CAAC,CAsEnC;AAED
|
1
|
+
{"version":3,"file":"updateMetadata.d.ts","sourceRoot":"","sources":["../../../../../../src/extensions/erc721/drops/write/updateMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,KAAK,EAAO,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,4DAA4D,CAAC;AAGpE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,QAAQ,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,GACpD,OAAO,CAAC,wBAAwB,CAAC,CAsEnC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,wMAOtD"}
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import type { Address } from "abitype";
|
2
|
-
import type { Hex } from "viem";
|
3
2
|
import type { ThirdwebContract } from "../../../contract/contract.js";
|
4
3
|
import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
5
4
|
import type { NFTInput } from "../../../utils/nft/parseNft.js";
|
@@ -88,7 +87,7 @@ type GeneratePayloadInput = {
|
|
88
87
|
currency?: Address;
|
89
88
|
validityStartTimestamp?: Date;
|
90
89
|
validityEndTimestamp?: Date;
|
91
|
-
uid?:
|
90
|
+
uid?: string;
|
92
91
|
};
|
93
92
|
export {};
|
94
93
|
//# sourceMappingURL=sigMint.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sigMint.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/erc721/write/sigMint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
1
|
+
{"version":3,"file":"sigMint.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/erc721/write/sigMint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA+B,OAAO,EAAE,MAAM,SAAS,CAAC;AAMpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,kEAAkE,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,sBAAsB,CAAC,uBAAuB,CAAC,kMAWzD;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,WAAW,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,4BAA4B;;;;;;;;;;;;;;GAgHtC;AAQD,KAAK,oBAAoB,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sBAAsB,CAAC,EAAE,IAAI,CAAC;IAC9B,oBAAoB,CAAC,EAAE,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC"}
|
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-5475551e5de0750ff1b780522cb01e974a828dd2-20240902000412";
|
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-5475551e5de0750ff1b780522cb01e974a828dd2-20240902000412",
|
4
4
|
"repository": {
|
5
5
|
"type": "git",
|
6
6
|
"url": "git+https://github.com/thirdweb-dev/js.git#main"
|
@@ -1,11 +1,19 @@
|
|
1
1
|
import * as ethers5 from "ethers5";
|
2
|
-
import { describe, expect, test } from "vitest";
|
3
|
-
import {
|
2
|
+
import { describe, expect, it, test } from "vitest";
|
3
|
+
import { USDT_CONTRACT } from "~test/test-contracts.js";
|
4
|
+
import { ANVIL_CHAIN, FORKED_ETHEREUM_CHAIN } from "../../test/src/chains.js";
|
4
5
|
import { TEST_CLIENT } from "../../test/src/test-clients.js";
|
5
6
|
import { ANVIL_PKEY_A, TEST_ACCOUNT_B } from "../../test/src/test-wallets.js";
|
7
|
+
import { resolveContractAbi } from "../contract/actions/resolve-abi.js";
|
8
|
+
import { decimals } from "../extensions/erc20/__generated__/IERC20/read/decimals.js";
|
6
9
|
import { randomBytesBuffer } from "../utils/random.js";
|
7
10
|
import { privateKeyToAccount } from "../wallets/private-key.js";
|
8
|
-
import {
|
11
|
+
import {
|
12
|
+
fromEthersContract,
|
13
|
+
toEthersContract,
|
14
|
+
toEthersProvider,
|
15
|
+
toEthersSigner,
|
16
|
+
} from "./ethers5.js";
|
9
17
|
|
10
18
|
const account = privateKeyToAccount({
|
11
19
|
privateKey: ANVIL_PKEY_A,
|
@@ -110,4 +118,35 @@ describe("ethers5 adapter", () => {
|
|
110
118
|
});
|
111
119
|
expect(txResponse.hash.length).toBe(66);
|
112
120
|
});
|
121
|
+
|
122
|
+
it("toEthersContract should work", async () => {
|
123
|
+
const ethersContract = await toEthersContract(ethers5, USDT_CONTRACT);
|
124
|
+
expect(ethersContract.address.toLowerCase()).toBe(
|
125
|
+
USDT_CONTRACT.address.toLowerCase(),
|
126
|
+
);
|
127
|
+
const decimals = await ethersContract.decimals();
|
128
|
+
expect(decimals.toString()).toBe("6");
|
129
|
+
});
|
130
|
+
|
131
|
+
it("fromEthersContract should work", async () => {
|
132
|
+
const provider = toEthersProvider(
|
133
|
+
ethers5,
|
134
|
+
TEST_CLIENT,
|
135
|
+
FORKED_ETHEREUM_CHAIN,
|
136
|
+
);
|
137
|
+
const ethersContract = new ethers5.Contract(
|
138
|
+
USDT_CONTRACT.address,
|
139
|
+
await resolveContractAbi(USDT_CONTRACT),
|
140
|
+
provider,
|
141
|
+
);
|
142
|
+
|
143
|
+
const thirdwebContract = await fromEthersContract({
|
144
|
+
client: TEST_CLIENT,
|
145
|
+
ethersContract,
|
146
|
+
chain: FORKED_ETHEREUM_CHAIN,
|
147
|
+
});
|
148
|
+
|
149
|
+
const _decimals = await decimals({ contract: thirdwebContract });
|
150
|
+
expect(_decimals).toBe(6);
|
151
|
+
});
|
113
152
|
});
|
package/src/adapters/ethers5.ts
CHANGED
@@ -274,7 +274,7 @@ export const ethers5Adapter = /* @__PURE__ */ (() => {
|
|
274
274
|
* @returns The ethers.js provider.
|
275
275
|
* @internal
|
276
276
|
*/
|
277
|
-
function toEthersProvider(
|
277
|
+
export function toEthersProvider(
|
278
278
|
ethers: Ethers5,
|
279
279
|
client: ThirdwebClient,
|
280
280
|
chain: Chain,
|
@@ -299,7 +299,7 @@ function toEthersProvider(
|
|
299
299
|
* @returns A Promise that resolves to an ethers.js Contract.
|
300
300
|
* @internal
|
301
301
|
*/
|
302
|
-
async function toEthersContract<abi extends Abi = []>(
|
302
|
+
export async function toEthersContract<abi extends Abi = []>(
|
303
303
|
ethers: Ethers5,
|
304
304
|
twContract: ThirdwebContract<abi>,
|
305
305
|
): Promise<ethers5.Contract> {
|
@@ -336,7 +336,7 @@ type FromEthersContractOptions = {
|
|
336
336
|
* @returns A promise that resolves to a ThirdwebContract instance.
|
337
337
|
* @internal
|
338
338
|
*/
|
339
|
-
async function fromEthersContract<abi extends Abi>(
|
339
|
+
export async function fromEthersContract<abi extends Abi>(
|
340
340
|
options: FromEthersContractOptions,
|
341
341
|
): Promise<ThirdwebContract<abi>> {
|
342
342
|
return getContract({
|
@@ -1,13 +1,12 @@
|
|
1
|
-
import {
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
2
|
import { ANVIL_CHAIN } from "~test/chains.js";
|
3
3
|
import { TEST_CLIENT } from "~test/test-clients.js";
|
4
|
-
import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
|
4
|
+
import { TEST_ACCOUNT_A, TEST_ACCOUNT_B } from "~test/test-wallets.js";
|
5
5
|
|
6
|
+
import { TEST_CONTRACT_URI } from "~test/ipfs-uris.js";
|
6
7
|
import { NATIVE_TOKEN_ADDRESS } from "../../../../constants/addresses.js";
|
7
|
-
import {
|
8
|
-
|
9
|
-
getContract,
|
10
|
-
} from "../../../../contract/contract.js";
|
8
|
+
import { getContract } from "../../../../contract/contract.js";
|
9
|
+
import { deployERC20Contract } from "../../../../extensions/prebuilts/deploy-erc20.js";
|
11
10
|
import { deployERC1155Contract } from "../../../../extensions/prebuilts/deploy-erc1155.js";
|
12
11
|
import { sendAndConfirmTransaction } from "../../../../transaction/actions/send-and-confirm-transaction.js";
|
13
12
|
import { totalSupply } from "../../__generated__/IERC1155/read/totalSupply.js";
|
@@ -15,13 +14,12 @@ import { lazyMint } from "../../write/lazyMint.js";
|
|
15
14
|
import { claimTo } from "./claimTo.js";
|
16
15
|
import { setClaimConditions } from "./setClaimConditions.js";
|
17
16
|
|
18
|
-
let contract: ThirdwebContract;
|
19
17
|
const account = TEST_ACCOUNT_A;
|
20
18
|
const client = TEST_CLIENT;
|
21
19
|
const chain = ANVIL_CHAIN;
|
22
20
|
|
23
21
|
describe.runIf(process.env.TW_SECRET_KEY)("erc1155 claimTo extension", () => {
|
24
|
-
|
22
|
+
it("should claim the nft", async () => {
|
25
23
|
const address = await deployERC1155Contract({
|
26
24
|
client,
|
27
25
|
chain,
|
@@ -29,17 +27,16 @@ describe.runIf(process.env.TW_SECRET_KEY)("erc1155 claimTo extension", () => {
|
|
29
27
|
type: "DropERC1155",
|
30
28
|
params: {
|
31
29
|
name: "Edition Drop",
|
30
|
+
contractURI: TEST_CONTRACT_URI,
|
32
31
|
},
|
33
32
|
});
|
34
|
-
contract = getContract({
|
33
|
+
const contract = getContract({
|
35
34
|
address,
|
36
35
|
client,
|
37
36
|
chain,
|
38
37
|
});
|
39
|
-
|
40
|
-
|
41
|
-
await sendAndConfirmTransaction({ transaction, account });
|
42
|
-
|
38
|
+
const lazyMintTx = lazyMint({ contract, nfts: [{ name: "token 0" }] });
|
39
|
+
await sendAndConfirmTransaction({ transaction: lazyMintTx, account });
|
43
40
|
const setClaimTx = setClaimConditions({
|
44
41
|
contract,
|
45
42
|
tokenId: 0n,
|
@@ -53,20 +50,135 @@ describe.runIf(process.env.TW_SECRET_KEY)("erc1155 claimTo extension", () => {
|
|
53
50
|
},
|
54
51
|
],
|
55
52
|
});
|
53
|
+
await sendAndConfirmTransaction({ transaction: setClaimTx, account });
|
56
54
|
|
55
|
+
const transaction = claimTo({
|
56
|
+
contract,
|
57
|
+
tokenId: 0n,
|
58
|
+
quantity: 1n,
|
59
|
+
to: account.address,
|
60
|
+
});
|
61
|
+
await sendAndConfirmTransaction({ transaction, account });
|
62
|
+
const supplyCount = await totalSupply({ contract, id: 0n });
|
63
|
+
expect(supplyCount).toBe(1n);
|
64
|
+
});
|
65
|
+
|
66
|
+
it("should claim with allowlist", async () => {
|
67
|
+
const address = await deployERC1155Contract({
|
68
|
+
client,
|
69
|
+
chain,
|
70
|
+
account,
|
71
|
+
type: "DropERC1155",
|
72
|
+
params: {
|
73
|
+
name: "Edition Drop",
|
74
|
+
contractURI: TEST_CONTRACT_URI,
|
75
|
+
},
|
76
|
+
});
|
77
|
+
const contract = getContract({
|
78
|
+
address,
|
79
|
+
client,
|
80
|
+
chain,
|
81
|
+
});
|
82
|
+
const lazyMintTx = lazyMint({ contract, nfts: [{ name: "token 0" }] });
|
83
|
+
await sendAndConfirmTransaction({ transaction: lazyMintTx, account });
|
84
|
+
const setClaimTx = setClaimConditions({
|
85
|
+
contract,
|
86
|
+
tokenId: 0n,
|
87
|
+
phases: [
|
88
|
+
{
|
89
|
+
maxClaimableSupply: 100n,
|
90
|
+
maxClaimablePerWallet: 5n,
|
91
|
+
currencyAddress: NATIVE_TOKEN_ADDRESS,
|
92
|
+
price: 0.06,
|
93
|
+
startTime: new Date(),
|
94
|
+
overrideList: [
|
95
|
+
{
|
96
|
+
address: TEST_ACCOUNT_B.address,
|
97
|
+
maxClaimable: "50",
|
98
|
+
price: "0.3",
|
99
|
+
currencyAddress: NATIVE_TOKEN_ADDRESS,
|
100
|
+
},
|
101
|
+
],
|
102
|
+
},
|
103
|
+
],
|
104
|
+
});
|
57
105
|
await sendAndConfirmTransaction({ transaction: setClaimTx, account });
|
106
|
+
|
107
|
+
const transaction = claimTo({
|
108
|
+
contract,
|
109
|
+
tokenId: 0n,
|
110
|
+
quantity: 50n,
|
111
|
+
to: TEST_ACCOUNT_B.address,
|
112
|
+
});
|
113
|
+
await sendAndConfirmTransaction({ transaction, account: TEST_ACCOUNT_B });
|
114
|
+
const supplyCount = await totalSupply({ contract, id: 0n });
|
115
|
+
expect(supplyCount).toBe(50n);
|
58
116
|
});
|
59
117
|
|
60
|
-
|
118
|
+
/**
|
119
|
+
* This is to document the behavior where one can claim without paying if the claiming address
|
120
|
+
* is the same as the PrimaryRecipientAddress, because of this Solidity code:
|
121
|
+
* ```solidity
|
122
|
+
* // CurrencyTransferLib.sol
|
123
|
+
* function safeTransferERC20(address _currency, address _from, address _to, uint256 _amount) internal {
|
124
|
+
* if (_from == _to) {
|
125
|
+
* return;
|
126
|
+
* }
|
127
|
+
* ...
|
128
|
+
* }
|
129
|
+
* ```
|
130
|
+
*/
|
131
|
+
it("address that is the same with PrimaryFeeRecipient can claim without paying ERC20", async () => {
|
132
|
+
const tokenAddress = await deployERC20Contract({
|
133
|
+
client,
|
134
|
+
chain,
|
135
|
+
account,
|
136
|
+
type: "TokenERC20",
|
137
|
+
params: {
|
138
|
+
name: "token20",
|
139
|
+
contractURI: TEST_CONTRACT_URI,
|
140
|
+
},
|
141
|
+
});
|
142
|
+
const address = await deployERC1155Contract({
|
143
|
+
client,
|
144
|
+
chain,
|
145
|
+
account,
|
146
|
+
type: "DropERC1155",
|
147
|
+
params: {
|
148
|
+
name: "Edition Drop",
|
149
|
+
contractURI: TEST_CONTRACT_URI,
|
150
|
+
saleRecipient: account.address,
|
151
|
+
},
|
152
|
+
});
|
153
|
+
const contract = getContract({
|
154
|
+
address,
|
155
|
+
client,
|
156
|
+
chain,
|
157
|
+
});
|
158
|
+
const lazyMintTx = lazyMint({ contract, nfts: [{ name: "token 0" }] });
|
159
|
+
await sendAndConfirmTransaction({ transaction: lazyMintTx, account });
|
160
|
+
const setClaimTx = setClaimConditions({
|
161
|
+
contract,
|
162
|
+
tokenId: 0n,
|
163
|
+
phases: [
|
164
|
+
{
|
165
|
+
maxClaimableSupply: 100n,
|
166
|
+
maxClaimablePerWallet: 100n,
|
167
|
+
currencyAddress: tokenAddress,
|
168
|
+
price: 1000,
|
169
|
+
startTime: new Date(),
|
170
|
+
},
|
171
|
+
],
|
172
|
+
});
|
173
|
+
await sendAndConfirmTransaction({ transaction: setClaimTx, account });
|
174
|
+
|
61
175
|
const transaction = claimTo({
|
62
176
|
contract,
|
63
177
|
tokenId: 0n,
|
64
178
|
quantity: 1n,
|
65
179
|
to: account.address,
|
66
180
|
});
|
67
|
-
|
68
181
|
await sendAndConfirmTransaction({ transaction, account });
|
69
|
-
|
70
182
|
const supplyCount = await totalSupply({ contract, id: 0n });
|
71
183
|
expect(supplyCount).toBe(1n);
|
72
184
|
});
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
|
+
import { ANVIL_CHAIN } from "~test/chains.js";
|
3
|
+
import { TEST_CLIENT } from "~test/test-clients.js";
|
4
|
+
import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
|
5
|
+
|
6
|
+
import { TEST_CONTRACT_URI } from "~test/ipfs-uris.js";
|
7
|
+
import { getContract } from "../../../../contract/contract.js";
|
8
|
+
import { deployERC1155Contract } from "../../../../extensions/prebuilts/deploy-erc1155.js";
|
9
|
+
import { sendAndConfirmTransaction } from "../../../../transaction/actions/send-and-confirm-transaction.js";
|
10
|
+
import { getNFTs } from "../../read/getNFTs.js";
|
11
|
+
import { lazyMint } from "../../write/lazyMint.js";
|
12
|
+
import { updateMetadata } from "./updateMetadata.js";
|
13
|
+
|
14
|
+
const account = TEST_ACCOUNT_A;
|
15
|
+
const client = TEST_CLIENT;
|
16
|
+
const chain = ANVIL_CHAIN;
|
17
|
+
describe.runIf(process.env.TW_SECRET_KEY)("updateMetadata ERC1155", () => {
|
18
|
+
it("should update metadata", async () => {
|
19
|
+
const address = await deployERC1155Contract({
|
20
|
+
client,
|
21
|
+
chain,
|
22
|
+
account,
|
23
|
+
type: "DropERC1155",
|
24
|
+
params: {
|
25
|
+
name: "Edition Drop",
|
26
|
+
contractURI: TEST_CONTRACT_URI,
|
27
|
+
},
|
28
|
+
});
|
29
|
+
const contract = getContract({
|
30
|
+
address,
|
31
|
+
client,
|
32
|
+
chain,
|
33
|
+
});
|
34
|
+
const lazyMintTx = lazyMint({
|
35
|
+
contract,
|
36
|
+
nfts: [{ name: "token 0" }, { name: "token 1" }, { name: "token 2" }],
|
37
|
+
});
|
38
|
+
await sendAndConfirmTransaction({ transaction: lazyMintTx, account });
|
39
|
+
|
40
|
+
const updateTx = updateMetadata({
|
41
|
+
contract,
|
42
|
+
targetTokenId: 1n,
|
43
|
+
newMetadata: { name: "token 1 - updated" },
|
44
|
+
client,
|
45
|
+
});
|
46
|
+
await sendAndConfirmTransaction({ transaction: updateTx, account });
|
47
|
+
|
48
|
+
const nfts = await getNFTs({ contract });
|
49
|
+
|
50
|
+
expect(nfts.length).toBe(3);
|
51
|
+
expect(nfts[0]?.metadata.name).toBe("token 0");
|
52
|
+
expect(nfts[1]?.metadata.name).toBe("token 1 - updated");
|
53
|
+
expect(nfts[2]?.metadata.name).toBe("token 2");
|
54
|
+
});
|
55
|
+
});
|
@@ -109,12 +109,13 @@ export async function getUpdateMetadataParams(
|
|
109
109
|
* const transaction = updateMetadata({
|
110
110
|
* contract,
|
111
111
|
* targetTokenId: 0n,
|
112
|
+
* client: thirdwebClient,
|
112
113
|
* newMetadata: {
|
113
114
|
* name: "this is the new nft name",
|
114
115
|
* description: "...",
|
115
116
|
* image: "new image uri"
|
116
117
|
* // ...
|
117
|
-
* }
|
118
|
+
* },
|
118
119
|
* });
|
119
120
|
*
|
120
121
|
* await sendTransaction({ transaction, account });
|
@@ -8,7 +8,7 @@ import type { ThirdwebContract } from "../../../contract/contract.js";
|
|
8
8
|
import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
9
9
|
import { toBigInt } from "../../../utils/bigint.js";
|
10
10
|
import { dateToSeconds, tenYearsFromNow } from "../../../utils/date.js";
|
11
|
-
import type
|
11
|
+
import { type Hex, isHex, stringToHex } from "../../../utils/encoding/hex.js";
|
12
12
|
import type { NFTInput } from "../../../utils/nft/parseNft.js";
|
13
13
|
import { randomBytesHex } from "../../../utils/random.js";
|
14
14
|
import type { Account } from "../../../wallets/interfaces/wallet.js";
|
@@ -135,7 +135,14 @@ export async function generateMintSignature(
|
|
135
135
|
return "";
|
136
136
|
})(),
|
137
137
|
// uid computation
|
138
|
-
|
138
|
+
((): Hex => {
|
139
|
+
if (mintRequest.uid) {
|
140
|
+
return isHex(mintRequest.uid)
|
141
|
+
? mintRequest.uid
|
142
|
+
: stringToHex(mintRequest.uid, { size: 32 });
|
143
|
+
}
|
144
|
+
return randomBytesHex();
|
145
|
+
})(),
|
139
146
|
]);
|
140
147
|
|
141
148
|
const startTime = mintRequest.validityStartTimestamp || new Date(0);
|
@@ -190,7 +197,7 @@ type GeneratePayloadInput = {
|
|
190
197
|
currency?: Address;
|
191
198
|
validityStartTimestamp?: Date;
|
192
199
|
validityEndTimestamp?: Date;
|
193
|
-
uid?:
|
200
|
+
uid?: string;
|
194
201
|
} & (
|
195
202
|
| {
|
196
203
|
metadata: NFTInput | string;
|
@@ -194,4 +194,38 @@ describe.runIf(process.env.TW_SECRET_KEY)("generateMintSignature1155", () => {
|
|
194
194
|
expect(payload.uid).toBe(uid);
|
195
195
|
expect(signature.length).toBe(132);
|
196
196
|
});
|
197
|
+
|
198
|
+
it("should generate a mint signature with custom values", async () => {
|
199
|
+
const { payload, signature } = await generateMintSignature({
|
200
|
+
mintRequest: {
|
201
|
+
to: TEST_ACCOUNT_B.address,
|
202
|
+
quantity: 10n,
|
203
|
+
royaltyRecipient: TEST_ACCOUNT_B.address,
|
204
|
+
royaltyBps: 500,
|
205
|
+
primarySaleRecipient: TEST_ACCOUNT_A.address,
|
206
|
+
tokenId: 0n,
|
207
|
+
pricePerToken: "0.2",
|
208
|
+
currency: erc20TokenContract.address,
|
209
|
+
validityStartTimestamp: new Date(1635724800),
|
210
|
+
validityEndTimestamp: new Date(1867260800),
|
211
|
+
uid: "abcdef1234567890",
|
212
|
+
},
|
213
|
+
account: TEST_ACCOUNT_A,
|
214
|
+
contract: erc1155Contract,
|
215
|
+
});
|
216
|
+
|
217
|
+
expect(payload.to).toBe(TEST_ACCOUNT_B.address);
|
218
|
+
expect(payload.tokenId).toBe(0n);
|
219
|
+
expect(payload.royaltyRecipient).toBe(TEST_ACCOUNT_B.address);
|
220
|
+
expect(payload.royaltyBps).toBe(500n);
|
221
|
+
expect(payload.primarySaleRecipient).toBe(TEST_ACCOUNT_A.address);
|
222
|
+
expect(payload.uri).toBe("");
|
223
|
+
expect(payload.pricePerToken).toBe(200000000000000000n);
|
224
|
+
expect(payload.quantity).toBe(10n);
|
225
|
+
expect(payload.currency).toBe(erc20TokenContract.address);
|
226
|
+
expect(payload.validityStartTimestamp).toBe(1635724n);
|
227
|
+
expect(payload.validityEndTimestamp).toBe(1867260n);
|
228
|
+
expect(payload.uid).toBe(toHex("abcdef1234567890", { size: 32 }));
|
229
|
+
expect(signature.length).toBe(132);
|
230
|
+
});
|
197
231
|
});
|
@@ -6,7 +6,7 @@ import {
|
|
6
6
|
import type { ThirdwebContract } from "../../../contract/contract.js";
|
7
7
|
import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
8
8
|
import { dateToSeconds, tenYearsFromNow } from "../../../utils/date.js";
|
9
|
-
import type
|
9
|
+
import { type Hex, isHex, stringToHex } from "../../../utils/encoding/hex.js";
|
10
10
|
import { randomBytesHex } from "../../../utils/random.js";
|
11
11
|
import type { Account } from "../../../wallets/interfaces/wallet.js";
|
12
12
|
import { name } from "../../common/read/name.js";
|
@@ -139,8 +139,14 @@ export async function generateMintSignature(
|
|
139
139
|
erc20Address: contract.address,
|
140
140
|
});
|
141
141
|
})(),
|
142
|
-
|
143
|
-
|
142
|
+
((): Hex => {
|
143
|
+
if (mintRequest.uid) {
|
144
|
+
return isHex(mintRequest.uid)
|
145
|
+
? mintRequest.uid
|
146
|
+
: stringToHex(mintRequest.uid, { size: 32 });
|
147
|
+
}
|
148
|
+
return randomBytesHex();
|
149
|
+
})(),
|
144
150
|
// ERC20Permit (EIP-712) spec differs from signature mint 721, 1155.
|
145
151
|
// it uses the token name in the domain separator
|
146
152
|
name({
|
@@ -190,7 +196,7 @@ type GeneratePayloadInput = {
|
|
190
196
|
currency?: Address;
|
191
197
|
validityStartTimestamp?: Date;
|
192
198
|
validityEndTimestamp?: Date;
|
193
|
-
uid?:
|
199
|
+
uid?: string;
|
194
200
|
} & ({ quantity: string } | { quantityWei: bigint });
|
195
201
|
|
196
202
|
export const MintRequest20 = [
|
@@ -137,4 +137,35 @@ describe.runIf(process.env.TW_SECRET_KEY)("generateMintSignature20", () => {
|
|
137
137
|
);
|
138
138
|
expect(signature.length).toBe(132);
|
139
139
|
});
|
140
|
+
|
141
|
+
it("should automatically encode a provided string uid", async () => {
|
142
|
+
const { payload, signature } = await generateMintSignature({
|
143
|
+
mintRequest: {
|
144
|
+
to: TEST_ACCOUNT_B.address,
|
145
|
+
quantity: "0.005",
|
146
|
+
primarySaleRecipient: TEST_ACCOUNT_A.address,
|
147
|
+
price: "0.2",
|
148
|
+
currency: erc20TokenContract.address,
|
149
|
+
validityStartTimestamp: new Date(1635724800),
|
150
|
+
validityEndTimestamp: new Date(1867260800),
|
151
|
+
uid: "abcdef1234567890",
|
152
|
+
},
|
153
|
+
account: TEST_ACCOUNT_A,
|
154
|
+
contract: erc20Contract,
|
155
|
+
});
|
156
|
+
|
157
|
+
expect(payload.to).toBe("0x70997970C51812dc3A010C7d01b50e0d17dc79C8");
|
158
|
+
expect(payload.primarySaleRecipient).toBe(
|
159
|
+
"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
|
160
|
+
);
|
161
|
+
expect(payload.quantity).toBe(5000000000000000n);
|
162
|
+
expect(payload.price).toBe(200000000000000000n);
|
163
|
+
expect(payload.currency).toBe(erc20TokenContract.address);
|
164
|
+
expect(payload.validityStartTimestamp).toBe(1635724n);
|
165
|
+
expect(payload.validityEndTimestamp).toBe(1867260n);
|
166
|
+
expect(payload.uid).toBe(
|
167
|
+
"0x6162636465663132333435363738393000000000000000000000000000000000",
|
168
|
+
);
|
169
|
+
expect(signature.length).toBe(132);
|
170
|
+
});
|
140
171
|
});
|
@@ -0,0 +1,56 @@
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
|
+
import { ANVIL_CHAIN } from "~test/chains.js";
|
3
|
+
import { TEST_CLIENT } from "~test/test-clients.js";
|
4
|
+
import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
|
5
|
+
|
6
|
+
import { TEST_CONTRACT_URI } from "~test/ipfs-uris.js";
|
7
|
+
import { getContract } from "../../../../contract/contract.js";
|
8
|
+
import { deployERC721Contract } from "../../../../extensions/prebuilts/deploy-erc721.js";
|
9
|
+
import { sendAndConfirmTransaction } from "../../../../transaction/actions/send-and-confirm-transaction.js";
|
10
|
+
import { getNFTs } from "../../read/getNFTs.js";
|
11
|
+
import { lazyMint } from "../../write/lazyMint.js";
|
12
|
+
import { updateMetadata } from "./updateMetadata.js";
|
13
|
+
|
14
|
+
const account = TEST_ACCOUNT_A;
|
15
|
+
const client = TEST_CLIENT;
|
16
|
+
const chain = ANVIL_CHAIN;
|
17
|
+
|
18
|
+
describe.runIf(process.env.TW_SECRET_KEY)("updateMetadata ERC721", () => {
|
19
|
+
it("should update metadata", async () => {
|
20
|
+
const address = await deployERC721Contract({
|
21
|
+
client,
|
22
|
+
chain,
|
23
|
+
account,
|
24
|
+
type: "DropERC721",
|
25
|
+
params: {
|
26
|
+
name: "NFT Drop",
|
27
|
+
contractURI: TEST_CONTRACT_URI,
|
28
|
+
},
|
29
|
+
});
|
30
|
+
const contract = getContract({
|
31
|
+
address,
|
32
|
+
client,
|
33
|
+
chain,
|
34
|
+
});
|
35
|
+
const lazyMintTx = lazyMint({
|
36
|
+
contract,
|
37
|
+
nfts: [{ name: "token 0" }, { name: "token 1" }, { name: "token 2" }],
|
38
|
+
});
|
39
|
+
await sendAndConfirmTransaction({ transaction: lazyMintTx, account });
|
40
|
+
|
41
|
+
const updateTx = updateMetadata({
|
42
|
+
contract,
|
43
|
+
targetTokenId: 1n,
|
44
|
+
newMetadata: { name: "token 1 - updated" },
|
45
|
+
client,
|
46
|
+
});
|
47
|
+
await sendAndConfirmTransaction({ transaction: updateTx, account });
|
48
|
+
|
49
|
+
const nfts = await getNFTs({ contract });
|
50
|
+
|
51
|
+
expect(nfts.length).toBe(3);
|
52
|
+
expect(nfts[0]?.metadata.name).toBe("token 0");
|
53
|
+
expect(nfts[1]?.metadata.name).toBe("token 1 - updated");
|
54
|
+
expect(nfts[2]?.metadata.name).toBe("token 2");
|
55
|
+
});
|
56
|
+
});
|