@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.js
CHANGED
|
@@ -2503,136 +2503,6 @@ import {
|
|
|
2503
2503
|
premintTypedDataDefinition as premintTypedDataDefinition2
|
|
2504
2504
|
} from "@zoralabs/protocol-deployments";
|
|
2505
2505
|
|
|
2506
|
-
// src/retries.ts
|
|
2507
|
-
async function wait(delayMs) {
|
|
2508
|
-
return new Promise((resolve) => {
|
|
2509
|
-
setTimeout(resolve, delayMs);
|
|
2510
|
-
});
|
|
2511
|
-
}
|
|
2512
|
-
var retryInternal = async ({
|
|
2513
|
-
tryFn,
|
|
2514
|
-
maxTries = 3,
|
|
2515
|
-
atTry,
|
|
2516
|
-
linearBackoffMS = 200,
|
|
2517
|
-
shouldRetryOnError = () => true
|
|
2518
|
-
}) => {
|
|
2519
|
-
try {
|
|
2520
|
-
return await tryFn();
|
|
2521
|
-
} catch (err) {
|
|
2522
|
-
if (shouldRetryOnError(err)) {
|
|
2523
|
-
if (atTry <= maxTries) {
|
|
2524
|
-
await wait(atTry * linearBackoffMS);
|
|
2525
|
-
return await retryInternal({
|
|
2526
|
-
tryFn,
|
|
2527
|
-
maxTries,
|
|
2528
|
-
atTry: atTry + 1,
|
|
2529
|
-
linearBackoffMS,
|
|
2530
|
-
shouldRetryOnError
|
|
2531
|
-
});
|
|
2532
|
-
}
|
|
2533
|
-
}
|
|
2534
|
-
throw err;
|
|
2535
|
-
}
|
|
2536
|
-
};
|
|
2537
|
-
var retriesGeneric = async (params) => {
|
|
2538
|
-
return retryInternal({
|
|
2539
|
-
...params,
|
|
2540
|
-
atTry: 1
|
|
2541
|
-
});
|
|
2542
|
-
};
|
|
2543
|
-
|
|
2544
|
-
// src/apis/http-api-base.ts
|
|
2545
|
-
var BadResponseError = class extends Error {
|
|
2546
|
-
constructor(message, status, json) {
|
|
2547
|
-
super(message);
|
|
2548
|
-
this.name = "BadResponseError";
|
|
2549
|
-
this.status = status;
|
|
2550
|
-
this.json = json;
|
|
2551
|
-
}
|
|
2552
|
-
};
|
|
2553
|
-
var get = async (url) => {
|
|
2554
|
-
const response = await fetch(url, { method: "GET" });
|
|
2555
|
-
if (response.status !== 200) {
|
|
2556
|
-
let json;
|
|
2557
|
-
try {
|
|
2558
|
-
json = await response.json();
|
|
2559
|
-
} catch (e) {
|
|
2560
|
-
}
|
|
2561
|
-
throw new BadResponseError(
|
|
2562
|
-
`Invalid response, status ${response.status}`,
|
|
2563
|
-
response.status,
|
|
2564
|
-
json
|
|
2565
|
-
);
|
|
2566
|
-
}
|
|
2567
|
-
return await response.json();
|
|
2568
|
-
};
|
|
2569
|
-
var post = async (url, data) => {
|
|
2570
|
-
const controller = new AbortController();
|
|
2571
|
-
const { signal } = controller;
|
|
2572
|
-
const timeout = 30 * 60 * 1e3;
|
|
2573
|
-
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
2574
|
-
const response = await fetch(url, {
|
|
2575
|
-
method: "POST",
|
|
2576
|
-
headers: {
|
|
2577
|
-
"content-type": "application/json",
|
|
2578
|
-
accept: "application/json"
|
|
2579
|
-
},
|
|
2580
|
-
body: JSON.stringify(data),
|
|
2581
|
-
signal
|
|
2582
|
-
});
|
|
2583
|
-
clearTimeout(timeoutId);
|
|
2584
|
-
if (response.status !== 200) {
|
|
2585
|
-
let json;
|
|
2586
|
-
try {
|
|
2587
|
-
json = await response.json();
|
|
2588
|
-
} catch (e) {
|
|
2589
|
-
}
|
|
2590
|
-
throw new BadResponseError(
|
|
2591
|
-
`Bad response: ${response.status}`,
|
|
2592
|
-
response.status,
|
|
2593
|
-
json
|
|
2594
|
-
);
|
|
2595
|
-
}
|
|
2596
|
-
return await response.json();
|
|
2597
|
-
};
|
|
2598
|
-
var defaultShouldRetry = (err) => {
|
|
2599
|
-
return err instanceof BadResponseError && err.status >= 500;
|
|
2600
|
-
};
|
|
2601
|
-
var retries = async (tryFn, maxTries = 3, linearBackoffMS = 200, shouldRetry = defaultShouldRetry) => {
|
|
2602
|
-
return retriesGeneric({
|
|
2603
|
-
tryFn,
|
|
2604
|
-
maxTries,
|
|
2605
|
-
linearBackoffMS,
|
|
2606
|
-
shouldRetryOnError: shouldRetry
|
|
2607
|
-
});
|
|
2608
|
-
};
|
|
2609
|
-
var httpClient = {
|
|
2610
|
-
get,
|
|
2611
|
-
post,
|
|
2612
|
-
retries
|
|
2613
|
-
};
|
|
2614
|
-
|
|
2615
|
-
// src/apis/subgraph-querier.ts
|
|
2616
|
-
var SubgraphQuerier = class {
|
|
2617
|
-
constructor(httpClient2) {
|
|
2618
|
-
this.httpClient = httpClient2;
|
|
2619
|
-
}
|
|
2620
|
-
async query({
|
|
2621
|
-
subgraphUrl,
|
|
2622
|
-
query,
|
|
2623
|
-
variables
|
|
2624
|
-
}) {
|
|
2625
|
-
const { retries: retries2, post: post2 } = this.httpClient;
|
|
2626
|
-
const result = await retries2(async () => {
|
|
2627
|
-
return await post2(subgraphUrl, {
|
|
2628
|
-
query,
|
|
2629
|
-
variables
|
|
2630
|
-
});
|
|
2631
|
-
});
|
|
2632
|
-
return result?.data;
|
|
2633
|
-
}
|
|
2634
|
-
};
|
|
2635
|
-
|
|
2636
2506
|
// src/mint/subgraph-queries.ts
|
|
2637
2507
|
var NFT_SALE_STRATEGY_FRAGMENT = `
|
|
2638
2508
|
fragment SaleStrategy on SalesStrategyConfig {
|
|
@@ -2759,6 +2629,156 @@ function buildPremintsOfContractQuery({
|
|
|
2759
2629
|
};
|
|
2760
2630
|
}
|
|
2761
2631
|
|
|
2632
|
+
// src/apis/subgraph-querier.ts
|
|
2633
|
+
var SubgraphQuerier = class {
|
|
2634
|
+
constructor(httpClient2) {
|
|
2635
|
+
this.httpClient = httpClient2;
|
|
2636
|
+
}
|
|
2637
|
+
async query({
|
|
2638
|
+
subgraphUrl,
|
|
2639
|
+
query,
|
|
2640
|
+
variables
|
|
2641
|
+
}) {
|
|
2642
|
+
const { retries: retries2, post: post2 } = this.httpClient;
|
|
2643
|
+
const result = await retries2(async () => {
|
|
2644
|
+
return await post2(subgraphUrl, {
|
|
2645
|
+
query,
|
|
2646
|
+
variables
|
|
2647
|
+
});
|
|
2648
|
+
});
|
|
2649
|
+
return result?.data;
|
|
2650
|
+
}
|
|
2651
|
+
};
|
|
2652
|
+
|
|
2653
|
+
// src/retries.ts
|
|
2654
|
+
async function wait(delayMs) {
|
|
2655
|
+
return new Promise((resolve) => {
|
|
2656
|
+
setTimeout(resolve, delayMs);
|
|
2657
|
+
});
|
|
2658
|
+
}
|
|
2659
|
+
var retryInternal = async ({
|
|
2660
|
+
tryFn,
|
|
2661
|
+
maxTries = 3,
|
|
2662
|
+
atTry,
|
|
2663
|
+
linearBackoffMS = 200,
|
|
2664
|
+
shouldRetryOnError = () => true
|
|
2665
|
+
}) => {
|
|
2666
|
+
try {
|
|
2667
|
+
return await tryFn();
|
|
2668
|
+
} catch (err) {
|
|
2669
|
+
if (shouldRetryOnError(err)) {
|
|
2670
|
+
if (atTry <= maxTries) {
|
|
2671
|
+
await wait(atTry * linearBackoffMS);
|
|
2672
|
+
return await retryInternal({
|
|
2673
|
+
tryFn,
|
|
2674
|
+
maxTries,
|
|
2675
|
+
atTry: atTry + 1,
|
|
2676
|
+
linearBackoffMS,
|
|
2677
|
+
shouldRetryOnError
|
|
2678
|
+
});
|
|
2679
|
+
}
|
|
2680
|
+
}
|
|
2681
|
+
throw err;
|
|
2682
|
+
}
|
|
2683
|
+
};
|
|
2684
|
+
var retriesGeneric = async (params) => {
|
|
2685
|
+
return retryInternal({
|
|
2686
|
+
...params,
|
|
2687
|
+
atTry: 1
|
|
2688
|
+
});
|
|
2689
|
+
};
|
|
2690
|
+
|
|
2691
|
+
// src/apis/http-api-base.ts
|
|
2692
|
+
var BadResponseError = class extends Error {
|
|
2693
|
+
constructor(message, status, json) {
|
|
2694
|
+
super(message);
|
|
2695
|
+
this.name = "BadResponseError";
|
|
2696
|
+
this.status = status;
|
|
2697
|
+
this.json = json;
|
|
2698
|
+
}
|
|
2699
|
+
};
|
|
2700
|
+
var get = async (url) => {
|
|
2701
|
+
const response = await fetch(url, { method: "GET" });
|
|
2702
|
+
if (response.status !== 200) {
|
|
2703
|
+
let json;
|
|
2704
|
+
try {
|
|
2705
|
+
json = await response.json();
|
|
2706
|
+
} catch (e) {
|
|
2707
|
+
}
|
|
2708
|
+
throw new BadResponseError(
|
|
2709
|
+
`Invalid response, status ${response.status}`,
|
|
2710
|
+
response.status,
|
|
2711
|
+
json
|
|
2712
|
+
);
|
|
2713
|
+
}
|
|
2714
|
+
return await response.json();
|
|
2715
|
+
};
|
|
2716
|
+
var post = async (url, data) => {
|
|
2717
|
+
const controller = new AbortController();
|
|
2718
|
+
const { signal } = controller;
|
|
2719
|
+
const timeout = 30 * 60 * 1e3;
|
|
2720
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
2721
|
+
const response = await fetch(url, {
|
|
2722
|
+
method: "POST",
|
|
2723
|
+
headers: {
|
|
2724
|
+
"content-type": "application/json",
|
|
2725
|
+
accept: "application/json"
|
|
2726
|
+
},
|
|
2727
|
+
body: JSON.stringify(data),
|
|
2728
|
+
signal
|
|
2729
|
+
});
|
|
2730
|
+
clearTimeout(timeoutId);
|
|
2731
|
+
if (response.status !== 200) {
|
|
2732
|
+
let json;
|
|
2733
|
+
try {
|
|
2734
|
+
json = await response.json();
|
|
2735
|
+
} catch (e) {
|
|
2736
|
+
}
|
|
2737
|
+
throw new BadResponseError(
|
|
2738
|
+
`Bad response: ${response.status}`,
|
|
2739
|
+
response.status,
|
|
2740
|
+
json
|
|
2741
|
+
);
|
|
2742
|
+
}
|
|
2743
|
+
return await response.json();
|
|
2744
|
+
};
|
|
2745
|
+
var defaultShouldRetry = (err) => {
|
|
2746
|
+
return err instanceof BadResponseError && err.status >= 500;
|
|
2747
|
+
};
|
|
2748
|
+
var retries = async (tryFn, maxTries = 3, linearBackoffMS = 200, shouldRetry = defaultShouldRetry) => {
|
|
2749
|
+
return retriesGeneric({
|
|
2750
|
+
tryFn,
|
|
2751
|
+
maxTries,
|
|
2752
|
+
linearBackoffMS,
|
|
2753
|
+
shouldRetryOnError: shouldRetry
|
|
2754
|
+
});
|
|
2755
|
+
};
|
|
2756
|
+
var httpClient = {
|
|
2757
|
+
get,
|
|
2758
|
+
post,
|
|
2759
|
+
retries
|
|
2760
|
+
};
|
|
2761
|
+
|
|
2762
|
+
// src/apis/subgraph-getter.ts
|
|
2763
|
+
var SubgraphGetter = class {
|
|
2764
|
+
constructor(chainId, subgraphQuerier) {
|
|
2765
|
+
this.subgraphQuerier = subgraphQuerier || new SubgraphQuerier(httpClient);
|
|
2766
|
+
this.networkConfig = getApiNetworkConfigForChain(chainId);
|
|
2767
|
+
}
|
|
2768
|
+
async querySubgraphWithRetries({
|
|
2769
|
+
query,
|
|
2770
|
+
variables,
|
|
2771
|
+
parseResponseData
|
|
2772
|
+
}) {
|
|
2773
|
+
const responseData = await this.subgraphQuerier.query({
|
|
2774
|
+
subgraphUrl: this.networkConfig.subgraphUrl,
|
|
2775
|
+
query,
|
|
2776
|
+
variables
|
|
2777
|
+
});
|
|
2778
|
+
return parseResponseData(responseData);
|
|
2779
|
+
}
|
|
2780
|
+
};
|
|
2781
|
+
|
|
2762
2782
|
// src/mint/subgraph-mint-getter.ts
|
|
2763
2783
|
var getApiNetworkConfigForChain = (chainId) => {
|
|
2764
2784
|
if (!networkConfigByChain[chainId]) {
|
|
@@ -2868,8 +2888,9 @@ function getTargetStrategy({
|
|
|
2868
2888
|
}
|
|
2869
2889
|
return targetStrategy;
|
|
2870
2890
|
}
|
|
2871
|
-
var SubgraphMintGetter = class {
|
|
2891
|
+
var SubgraphMintGetter = class extends SubgraphGetter {
|
|
2872
2892
|
constructor(chainId, subgraphQuerier) {
|
|
2893
|
+
super(chainId, subgraphQuerier);
|
|
2873
2894
|
this.getMintable = async ({
|
|
2874
2895
|
tokenAddress,
|
|
2875
2896
|
tokenId,
|
|
@@ -2894,24 +2915,10 @@ var SubgraphMintGetter = class {
|
|
|
2894
2915
|
blockTime
|
|
2895
2916
|
});
|
|
2896
2917
|
};
|
|
2897
|
-
this.subgraphQuerier = subgraphQuerier || new SubgraphQuerier(httpClient);
|
|
2898
|
-
this.networkConfig = getApiNetworkConfigForChain(chainId);
|
|
2899
2918
|
}
|
|
2900
2919
|
async getContractMintFee(contract) {
|
|
2901
2920
|
return BigInt(contract.mintFeePerQuantity);
|
|
2902
2921
|
}
|
|
2903
|
-
async querySubgraphWithRetries({
|
|
2904
|
-
query,
|
|
2905
|
-
variables,
|
|
2906
|
-
parseResponseData
|
|
2907
|
-
}) {
|
|
2908
|
-
const responseData = await this.subgraphQuerier.query({
|
|
2909
|
-
subgraphUrl: this.networkConfig.subgraphUrl,
|
|
2910
|
-
query,
|
|
2911
|
-
variables
|
|
2912
|
-
});
|
|
2913
|
-
return parseResponseData(responseData);
|
|
2914
|
-
}
|
|
2915
2922
|
async getContractMintable({
|
|
2916
2923
|
tokenAddress,
|
|
2917
2924
|
preferredSaleType,
|
|
@@ -5382,22 +5389,9 @@ function buildContractInfoQuery({
|
|
|
5382
5389
|
}
|
|
5383
5390
|
|
|
5384
5391
|
// src/create/contract-getter.ts
|
|
5385
|
-
var SubgraphContractGetter = class {
|
|
5392
|
+
var SubgraphContractGetter = class extends SubgraphGetter {
|
|
5386
5393
|
constructor(chainId, subgraphQuerier) {
|
|
5387
|
-
|
|
5388
|
-
this.networkConfig = getApiNetworkConfigForChain(chainId);
|
|
5389
|
-
}
|
|
5390
|
-
async querySubgraphWithRetries({
|
|
5391
|
-
query,
|
|
5392
|
-
variables,
|
|
5393
|
-
parseResponseData
|
|
5394
|
-
}) {
|
|
5395
|
-
const responseData = await this.subgraphQuerier.query({
|
|
5396
|
-
subgraphUrl: this.networkConfig.subgraphUrl,
|
|
5397
|
-
query,
|
|
5398
|
-
variables
|
|
5399
|
-
});
|
|
5400
|
-
return parseResponseData(responseData);
|
|
5394
|
+
super(chainId, subgraphQuerier);
|
|
5401
5395
|
}
|
|
5402
5396
|
async getContractInfo({
|
|
5403
5397
|
contractAddress,
|
|
@@ -5428,6 +5422,252 @@ var SubgraphContractGetter = class {
|
|
|
5428
5422
|
}
|
|
5429
5423
|
};
|
|
5430
5424
|
|
|
5425
|
+
// src/rewards/rewards-queries.ts
|
|
5426
|
+
import {
|
|
5427
|
+
protocolRewardsABI,
|
|
5428
|
+
protocolRewardsAddress,
|
|
5429
|
+
erc20ZRoyaltiesABI,
|
|
5430
|
+
erc20ZRoyaltiesAddress,
|
|
5431
|
+
wethAddress
|
|
5432
|
+
} from "@zoralabs/protocol-deployments";
|
|
5433
|
+
import { encodeFunctionData as encodeFunctionData4, parseAbi as parseAbi2 } from "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: protocolRewardsAddress[chainId],
|
|
5489
|
+
abi: protocolRewardsABI,
|
|
5490
|
+
functionName: "balanceOf",
|
|
5491
|
+
args: [address]
|
|
5492
|
+
},
|
|
5493
|
+
{
|
|
5494
|
+
address: erc20ZRoyaltiesAddress[chainId],
|
|
5495
|
+
abi: erc20ZRoyaltiesABI,
|
|
5496
|
+
functionName: "getUnclaimedFeesBatch",
|
|
5497
|
+
args: [erc20Zs]
|
|
5498
|
+
}
|
|
5499
|
+
],
|
|
5500
|
+
multicallAddress: multicall3Address,
|
|
5501
|
+
allowFailure: false
|
|
5502
|
+
});
|
|
5503
|
+
const protocolRewardsBalance = result[0];
|
|
5504
|
+
const wethAddressForChain = 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: protocolRewardsABI,
|
|
5520
|
+
functionName: "withdrawFor",
|
|
5521
|
+
address: 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 = erc20ZRoyaltiesAddress[chainId];
|
|
5534
|
+
if (erc20z.length === 0) {
|
|
5535
|
+
return [];
|
|
5536
|
+
}
|
|
5537
|
+
return erc20z.map((erc20z2) => ({
|
|
5538
|
+
target: royaltiesAddress,
|
|
5539
|
+
callData: encodeFunctionData4({
|
|
5540
|
+
abi: erc20ZRoyaltiesABI,
|
|
5541
|
+
functionName: "claimFor",
|
|
5542
|
+
args: [erc20z2]
|
|
5543
|
+
}),
|
|
5544
|
+
allowFailure: false
|
|
5545
|
+
}));
|
|
5546
|
+
};
|
|
5547
|
+
var createProtocolRewardsCall = (chainId, withdrawFor) => ({
|
|
5548
|
+
target: protocolRewardsAddress[chainId],
|
|
5549
|
+
callData: encodeFunctionData4({
|
|
5550
|
+
abi: protocolRewardsABI,
|
|
5551
|
+
functionName: "withdrawFor",
|
|
5552
|
+
args: [withdrawFor, 0n]
|
|
5553
|
+
}),
|
|
5554
|
+
allowFailure: false
|
|
5555
|
+
});
|
|
5556
|
+
var createMulticallParameters = (calls, account) => makeContractParameters({
|
|
5557
|
+
abi: parseAbi2(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
|
+
|
|
5431
5671
|
// src/sdk.ts
|
|
5432
5672
|
function createCreatorClient(clientConfig) {
|
|
5433
5673
|
const premintClient = new PremintClient({
|
|
@@ -5440,12 +5680,19 @@ function createCreatorClient(clientConfig) {
|
|
|
5440
5680
|
publicClient: clientConfig.publicClient,
|
|
5441
5681
|
contractGetter: clientConfig.contractGetter || new SubgraphContractGetter(clientConfig.chainId)
|
|
5442
5682
|
});
|
|
5683
|
+
const rewardsClient = new RewardsClient({
|
|
5684
|
+
chainId: clientConfig.chainId,
|
|
5685
|
+
publicClient: clientConfig.publicClient,
|
|
5686
|
+
rewardsGetter: clientConfig.rewardsGetter || new SubgraphRewardsGetter(clientConfig.chainId)
|
|
5687
|
+
});
|
|
5443
5688
|
return {
|
|
5444
5689
|
createPremint: (p) => premintClient.createPremint(p),
|
|
5445
5690
|
updatePremint: (p) => premintClient.updatePremint(p),
|
|
5446
5691
|
deletePremint: (p) => premintClient.deletePremint(p),
|
|
5447
5692
|
create1155: (p) => create1155CreatorClient.createNew1155(p),
|
|
5448
|
-
create1155OnExistingContract: (p) => create1155CreatorClient.createNew1155OnExistingContract(p)
|
|
5693
|
+
create1155OnExistingContract: (p) => create1155CreatorClient.createNew1155OnExistingContract(p),
|
|
5694
|
+
getRewardsBalances: (p) => rewardsClient.getRewardsBalances(p),
|
|
5695
|
+
withdrawRewards: (p) => rewardsClient.withdrawRewards(p)
|
|
5449
5696
|
};
|
|
5450
5697
|
}
|
|
5451
5698
|
function createCollectorClient(params) {
|