@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.
- package/.turbo/turbo-build.log +7 -7
- package/CHANGELOG.md +6 -0
- package/dist/anvil.d.ts +1 -0
- package/dist/anvil.d.ts.map +1 -1
- package/dist/fixtures/rewards-query-results.d.ts +4 -1
- package/dist/fixtures/rewards-query-results.d.ts.map +1 -1
- package/dist/index.cjs +24 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +24 -11
- package/dist/index.js.map +1 -1
- package/dist/rewards/rewards-queries.d.ts.map +1 -1
- package/dist/rewards/subgraph-queries.d.ts +2 -1
- package/dist/rewards/subgraph-queries.d.ts.map +1 -1
- package/dist/rewards/subgraph-rewards-getter.d.ts +9 -3
- package/dist/rewards/subgraph-rewards-getter.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/fixtures/rewards-query-results.ts +9 -2
- package/src/rewards/rewards-client.test.ts +41 -9
- package/src/rewards/rewards-queries.ts +15 -5
- package/src/rewards/subgraph-queries.ts +3 -1
- package/src/rewards/subgraph-rewards-getter.ts +24 -10
|
@@ -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,
|
|
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"}
|
|
@@ -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;
|
|
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<
|
|
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<
|
|
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;
|
|
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
|
@@ -4,10 +4,17 @@ import {
|
|
|
4
4
|
CreatorERC20zQueryResult,
|
|
5
5
|
} from "../rewards/subgraph-queries";
|
|
6
6
|
|
|
7
|
-
const mockResult = (
|
|
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.
|
|
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
|
|
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: [
|
|
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
|
|
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: {
|
|
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
|
-
|
|
28
|
-
queryResults?.map(
|
|
29
|
-
|
|
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
|
}
|