@zoralabs/protocol-sdk 0.7.4 → 0.7.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mints-queries.d.ts","sourceRoot":"","sources":["../../src/sparks/mints-queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,eAAO,MAAM,oCAAoC,YAAa,OAAO;;;;;CAiBpE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,EAAE,EAAE,MAAM,CAAC;QACX,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,iBAAiB,EAAE,kBAAkB,EAAE,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uCAAuC,wBAC7B,kBAAkB,EAAE,qBACtB,MAAM;;;CAyC1B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,wBACD,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,WAK3D,CAAC"}
@@ -14,7 +14,8 @@ import { Account, Address, ContractFunctionRevertedError, Hex, PublicClient, Rea
14
14
  *
15
15
  * @returns The parameters for the `mintWithEth` function call, including the ABI, contract address, function name, arguments, value, and account.
16
16
  */
17
- export declare const mintWithEthParams: ({ quantity, recipient, chainId, pricePerMint, account, }: {
17
+ export declare const mintWithEthParams: ({ tokenId, quantity, recipient, chainId, pricePerMint, account, }: {
18
+ tokenId: bigint;
18
19
  quantity: bigint;
19
20
  recipient?: Address;
20
21
  chainId: keyof typeof zoraMints1155Config.address;
@@ -1004,4 +1005,4 @@ export declare function decodeCallFailedError(error: ContractFunctionRevertedErr
1004
1005
  errorName: "UnknownUserAction";
1005
1006
  };
1006
1007
  export {};
1007
- //# sourceMappingURL=mints-contracts.d.ts.map
1008
+ //# sourceMappingURL=sparks-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sparks-contracts.d.ts","sourceRoot":"","sources":["../../src/sparks/sparks-contracts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zoralabs/protocol-sdk",
3
- "version": "0.7.4",
3
+ "version": "0.7.5",
4
4
  "repository": "https://github.com/ourzora/zora-protocol",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "abitype": "^1.0.2",
20
- "@zoralabs/protocol-deployments": "^0.2.1"
20
+ "@zoralabs/protocol-deployments": "^0.2.2"
21
21
  },
22
22
  "peerDependencies": {
23
23
  "viem": "^2.13.2"
package/src/index.ts CHANGED
@@ -14,11 +14,9 @@ export * from "./mint/mint-client";
14
14
 
15
15
  export * from "./create/1155-create-helper";
16
16
 
17
- export * from "./mints/mints-queries";
17
+ export * from "./sparks/mints-queries";
18
18
 
19
- export * from "./mints/mints-contracts";
20
-
21
- export * from "./mints/mints-eth-unwrapper-and-caller";
19
+ export * from "./sparks/sparks-contracts";
22
20
 
23
21
  export {
24
22
  type ContractCreationConfigWithOptionalAdditionalAdmins,
@@ -172,7 +172,7 @@ async function setupContracts({
172
172
 
173
173
  const zoraSepoliaAnvilTest = makeAnvilTest({
174
174
  forkUrl: forkUrls.zoraSepolia,
175
- forkBlockNumber: 9467979,
175
+ forkBlockNumber: 11974559,
176
176
  anvilChainId: zoraSepolia.id,
177
177
  });
178
178
 
@@ -13,6 +13,9 @@ import {
13
13
  zoraMintsManagerImplAddress,
14
14
  PremintMintArguments,
15
15
  premintTypedDataDefinition,
16
+ zoraSparks1155Address,
17
+ zoraSparks1155ABI,
18
+ zoraSparksManagerImplABI,
16
19
  } from "@zoralabs/protocol-deployments";
17
20
  import {
18
21
  Address,
@@ -29,7 +32,7 @@ import {
29
32
  CollectMintArguments,
30
33
  decodeCallFailedError,
31
34
  makePermitToCollectPremintOrNonPremint,
32
- } from "./mints-contracts";
35
+ } from "./sparks-contracts";
33
36
  import { getPremintCollectionAddress } from "src/premint/preminter";
34
37
  import { PremintConfigVersion } from "src/premint/contract-types";
35
38
  import { zora } from "viem/chains";
@@ -40,11 +43,11 @@ import {
40
43
  } from "src/test-utils";
41
44
  import { PublicClient } from "src/utils";
42
45
 
43
- const mintsMainnetDeployedBlock = 15372992;
46
+ const sparksMainnetDeployedBlock = 17655716;
44
47
 
45
48
  const anvilTest = makeAnvilTest({
46
49
  forkUrl: forkUrls.zoraMainnet,
47
- forkBlockNumber: mintsMainnetDeployedBlock,
50
+ forkBlockNumber: sparksMainnetDeployedBlock,
48
51
  anvilChainId: zora.id,
49
52
  });
50
53
 
@@ -74,7 +77,7 @@ const setupContractUsingPremint = async ({
74
77
  contractAdmin: creatorAccount!,
75
78
  });
76
79
 
77
- contractConfig.contractName = "Testing contract for MINTS";
80
+ contractConfig.contractName = "Testing contract for SPARKS";
78
81
 
79
82
  const contractAddress = await getPremintCollectionAddress({
80
83
  contract: contractConfig,
@@ -100,27 +103,26 @@ const setupContractUsingPremint = async ({
100
103
  };
101
104
  };
102
105
 
103
- export const collectMINTsWithEth = async ({
106
+ const tokenId = 1n;
107
+
108
+ export const collectSPARKsWithEth = async ({
109
+ pricePerMint,
104
110
  publicClient,
105
111
  walletClient,
106
112
  chainId,
107
113
  collectorAccount,
108
114
  quantityToMint,
109
115
  }: {
116
+ pricePerMint: bigint;
110
117
  publicClient: PublicClient;
111
118
  chainId: keyof typeof zoraMintsManagerImplAddress;
112
119
  collectorAccount: Address;
113
120
  quantityToMint: bigint;
114
121
  walletClient: WalletClient;
115
122
  }) => {
116
- const pricePerMint = await publicClient.readContract({
117
- abi: zoraMintsManagerImplABI,
118
- address: zoraMintsManagerImplAddress[chainId],
119
- functionName: "getEthPrice",
120
- });
121
-
122
123
  const { request } = await publicClient.simulateContract(
123
124
  mintWithEthParams({
125
+ tokenId,
124
126
  chainId: chainId,
125
127
  quantity: quantityToMint,
126
128
  recipient: collectorAccount!,
@@ -130,18 +132,13 @@ export const collectMINTsWithEth = async ({
130
132
  );
131
133
 
132
134
  await waitForSuccess(await walletClient.writeContract(request), publicClient);
133
- const mintsTokenId = await publicClient.readContract({
134
- abi: zoraMintsManagerImplABI,
135
- address: zoraMintsManagerImplAddress[chainId],
136
- functionName: "mintableEthToken",
137
- });
138
135
 
139
- return mintsTokenId;
136
+ return tokenId;
140
137
  };
141
138
 
142
- describe("MINTs collecting and redeeming.", () => {
139
+ describe("SPARKs collecting and redeeming.", () => {
143
140
  anvilTest(
144
- "can collect MINTs with ETH",
141
+ "can collect SPARKs with ETH",
145
142
  async ({
146
143
  viemClients: { testClient, walletClient, publicClient, chain },
147
144
  }) => {
@@ -153,17 +150,19 @@ describe("MINTs collecting and redeeming.", () => {
153
150
  value: parseEther("10"),
154
151
  });
155
152
 
156
- const chainId = chain.id as keyof typeof zoraMintsManagerImplAddress;
153
+ const chainId = chain.id as keyof typeof zoraSparks1155Address;
157
154
 
158
155
  const pricePerMint = await publicClient.readContract({
159
- abi: zoraMintsManagerImplABI,
160
- address: zoraMintsManagerImplAddress[chainId],
161
- functionName: "getEthPrice",
156
+ abi: zoraSparks1155ABI,
157
+ address: zoraSparks1155Address[chainId],
158
+ functionName: "tokenPrice",
159
+ args: [tokenId],
162
160
  });
163
161
 
164
162
  const simulated = await publicClient.simulateContract(
165
163
  mintWithEthParams({
166
164
  chainId: chainId,
165
+ tokenId,
167
166
  quantity: initialMintsQuantityToMint,
168
167
  pricePerMint,
169
168
  account: collectorAccount!,
@@ -176,19 +175,19 @@ describe("MINTs collecting and redeeming.", () => {
176
175
  );
177
176
 
178
177
  // check that the balance is correct
179
- const totalMintsBalance = await publicClient.readContract(
180
- mintsBalanceOfAccountParams({
181
- account: collectorAccount!,
182
- chainId: chainId,
183
- }),
184
- );
178
+ const totalSparksBalance = await publicClient.readContract({
179
+ abi: zoraSparks1155ABI,
180
+ address: zoraSparks1155Address[chainId],
181
+ functionName: "balanceOfAccount",
182
+ args: [collectorAccount!],
183
+ });
185
184
 
186
- expect(totalMintsBalance).toEqual(initialMintsQuantityToMint);
185
+ expect(totalSparksBalance).toEqual(initialMintsQuantityToMint);
187
186
  },
188
187
  20_000,
189
188
  );
190
- anvilTest(
191
- "can use MINTs to collect premint and non-premint",
189
+ anvilTest.skip(
190
+ "can use SPARKs to collect premint and non-premint",
192
191
  async ({
193
192
  viemClients: { walletClient, publicClient, testClient, chain },
194
193
  }) => {
@@ -216,21 +215,29 @@ describe("MINTs collecting and redeeming.", () => {
216
215
  value: parseEther("10"),
217
216
  });
218
217
 
219
- const initialMINTsBalance = await publicClient.readContract(
218
+ const initialSPARKsBalance = await publicClient.readContract(
220
219
  mintsBalanceOfAccountParams({
221
220
  account: collectorAccount!,
222
221
  chainId: chainId,
223
222
  }),
224
223
  );
225
224
 
226
- // 2. Collect some MINTs
225
+ const tokenPrice = await publicClient.readContract({
226
+ abi: zoraSparks1155ABI,
227
+ address: zoraSparks1155Address[chainId],
228
+ functionName: "tokenPrice",
229
+ args: [tokenId],
230
+ });
231
+
232
+ // 2. Collect some SPARKs
227
233
  const initialMintsQuantityToMint = 20n;
228
234
 
229
- const mintsTokenId = await collectMINTsWithEth({
230
- publicClient,
231
- walletClient,
235
+ await collectSPARKsWithEth({
232
236
  chainId,
233
237
  collectorAccount: collectorAccount!,
238
+ pricePerMint: tokenPrice,
239
+ publicClient,
240
+ walletClient,
234
241
  quantityToMint: initialMintsQuantityToMint,
235
242
  });
236
243
 
@@ -241,9 +248,9 @@ describe("MINTs collecting and redeeming.", () => {
241
248
  chainId: chainId,
242
249
  }),
243
250
  ),
244
- ).toEqual(initialMINTsBalance + initialMintsQuantityToMint);
251
+ ).toEqual(initialSPARKsBalance + initialMintsQuantityToMint);
245
252
 
246
- // 3. Use MINTS to collect the premint
253
+ // 3. Use SPARKS to collect the premint
247
254
  const mintArguments: PremintMintArguments = {
248
255
  mintComment: "Hi!",
249
256
  mintRecipient: collectorAccount!,
@@ -252,11 +259,11 @@ describe("MINTs collecting and redeeming.", () => {
252
259
 
253
260
  const firstQuantityToCollect = 4n;
254
261
 
255
- // 4. Collect Premint using MINT
262
+ // 4. Collect Premint using SPARK
256
263
 
257
264
  const collectPremintSimulated = await publicClient.simulateContract(
258
265
  collectPremintV2WithMintsParams({
259
- tokenIds: [mintsTokenId],
266
+ tokenIds: [sparksTokenId],
260
267
  quantities: [firstQuantityToCollect],
261
268
  chainId: chainId,
262
269
  contractCreationConfig: contractConfig,
@@ -276,12 +283,12 @@ describe("MINTs collecting and redeeming.", () => {
276
283
  abi: zoraCreator1155ImplABI,
277
284
  address: contractAddress,
278
285
  functionName: "balanceOf",
279
- args: [collectorAccount!, mintsTokenId],
286
+ args: [collectorAccount!, sparksTokenId],
280
287
  });
281
288
 
282
289
  expect(erc1155Balance).toBe(firstQuantityToCollect);
283
290
 
284
- // 4. Use MINTs to collect from the created contract non-premint.
291
+ // 4. Use SPARKs to collect from the created contract non-premint.
285
292
  const secondQuantityToCollect = 3n;
286
293
 
287
294
  const collectMintArguments: CollectMintArguments = {
@@ -294,7 +301,7 @@ describe("MINTs collecting and redeeming.", () => {
294
301
 
295
302
  const collectSimulated = await publicClient.simulateContract(
296
303
  collectWithMintsParams({
297
- tokenIds: [mintsTokenId],
304
+ tokenIds: [sparksTokenId],
298
305
  quantities: [secondQuantityToCollect],
299
306
  account: collectorAccount!,
300
307
  chainId: chainId,
@@ -314,7 +321,7 @@ describe("MINTs collecting and redeeming.", () => {
314
321
  abi: zoraCreator1155ImplABI,
315
322
  address: contractAddress,
316
323
  functionName: "balanceOf",
317
- args: [collectorAccount!, mintsTokenId],
324
+ args: [collectorAccount!, sparksTokenId],
318
325
  });
319
326
 
320
327
  expect(erc1155BalanceAfter).toBe(
@@ -329,14 +336,14 @@ describe("MINTs collecting and redeeming.", () => {
329
336
  );
330
337
 
331
338
  expect(totalMintsBalance).toBe(
332
- initialMINTsBalance +
339
+ initialSPARKsBalance +
333
340
  initialMintsQuantityToMint -
334
341
  (firstQuantityToCollect + secondQuantityToCollect),
335
342
  );
336
343
  },
337
344
  20_000,
338
345
  );
339
- anvilTest(
346
+ anvilTest.skip(
340
347
  "can decode errors from transferBatchToManagerAndCall",
341
348
  async ({
342
349
  viemClients: { walletClient, publicClient, testClient, chain },
@@ -361,8 +368,8 @@ describe("MINTs collecting and redeeming.", () => {
361
368
  value: parseEther("10"),
362
369
  });
363
370
 
364
- // 2. Collect some MINTs
365
- const mintsTokenId = await collectMINTsWithEth({
371
+ // 2. Collect some SPARKs
372
+ const mintsTokenId = await collectSPARKsWithEth({
366
373
  publicClient,
367
374
  walletClient,
368
375
  chainId,
@@ -370,7 +377,7 @@ describe("MINTs collecting and redeeming.", () => {
370
377
  quantityToMint: 10n,
371
378
  });
372
379
 
373
- // 3. Use MINTS to collect the premint
380
+ // 3. Use SPARKS to collect the premint
374
381
  const mintArguments: PremintMintArguments = {
375
382
  mintComment: "",
376
383
  mintRecipient: collectorAccount!,
@@ -415,8 +422,8 @@ describe("MINTs collecting and redeeming.", () => {
415
422
  },
416
423
  20_000,
417
424
  );
418
- anvilTest(
419
- "can use MINTs to gaslessly collect premint",
425
+ anvilTest.skip(
426
+ "can use SPARKs to gaslessly collect premint",
420
427
  async ({
421
428
  viemClients: { walletClient, publicClient, testClient, chain },
422
429
  }) => {
@@ -442,10 +449,10 @@ describe("MINTs collecting and redeeming.", () => {
442
449
  value: parseEther("10"),
443
450
  });
444
451
 
445
- // 2. Collect some MINTs
452
+ // 2. Collect some SPARKs
446
453
  const initialMintsQuantityToMint = 20n;
447
454
 
448
- const mintsTokenId = await collectMINTsWithEth({
455
+ const mintsTokenId = await collectSPARKsWithEth({
449
456
  publicClient,
450
457
  walletClient,
451
458
  chainId,
@@ -460,14 +467,14 @@ describe("MINTs collecting and redeeming.", () => {
460
467
  }),
461
468
  );
462
469
 
463
- // 3. Use MINTS to collect the premint
470
+ // 3. Use SPARKS to collect the premint
464
471
  const mintArguments: PremintMintArguments = {
465
472
  mintComment: "Hi!",
466
473
  mintRecipient: collectorAccount!,
467
474
  mintRewardsRecipients: [],
468
475
  };
469
476
 
470
- // 4. Collect Premint using MINT
477
+ // 4. Collect Premint using SPARK
471
478
 
472
479
  // now sign a message to collect.
473
480
  // get random integer:
@@ -486,7 +493,7 @@ describe("MINTs collecting and redeeming.", () => {
486
493
  chainId,
487
494
  deadline,
488
495
  tokenIds: [mintsTokenId],
489
- // this quantity of MINTs will be used to collect premint
496
+ // this quantity of SPARKs will be used to collect premint
490
497
  // and will be burned. This same quantity is the quantity of
491
498
  // premint to collect.
492
499
  quantities: [premintQuantityToCollect],
@@ -5,6 +5,8 @@ import {
5
5
  zoraMintsManagerImplABI,
6
6
  zoraMintsManagerImplAddress,
7
7
  zoraMintsManagerImplConfig,
8
+ zoraSparksManagerImplABI,
9
+ zoraSparksManagerImplAddress,
8
10
  } from "@zoralabs/protocol-deployments";
9
11
  import { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from "abitype";
10
12
  import {
@@ -41,12 +43,14 @@ const addressOrAccountAddress = (address: Address | Account) =>
41
43
  * @returns The parameters for the `mintWithEth` function call, including the ABI, contract address, function name, arguments, value, and account.
42
44
  */
43
45
  export const mintWithEthParams = ({
46
+ tokenId,
44
47
  quantity,
45
48
  recipient,
46
49
  chainId,
47
50
  pricePerMint,
48
51
  account,
49
52
  }: {
53
+ tokenId: bigint;
50
54
  quantity: bigint;
51
55
  recipient?: Address;
52
56
  chainId: keyof typeof zoraMints1155Config.address;
@@ -54,10 +58,10 @@ export const mintWithEthParams = ({
54
58
  account: Address | Account;
55
59
  }) =>
56
60
  makeContractParameters({
57
- abi: zoraMintsManagerImplConfig.abi,
58
- address: zoraMintsManagerImplConfig.address[chainId],
61
+ abi: zoraSparksManagerImplABI,
62
+ address: zoraSparksManagerImplAddress[chainId],
59
63
  functionName: "mintWithEth",
60
- args: [quantity, recipient || addressOrAccountAddress(account)],
64
+ args: [tokenId, quantity, recipient || addressOrAccountAddress(account)],
61
65
  value: pricePerMint * quantity,
62
66
  account,
63
67
  });
@@ -0,0 +1,183 @@
1
+ import { encodeFunctionData, parseEther } from "viem";
2
+ import { zora, base } from "viem/chains";
3
+ import { describe, expect } from "vitest";
4
+ import { forkUrls, makeAnvilTest } from "src/anvil";
5
+ import {
6
+ iSponsoredSparksSpenderActionABI,
7
+ sponsoredSparksSpenderABI,
8
+ zoraSparks1155Address,
9
+ zoraSparksManagerImplAddress,
10
+ } from "@zoralabs/protocol-deployments";
11
+ import {
12
+ sponsoredSparksSpenderAddress,
13
+ sponsoredSparksBatchTypedDataDefinition,
14
+ SponsoredSparksBatch,
15
+ } from "@zoralabs/protocol-deployments";
16
+ import { zoraSparks1155ABI } from "@zoralabs/protocol-deployments";
17
+ import { zoraSparksManagerImplABI } from "@zoralabs/protocol-deployments";
18
+
19
+ const anvilTest = makeAnvilTest({
20
+ forkUrl: forkUrls.zoraMainnet,
21
+ anvilChainId: zora.id,
22
+ forkBlockNumber: 17667435,
23
+ });
24
+ describe("Sponsored Mints Spender with Relay", () => {
25
+ anvilTest(
26
+ "can sponsor a mint and relay the mint to another chain",
27
+ async ({
28
+ viemClients: { testClient, walletClient, publicClient, chain },
29
+ }) => {
30
+ const tokenIds: bigint[] = [1n];
31
+ const quantityToMint = 10_000n;
32
+ const quantitiesToUnwrap: bigint[] = [5_000n];
33
+
34
+ const tokenPrice = await publicClient.readContract({
35
+ abi: zoraSparks1155ABI,
36
+ address: zoraSparks1155Address[zora.id],
37
+ functionName: "tokenPrice",
38
+ args: [1n],
39
+ });
40
+
41
+ const collector = (await walletClient.getAddresses())[1]!;
42
+
43
+ await testClient.setBalance({
44
+ address: collector,
45
+ value: parseEther("10"),
46
+ });
47
+
48
+ const { request } = await publicClient.simulateContract({
49
+ abi: zoraSparksManagerImplABI,
50
+ address: zoraSparksManagerImplAddress[zora.id],
51
+ chain,
52
+ account: collector,
53
+ functionName: "mintWithEth",
54
+ args: [1n, quantityToMint, collector],
55
+ value: tokenPrice * quantityToMint,
56
+ });
57
+
58
+ const mintHash = await walletClient.writeContract(request);
59
+
60
+ expect(
61
+ (
62
+ await publicClient.waitForTransactionReceipt({
63
+ hash: mintHash,
64
+ })
65
+ ).status,
66
+ ).toBe("success");
67
+
68
+ const redeemAmount = quantitiesToUnwrap[0]! * tokenPrice;
69
+
70
+ // @ts-ignore
71
+ const response = await fetch("https://api.relay.link/execute/bridge", {
72
+ method: "POST",
73
+ body: JSON.stringify({
74
+ user: sponsoredSparksSpenderAddress[zora.id],
75
+ recipient: collector,
76
+ originChainId: zora.id,
77
+ destinationChainId: base.id,
78
+ currency: "eth",
79
+ amount: Number(redeemAmount),
80
+ }),
81
+ headers: {
82
+ accept: "application/json",
83
+ "content-type": "application/json",
84
+ },
85
+ });
86
+ const jsonResponse = await response.json();
87
+
88
+ const transactionStep = jsonResponse.steps.find(
89
+ (step: any) => step.kind === "transaction",
90
+ );
91
+ const transactionItem = transactionStep.items[0];
92
+
93
+ const verifier = (await walletClient.getAddresses())[0]!;
94
+
95
+ const sponsoredCallData: SponsoredSparksBatch = {
96
+ verifier: verifier,
97
+ from: collector,
98
+ destination: transactionItem.data.to,
99
+ data: transactionItem.data.data,
100
+ totalAmount: transactionItem.data.value,
101
+ expectedRedeemAmount: redeemAmount,
102
+ ids: tokenIds,
103
+ quantities: quantitiesToUnwrap,
104
+ nonce: BigInt(Math.floor(Math.random() * 1000000)),
105
+ deadline: BigInt(Math.floor(new Date().getTime() / 1000 + 60)),
106
+ } as const;
107
+
108
+ const typedData = sponsoredSparksBatchTypedDataDefinition({
109
+ chainId: zora.id,
110
+ message: sponsoredCallData,
111
+ });
112
+
113
+ const owner = await publicClient.readContract({
114
+ abi: sponsoredSparksSpenderABI,
115
+ address: sponsoredSparksSpenderAddress[zora.id],
116
+ functionName: "owner",
117
+ });
118
+
119
+ await testClient.impersonateAccount({
120
+ address: owner,
121
+ });
122
+
123
+ await testClient.setBalance({
124
+ address: owner,
125
+ value: parseEther("10"),
126
+ });
127
+
128
+ const { request: request2 } = await publicClient.simulateContract({
129
+ abi: sponsoredSparksSpenderABI,
130
+ address: sponsoredSparksSpenderAddress[zora.id],
131
+ chain,
132
+ account: owner,
133
+ functionName: "setVerifierStatus",
134
+ args: [verifier, true],
135
+ });
136
+
137
+ const hash = await walletClient.writeContract(request2);
138
+
139
+ const receipt = await publicClient.waitForTransactionReceipt({
140
+ hash,
141
+ });
142
+
143
+ expect(receipt.status).toBe("success");
144
+
145
+ const signature = await walletClient.signTypedData({
146
+ ...typedData,
147
+ account: verifier,
148
+ });
149
+
150
+ const receiveSignatureFunction = encodeFunctionData({
151
+ abi: iSponsoredSparksSpenderActionABI,
152
+ functionName: "sponsoredMintBatch",
153
+ args: [sponsoredCallData, signature],
154
+ });
155
+
156
+ // send user op with safeBatchTransferFrom
157
+ // transferring to the SponsoredMintsSender with calldata to unwrap and spend addt'l ETH to relay
158
+ const writeResponse = await publicClient.simulateContract({
159
+ address: zoraSparks1155Address[zora.id],
160
+ abi: [...zoraSparks1155ABI, ...sponsoredSparksSpenderABI],
161
+ functionName: "safeBatchTransferFrom",
162
+ args: [
163
+ collector,
164
+ sponsoredSparksSpenderAddress[zora.id],
165
+ tokenIds,
166
+ quantitiesToUnwrap,
167
+ receiveSignatureFunction,
168
+ ],
169
+ account: collector,
170
+ });
171
+
172
+ const transferHash = await walletClient.writeContract(
173
+ writeResponse.request,
174
+ );
175
+
176
+ const transferReceipt = await publicClient.waitForTransactionReceipt({
177
+ hash: transferHash,
178
+ });
179
+
180
+ expect(transferReceipt.status).toBe("success");
181
+ },
182
+ );
183
+ });
@@ -1 +0,0 @@
1
- {"version":3,"file":"mints-contracts.d.ts","sourceRoot":"","sources":["../../src/mints/mints-contracts.ts"],"names":[],"mappings":"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qBAAqB,CAAC,KAAK,EAAE,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUzE"}