@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.
- package/.turbo/turbo-build.log +7 -7
- package/CHANGELOG.md +9 -0
- package/dist/index.cjs +8 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -44
- package/dist/index.js.map +1 -1
- package/dist/sparks/mints-queries.d.ts.map +1 -0
- package/dist/{mints/mints-contracts.d.ts → sparks/sparks-contracts.d.ts} +3 -2
- package/dist/sparks/sparks-contracts.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/index.ts +2 -4
- package/src/premint/preminter.test.ts +1 -1
- package/src/{mints/mints-contracts.test.ts → sparks/sparks-contracts-test.ts} +64 -57
- package/src/{mints/mints-contracts.ts → sparks/sparks-contracts.ts} +7 -3
- package/src/sparks/sparks-sponsored-sparks-spender.test.ts +183 -0
- package/dist/mints/mints-contracts.d.ts.map +0 -1
- package/dist/mints/mints-eth-unwrapper-and-caller.d.ts +0 -55
- package/dist/mints/mints-eth-unwrapper-and-caller.d.ts.map +0 -1
- package/dist/mints/mints-queries.d.ts.map +0 -1
- package/dist/mints/mints-relay-example.d.ts +0 -60
- package/dist/mints/mints-relay-example.d.ts.map +0 -1
- package/src/mints/mints-eth-unwrapper-and-caller.test.ts +0 -467
- package/src/mints/mints-eth-unwrapper-and-caller.ts +0 -83
- package/src/mints/mints-relay-example.ts +0 -322
- /package/dist/{mints → sparks}/mints-queries.d.ts +0 -0
- /package/src/{mints → sparks}/mints-queries.test.ts +0 -0
- /package/src/{mints → sparks}/mints-queries.ts +0 -0
|
@@ -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=
|
|
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.
|
|
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.
|
|
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 "./
|
|
17
|
+
export * from "./sparks/mints-queries";
|
|
18
18
|
|
|
19
|
-
export * from "./
|
|
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,
|
|
@@ -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 "./
|
|
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
|
|
46
|
+
const sparksMainnetDeployedBlock = 17655716;
|
|
44
47
|
|
|
45
48
|
const anvilTest = makeAnvilTest({
|
|
46
49
|
forkUrl: forkUrls.zoraMainnet,
|
|
47
|
-
forkBlockNumber:
|
|
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
|
|
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
|
-
|
|
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
|
|
136
|
+
return tokenId;
|
|
140
137
|
};
|
|
141
138
|
|
|
142
|
-
describe("
|
|
139
|
+
describe("SPARKs collecting and redeeming.", () => {
|
|
143
140
|
anvilTest(
|
|
144
|
-
"can collect
|
|
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
|
|
153
|
+
const chainId = chain.id as keyof typeof zoraSparks1155Address;
|
|
157
154
|
|
|
158
155
|
const pricePerMint = await publicClient.readContract({
|
|
159
|
-
abi:
|
|
160
|
-
address:
|
|
161
|
-
functionName: "
|
|
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
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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(
|
|
185
|
+
expect(totalSparksBalance).toEqual(initialMintsQuantityToMint);
|
|
187
186
|
},
|
|
188
187
|
20_000,
|
|
189
188
|
);
|
|
190
|
-
anvilTest(
|
|
191
|
-
"can use
|
|
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
|
|
218
|
+
const initialSPARKsBalance = await publicClient.readContract(
|
|
220
219
|
mintsBalanceOfAccountParams({
|
|
221
220
|
account: collectorAccount!,
|
|
222
221
|
chainId: chainId,
|
|
223
222
|
}),
|
|
224
223
|
);
|
|
225
224
|
|
|
226
|
-
|
|
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
|
-
|
|
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(
|
|
251
|
+
).toEqual(initialSPARKsBalance + initialMintsQuantityToMint);
|
|
245
252
|
|
|
246
|
-
// 3. Use
|
|
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
|
|
262
|
+
// 4. Collect Premint using SPARK
|
|
256
263
|
|
|
257
264
|
const collectPremintSimulated = await publicClient.simulateContract(
|
|
258
265
|
collectPremintV2WithMintsParams({
|
|
259
|
-
tokenIds: [
|
|
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!,
|
|
286
|
+
args: [collectorAccount!, sparksTokenId],
|
|
280
287
|
});
|
|
281
288
|
|
|
282
289
|
expect(erc1155Balance).toBe(firstQuantityToCollect);
|
|
283
290
|
|
|
284
|
-
// 4. Use
|
|
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: [
|
|
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!,
|
|
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
|
-
|
|
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
|
|
365
|
-
const mintsTokenId = await
|
|
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
|
|
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
|
|
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
|
|
452
|
+
// 2. Collect some SPARKs
|
|
446
453
|
const initialMintsQuantityToMint = 20n;
|
|
447
454
|
|
|
448
|
-
const mintsTokenId = await
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
58
|
-
address:
|
|
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":"AAAA,OAAO,EAGL,mBAAmB,EAGnB,0BAA0B,EAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EACL,oBAAoB,EACpB,eAAe,EAChB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EACL,OAAO,EACP,OAAO,EACP,6BAA6B,EAC7B,GAAG,EACH,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EAIxB,MAAM,MAAM,CAAC;AAKd;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,6DAM3B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,mBAAmB,CAAC,OAAO,CAAC;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;CAC5B,6DAQG,CAAC;AAQL;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,0BAGrC;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,OAAO,mBAAmB,CAAC,OAAO,CAAC;CACnD,KAAG,sBAAsB,CACxB,OAAO,mBAAmB,CAAC,GAAG,EAC9B,kBAAkB,CAMlB,CAAC;AAEH,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,uBAAuB,EAAE,OAAO,CAAC;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,oBAAoB,CAAC;CACrC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gFAKhC,sBAAsB,kBAUrB,CAAC;AAEL;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,UAAU,EACV,OAAO,EACP,qBAAqB,EACrB,OAAO,EACP,aAAa,EACb,MAAM,EACN,uBAAuB,EACvB,sBAAsB,GACvB,EAAE;IACD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,OAAO,mBAAmB,CAAC,OAAO,CAAC;IAClD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;CAC5B,GAAG,sBAAsB,4DAoBzB;AAED,KAAK,6BAA6B,GAAG;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,mBAAmB,CAAC,OAAO,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,gBAAgB,EAAE,GAAG,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,GACb,EAAE;IACD,YAAY,EAAE,YAAY,CAAC;CAC5B,mBAcA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kCAAkC,CAAC,EACjD,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,EAAE,EACF,KAAK,EACL,QAAQ,EACR,gBAAgB,GACjB,EAAE,6BAA6B;;;;;;;;;;;EAuB/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,OAAO,EACP,QAAQ,EACR,OAAO,EACP,UAAU,EACV,EAAE,EACF,KAAK,EACL,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,OAAO,mBAAmB,CAAC,OAAO,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,gBAAgB,EAAE,GAAG,CAAC;CACvB;;;;;;;;;;;EAuBA;AAED,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,aAAa,EAAE,eAAe,CAAC;IAC/B,gBAAgB,EAAE,GAAG,CAAC;IACtB,aAAa,EAAE,oBAAoB,CAAC;IACpC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,QAAA,MAAM,sBAAsB,gGAMzB,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,YAAY,CAAC,kBAWtD,CAAC;AAEL;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sCAAsC,sFAYhD,IAAI,CAAC,6BAA6B,EAAE,IAAI,GAAG,kBAAkB,CAAC,GAC/D,CACI;IACE,OAAO,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,GACD;IACE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;CACvD,CACJ;;;;;;;;;;;CAqBF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,+BAA+B,CAAC,EAC9C,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,OAAO,EACP,OAAO,EACP,GAAG,IAAI,EACR,EAAE;IACD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,OAAO,mBAAmB,CAAC,OAAO,CAAC;IAClD,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;CAC5B,GAAG,sBAAsB,4DAazB;AAED,MAAM,MAAM,uBAAuB,GAAG,6BAA6B,CACjE,kBAAkB,CAChB,OAAO,mBAAmB,CAAC,GAAG,EAC9B,yBAAyB,CAC1B,CAAC,QAAQ,CAAC,CACZ,CAAC,CAAC,CAAC,CAAC;AAEL,MAAM,MAAM,kBAAkB,GAAG,6BAA6B,CAC5D,kBAAkB,CAChB,OAAO,mBAAmB,CAAC,GAAG,EAC9B,oBAAoB,CACrB,CAAC,QAAQ,CAAC,CACZ,CAAC,CAAC,CAAC,CAAC;AAEL,MAAM,MAAM,oBAAoB,GAAG,6BAA6B,CAC9D,kBAAkB,CAAC,OAAO,0BAA0B,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAC/E,CAAC,CAAC,CAAC,CAAC;AAEL;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUzE"}
|