@zoralabs/protocol-sdk 0.11.7 → 0.11.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"rewards-queries.d.ts","sourceRoot":"","sources":["../../src/rewards/rewards-queries.ts"],"names":[],"mappings":"AAOA,OAAO,EAA0B,YAAY,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAgC,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AA6C3D,KAAK,cAAc,GAAG;IAEpB,eAAe,EAAE,MAAM,CAAC;IAExB,kBAAkB,EAAE;QAElB,GAAG,EAAE,MAAM,CAAC;QAEZ,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,iBAAiB,uDAK3B;IACD,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,cAAc,CAAC;CAC/B,KAAG,OAAO,CAAC,cAAc,CA4CzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,8BAGjC;IAED,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,6DAQA,CAAC;AAiCF,wBAAsB,0BAA0B,CAAC,EAC/C,QAAQ,EACR,OAAO,EACP,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,cAAc,CAAC;CAC/B,qEAaA;AA+BD,eAAO,MAAM,eAAe,+EAMzB;IACD,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,cAAc,CAAC;CAC/B,sEAiBA,CAAC"}
1
+ {"version":3,"file":"rewards-queries.d.ts","sourceRoot":"","sources":["../../src/rewards/rewards-queries.ts"],"names":[],"mappings":"AAOA,OAAO,EAA0B,YAAY,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAgC,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AA6C3D,KAAK,cAAc,GAAG;IAEpB,eAAe,EAAE,MAAM,CAAC;IAExB,kBAAkB,EAAE;QAElB,GAAG,EAAE,MAAM,CAAC;QAEZ,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,iBAAiB,uDAK3B;IACD,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,cAAc,CAAC;CAC/B,KAAG,OAAO,CAAC,cAAc,CAkDzB,CAAC;AAEF,eAAO,MAAM,uBAAuB,8BAGjC;IAED,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,6DAQA,CAAC;AAqCF,wBAAsB,0BAA0B,CAAC,EAC/C,QAAQ,EACR,OAAO,EACP,aAAa,GACd,EAAE;IACD,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,cAAc,CAAC;CAC/B,qEAaA;AA+BD,eAAO,MAAM,eAAe,+EAMzB;IACD,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,cAAc,CAAC;CAC/B,sEAiBA,CAAC"}
@@ -3,7 +3,8 @@ import { Address } from "viem";
3
3
  export type RewardsToken = {
4
4
  salesStrategies: [
5
5
  {
6
- zoraTimedMinter: {
6
+ zoraTimedMinter?: {
7
+ secondaryActivated: boolean;
7
8
  erc20Z: {
8
9
  id: Address;
9
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"subgraph-queries.d.ts","sourceRoot":"","sources":["../../src/rewards/subgraph-queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG;IACzB,eAAe,EAAE;QACf;YACE,eAAe,EAAE;gBACf,MAAM,EAAE;oBACN,EAAE,EAAE,OAAO,CAAC;iBACb,CAAC;aACH,CAAC;SACH;KACF,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,gBAAgB,EAAE,YAAY,EAAE,CAAC;CAClC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,GACR,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,cAAc,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC,CAyB/D"}
1
+ {"version":3,"file":"subgraph-queries.d.ts","sourceRoot":"","sources":["../../src/rewards/subgraph-queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,MAAM,YAAY,GAAG;IACzB,eAAe,EAAE;QACf;YACE,eAAe,CAAC,EAAE;gBAChB,kBAAkB,EAAE,OAAO,CAAC;gBAC5B,MAAM,EAAE;oBACN,EAAE,EAAE,OAAO,CAAC;iBACb,CAAC;aACH,CAAC;SACH;KACF,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,gBAAgB,EAAE,YAAY,EAAE,CAAC;CAClC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,GACR,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,cAAc,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC,CA0B/D"}
@@ -4,12 +4,18 @@ import { Address } from "viem";
4
4
  export interface IRewardsGetter {
5
5
  getErc20ZzForCreator: (params: {
6
6
  address: Address;
7
- }) => Promise<Address[]>;
7
+ }) => Promise<{
8
+ secondaryActivated: boolean;
9
+ erc20z: Address;
10
+ }[]>;
8
11
  }
9
12
  export declare class SubgraphRewardsGetter extends SubgraphGetter implements IRewardsGetter {
10
13
  constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier);
11
- getErc20ZzForCreator({ address, }: {
14
+ getErc20ZzForCreator({ address }: {
12
15
  address: Address;
13
- }): Promise<Address[]>;
16
+ }): Promise<{
17
+ secondaryActivated: boolean;
18
+ erc20z: Address;
19
+ }[]>;
14
20
  }
15
21
  //# sourceMappingURL=subgraph-rewards-getter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subgraph-rewards-getter.d.ts","sourceRoot":"","sources":["../../src/rewards/subgraph-rewards-getter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,MAAM,WAAW,cAAc;IAC7B,oBAAoB,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAC5E;AAED,qBAAa,qBACX,SAAQ,cACR,YAAW,cAAc;gBAEb,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,gBAAgB;IAIzD,oBAAoB,CAAC,EACzB,OAAO,GACR,EAAE;QACD,OAAO,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAWvB"}
1
+ {"version":3,"file":"subgraph-rewards-getter.d.ts","sourceRoot":"","sources":["../../src/rewards/subgraph-rewards-getter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,MAAM,WAAW,cAAc;IAC7B,oBAAoB,EAAE,CAAC,MAAM,EAAE;QAC7B,OAAO,EAAE,OAAO,CAAC;KAClB,KAAK,OAAO,CAAC;QAAE,kBAAkB,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC,CAAC;CACnE;AAED,qBAAa,qBACX,SAAQ,cACR,YAAW,cAAc;gBAEb,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,gBAAgB;IAIzD,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE;4BAqBb,OAAO;gBAAU,OAAO;;CAMxE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zoralabs/protocol-sdk",
3
- "version": "0.11.7",
3
+ "version": "0.11.8",
4
4
  "repository": "https://github.com/ourzora/zora-protocol",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -4,10 +4,17 @@ import {
4
4
  CreatorERC20zQueryResult,
5
5
  } from "../rewards/subgraph-queries";
6
6
 
7
- const mockResult = (erz20z: Address): RewardsToken => ({
7
+ const mockResult = ({
8
+ erz20z,
9
+ secondaryActivated,
10
+ }: {
11
+ erz20z: Address;
12
+ secondaryActivated: boolean;
13
+ }): RewardsToken => ({
8
14
  salesStrategies: [
9
15
  {
10
16
  zoraTimedMinter: {
17
+ secondaryActivated,
11
18
  erc20Z: {
12
19
  id: erz20z,
13
20
  },
@@ -19,7 +26,7 @@ const mockResult = (erz20z: Address): RewardsToken => ({
19
26
  export const mockRewardsQueryResults = ({
20
27
  erc20z,
21
28
  }: {
22
- erc20z: Address[];
29
+ erc20z: { secondaryActivated: boolean; erz20z: Address }[];
23
30
  }): CreatorERC20zQueryResult => ({
24
31
  zoraCreateTokens: erc20z.map(mockResult),
25
32
  });
@@ -1,12 +1,12 @@
1
1
  import { describe, expect, vi } from "vitest";
2
2
  import { encodeAbiParameters, erc20Abi, parseEther } from "viem";
3
- import { zoraSepolia } from "viem/chains";
3
+ import { zoraSepolia, base } from "viem/chains";
4
4
  import {
5
5
  forkUrls,
6
6
  makeAnvilTest,
7
7
  simulateAndWriteContractWithRetries,
8
8
  } from "src/anvil";
9
- import { createCollectorClient } from "src/sdk";
9
+ import { createCollectorClient, createCreatorClient } from "src/sdk";
10
10
  import { new1155ContractVersion } from "src/create/contract-setup";
11
11
  import { ISubgraphQuerier } from "src/apis/subgraph-querier";
12
12
  import { mockTimedSaleStrategyTokenQueryResult } from "src/fixtures/mint-query-results";
@@ -16,11 +16,32 @@ import {
16
16
  zoraCreator1155ImplABI,
17
17
  } from "@zoralabs/protocol-deployments";
18
18
  import { makeContractParameters } from "src/utils";
19
- import { mockRewardsQueryResults } from "src/fixtures/rewards-query-results";
20
19
  import { setupContractAndToken } from "src/fixtures/contract-setup";
21
20
  import { advanceToSaleAndAndLaunchMarket } from "src/fixtures/secondary";
21
+ import { CreatorERC20zQueryResult } from "./subgraph-queries";
22
22
 
23
23
  describe("rewardsClient", () => {
24
+ makeAnvilTest({
25
+ forkBlockNumber: 22375202,
26
+ forkUrl: forkUrls.baseMainnet,
27
+ anvilChainId: base.id,
28
+ })(
29
+ "it can query rewards balances where there are multiple minters",
30
+ async ({ viemClients: { publicClient, chain } }) => {
31
+ const creatorClient = createCreatorClient({
32
+ chainId: chain.id,
33
+ publicClient,
34
+ });
35
+ const rewardsBalance = await creatorClient.getRewardsBalances({
36
+ account: "0x129F04B140Acc1AA350be2F9f048C178103c62f3",
37
+ });
38
+
39
+ const erc20zKeys = Object.keys(rewardsBalance.secondaryRoyalties.erc20);
40
+
41
+ expect(erc20zKeys.length).toBeGreaterThan(0);
42
+ },
43
+ 20_000,
44
+ );
24
45
  makeAnvilTest({
25
46
  forkBlockNumber: 14653556,
26
47
  forkUrl: forkUrls.zoraSepolia,
@@ -251,20 +272,31 @@ describe("rewardsClient", () => {
251
272
 
252
273
  // now we should be able to get rewards balances for these royalties
253
274
 
275
+ const mockResult: CreatorERC20zQueryResult = {
276
+ zoraCreateTokens: [
277
+ {
278
+ salesStrategies: [
279
+ {
280
+ zoraTimedMinter: {
281
+ secondaryActivated: true,
282
+ erc20Z: { id: erc20z },
283
+ },
284
+ },
285
+ ],
286
+ },
287
+ ],
288
+ };
289
+
254
290
  // we need to stub the subgraph return
255
291
  rewardsGetter.subgraphQuerier.query = vi
256
292
  .fn<ISubgraphQuerier["query"]>()
257
- .mockResolvedValue(
258
- mockRewardsQueryResults({
259
- erc20z: [erc20z],
260
- }),
261
- );
293
+ .mockResolvedValue(mockResult);
262
294
 
263
295
  const rewardsBalance = await creatorClient.getRewardsBalances({
264
296
  account: creatorAccount,
265
297
  });
266
298
 
267
- expect(rewardsBalance.secondaryRoyalties.eth).toBeGreaterThan(0);
299
+ expect(rewardsBalance.protocolRewards).toBeGreaterThan(0n);
268
300
  expect(rewardsBalance.secondaryRoyalties.erc20[erc20z]).toBeGreaterThan(
269
301
  0,
270
302
  );
@@ -77,7 +77,13 @@ export const getRewardsBalance = async ({
77
77
  rewardsGetter: IRewardsGetter;
78
78
  }): Promise<RewardsBalance> => {
79
79
  const address = typeof account === "string" ? account : account.address;
80
- const erc20Zs = await rewardsGetter.getErc20ZzForCreator({ address });
80
+ const erc20ZsAndSecondaryActivated = await rewardsGetter.getErc20ZzForCreator(
81
+ { address },
82
+ );
83
+
84
+ const validErc20Zs = erc20ZsAndSecondaryActivated
85
+ .filter(({ secondaryActivated }) => secondaryActivated)
86
+ .map(({ erc20z }) => erc20z);
81
87
 
82
88
  // Perform multicall to get protocol rewards balance and unclaimed fees
83
89
  const result = await (publicClient as PublicClientWithMulticall).multicall({
@@ -98,7 +104,7 @@ export const getRewardsBalance = async ({
98
104
  ],
99
105
  abi: erc20ZRoyaltiesABI,
100
106
  functionName: "getUnclaimedFeesBatch",
101
- args: [erc20Zs],
107
+ args: [validErc20Zs],
102
108
  },
103
109
  ],
104
110
  multicallAddress: multicall3Address,
@@ -147,9 +153,13 @@ const makeClaimSecondaryRoyaltiesCalls = async ({
147
153
  chainId: number;
148
154
  rewardsGetter: IRewardsGetter;
149
155
  }) => {
150
- const erc20z = await rewardsGetter.getErc20ZzForCreator({
151
- address: claimFor,
152
- });
156
+ const erc20ZsAndSecondaryActivated = await rewardsGetter.getErc20ZzForCreator(
157
+ { address: claimFor },
158
+ );
159
+
160
+ const erc20z = erc20ZsAndSecondaryActivated
161
+ .filter(({ secondaryActivated }) => secondaryActivated)
162
+ .map(({ erc20z }) => erc20z);
153
163
 
154
164
  const royaltiesAddress =
155
165
  erc20ZRoyaltiesAddress[chainId as keyof typeof erc20ZRoyaltiesAddress];
@@ -4,7 +4,8 @@ import { Address } from "viem";
4
4
  export type RewardsToken = {
5
5
  salesStrategies: [
6
6
  {
7
- zoraTimedMinter: {
7
+ zoraTimedMinter?: {
8
+ secondaryActivated: boolean;
8
9
  erc20Z: {
9
10
  id: Address;
10
11
  };
@@ -33,6 +34,7 @@ export function buildCreatorERC20zs({
33
34
  }
34
35
  salesStrategies {
35
36
  zoraTimedMinter {
37
+ secondaryActivated
36
38
  erc20Z {
37
39
  id
38
40
  }
@@ -4,7 +4,9 @@ import { Address } from "viem";
4
4
  import { buildCreatorERC20zs } from "./subgraph-queries";
5
5
 
6
6
  export interface IRewardsGetter {
7
- getErc20ZzForCreator: (params: { address: Address }) => Promise<Address[]>;
7
+ getErc20ZzForCreator: (params: {
8
+ address: Address;
9
+ }) => Promise<{ secondaryActivated: boolean; erc20z: Address }[]>;
8
10
  }
9
11
 
10
12
  export class SubgraphRewardsGetter
@@ -15,19 +17,31 @@ export class SubgraphRewardsGetter
15
17
  super(chainId, subgraphQuerier);
16
18
  }
17
19
 
18
- async getErc20ZzForCreator({
19
- address,
20
- }: {
21
- address: Address;
22
- }): Promise<Address[]> {
20
+ async getErc20ZzForCreator({ address }: { address: Address }) {
23
21
  const queryResults = await this.querySubgraphWithRetries(
24
22
  buildCreatorERC20zs({ address }),
25
23
  );
26
24
 
27
- return (
28
- queryResults?.map(
29
- (result) => result.salesStrategies[0].zoraTimedMinter.erc20Z.id,
30
- ) || []
25
+ const results = (
26
+ queryResults?.map((result) => {
27
+ const timedMinter = result.salesStrategies[0].zoraTimedMinter;
28
+
29
+ if (!timedMinter) {
30
+ return null;
31
+ }
32
+
33
+ return {
34
+ secondaryActivated: timedMinter.secondaryActivated,
35
+ erc20z: timedMinter.erc20Z.id,
36
+ };
37
+ }) || []
38
+ ).filter(
39
+ (
40
+ idAndActivated,
41
+ ): idAndActivated is { secondaryActivated: boolean; erc20z: Address } =>
42
+ !!idAndActivated,
31
43
  );
44
+
45
+ return results;
32
46
  }
33
47
  }