thirdweb 5.72.0-nightly-f64e0253d7de6fdb6f56ab49315cc4cdcdd75b20-20241127000345 → 5.72.0-nightly-e87eb2ff35eea1b94ab7bdae3585d819879ec53c-20241128000350

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.
Files changed (167) hide show
  1. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/events/TokensMinted.js +32 -0
  2. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/events/TokensMinted.js.map +1 -0
  3. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/events/TokensMintedWithSignature.js +33 -0
  4. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/events/TokensMintedWithSignature.js.map +1 -0
  5. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/read/nextTokenIdToMint.js +70 -0
  6. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/read/nextTokenIdToMint.js.map +1 -0
  7. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/read/supportsInterface.js +114 -0
  8. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/read/supportsInterface.js.map +1 -0
  9. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/read/tokenURI.js +114 -0
  10. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/read/tokenURI.js.map +1 -0
  11. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/read/totalMinted.js +70 -0
  12. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/read/totalMinted.js.map +1 -0
  13. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/write/cancel.js +117 -0
  14. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/write/cancel.js.map +1 -0
  15. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/write/initialize.js +202 -0
  16. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/write/initialize.js.map +1 -0
  17. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/write/mintTo.js +129 -0
  18. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/write/mintTo.js.map +1 -0
  19. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/write/mintWithSignature.js +171 -0
  20. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/write/mintWithSignature.js.map +1 -0
  21. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/write/revoke.js +117 -0
  22. package/dist/cjs/extensions/erc721/__generated__/LoyaltyCard/write/revoke.js.map +1 -0
  23. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/events/TokensUnwrapped.js +33 -0
  24. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/events/TokensUnwrapped.js.map +1 -0
  25. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/events/TokensWrapped.js +33 -0
  26. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/events/TokensWrapped.js.map +1 -0
  27. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/contractType.js +70 -0
  28. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/contractType.js.map +1 -0
  29. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/contractVersion.js +70 -0
  30. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/contractVersion.js.map +1 -0
  31. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/getWrappedContents.js +133 -0
  32. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/getWrappedContents.js.map +1 -0
  33. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/nextTokenIdToMint.js +70 -0
  34. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/nextTokenIdToMint.js.map +1 -0
  35. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/supportsInterface.js +114 -0
  36. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/supportsInterface.js.map +1 -0
  37. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/tokenURI.js +114 -0
  38. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/read/tokenURI.js.map +1 -0
  39. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/write/initialize.js +175 -0
  40. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/write/initialize.js.map +1 -0
  41. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/write/unwrap.js +124 -0
  42. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/write/unwrap.js.map +1 -0
  43. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/write/wrap.js +162 -0
  44. package/dist/cjs/extensions/erc721/__generated__/Multiwrap/write/wrap.js.map +1 -0
  45. package/dist/cjs/extensions/prebuilts/deploy-erc721.js +21 -6
  46. package/dist/cjs/extensions/prebuilts/deploy-erc721.js.map +1 -1
  47. package/dist/cjs/version.js +1 -1
  48. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/events/TokensMinted.js +29 -0
  49. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/events/TokensMinted.js.map +1 -0
  50. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/events/TokensMintedWithSignature.js +30 -0
  51. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/events/TokensMintedWithSignature.js.map +1 -0
  52. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/read/nextTokenIdToMint.js +64 -0
  53. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/read/nextTokenIdToMint.js.map +1 -0
  54. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/read/supportsInterface.js +106 -0
  55. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/read/supportsInterface.js.map +1 -0
  56. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/read/tokenURI.js +106 -0
  57. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/read/tokenURI.js.map +1 -0
  58. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/read/totalMinted.js +64 -0
  59. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/read/totalMinted.js.map +1 -0
  60. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/write/cancel.js +110 -0
  61. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/write/cancel.js.map +1 -0
  62. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/write/initialize.js +195 -0
  63. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/write/initialize.js.map +1 -0
  64. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/write/mintTo.js +122 -0
  65. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/write/mintTo.js.map +1 -0
  66. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/write/mintWithSignature.js +164 -0
  67. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/write/mintWithSignature.js.map +1 -0
  68. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/write/revoke.js +110 -0
  69. package/dist/esm/extensions/erc721/__generated__/LoyaltyCard/write/revoke.js.map +1 -0
  70. package/dist/esm/extensions/erc721/__generated__/Multiwrap/events/TokensUnwrapped.js +30 -0
  71. package/dist/esm/extensions/erc721/__generated__/Multiwrap/events/TokensUnwrapped.js.map +1 -0
  72. package/dist/esm/extensions/erc721/__generated__/Multiwrap/events/TokensWrapped.js +30 -0
  73. package/dist/esm/extensions/erc721/__generated__/Multiwrap/events/TokensWrapped.js.map +1 -0
  74. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/contractType.js +64 -0
  75. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/contractType.js.map +1 -0
  76. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/contractVersion.js +64 -0
  77. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/contractVersion.js.map +1 -0
  78. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/getWrappedContents.js +125 -0
  79. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/getWrappedContents.js.map +1 -0
  80. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/nextTokenIdToMint.js +64 -0
  81. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/nextTokenIdToMint.js.map +1 -0
  82. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/supportsInterface.js +106 -0
  83. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/supportsInterface.js.map +1 -0
  84. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/tokenURI.js +106 -0
  85. package/dist/esm/extensions/erc721/__generated__/Multiwrap/read/tokenURI.js.map +1 -0
  86. package/dist/esm/extensions/erc721/__generated__/Multiwrap/write/initialize.js +168 -0
  87. package/dist/esm/extensions/erc721/__generated__/Multiwrap/write/initialize.js.map +1 -0
  88. package/dist/esm/extensions/erc721/__generated__/Multiwrap/write/unwrap.js +117 -0
  89. package/dist/esm/extensions/erc721/__generated__/Multiwrap/write/unwrap.js.map +1 -0
  90. package/dist/esm/extensions/erc721/__generated__/Multiwrap/write/wrap.js +155 -0
  91. package/dist/esm/extensions/erc721/__generated__/Multiwrap/write/wrap.js.map +1 -0
  92. package/dist/esm/extensions/prebuilts/deploy-erc721.js +15 -0
  93. package/dist/esm/extensions/prebuilts/deploy-erc721.js.map +1 -1
  94. package/dist/esm/version.js +1 -1
  95. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/events/TokensMinted.d.ts +54 -0
  96. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/events/TokensMinted.d.ts.map +1 -0
  97. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/events/TokensMintedWithSignature.d.ts +95 -0
  98. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/events/TokensMintedWithSignature.d.ts.map +1 -0
  99. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/read/nextTokenIdToMint.d.ts +44 -0
  100. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/read/nextTokenIdToMint.d.ts.map +1 -0
  101. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/read/supportsInterface.d.ts +83 -0
  102. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/read/supportsInterface.d.ts.map +1 -0
  103. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/read/tokenURI.d.ts +83 -0
  104. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/read/tokenURI.d.ts.map +1 -0
  105. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/read/totalMinted.d.ts +44 -0
  106. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/read/totalMinted.d.ts.map +1 -0
  107. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/write/cancel.d.ts +79 -0
  108. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/write/cancel.d.ts.map +1 -0
  109. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/write/initialize.d.ts +142 -0
  110. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/write/initialize.d.ts.map +1 -0
  111. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/write/mintTo.d.ts +86 -0
  112. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/write/mintTo.d.ts.map +1 -0
  113. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/write/mintWithSignature.d.ts +128 -0
  114. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/write/mintWithSignature.d.ts.map +1 -0
  115. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/write/revoke.d.ts +79 -0
  116. package/dist/types/extensions/erc721/__generated__/LoyaltyCard/write/revoke.d.ts.map +1 -0
  117. package/dist/types/extensions/erc721/__generated__/Multiwrap/events/TokensUnwrapped.d.ts +61 -0
  118. package/dist/types/extensions/erc721/__generated__/Multiwrap/events/TokensUnwrapped.d.ts.map +1 -0
  119. package/dist/types/extensions/erc721/__generated__/Multiwrap/events/TokensWrapped.d.ts +77 -0
  120. package/dist/types/extensions/erc721/__generated__/Multiwrap/events/TokensWrapped.d.ts.map +1 -0
  121. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/contractType.d.ts +44 -0
  122. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/contractType.d.ts.map +1 -0
  123. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/contractVersion.d.ts +44 -0
  124. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/contractVersion.d.ts.map +1 -0
  125. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/getWrappedContents.d.ts +93 -0
  126. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/getWrappedContents.d.ts.map +1 -0
  127. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/nextTokenIdToMint.d.ts +44 -0
  128. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/nextTokenIdToMint.d.ts.map +1 -0
  129. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/supportsInterface.d.ts +83 -0
  130. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/supportsInterface.d.ts.map +1 -0
  131. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/tokenURI.d.ts +83 -0
  132. package/dist/types/extensions/erc721/__generated__/Multiwrap/read/tokenURI.d.ts.map +1 -0
  133. package/dist/types/extensions/erc721/__generated__/Multiwrap/write/initialize.d.ts +121 -0
  134. package/dist/types/extensions/erc721/__generated__/Multiwrap/write/initialize.d.ts.map +1 -0
  135. package/dist/types/extensions/erc721/__generated__/Multiwrap/write/unwrap.d.ts +86 -0
  136. package/dist/types/extensions/erc721/__generated__/Multiwrap/write/unwrap.d.ts.map +1 -0
  137. package/dist/types/extensions/erc721/__generated__/Multiwrap/write/wrap.d.ts +111 -0
  138. package/dist/types/extensions/erc721/__generated__/Multiwrap/write/wrap.d.ts.map +1 -0
  139. package/dist/types/extensions/prebuilts/deploy-erc721.d.ts +1 -1
  140. package/dist/types/extensions/prebuilts/deploy-erc721.d.ts.map +1 -1
  141. package/dist/types/version.d.ts +1 -1
  142. package/package.json +1 -1
  143. package/src/extensions/erc721/__generated__/LoyaltyCard/events/TokensMinted.ts +47 -0
  144. package/src/extensions/erc721/__generated__/LoyaltyCard/events/TokensMintedWithSignature.ts +55 -0
  145. package/src/extensions/erc721/__generated__/LoyaltyCard/read/nextTokenIdToMint.ts +70 -0
  146. package/src/extensions/erc721/__generated__/LoyaltyCard/read/supportsInterface.ts +130 -0
  147. package/src/extensions/erc721/__generated__/LoyaltyCard/read/tokenURI.ts +123 -0
  148. package/src/extensions/erc721/__generated__/LoyaltyCard/read/totalMinted.ts +70 -0
  149. package/src/extensions/erc721/__generated__/LoyaltyCard/write/cancel.ts +135 -0
  150. package/src/extensions/erc721/__generated__/LoyaltyCard/write/initialize.ts +255 -0
  151. package/src/extensions/erc721/__generated__/LoyaltyCard/write/mintTo.ts +148 -0
  152. package/src/extensions/erc721/__generated__/LoyaltyCard/write/mintWithSignature.ts +209 -0
  153. package/src/extensions/erc721/__generated__/LoyaltyCard/write/revoke.ts +135 -0
  154. package/src/extensions/erc721/__generated__/Multiwrap/events/TokensUnwrapped.ts +55 -0
  155. package/src/extensions/erc721/__generated__/Multiwrap/events/TokensWrapped.ts +53 -0
  156. package/src/extensions/erc721/__generated__/Multiwrap/read/contractType.ts +70 -0
  157. package/src/extensions/erc721/__generated__/Multiwrap/read/contractVersion.ts +70 -0
  158. package/src/extensions/erc721/__generated__/Multiwrap/read/getWrappedContents.ts +146 -0
  159. package/src/extensions/erc721/__generated__/Multiwrap/read/nextTokenIdToMint.ts +70 -0
  160. package/src/extensions/erc721/__generated__/Multiwrap/read/supportsInterface.ts +130 -0
  161. package/src/extensions/erc721/__generated__/Multiwrap/read/tokenURI.ts +123 -0
  162. package/src/extensions/erc721/__generated__/Multiwrap/write/initialize.ts +216 -0
  163. package/src/extensions/erc721/__generated__/Multiwrap/write/unwrap.ts +146 -0
  164. package/src/extensions/erc721/__generated__/Multiwrap/write/wrap.ts +197 -0
  165. package/src/extensions/prebuilts/deploy-erc721.test.ts +70 -2
  166. package/src/extensions/prebuilts/deploy-erc721.ts +17 -1
  167. package/src/version.ts +1 -1
@@ -0,0 +1,216 @@
1
+ import type { AbiParameterToPrimitiveType } from "abitype";
2
+ import type {
3
+ BaseTransactionOptions,
4
+ WithOverrides,
5
+ } from "../../../../../transaction/types.js";
6
+ import { prepareContractCall } from "../../../../../transaction/prepare-contract-call.js";
7
+ import { encodeAbiParameters } from "../../../../../utils/abi/encodeAbiParameters.js";
8
+ import { once } from "../../../../../utils/promise/once.js";
9
+ import { detectMethod } from "../../../../../utils/bytecode/detectExtension.js";
10
+
11
+ /**
12
+ * Represents the parameters for the "initialize" function.
13
+ */
14
+ export type InitializeParams = WithOverrides<{
15
+ defaultAdmin: AbiParameterToPrimitiveType<{
16
+ type: "address";
17
+ name: "_defaultAdmin";
18
+ }>;
19
+ name: AbiParameterToPrimitiveType<{ type: "string"; name: "_name" }>;
20
+ symbol: AbiParameterToPrimitiveType<{ type: "string"; name: "_symbol" }>;
21
+ contractURI: AbiParameterToPrimitiveType<{
22
+ type: "string";
23
+ name: "_contractURI";
24
+ }>;
25
+ trustedForwarders: AbiParameterToPrimitiveType<{
26
+ type: "address[]";
27
+ name: "_trustedForwarders";
28
+ }>;
29
+ royaltyRecipient: AbiParameterToPrimitiveType<{
30
+ type: "address";
31
+ name: "_royaltyRecipient";
32
+ }>;
33
+ royaltyBps: AbiParameterToPrimitiveType<{
34
+ type: "uint256";
35
+ name: "_royaltyBps";
36
+ }>;
37
+ }>;
38
+
39
+ export const FN_SELECTOR = "0x754b8fe7" as const;
40
+ const FN_INPUTS = [
41
+ {
42
+ type: "address",
43
+ name: "_defaultAdmin",
44
+ },
45
+ {
46
+ type: "string",
47
+ name: "_name",
48
+ },
49
+ {
50
+ type: "string",
51
+ name: "_symbol",
52
+ },
53
+ {
54
+ type: "string",
55
+ name: "_contractURI",
56
+ },
57
+ {
58
+ type: "address[]",
59
+ name: "_trustedForwarders",
60
+ },
61
+ {
62
+ type: "address",
63
+ name: "_royaltyRecipient",
64
+ },
65
+ {
66
+ type: "uint256",
67
+ name: "_royaltyBps",
68
+ },
69
+ ] as const;
70
+ const FN_OUTPUTS = [] as const;
71
+
72
+ /**
73
+ * Checks if the `initialize` method is supported by the given contract.
74
+ * @param availableSelectors An array of 4byte function selectors of the contract. You can get this in various ways, such as using "whatsabi" or if you have the ABI of the contract available you can use it to generate the selectors.
75
+ * @returns A boolean indicating if the `initialize` method is supported.
76
+ * @extension ERC721
77
+ * @example
78
+ * ```ts
79
+ * import { isInitializeSupported } from "thirdweb/extensions/erc721";
80
+ *
81
+ * const supported = isInitializeSupported(["0x..."]);
82
+ * ```
83
+ */
84
+ export function isInitializeSupported(availableSelectors: string[]) {
85
+ return detectMethod({
86
+ availableSelectors,
87
+ method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const,
88
+ });
89
+ }
90
+
91
+ /**
92
+ * Encodes the parameters for the "initialize" function.
93
+ * @param options - The options for the initialize function.
94
+ * @returns The encoded ABI parameters.
95
+ * @extension ERC721
96
+ * @example
97
+ * ```ts
98
+ * import { encodeInitializeParams } from "thirdweb/extensions/erc721";
99
+ * const result = encodeInitializeParams({
100
+ * defaultAdmin: ...,
101
+ * name: ...,
102
+ * symbol: ...,
103
+ * contractURI: ...,
104
+ * trustedForwarders: ...,
105
+ * royaltyRecipient: ...,
106
+ * royaltyBps: ...,
107
+ * });
108
+ * ```
109
+ */
110
+ export function encodeInitializeParams(options: InitializeParams) {
111
+ return encodeAbiParameters(FN_INPUTS, [
112
+ options.defaultAdmin,
113
+ options.name,
114
+ options.symbol,
115
+ options.contractURI,
116
+ options.trustedForwarders,
117
+ options.royaltyRecipient,
118
+ options.royaltyBps,
119
+ ]);
120
+ }
121
+
122
+ /**
123
+ * Encodes the "initialize" function into a Hex string with its parameters.
124
+ * @param options - The options for the initialize function.
125
+ * @returns The encoded hexadecimal string.
126
+ * @extension ERC721
127
+ * @example
128
+ * ```ts
129
+ * import { encodeInitialize } from "thirdweb/extensions/erc721";
130
+ * const result = encodeInitialize({
131
+ * defaultAdmin: ...,
132
+ * name: ...,
133
+ * symbol: ...,
134
+ * contractURI: ...,
135
+ * trustedForwarders: ...,
136
+ * royaltyRecipient: ...,
137
+ * royaltyBps: ...,
138
+ * });
139
+ * ```
140
+ */
141
+ export function encodeInitialize(options: InitializeParams) {
142
+ // we do a "manual" concat here to avoid the overhead of the "concatHex" function
143
+ // we can do this because we know the specific formats of the values
144
+ return (FN_SELECTOR +
145
+ encodeInitializeParams(options).slice(
146
+ 2,
147
+ )) as `${typeof FN_SELECTOR}${string}`;
148
+ }
149
+
150
+ /**
151
+ * Prepares a transaction to call the "initialize" function on the contract.
152
+ * @param options - The options for the "initialize" function.
153
+ * @returns A prepared transaction object.
154
+ * @extension ERC721
155
+ * @example
156
+ * ```ts
157
+ * import { sendTransaction } from "thirdweb";
158
+ * import { initialize } from "thirdweb/extensions/erc721";
159
+ *
160
+ * const transaction = initialize({
161
+ * contract,
162
+ * defaultAdmin: ...,
163
+ * name: ...,
164
+ * symbol: ...,
165
+ * contractURI: ...,
166
+ * trustedForwarders: ...,
167
+ * royaltyRecipient: ...,
168
+ * royaltyBps: ...,
169
+ * overrides: {
170
+ * ...
171
+ * }
172
+ * });
173
+ *
174
+ * // Send the transaction
175
+ * await sendTransaction({ transaction, account });
176
+ * ```
177
+ */
178
+ export function initialize(
179
+ options: BaseTransactionOptions<
180
+ | InitializeParams
181
+ | {
182
+ asyncParams: () => Promise<InitializeParams>;
183
+ }
184
+ >,
185
+ ) {
186
+ const asyncOptions = once(async () => {
187
+ return "asyncParams" in options ? await options.asyncParams() : options;
188
+ });
189
+
190
+ return prepareContractCall({
191
+ contract: options.contract,
192
+ method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const,
193
+ params: async () => {
194
+ const resolvedOptions = await asyncOptions();
195
+ return [
196
+ resolvedOptions.defaultAdmin,
197
+ resolvedOptions.name,
198
+ resolvedOptions.symbol,
199
+ resolvedOptions.contractURI,
200
+ resolvedOptions.trustedForwarders,
201
+ resolvedOptions.royaltyRecipient,
202
+ resolvedOptions.royaltyBps,
203
+ ] as const;
204
+ },
205
+ value: async () => (await asyncOptions()).overrides?.value,
206
+ accessList: async () => (await asyncOptions()).overrides?.accessList,
207
+ gas: async () => (await asyncOptions()).overrides?.gas,
208
+ gasPrice: async () => (await asyncOptions()).overrides?.gasPrice,
209
+ maxFeePerGas: async () => (await asyncOptions()).overrides?.maxFeePerGas,
210
+ maxPriorityFeePerGas: async () =>
211
+ (await asyncOptions()).overrides?.maxPriorityFeePerGas,
212
+ nonce: async () => (await asyncOptions()).overrides?.nonce,
213
+ extraGas: async () => (await asyncOptions()).overrides?.extraGas,
214
+ erc20Value: async () => (await asyncOptions()).overrides?.erc20Value,
215
+ });
216
+ }
@@ -0,0 +1,146 @@
1
+ import type { AbiParameterToPrimitiveType } from "abitype";
2
+ import type {
3
+ BaseTransactionOptions,
4
+ WithOverrides,
5
+ } from "../../../../../transaction/types.js";
6
+ import { prepareContractCall } from "../../../../../transaction/prepare-contract-call.js";
7
+ import { encodeAbiParameters } from "../../../../../utils/abi/encodeAbiParameters.js";
8
+ import { once } from "../../../../../utils/promise/once.js";
9
+ import { detectMethod } from "../../../../../utils/bytecode/detectExtension.js";
10
+
11
+ /**
12
+ * Represents the parameters for the "unwrap" function.
13
+ */
14
+ export type UnwrapParams = WithOverrides<{
15
+ tokenId: AbiParameterToPrimitiveType<{ type: "uint256"; name: "_tokenId" }>;
16
+ recipient: AbiParameterToPrimitiveType<{
17
+ type: "address";
18
+ name: "_recipient";
19
+ }>;
20
+ }>;
21
+
22
+ export const FN_SELECTOR = "0x7647691d" as const;
23
+ const FN_INPUTS = [
24
+ {
25
+ type: "uint256",
26
+ name: "_tokenId",
27
+ },
28
+ {
29
+ type: "address",
30
+ name: "_recipient",
31
+ },
32
+ ] as const;
33
+ const FN_OUTPUTS = [] as const;
34
+
35
+ /**
36
+ * Checks if the `unwrap` method is supported by the given contract.
37
+ * @param availableSelectors An array of 4byte function selectors of the contract. You can get this in various ways, such as using "whatsabi" or if you have the ABI of the contract available you can use it to generate the selectors.
38
+ * @returns A boolean indicating if the `unwrap` method is supported.
39
+ * @extension ERC721
40
+ * @example
41
+ * ```ts
42
+ * import { isUnwrapSupported } from "thirdweb/extensions/erc721";
43
+ *
44
+ * const supported = isUnwrapSupported(["0x..."]);
45
+ * ```
46
+ */
47
+ export function isUnwrapSupported(availableSelectors: string[]) {
48
+ return detectMethod({
49
+ availableSelectors,
50
+ method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const,
51
+ });
52
+ }
53
+
54
+ /**
55
+ * Encodes the parameters for the "unwrap" function.
56
+ * @param options - The options for the unwrap function.
57
+ * @returns The encoded ABI parameters.
58
+ * @extension ERC721
59
+ * @example
60
+ * ```ts
61
+ * import { encodeUnwrapParams } from "thirdweb/extensions/erc721";
62
+ * const result = encodeUnwrapParams({
63
+ * tokenId: ...,
64
+ * recipient: ...,
65
+ * });
66
+ * ```
67
+ */
68
+ export function encodeUnwrapParams(options: UnwrapParams) {
69
+ return encodeAbiParameters(FN_INPUTS, [options.tokenId, options.recipient]);
70
+ }
71
+
72
+ /**
73
+ * Encodes the "unwrap" function into a Hex string with its parameters.
74
+ * @param options - The options for the unwrap function.
75
+ * @returns The encoded hexadecimal string.
76
+ * @extension ERC721
77
+ * @example
78
+ * ```ts
79
+ * import { encodeUnwrap } from "thirdweb/extensions/erc721";
80
+ * const result = encodeUnwrap({
81
+ * tokenId: ...,
82
+ * recipient: ...,
83
+ * });
84
+ * ```
85
+ */
86
+ export function encodeUnwrap(options: UnwrapParams) {
87
+ // we do a "manual" concat here to avoid the overhead of the "concatHex" function
88
+ // we can do this because we know the specific formats of the values
89
+ return (FN_SELECTOR +
90
+ encodeUnwrapParams(options).slice(2)) as `${typeof FN_SELECTOR}${string}`;
91
+ }
92
+
93
+ /**
94
+ * Prepares a transaction to call the "unwrap" function on the contract.
95
+ * @param options - The options for the "unwrap" function.
96
+ * @returns A prepared transaction object.
97
+ * @extension ERC721
98
+ * @example
99
+ * ```ts
100
+ * import { sendTransaction } from "thirdweb";
101
+ * import { unwrap } from "thirdweb/extensions/erc721";
102
+ *
103
+ * const transaction = unwrap({
104
+ * contract,
105
+ * tokenId: ...,
106
+ * recipient: ...,
107
+ * overrides: {
108
+ * ...
109
+ * }
110
+ * });
111
+ *
112
+ * // Send the transaction
113
+ * await sendTransaction({ transaction, account });
114
+ * ```
115
+ */
116
+ export function unwrap(
117
+ options: BaseTransactionOptions<
118
+ | UnwrapParams
119
+ | {
120
+ asyncParams: () => Promise<UnwrapParams>;
121
+ }
122
+ >,
123
+ ) {
124
+ const asyncOptions = once(async () => {
125
+ return "asyncParams" in options ? await options.asyncParams() : options;
126
+ });
127
+
128
+ return prepareContractCall({
129
+ contract: options.contract,
130
+ method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const,
131
+ params: async () => {
132
+ const resolvedOptions = await asyncOptions();
133
+ return [resolvedOptions.tokenId, resolvedOptions.recipient] as const;
134
+ },
135
+ value: async () => (await asyncOptions()).overrides?.value,
136
+ accessList: async () => (await asyncOptions()).overrides?.accessList,
137
+ gas: async () => (await asyncOptions()).overrides?.gas,
138
+ gasPrice: async () => (await asyncOptions()).overrides?.gasPrice,
139
+ maxFeePerGas: async () => (await asyncOptions()).overrides?.maxFeePerGas,
140
+ maxPriorityFeePerGas: async () =>
141
+ (await asyncOptions()).overrides?.maxPriorityFeePerGas,
142
+ nonce: async () => (await asyncOptions()).overrides?.nonce,
143
+ extraGas: async () => (await asyncOptions()).overrides?.extraGas,
144
+ erc20Value: async () => (await asyncOptions()).overrides?.erc20Value,
145
+ });
146
+ }
@@ -0,0 +1,197 @@
1
+ import type { AbiParameterToPrimitiveType } from "abitype";
2
+ import type {
3
+ BaseTransactionOptions,
4
+ WithOverrides,
5
+ } from "../../../../../transaction/types.js";
6
+ import { prepareContractCall } from "../../../../../transaction/prepare-contract-call.js";
7
+ import { encodeAbiParameters } from "../../../../../utils/abi/encodeAbiParameters.js";
8
+ import { once } from "../../../../../utils/promise/once.js";
9
+ import { detectMethod } from "../../../../../utils/bytecode/detectExtension.js";
10
+
11
+ /**
12
+ * Represents the parameters for the "wrap" function.
13
+ */
14
+ export type WrapParams = WithOverrides<{
15
+ tokensToWrap: AbiParameterToPrimitiveType<{
16
+ type: "tuple[]";
17
+ name: "_tokensToWrap";
18
+ components: [
19
+ { type: "address"; name: "assetContract" },
20
+ { type: "uint8"; name: "tokenType" },
21
+ { type: "uint256"; name: "tokenId" },
22
+ { type: "uint256"; name: "amount" },
23
+ ];
24
+ }>;
25
+ uriForWrappedToken: AbiParameterToPrimitiveType<{
26
+ type: "string";
27
+ name: "_uriForWrappedToken";
28
+ }>;
29
+ recipient: AbiParameterToPrimitiveType<{
30
+ type: "address";
31
+ name: "_recipient";
32
+ }>;
33
+ }>;
34
+
35
+ export const FN_SELECTOR = "0x29e471dd" as const;
36
+ const FN_INPUTS = [
37
+ {
38
+ type: "tuple[]",
39
+ name: "_tokensToWrap",
40
+ components: [
41
+ {
42
+ type: "address",
43
+ name: "assetContract",
44
+ },
45
+ {
46
+ type: "uint8",
47
+ name: "tokenType",
48
+ },
49
+ {
50
+ type: "uint256",
51
+ name: "tokenId",
52
+ },
53
+ {
54
+ type: "uint256",
55
+ name: "amount",
56
+ },
57
+ ],
58
+ },
59
+ {
60
+ type: "string",
61
+ name: "_uriForWrappedToken",
62
+ },
63
+ {
64
+ type: "address",
65
+ name: "_recipient",
66
+ },
67
+ ] as const;
68
+ const FN_OUTPUTS = [
69
+ {
70
+ type: "uint256",
71
+ name: "tokenId",
72
+ },
73
+ ] as const;
74
+
75
+ /**
76
+ * Checks if the `wrap` method is supported by the given contract.
77
+ * @param availableSelectors An array of 4byte function selectors of the contract. You can get this in various ways, such as using "whatsabi" or if you have the ABI of the contract available you can use it to generate the selectors.
78
+ * @returns A boolean indicating if the `wrap` method is supported.
79
+ * @extension ERC721
80
+ * @example
81
+ * ```ts
82
+ * import { isWrapSupported } from "thirdweb/extensions/erc721";
83
+ *
84
+ * const supported = isWrapSupported(["0x..."]);
85
+ * ```
86
+ */
87
+ export function isWrapSupported(availableSelectors: string[]) {
88
+ return detectMethod({
89
+ availableSelectors,
90
+ method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const,
91
+ });
92
+ }
93
+
94
+ /**
95
+ * Encodes the parameters for the "wrap" function.
96
+ * @param options - The options for the wrap function.
97
+ * @returns The encoded ABI parameters.
98
+ * @extension ERC721
99
+ * @example
100
+ * ```ts
101
+ * import { encodeWrapParams } from "thirdweb/extensions/erc721";
102
+ * const result = encodeWrapParams({
103
+ * tokensToWrap: ...,
104
+ * uriForWrappedToken: ...,
105
+ * recipient: ...,
106
+ * });
107
+ * ```
108
+ */
109
+ export function encodeWrapParams(options: WrapParams) {
110
+ return encodeAbiParameters(FN_INPUTS, [
111
+ options.tokensToWrap,
112
+ options.uriForWrappedToken,
113
+ options.recipient,
114
+ ]);
115
+ }
116
+
117
+ /**
118
+ * Encodes the "wrap" function into a Hex string with its parameters.
119
+ * @param options - The options for the wrap function.
120
+ * @returns The encoded hexadecimal string.
121
+ * @extension ERC721
122
+ * @example
123
+ * ```ts
124
+ * import { encodeWrap } from "thirdweb/extensions/erc721";
125
+ * const result = encodeWrap({
126
+ * tokensToWrap: ...,
127
+ * uriForWrappedToken: ...,
128
+ * recipient: ...,
129
+ * });
130
+ * ```
131
+ */
132
+ export function encodeWrap(options: WrapParams) {
133
+ // we do a "manual" concat here to avoid the overhead of the "concatHex" function
134
+ // we can do this because we know the specific formats of the values
135
+ return (FN_SELECTOR +
136
+ encodeWrapParams(options).slice(2)) as `${typeof FN_SELECTOR}${string}`;
137
+ }
138
+
139
+ /**
140
+ * Prepares a transaction to call the "wrap" function on the contract.
141
+ * @param options - The options for the "wrap" function.
142
+ * @returns A prepared transaction object.
143
+ * @extension ERC721
144
+ * @example
145
+ * ```ts
146
+ * import { sendTransaction } from "thirdweb";
147
+ * import { wrap } from "thirdweb/extensions/erc721";
148
+ *
149
+ * const transaction = wrap({
150
+ * contract,
151
+ * tokensToWrap: ...,
152
+ * uriForWrappedToken: ...,
153
+ * recipient: ...,
154
+ * overrides: {
155
+ * ...
156
+ * }
157
+ * });
158
+ *
159
+ * // Send the transaction
160
+ * await sendTransaction({ transaction, account });
161
+ * ```
162
+ */
163
+ export function wrap(
164
+ options: BaseTransactionOptions<
165
+ | WrapParams
166
+ | {
167
+ asyncParams: () => Promise<WrapParams>;
168
+ }
169
+ >,
170
+ ) {
171
+ const asyncOptions = once(async () => {
172
+ return "asyncParams" in options ? await options.asyncParams() : options;
173
+ });
174
+
175
+ return prepareContractCall({
176
+ contract: options.contract,
177
+ method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const,
178
+ params: async () => {
179
+ const resolvedOptions = await asyncOptions();
180
+ return [
181
+ resolvedOptions.tokensToWrap,
182
+ resolvedOptions.uriForWrappedToken,
183
+ resolvedOptions.recipient,
184
+ ] as const;
185
+ },
186
+ value: async () => (await asyncOptions()).overrides?.value,
187
+ accessList: async () => (await asyncOptions()).overrides?.accessList,
188
+ gas: async () => (await asyncOptions()).overrides?.gas,
189
+ gasPrice: async () => (await asyncOptions()).overrides?.gasPrice,
190
+ maxFeePerGas: async () => (await asyncOptions()).overrides?.maxFeePerGas,
191
+ maxPriorityFeePerGas: async () =>
192
+ (await asyncOptions()).overrides?.maxPriorityFeePerGas,
193
+ nonce: async () => (await asyncOptions()).overrides?.nonce,
194
+ extraGas: async () => (await asyncOptions()).overrides?.extraGas,
195
+ erc20Value: async () => (await asyncOptions()).overrides?.erc20Value,
196
+ });
197
+ }
@@ -8,8 +8,6 @@ import { deployERC721Contract } from "./deploy-erc721.js";
8
8
 
9
9
  const account = TEST_ACCOUNT_B;
10
10
 
11
- // skip this test suite if there is no secret key available to test with
12
- // TODO: remove reliance on secret key during unit tests entirely
13
11
  describe.runIf(process.env.TW_SECRET_KEY)("deployERC721", () => {
14
12
  it("should deploy ERC721 open edition", async () => {
15
13
  const address = await deployERC721Contract({
@@ -21,6 +19,7 @@ describe.runIf(process.env.TW_SECRET_KEY)("deployERC721", () => {
21
19
  name: "OE",
22
20
  },
23
21
  });
22
+
24
23
  expect(address).toBeDefined();
25
24
  const deployedName = await name({
26
25
  contract: getContract({
@@ -31,4 +30,73 @@ describe.runIf(process.env.TW_SECRET_KEY)("deployERC721", () => {
31
30
  });
32
31
  expect(deployedName).toBe("OE");
33
32
  });
33
+
34
+ it("should deploy ERC721 drop", async () => {
35
+ const address = await deployERC721Contract({
36
+ client: TEST_CLIENT,
37
+ chain: ANVIL_CHAIN,
38
+ account,
39
+ type: "DropERC721",
40
+ params: {
41
+ name: "Drop",
42
+ symbol: "DRP",
43
+ },
44
+ });
45
+
46
+ expect(address).toBeDefined();
47
+ const deployedName = await name({
48
+ contract: getContract({
49
+ client: TEST_CLIENT,
50
+ chain: ANVIL_CHAIN,
51
+ address,
52
+ }),
53
+ });
54
+ expect(deployedName).toBe("Drop");
55
+ });
56
+
57
+ it("should deploy ERC721 token", async () => {
58
+ const address = await deployERC721Contract({
59
+ client: TEST_CLIENT,
60
+ chain: ANVIL_CHAIN,
61
+ account,
62
+ type: "TokenERC721",
63
+ params: {
64
+ name: "Token",
65
+ symbol: "TKN",
66
+ },
67
+ });
68
+
69
+ expect(address).toBeDefined();
70
+ const deployedName = await name({
71
+ contract: getContract({
72
+ client: TEST_CLIENT,
73
+ chain: ANVIL_CHAIN,
74
+ address,
75
+ }),
76
+ });
77
+ expect(deployedName).toBe("Token");
78
+ });
79
+
80
+ it("should deploy ERC721 loyalty card", async () => {
81
+ const address = await deployERC721Contract({
82
+ client: TEST_CLIENT,
83
+ chain: ANVIL_CHAIN,
84
+ account,
85
+ type: "LoyaltyCard",
86
+ params: {
87
+ name: "Loyalty",
88
+ symbol: "LOY",
89
+ },
90
+ });
91
+
92
+ expect(address).toBeDefined();
93
+ const deployedName = await name({
94
+ contract: getContract({
95
+ client: TEST_CLIENT,
96
+ chain: ANVIL_CHAIN,
97
+ address,
98
+ }),
99
+ });
100
+ expect(deployedName).toBe("Loyalty");
101
+ });
34
102
  });
@@ -6,6 +6,7 @@ import { upload } from "../../storage/upload.js";
6
6
  import type { FileOrBufferOrString } from "../../storage/upload/types.js";
7
7
  import type { Prettify } from "../../utils/type-utils.js";
8
8
  import type { ClientAndChainAndAccount } from "../../utils/types.js";
9
+ import { initialize as initLoyaltyCard } from "../erc721/__generated__/LoyaltyCard/write/initialize.js";
9
10
  import { initialize as initDropERC721 } from "./__generated__/DropERC721/write/initialize.js";
10
11
  import { initialize as initOpenEditionERC721 } from "./__generated__/OpenEditionERC721/write/initialize.js";
11
12
  import { initialize as initTokenERC721 } from "./__generated__/TokenERC721/write/initialize.js";
@@ -16,7 +17,8 @@ import { initialize as initTokenERC721 } from "./__generated__/TokenERC721/write
16
17
  export type ERC721ContractType =
17
18
  | "DropERC721"
18
19
  | "TokenERC721"
19
- | "OpenEditionERC721";
20
+ | "OpenEditionERC721"
21
+ | "LoyaltyCard";
20
22
 
21
23
  /**
22
24
  * @extension DEPLOY
@@ -167,5 +169,19 @@ async function getInitializeTransaction(options: {
167
169
  royaltyBps: params.royaltyBps || 0n,
168
170
  trustedForwarders: params.trustedForwarders || [],
169
171
  });
172
+ case "LoyaltyCard":
173
+ return initLoyaltyCard({
174
+ contract: implementationContract,
175
+ defaultAdmin: params.defaultAdmin || accountAddress,
176
+ name: params.name || "",
177
+ symbol: params.symbol || "",
178
+ contractURI,
179
+ royaltyRecipient: params.royaltyRecipient || accountAddress,
180
+ royaltyBps: params.royaltyBps || 0n,
181
+ trustedForwarders: params.trustedForwarders || [],
182
+ saleRecipient: params.saleRecipient || accountAddress,
183
+ platformFeeBps: params.platformFeeBps || 0n,
184
+ platformFeeRecipient: params.platformFeeRecipient || accountAddress,
185
+ });
170
186
  }
171
187
  }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.72.0-nightly-f64e0253d7de6fdb6f56ab49315cc4cdcdd75b20-20241127000345";
1
+ export const version = "5.72.0-nightly-e87eb2ff35eea1b94ab7bdae3585d819879ec53c-20241128000350";