@zoralabs/protocol-sdk 0.9.5 → 0.10.0
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 +17 -2
- package/dist/anvil.d.ts +11 -1
- package/dist/anvil.d.ts.map +1 -1
- package/dist/apis/multicall3.d.ts +9 -0
- package/dist/apis/multicall3.d.ts.map +1 -0
- package/dist/apis/subgraph-getter.d.ts +9 -0
- package/dist/apis/subgraph-getter.d.ts.map +1 -0
- package/dist/create/contract-getter.d.ts +3 -6
- package/dist/create/contract-getter.d.ts.map +1 -1
- package/dist/fixtures/mint-query-results.d.ts +10 -0
- package/dist/fixtures/mint-query-results.d.ts.map +1 -0
- package/dist/fixtures/rewards-query-results.d.ts +6 -0
- package/dist/fixtures/rewards-query-results.d.ts.map +1 -0
- package/dist/index.cjs +402 -161
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +408 -161
- package/dist/index.js.map +1 -1
- package/dist/mint/subgraph-mint-getter.d.ts +3 -5
- package/dist/mint/subgraph-mint-getter.d.ts.map +1 -1
- package/dist/rewards/rewards-client.d.ts +34 -0
- package/dist/rewards/rewards-client.d.ts.map +1 -0
- package/dist/rewards/rewards-queries.d.ts +34 -0
- package/dist/rewards/rewards-queries.d.ts.map +1 -0
- package/dist/rewards/subgraph-queries.d.ts +20 -0
- package/dist/rewards/subgraph-queries.d.ts.map +1 -0
- package/dist/rewards/subgraph-rewards-getter.d.ts +15 -0
- package/dist/rewards/subgraph-rewards-getter.d.ts.map +1 -0
- package/dist/sdk.d.ts +5 -0
- package/dist/sdk.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/apis/multicall3.ts +19 -0
- package/src/apis/subgraph-getter.ts +33 -0
- package/src/create/1155-create-helper.test.ts +18 -18
- package/src/create/contract-getter.ts +7 -29
- package/src/fixtures/mint-query-results.ts +55 -0
- package/src/fixtures/rewards-query-results.ts +25 -0
- package/src/mint/mint-client.test.ts +18 -46
- package/src/mint/subgraph-mint-getter.ts +7 -27
- package/src/rewards/rewards-client.test.ts +406 -0
- package/src/rewards/rewards-client.ts +67 -0
- package/src/rewards/rewards-queries.ts +253 -0
- package/src/rewards/subgraph-queries.ts +49 -0
- package/src/rewards/subgraph-rewards-getter.ts +33 -0
- package/src/sdk.ts +18 -0
package/dist/index.cjs
CHANGED
|
@@ -2551,136 +2551,6 @@ var toContractCreationConfigOrAddress = ({
|
|
|
2551
2551
|
// src/premint/premint-client.ts
|
|
2552
2552
|
var import_protocol_deployments4 = require("@zoralabs/protocol-deployments");
|
|
2553
2553
|
|
|
2554
|
-
// src/retries.ts
|
|
2555
|
-
async function wait(delayMs) {
|
|
2556
|
-
return new Promise((resolve) => {
|
|
2557
|
-
setTimeout(resolve, delayMs);
|
|
2558
|
-
});
|
|
2559
|
-
}
|
|
2560
|
-
var retryInternal = async ({
|
|
2561
|
-
tryFn,
|
|
2562
|
-
maxTries = 3,
|
|
2563
|
-
atTry,
|
|
2564
|
-
linearBackoffMS = 200,
|
|
2565
|
-
shouldRetryOnError = () => true
|
|
2566
|
-
}) => {
|
|
2567
|
-
try {
|
|
2568
|
-
return await tryFn();
|
|
2569
|
-
} catch (err) {
|
|
2570
|
-
if (shouldRetryOnError(err)) {
|
|
2571
|
-
if (atTry <= maxTries) {
|
|
2572
|
-
await wait(atTry * linearBackoffMS);
|
|
2573
|
-
return await retryInternal({
|
|
2574
|
-
tryFn,
|
|
2575
|
-
maxTries,
|
|
2576
|
-
atTry: atTry + 1,
|
|
2577
|
-
linearBackoffMS,
|
|
2578
|
-
shouldRetryOnError
|
|
2579
|
-
});
|
|
2580
|
-
}
|
|
2581
|
-
}
|
|
2582
|
-
throw err;
|
|
2583
|
-
}
|
|
2584
|
-
};
|
|
2585
|
-
var retriesGeneric = async (params) => {
|
|
2586
|
-
return retryInternal({
|
|
2587
|
-
...params,
|
|
2588
|
-
atTry: 1
|
|
2589
|
-
});
|
|
2590
|
-
};
|
|
2591
|
-
|
|
2592
|
-
// src/apis/http-api-base.ts
|
|
2593
|
-
var BadResponseError = class extends Error {
|
|
2594
|
-
constructor(message, status, json) {
|
|
2595
|
-
super(message);
|
|
2596
|
-
this.name = "BadResponseError";
|
|
2597
|
-
this.status = status;
|
|
2598
|
-
this.json = json;
|
|
2599
|
-
}
|
|
2600
|
-
};
|
|
2601
|
-
var get = async (url) => {
|
|
2602
|
-
const response = await fetch(url, { method: "GET" });
|
|
2603
|
-
if (response.status !== 200) {
|
|
2604
|
-
let json;
|
|
2605
|
-
try {
|
|
2606
|
-
json = await response.json();
|
|
2607
|
-
} catch (e) {
|
|
2608
|
-
}
|
|
2609
|
-
throw new BadResponseError(
|
|
2610
|
-
`Invalid response, status ${response.status}`,
|
|
2611
|
-
response.status,
|
|
2612
|
-
json
|
|
2613
|
-
);
|
|
2614
|
-
}
|
|
2615
|
-
return await response.json();
|
|
2616
|
-
};
|
|
2617
|
-
var post = async (url, data) => {
|
|
2618
|
-
const controller = new AbortController();
|
|
2619
|
-
const { signal } = controller;
|
|
2620
|
-
const timeout = 30 * 60 * 1e3;
|
|
2621
|
-
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
2622
|
-
const response = await fetch(url, {
|
|
2623
|
-
method: "POST",
|
|
2624
|
-
headers: {
|
|
2625
|
-
"content-type": "application/json",
|
|
2626
|
-
accept: "application/json"
|
|
2627
|
-
},
|
|
2628
|
-
body: JSON.stringify(data),
|
|
2629
|
-
signal
|
|
2630
|
-
});
|
|
2631
|
-
clearTimeout(timeoutId);
|
|
2632
|
-
if (response.status !== 200) {
|
|
2633
|
-
let json;
|
|
2634
|
-
try {
|
|
2635
|
-
json = await response.json();
|
|
2636
|
-
} catch (e) {
|
|
2637
|
-
}
|
|
2638
|
-
throw new BadResponseError(
|
|
2639
|
-
`Bad response: ${response.status}`,
|
|
2640
|
-
response.status,
|
|
2641
|
-
json
|
|
2642
|
-
);
|
|
2643
|
-
}
|
|
2644
|
-
return await response.json();
|
|
2645
|
-
};
|
|
2646
|
-
var defaultShouldRetry = (err) => {
|
|
2647
|
-
return err instanceof BadResponseError && err.status >= 500;
|
|
2648
|
-
};
|
|
2649
|
-
var retries = async (tryFn, maxTries = 3, linearBackoffMS = 200, shouldRetry = defaultShouldRetry) => {
|
|
2650
|
-
return retriesGeneric({
|
|
2651
|
-
tryFn,
|
|
2652
|
-
maxTries,
|
|
2653
|
-
linearBackoffMS,
|
|
2654
|
-
shouldRetryOnError: shouldRetry
|
|
2655
|
-
});
|
|
2656
|
-
};
|
|
2657
|
-
var httpClient = {
|
|
2658
|
-
get,
|
|
2659
|
-
post,
|
|
2660
|
-
retries
|
|
2661
|
-
};
|
|
2662
|
-
|
|
2663
|
-
// src/apis/subgraph-querier.ts
|
|
2664
|
-
var SubgraphQuerier = class {
|
|
2665
|
-
constructor(httpClient2) {
|
|
2666
|
-
this.httpClient = httpClient2;
|
|
2667
|
-
}
|
|
2668
|
-
async query({
|
|
2669
|
-
subgraphUrl,
|
|
2670
|
-
query,
|
|
2671
|
-
variables
|
|
2672
|
-
}) {
|
|
2673
|
-
const { retries: retries2, post: post2 } = this.httpClient;
|
|
2674
|
-
const result = await retries2(async () => {
|
|
2675
|
-
return await post2(subgraphUrl, {
|
|
2676
|
-
query,
|
|
2677
|
-
variables
|
|
2678
|
-
});
|
|
2679
|
-
});
|
|
2680
|
-
return result?.data;
|
|
2681
|
-
}
|
|
2682
|
-
};
|
|
2683
|
-
|
|
2684
2554
|
// src/mint/subgraph-queries.ts
|
|
2685
2555
|
var NFT_SALE_STRATEGY_FRAGMENT = `
|
|
2686
2556
|
fragment SaleStrategy on SalesStrategyConfig {
|
|
@@ -2807,6 +2677,156 @@ function buildPremintsOfContractQuery({
|
|
|
2807
2677
|
};
|
|
2808
2678
|
}
|
|
2809
2679
|
|
|
2680
|
+
// src/apis/subgraph-querier.ts
|
|
2681
|
+
var SubgraphQuerier = class {
|
|
2682
|
+
constructor(httpClient2) {
|
|
2683
|
+
this.httpClient = httpClient2;
|
|
2684
|
+
}
|
|
2685
|
+
async query({
|
|
2686
|
+
subgraphUrl,
|
|
2687
|
+
query,
|
|
2688
|
+
variables
|
|
2689
|
+
}) {
|
|
2690
|
+
const { retries: retries2, post: post2 } = this.httpClient;
|
|
2691
|
+
const result = await retries2(async () => {
|
|
2692
|
+
return await post2(subgraphUrl, {
|
|
2693
|
+
query,
|
|
2694
|
+
variables
|
|
2695
|
+
});
|
|
2696
|
+
});
|
|
2697
|
+
return result?.data;
|
|
2698
|
+
}
|
|
2699
|
+
};
|
|
2700
|
+
|
|
2701
|
+
// src/retries.ts
|
|
2702
|
+
async function wait(delayMs) {
|
|
2703
|
+
return new Promise((resolve) => {
|
|
2704
|
+
setTimeout(resolve, delayMs);
|
|
2705
|
+
});
|
|
2706
|
+
}
|
|
2707
|
+
var retryInternal = async ({
|
|
2708
|
+
tryFn,
|
|
2709
|
+
maxTries = 3,
|
|
2710
|
+
atTry,
|
|
2711
|
+
linearBackoffMS = 200,
|
|
2712
|
+
shouldRetryOnError = () => true
|
|
2713
|
+
}) => {
|
|
2714
|
+
try {
|
|
2715
|
+
return await tryFn();
|
|
2716
|
+
} catch (err) {
|
|
2717
|
+
if (shouldRetryOnError(err)) {
|
|
2718
|
+
if (atTry <= maxTries) {
|
|
2719
|
+
await wait(atTry * linearBackoffMS);
|
|
2720
|
+
return await retryInternal({
|
|
2721
|
+
tryFn,
|
|
2722
|
+
maxTries,
|
|
2723
|
+
atTry: atTry + 1,
|
|
2724
|
+
linearBackoffMS,
|
|
2725
|
+
shouldRetryOnError
|
|
2726
|
+
});
|
|
2727
|
+
}
|
|
2728
|
+
}
|
|
2729
|
+
throw err;
|
|
2730
|
+
}
|
|
2731
|
+
};
|
|
2732
|
+
var retriesGeneric = async (params) => {
|
|
2733
|
+
return retryInternal({
|
|
2734
|
+
...params,
|
|
2735
|
+
atTry: 1
|
|
2736
|
+
});
|
|
2737
|
+
};
|
|
2738
|
+
|
|
2739
|
+
// src/apis/http-api-base.ts
|
|
2740
|
+
var BadResponseError = class extends Error {
|
|
2741
|
+
constructor(message, status, json) {
|
|
2742
|
+
super(message);
|
|
2743
|
+
this.name = "BadResponseError";
|
|
2744
|
+
this.status = status;
|
|
2745
|
+
this.json = json;
|
|
2746
|
+
}
|
|
2747
|
+
};
|
|
2748
|
+
var get = async (url) => {
|
|
2749
|
+
const response = await fetch(url, { method: "GET" });
|
|
2750
|
+
if (response.status !== 200) {
|
|
2751
|
+
let json;
|
|
2752
|
+
try {
|
|
2753
|
+
json = await response.json();
|
|
2754
|
+
} catch (e) {
|
|
2755
|
+
}
|
|
2756
|
+
throw new BadResponseError(
|
|
2757
|
+
`Invalid response, status ${response.status}`,
|
|
2758
|
+
response.status,
|
|
2759
|
+
json
|
|
2760
|
+
);
|
|
2761
|
+
}
|
|
2762
|
+
return await response.json();
|
|
2763
|
+
};
|
|
2764
|
+
var post = async (url, data) => {
|
|
2765
|
+
const controller = new AbortController();
|
|
2766
|
+
const { signal } = controller;
|
|
2767
|
+
const timeout = 30 * 60 * 1e3;
|
|
2768
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
2769
|
+
const response = await fetch(url, {
|
|
2770
|
+
method: "POST",
|
|
2771
|
+
headers: {
|
|
2772
|
+
"content-type": "application/json",
|
|
2773
|
+
accept: "application/json"
|
|
2774
|
+
},
|
|
2775
|
+
body: JSON.stringify(data),
|
|
2776
|
+
signal
|
|
2777
|
+
});
|
|
2778
|
+
clearTimeout(timeoutId);
|
|
2779
|
+
if (response.status !== 200) {
|
|
2780
|
+
let json;
|
|
2781
|
+
try {
|
|
2782
|
+
json = await response.json();
|
|
2783
|
+
} catch (e) {
|
|
2784
|
+
}
|
|
2785
|
+
throw new BadResponseError(
|
|
2786
|
+
`Bad response: ${response.status}`,
|
|
2787
|
+
response.status,
|
|
2788
|
+
json
|
|
2789
|
+
);
|
|
2790
|
+
}
|
|
2791
|
+
return await response.json();
|
|
2792
|
+
};
|
|
2793
|
+
var defaultShouldRetry = (err) => {
|
|
2794
|
+
return err instanceof BadResponseError && err.status >= 500;
|
|
2795
|
+
};
|
|
2796
|
+
var retries = async (tryFn, maxTries = 3, linearBackoffMS = 200, shouldRetry = defaultShouldRetry) => {
|
|
2797
|
+
return retriesGeneric({
|
|
2798
|
+
tryFn,
|
|
2799
|
+
maxTries,
|
|
2800
|
+
linearBackoffMS,
|
|
2801
|
+
shouldRetryOnError: shouldRetry
|
|
2802
|
+
});
|
|
2803
|
+
};
|
|
2804
|
+
var httpClient = {
|
|
2805
|
+
get,
|
|
2806
|
+
post,
|
|
2807
|
+
retries
|
|
2808
|
+
};
|
|
2809
|
+
|
|
2810
|
+
// src/apis/subgraph-getter.ts
|
|
2811
|
+
var SubgraphGetter = class {
|
|
2812
|
+
constructor(chainId, subgraphQuerier) {
|
|
2813
|
+
this.subgraphQuerier = subgraphQuerier || new SubgraphQuerier(httpClient);
|
|
2814
|
+
this.networkConfig = getApiNetworkConfigForChain(chainId);
|
|
2815
|
+
}
|
|
2816
|
+
async querySubgraphWithRetries({
|
|
2817
|
+
query,
|
|
2818
|
+
variables,
|
|
2819
|
+
parseResponseData
|
|
2820
|
+
}) {
|
|
2821
|
+
const responseData = await this.subgraphQuerier.query({
|
|
2822
|
+
subgraphUrl: this.networkConfig.subgraphUrl,
|
|
2823
|
+
query,
|
|
2824
|
+
variables
|
|
2825
|
+
});
|
|
2826
|
+
return parseResponseData(responseData);
|
|
2827
|
+
}
|
|
2828
|
+
};
|
|
2829
|
+
|
|
2810
2830
|
// src/mint/subgraph-mint-getter.ts
|
|
2811
2831
|
var getApiNetworkConfigForChain = (chainId) => {
|
|
2812
2832
|
if (!networkConfigByChain[chainId]) {
|
|
@@ -2916,8 +2936,9 @@ function getTargetStrategy({
|
|
|
2916
2936
|
}
|
|
2917
2937
|
return targetStrategy;
|
|
2918
2938
|
}
|
|
2919
|
-
var SubgraphMintGetter = class {
|
|
2939
|
+
var SubgraphMintGetter = class extends SubgraphGetter {
|
|
2920
2940
|
constructor(chainId, subgraphQuerier) {
|
|
2941
|
+
super(chainId, subgraphQuerier);
|
|
2921
2942
|
this.getMintable = async ({
|
|
2922
2943
|
tokenAddress,
|
|
2923
2944
|
tokenId,
|
|
@@ -2942,24 +2963,10 @@ var SubgraphMintGetter = class {
|
|
|
2942
2963
|
blockTime
|
|
2943
2964
|
});
|
|
2944
2965
|
};
|
|
2945
|
-
this.subgraphQuerier = subgraphQuerier || new SubgraphQuerier(httpClient);
|
|
2946
|
-
this.networkConfig = getApiNetworkConfigForChain(chainId);
|
|
2947
2966
|
}
|
|
2948
2967
|
async getContractMintFee(contract) {
|
|
2949
2968
|
return BigInt(contract.mintFeePerQuantity);
|
|
2950
2969
|
}
|
|
2951
|
-
async querySubgraphWithRetries({
|
|
2952
|
-
query,
|
|
2953
|
-
variables,
|
|
2954
|
-
parseResponseData
|
|
2955
|
-
}) {
|
|
2956
|
-
const responseData = await this.subgraphQuerier.query({
|
|
2957
|
-
subgraphUrl: this.networkConfig.subgraphUrl,
|
|
2958
|
-
query,
|
|
2959
|
-
variables
|
|
2960
|
-
});
|
|
2961
|
-
return parseResponseData(responseData);
|
|
2962
|
-
}
|
|
2963
2970
|
async getContractMintable({
|
|
2964
2971
|
tokenAddress,
|
|
2965
2972
|
preferredSaleType,
|
|
@@ -5388,22 +5395,9 @@ function buildContractInfoQuery({
|
|
|
5388
5395
|
}
|
|
5389
5396
|
|
|
5390
5397
|
// src/create/contract-getter.ts
|
|
5391
|
-
var SubgraphContractGetter = class {
|
|
5398
|
+
var SubgraphContractGetter = class extends SubgraphGetter {
|
|
5392
5399
|
constructor(chainId, subgraphQuerier) {
|
|
5393
|
-
|
|
5394
|
-
this.networkConfig = getApiNetworkConfigForChain(chainId);
|
|
5395
|
-
}
|
|
5396
|
-
async querySubgraphWithRetries({
|
|
5397
|
-
query,
|
|
5398
|
-
variables,
|
|
5399
|
-
parseResponseData
|
|
5400
|
-
}) {
|
|
5401
|
-
const responseData = await this.subgraphQuerier.query({
|
|
5402
|
-
subgraphUrl: this.networkConfig.subgraphUrl,
|
|
5403
|
-
query,
|
|
5404
|
-
variables
|
|
5405
|
-
});
|
|
5406
|
-
return parseResponseData(responseData);
|
|
5400
|
+
super(chainId, subgraphQuerier);
|
|
5407
5401
|
}
|
|
5408
5402
|
async getContractInfo({
|
|
5409
5403
|
contractAddress,
|
|
@@ -5434,6 +5428,246 @@ var SubgraphContractGetter = class {
|
|
|
5434
5428
|
}
|
|
5435
5429
|
};
|
|
5436
5430
|
|
|
5431
|
+
// src/rewards/rewards-queries.ts
|
|
5432
|
+
var import_protocol_deployments12 = require("@zoralabs/protocol-deployments");
|
|
5433
|
+
var import_viem12 = require("viem");
|
|
5434
|
+
|
|
5435
|
+
// src/apis/multicall3.ts
|
|
5436
|
+
var multicall3Abi = [
|
|
5437
|
+
"struct Call { address target; bytes callData; }",
|
|
5438
|
+
"struct Call3 { address target; bool allowFailure; bytes callData; }",
|
|
5439
|
+
"struct Call3Value { address target; bool allowFailure; uint256 value; bytes callData; }",
|
|
5440
|
+
"struct Result { bool success; bytes returnData; }",
|
|
5441
|
+
"function aggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData)",
|
|
5442
|
+
"function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData)",
|
|
5443
|
+
"function aggregate3Value(Call3Value[] calldata calls) public payable returns (Result[] memory returnData)"
|
|
5444
|
+
];
|
|
5445
|
+
var multicall3Address = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
5446
|
+
|
|
5447
|
+
// src/rewards/rewards-queries.ts
|
|
5448
|
+
function aggregateUnclaimedFees(unclaimedFees, wethAddress2) {
|
|
5449
|
+
let ethBalance = 0n;
|
|
5450
|
+
const unclaimedFeesAggregate = unclaimedFees.reduce(
|
|
5451
|
+
(acc, fee) => {
|
|
5452
|
+
const addFee = (token, amount) => {
|
|
5453
|
+
if (token === wethAddress2) {
|
|
5454
|
+
ethBalance += amount;
|
|
5455
|
+
} else if (acc[token]) {
|
|
5456
|
+
acc[token] += amount;
|
|
5457
|
+
} else {
|
|
5458
|
+
acc[token] = amount;
|
|
5459
|
+
}
|
|
5460
|
+
};
|
|
5461
|
+
addFee(fee.token0, fee.token0Amount * 75n / 100n);
|
|
5462
|
+
addFee(fee.token1, fee.token1Amount * 75n / 100n);
|
|
5463
|
+
return acc;
|
|
5464
|
+
},
|
|
5465
|
+
{}
|
|
5466
|
+
);
|
|
5467
|
+
return {
|
|
5468
|
+
eth: ethBalance * 75n / 100n,
|
|
5469
|
+
// Apply 75% fee to ETH balance
|
|
5470
|
+
erc20: unclaimedFeesAggregate
|
|
5471
|
+
};
|
|
5472
|
+
}
|
|
5473
|
+
var getRewardsBalance = async ({
|
|
5474
|
+
account,
|
|
5475
|
+
// The account to check rewards for (Address or Account object)
|
|
5476
|
+
publicClient,
|
|
5477
|
+
// The public client for making blockchain queries
|
|
5478
|
+
chainId,
|
|
5479
|
+
// The ID of the blockchain network
|
|
5480
|
+
rewardsGetter
|
|
5481
|
+
// Interface for getting ERC20Z tokens for a creator
|
|
5482
|
+
}) => {
|
|
5483
|
+
const address = typeof account === "string" ? account : account.address;
|
|
5484
|
+
const erc20Zs = await rewardsGetter.getErc20ZzForCreator({ address });
|
|
5485
|
+
const result = await publicClient.multicall({
|
|
5486
|
+
contracts: [
|
|
5487
|
+
{
|
|
5488
|
+
address: import_protocol_deployments12.protocolRewardsAddress[chainId],
|
|
5489
|
+
abi: import_protocol_deployments12.protocolRewardsABI,
|
|
5490
|
+
functionName: "balanceOf",
|
|
5491
|
+
args: [address]
|
|
5492
|
+
},
|
|
5493
|
+
{
|
|
5494
|
+
address: import_protocol_deployments12.erc20ZRoyaltiesAddress[chainId],
|
|
5495
|
+
abi: import_protocol_deployments12.erc20ZRoyaltiesABI,
|
|
5496
|
+
functionName: "getUnclaimedFeesBatch",
|
|
5497
|
+
args: [erc20Zs]
|
|
5498
|
+
}
|
|
5499
|
+
],
|
|
5500
|
+
multicallAddress: multicall3Address,
|
|
5501
|
+
allowFailure: false
|
|
5502
|
+
});
|
|
5503
|
+
const protocolRewardsBalance = result[0];
|
|
5504
|
+
const wethAddressForChain = import_protocol_deployments12.wethAddress[chainId];
|
|
5505
|
+
const unclaimedFeesAggregate = aggregateUnclaimedFees(
|
|
5506
|
+
result[1],
|
|
5507
|
+
wethAddressForChain
|
|
5508
|
+
);
|
|
5509
|
+
return {
|
|
5510
|
+
protocolRewards: protocolRewardsBalance,
|
|
5511
|
+
secondaryRoyalties: unclaimedFeesAggregate
|
|
5512
|
+
};
|
|
5513
|
+
};
|
|
5514
|
+
var withdrawProtocolRewards = ({
|
|
5515
|
+
withdrawFor,
|
|
5516
|
+
chainId
|
|
5517
|
+
}) => {
|
|
5518
|
+
return makeContractParameters({
|
|
5519
|
+
abi: import_protocol_deployments12.protocolRewardsABI,
|
|
5520
|
+
functionName: "withdrawFor",
|
|
5521
|
+
address: import_protocol_deployments12.protocolRewardsAddress[chainId],
|
|
5522
|
+
args: [withdrawFor, 0n]
|
|
5523
|
+
});
|
|
5524
|
+
};
|
|
5525
|
+
var makeClaimSecondaryRoyaltiesCalls = async ({
|
|
5526
|
+
claimFor,
|
|
5527
|
+
chainId,
|
|
5528
|
+
rewardsGetter
|
|
5529
|
+
}) => {
|
|
5530
|
+
const erc20z = await rewardsGetter.getErc20ZzForCreator({
|
|
5531
|
+
address: claimFor
|
|
5532
|
+
});
|
|
5533
|
+
const royaltiesAddress = import_protocol_deployments12.erc20ZRoyaltiesAddress[chainId];
|
|
5534
|
+
if (erc20z.length === 0) {
|
|
5535
|
+
return [];
|
|
5536
|
+
}
|
|
5537
|
+
return erc20z.map((erc20z2) => ({
|
|
5538
|
+
target: royaltiesAddress,
|
|
5539
|
+
callData: (0, import_viem12.encodeFunctionData)({
|
|
5540
|
+
abi: import_protocol_deployments12.erc20ZRoyaltiesABI,
|
|
5541
|
+
functionName: "claimFor",
|
|
5542
|
+
args: [erc20z2]
|
|
5543
|
+
}),
|
|
5544
|
+
allowFailure: false
|
|
5545
|
+
}));
|
|
5546
|
+
};
|
|
5547
|
+
var createProtocolRewardsCall = (chainId, withdrawFor) => ({
|
|
5548
|
+
target: import_protocol_deployments12.protocolRewardsAddress[chainId],
|
|
5549
|
+
callData: (0, import_viem12.encodeFunctionData)({
|
|
5550
|
+
abi: import_protocol_deployments12.protocolRewardsABI,
|
|
5551
|
+
functionName: "withdrawFor",
|
|
5552
|
+
args: [withdrawFor, 0n]
|
|
5553
|
+
}),
|
|
5554
|
+
allowFailure: false
|
|
5555
|
+
});
|
|
5556
|
+
var createMulticallParameters = (calls, account) => makeContractParameters({
|
|
5557
|
+
abi: (0, import_viem12.parseAbi)(multicall3Abi),
|
|
5558
|
+
functionName: "aggregate3",
|
|
5559
|
+
address: multicall3Address,
|
|
5560
|
+
args: [calls],
|
|
5561
|
+
account
|
|
5562
|
+
});
|
|
5563
|
+
var withdrawRewards = async ({
|
|
5564
|
+
account,
|
|
5565
|
+
withdrawFor,
|
|
5566
|
+
claimSecondaryRoyalties = true,
|
|
5567
|
+
chainId,
|
|
5568
|
+
rewardsGetter
|
|
5569
|
+
}) => {
|
|
5570
|
+
if (!claimSecondaryRoyalties) {
|
|
5571
|
+
return {
|
|
5572
|
+
...withdrawProtocolRewards({ chainId, withdrawFor }),
|
|
5573
|
+
account
|
|
5574
|
+
};
|
|
5575
|
+
}
|
|
5576
|
+
const protocolRewardsCall = createProtocolRewardsCall(chainId, withdrawFor);
|
|
5577
|
+
const secondaryRoyaltiesCalls = await makeClaimSecondaryRoyaltiesCalls({
|
|
5578
|
+
chainId,
|
|
5579
|
+
claimFor: withdrawFor,
|
|
5580
|
+
rewardsGetter
|
|
5581
|
+
});
|
|
5582
|
+
const allCalls = [protocolRewardsCall, ...secondaryRoyaltiesCalls];
|
|
5583
|
+
return createMulticallParameters(allCalls, account);
|
|
5584
|
+
};
|
|
5585
|
+
|
|
5586
|
+
// src/rewards/rewards-client.ts
|
|
5587
|
+
var RewardsClient = class {
|
|
5588
|
+
constructor({
|
|
5589
|
+
chainId,
|
|
5590
|
+
publicClient,
|
|
5591
|
+
rewardsGetter
|
|
5592
|
+
}) {
|
|
5593
|
+
this.chainId = chainId;
|
|
5594
|
+
this.publicClient = publicClient;
|
|
5595
|
+
this.rewardsGetter = rewardsGetter;
|
|
5596
|
+
}
|
|
5597
|
+
/** Withdraws rewards for a given account */
|
|
5598
|
+
async withdrawRewards({
|
|
5599
|
+
account,
|
|
5600
|
+
withdrawFor,
|
|
5601
|
+
claimSecondaryRoyalties
|
|
5602
|
+
}) {
|
|
5603
|
+
return {
|
|
5604
|
+
parameters: await withdrawRewards({
|
|
5605
|
+
chainId: this.chainId,
|
|
5606
|
+
rewardsGetter: this.rewardsGetter,
|
|
5607
|
+
withdrawFor,
|
|
5608
|
+
claimSecondaryRoyalties,
|
|
5609
|
+
account
|
|
5610
|
+
})
|
|
5611
|
+
};
|
|
5612
|
+
}
|
|
5613
|
+
/** Retrieves the rewards balances for a given account */
|
|
5614
|
+
async getRewardsBalances(params) {
|
|
5615
|
+
return getRewardsBalance({
|
|
5616
|
+
account: params.account,
|
|
5617
|
+
chainId: this.chainId,
|
|
5618
|
+
publicClient: this.publicClient,
|
|
5619
|
+
rewardsGetter: this.rewardsGetter
|
|
5620
|
+
});
|
|
5621
|
+
}
|
|
5622
|
+
};
|
|
5623
|
+
|
|
5624
|
+
// src/rewards/subgraph-queries.ts
|
|
5625
|
+
function buildCreatorERC20zs({
|
|
5626
|
+
address
|
|
5627
|
+
}) {
|
|
5628
|
+
return {
|
|
5629
|
+
query: `
|
|
5630
|
+
query ($address: Bytes!) {
|
|
5631
|
+
zoraCreateTokens(
|
|
5632
|
+
where: { royalties_: { user: $address }, salesStrategies_: { type: "ZORA_TIMED" } }
|
|
5633
|
+
) {
|
|
5634
|
+
royalties {
|
|
5635
|
+
user
|
|
5636
|
+
}
|
|
5637
|
+
salesStrategies {
|
|
5638
|
+
zoraTimedMinter {
|
|
5639
|
+
erc20Z {
|
|
5640
|
+
id
|
|
5641
|
+
}
|
|
5642
|
+
}
|
|
5643
|
+
}
|
|
5644
|
+
}
|
|
5645
|
+
}
|
|
5646
|
+
`,
|
|
5647
|
+
variables: { address },
|
|
5648
|
+
parseResponseData: (responseData) => {
|
|
5649
|
+
return responseData?.zoraCreateTokens;
|
|
5650
|
+
}
|
|
5651
|
+
};
|
|
5652
|
+
}
|
|
5653
|
+
|
|
5654
|
+
// src/rewards/subgraph-rewards-getter.ts
|
|
5655
|
+
var SubgraphRewardsGetter = class extends SubgraphGetter {
|
|
5656
|
+
constructor(chainId, subgraphQuerier) {
|
|
5657
|
+
super(chainId, subgraphQuerier);
|
|
5658
|
+
}
|
|
5659
|
+
async getErc20ZzForCreator({
|
|
5660
|
+
address
|
|
5661
|
+
}) {
|
|
5662
|
+
const queryResults = await this.querySubgraphWithRetries(
|
|
5663
|
+
buildCreatorERC20zs({ address })
|
|
5664
|
+
);
|
|
5665
|
+
return queryResults?.map(
|
|
5666
|
+
(result) => result.salesStrategies[0].zoraTimedMinter.erc20Z.id
|
|
5667
|
+
) || [];
|
|
5668
|
+
}
|
|
5669
|
+
};
|
|
5670
|
+
|
|
5437
5671
|
// src/sdk.ts
|
|
5438
5672
|
function createCreatorClient(clientConfig) {
|
|
5439
5673
|
const premintClient = new PremintClient({
|
|
@@ -5446,12 +5680,19 @@ function createCreatorClient(clientConfig) {
|
|
|
5446
5680
|
publicClient: clientConfig.publicClient,
|
|
5447
5681
|
contractGetter: clientConfig.contractGetter || new SubgraphContractGetter(clientConfig.chainId)
|
|
5448
5682
|
});
|
|
5683
|
+
const rewardsClient = new RewardsClient({
|
|
5684
|
+
chainId: clientConfig.chainId,
|
|
5685
|
+
publicClient: clientConfig.publicClient,
|
|
5686
|
+
rewardsGetter: clientConfig.rewardsGetter || new SubgraphRewardsGetter(clientConfig.chainId)
|
|
5687
|
+
});
|
|
5449
5688
|
return {
|
|
5450
5689
|
createPremint: (p) => premintClient.createPremint(p),
|
|
5451
5690
|
updatePremint: (p) => premintClient.updatePremint(p),
|
|
5452
5691
|
deletePremint: (p) => premintClient.deletePremint(p),
|
|
5453
5692
|
create1155: (p) => create1155CreatorClient.createNew1155(p),
|
|
5454
|
-
create1155OnExistingContract: (p) => create1155CreatorClient.createNew1155OnExistingContract(p)
|
|
5693
|
+
create1155OnExistingContract: (p) => create1155CreatorClient.createNew1155OnExistingContract(p),
|
|
5694
|
+
getRewardsBalances: (p) => rewardsClient.getRewardsBalances(p),
|
|
5695
|
+
withdrawRewards: (p) => rewardsClient.withdrawRewards(p)
|
|
5455
5696
|
};
|
|
5456
5697
|
}
|
|
5457
5698
|
function createCollectorClient(params) {
|