@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.
Files changed (45) hide show
  1. package/.turbo/turbo-build.log +7 -7
  2. package/CHANGELOG.md +17 -2
  3. package/dist/anvil.d.ts +11 -1
  4. package/dist/anvil.d.ts.map +1 -1
  5. package/dist/apis/multicall3.d.ts +9 -0
  6. package/dist/apis/multicall3.d.ts.map +1 -0
  7. package/dist/apis/subgraph-getter.d.ts +9 -0
  8. package/dist/apis/subgraph-getter.d.ts.map +1 -0
  9. package/dist/create/contract-getter.d.ts +3 -6
  10. package/dist/create/contract-getter.d.ts.map +1 -1
  11. package/dist/fixtures/mint-query-results.d.ts +10 -0
  12. package/dist/fixtures/mint-query-results.d.ts.map +1 -0
  13. package/dist/fixtures/rewards-query-results.d.ts +6 -0
  14. package/dist/fixtures/rewards-query-results.d.ts.map +1 -0
  15. package/dist/index.cjs +402 -161
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.js +408 -161
  18. package/dist/index.js.map +1 -1
  19. package/dist/mint/subgraph-mint-getter.d.ts +3 -5
  20. package/dist/mint/subgraph-mint-getter.d.ts.map +1 -1
  21. package/dist/rewards/rewards-client.d.ts +34 -0
  22. package/dist/rewards/rewards-client.d.ts.map +1 -0
  23. package/dist/rewards/rewards-queries.d.ts +34 -0
  24. package/dist/rewards/rewards-queries.d.ts.map +1 -0
  25. package/dist/rewards/subgraph-queries.d.ts +20 -0
  26. package/dist/rewards/subgraph-queries.d.ts.map +1 -0
  27. package/dist/rewards/subgraph-rewards-getter.d.ts +15 -0
  28. package/dist/rewards/subgraph-rewards-getter.d.ts.map +1 -0
  29. package/dist/sdk.d.ts +5 -0
  30. package/dist/sdk.d.ts.map +1 -1
  31. package/package.json +2 -2
  32. package/src/apis/multicall3.ts +19 -0
  33. package/src/apis/subgraph-getter.ts +33 -0
  34. package/src/create/1155-create-helper.test.ts +18 -18
  35. package/src/create/contract-getter.ts +7 -29
  36. package/src/fixtures/mint-query-results.ts +55 -0
  37. package/src/fixtures/rewards-query-results.ts +25 -0
  38. package/src/mint/mint-client.test.ts +18 -46
  39. package/src/mint/subgraph-mint-getter.ts +7 -27
  40. package/src/rewards/rewards-client.test.ts +406 -0
  41. package/src/rewards/rewards-client.ts +67 -0
  42. package/src/rewards/rewards-queries.ts +253 -0
  43. package/src/rewards/subgraph-queries.ts +49 -0
  44. package/src/rewards/subgraph-rewards-getter.ts +33 -0
  45. package/src/sdk.ts +18 -0
@@ -1,15 +1,13 @@
1
1
  import { Address } from "viem";
2
- import { ISubgraphQuerier, ISubgraphQuery } from "../apis/subgraph-querier";
2
+ import { ISubgraphQuerier } from "../apis/subgraph-querier";
3
3
  import { NetworkConfig } from "src/apis/chain-constants";
4
4
  import { IOnchainMintGetter, SaleType, OnchainSalesConfigAndTokenInfo } from "./types";
5
5
  import { TokenQueryResult } from "./subgraph-queries";
6
+ import { SubgraphGetter } from "src/apis/subgraph-getter";
6
7
  export declare const getApiNetworkConfigForChain: (chainId: number) => NetworkConfig;
7
- export declare class SubgraphMintGetter implements IOnchainMintGetter {
8
- readonly subgraphQuerier: ISubgraphQuerier;
9
- networkConfig: NetworkConfig;
8
+ export declare class SubgraphMintGetter extends SubgraphGetter implements IOnchainMintGetter {
10
9
  constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier);
11
10
  getContractMintFee(contract: TokenQueryResult["contract"]): Promise<bigint>;
12
- querySubgraphWithRetries<T>({ query, variables, parseResponseData, }: ISubgraphQuery<T>): Promise<T | undefined>;
13
11
  getMintable: IOnchainMintGetter["getMintable"];
14
12
  getContractMintable({ tokenAddress, preferredSaleType, blockTime, }: {
15
13
  tokenAddress: Address;
@@ -1 +1 @@
1
- {"version":3,"file":"subgraph-mint-getter.d.ts","sourceRoot":"","sources":["../../src/mint/subgraph-mint-getter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAChB,cAAc,EAEf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EACL,kBAAkB,EAClB,QAAQ,EAER,8BAA8B,EAE/B,MAAM,SAAS,CAAC;AACjB,OAAO,EAKL,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,2BAA2B,YAAa,MAAM,KAAG,aAK7D,CAAC;AAsIF,qBAAa,kBAAmB,YAAW,kBAAkB;IAC3D,SAAgB,eAAe,EAAE,gBAAgB,CAAC;IAClD,aAAa,EAAE,aAAa,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,gBAAgB;IAMzD,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC;IAIzD,wBAAwB,CAAC,CAAC,EAAE,EAChC,KAAK,EACL,SAAS,EACT,iBAAiB,GAClB,EAAE,cAAc,CAAC,CAAC,CAAC;IAUpB,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,CA0B5C;IAEI,mBAAmB,CAAC,EACxB,YAAY,EACZ,iBAAiB,EACjB,SAAS,GACV,EAAE;QACD,YAAY,EAAE,OAAO,CAAC;QACtB,iBAAiB,CAAC,EAAE,QAAQ,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;IAwBK,0BAA0B,CAAC,EAC/B,YAAY,GACb,EAAE;QACD,YAAY,EAAE,OAAO,CAAC;KACvB;;;;CAcF"}
1
+ {"version":3,"file":"subgraph-mint-getter.d.ts","sourceRoot":"","sources":["../../src/mint/subgraph-mint-getter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EACL,kBAAkB,EAClB,QAAQ,EAER,8BAA8B,EAE/B,MAAM,SAAS,CAAC;AACjB,OAAO,EAKL,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,eAAO,MAAM,2BAA2B,YAAa,MAAM,KAAG,aAK7D,CAAC;AAsIF,qBAAa,kBACX,SAAQ,cACR,YAAW,kBAAkB;gBAEjB,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,gBAAgB;IAIzD,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC;IAI/D,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,CA0B5C;IAEI,mBAAmB,CAAC,EACxB,YAAY,EACZ,iBAAiB,EACjB,SAAS,GACV,EAAE;QACD,YAAY,EAAE,OAAO,CAAC;QACtB,iBAAiB,CAAC,EAAE,QAAQ,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;IAwBK,0BAA0B,CAAC,EAC/B,YAAY,GACb,EAAE;QACD,YAAY,EAAE,OAAO,CAAC;KACvB;;;;CAcF"}
@@ -0,0 +1,34 @@
1
+ import { IPublicClient } from "src/types";
2
+ import { IRewardsGetter } from "./subgraph-rewards-getter";
3
+ import { Account, Address } from "viem";
4
+ export type WithdrawRewardsParams = {
5
+ account: Address | Account;
6
+ withdrawFor: Address;
7
+ claimSecondaryRoyalties?: boolean;
8
+ };
9
+ export type GetRewardsBalancesParams = {
10
+ account: Address | Account;
11
+ };
12
+ export declare class RewardsClient {
13
+ private readonly chainId;
14
+ private readonly publicClient;
15
+ private readonly rewardsGetter;
16
+ constructor({ chainId, publicClient, rewardsGetter, }: {
17
+ chainId: number;
18
+ publicClient: IPublicClient;
19
+ rewardsGetter: IRewardsGetter;
20
+ });
21
+ /** Withdraws rewards for a given account */
22
+ withdrawRewards({ account, withdrawFor, claimSecondaryRoyalties, }: WithdrawRewardsParams): Promise<{
23
+ parameters: import("src/types").SimulateContractParametersWithAccount;
24
+ }>;
25
+ /** Retrieves the rewards balances for a given account */
26
+ getRewardsBalances(params: GetRewardsBalancesParams): Promise<{
27
+ protocolRewards: bigint;
28
+ secondaryRoyalties: {
29
+ eth: bigint;
30
+ erc20: Record<Address, bigint>;
31
+ };
32
+ }>;
33
+ }
34
+ //# sourceMappingURL=rewards-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewards-client.d.ts","sourceRoot":"","sources":["../../src/rewards/rewards-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGxC,MAAM,MAAM,qBAAqB,GAAG;IAElC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAE3B,WAAW,EAAE,OAAO,CAAC;IAErB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IAErC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;CAC5B,CAAC;AAEF,qBAAa,aAAa;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;gBAEnC,EACV,OAAO,EACP,YAAY,EACZ,aAAa,GACd,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,aAAa,CAAC;QAC5B,aAAa,EAAE,cAAc,CAAC;KAC/B;IAOD,4CAA4C;IACtC,eAAe,CAAC,EACpB,OAAO,EACP,WAAW,EACX,uBAAuB,GACxB,EAAE,qBAAqB;;;IAYxB,yDAAyD;IACnD,kBAAkB,CAAC,MAAM,EAAE,wBAAwB;;;;;;;CAQ1D"}
@@ -0,0 +1,34 @@
1
+ import { PublicClient } from "src/utils";
2
+ import { Account, Address } from "viem";
3
+ import { IRewardsGetter } from "./subgraph-rewards-getter";
4
+ type RewardsBalance = {
5
+ protocolRewards: bigint;
6
+ secondaryRoyalties: {
7
+ eth: bigint;
8
+ erc20: Record<Address, bigint>;
9
+ };
10
+ };
11
+ export declare const getRewardsBalance: ({ account, publicClient, chainId, rewardsGetter, }: {
12
+ account: Account | Address;
13
+ publicClient: PublicClient;
14
+ chainId: number;
15
+ rewardsGetter: IRewardsGetter;
16
+ }) => Promise<RewardsBalance>;
17
+ export declare const withdrawProtocolRewards: ({ withdrawFor, chainId, }: {
18
+ withdrawFor: Address;
19
+ chainId: number;
20
+ }) => import("../types").SimulateContractParametersWithAccount;
21
+ export declare function withdrawSecondaryRoyalties({ claimFor, chainId, rewardsGetter, }: {
22
+ claimFor: Address;
23
+ chainId: number;
24
+ rewardsGetter: IRewardsGetter;
25
+ }): Promise<import("../types").SimulateContractParametersWithAccount>;
26
+ export declare const withdrawRewards: ({ account, withdrawFor, claimSecondaryRoyalties, chainId, rewardsGetter, }: {
27
+ account: Address | Account;
28
+ withdrawFor: Address;
29
+ claimSecondaryRoyalties?: boolean;
30
+ chainId: number;
31
+ rewardsGetter: IRewardsGetter;
32
+ }) => Promise<import("../types").SimulateContractParametersWithAccount>;
33
+ export {};
34
+ //# sourceMappingURL=rewards-queries.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,20 @@
1
+ import { ISubgraphQuery } from "src/apis/subgraph-querier";
2
+ import { Address } from "viem";
3
+ export type RewardsToken = {
4
+ salesStrategies: [
5
+ {
6
+ zoraTimedMinter: {
7
+ erc20Z: {
8
+ id: Address;
9
+ };
10
+ };
11
+ }
12
+ ];
13
+ };
14
+ export type CreatorERC20zQueryResult = {
15
+ zoraCreateTokens: RewardsToken[];
16
+ };
17
+ export declare function buildCreatorERC20zs({ address, }: {
18
+ address: Address;
19
+ }): ISubgraphQuery<CreatorERC20zQueryResult["zoraCreateTokens"]>;
20
+ //# sourceMappingURL=subgraph-queries.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,15 @@
1
+ import { SubgraphGetter } from "src/apis/subgraph-getter";
2
+ import { ISubgraphQuerier } from "src/apis/subgraph-querier";
3
+ import { Address } from "viem";
4
+ export interface IRewardsGetter {
5
+ getErc20ZzForCreator: (params: {
6
+ address: Address;
7
+ }) => Promise<Address[]>;
8
+ }
9
+ export declare class SubgraphRewardsGetter extends SubgraphGetter implements IRewardsGetter {
10
+ constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier);
11
+ getErc20ZzForCreator({ address, }: {
12
+ address: Address;
13
+ }): Promise<Address[]>;
14
+ }
15
+ //# sourceMappingURL=subgraph-rewards-getter.d.ts.map
@@ -0,0 +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"}
package/dist/sdk.d.ts CHANGED
@@ -5,12 +5,16 @@ import { ClientConfig } from "./utils";
5
5
  import { IPremintAPI } from "./premint/premint-api-client";
6
6
  import { IOnchainMintGetter } from "./mint/types";
7
7
  import { IContractGetter } from "./create/contract-getter";
8
+ import { RewardsClient } from "./rewards/rewards-client";
9
+ import { IRewardsGetter } from "./rewards/subgraph-rewards-getter";
8
10
  export type CreatorClient = {
9
11
  createPremint: PremintClient["createPremint"];
10
12
  updatePremint: PremintClient["updatePremint"];
11
13
  deletePremint: PremintClient["deletePremint"];
12
14
  create1155: Create1155Client["createNew1155"];
13
15
  create1155OnExistingContract: Create1155Client["createNew1155OnExistingContract"];
16
+ withdrawRewards: RewardsClient["withdrawRewards"];
17
+ getRewardsBalances: RewardsClient["getRewardsBalances"];
14
18
  };
15
19
  export type CollectorClient = {
16
20
  getPremint: PremintClient["getPremint"];
@@ -24,6 +28,7 @@ export type CreatorClientConfig = ClientConfig & {
24
28
  /** API for submitting and getting premints. Defaults to the Zora Premint API */
25
29
  premintApi?: IPremintAPI;
26
30
  contractGetter?: IContractGetter;
31
+ rewardsGetter?: IRewardsGetter;
27
32
  };
28
33
  /**
29
34
  * Builds the sdk for creating/managing 1155 contracts and tokens
package/dist/sdk.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAoB,MAAM,8BAA8B,CAAC;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC9C,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC9C,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC9C,UAAU,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC9C,4BAA4B,EAAE,gBAAgB,CAAC,iCAAiC,CAAC,CAAC;CACnF,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACxC,gCAAgC,EAAE,aAAa,CAAC,2BAA2B,CAAC,CAAC;IAC7E,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACzB,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IACzC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5B,mBAAmB,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG;IAC/C,iFAAiF;IACjF,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF;;;;;KAKK;AACL,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,mBAAmB,GAChC,aAAa,CAwBf;AAED,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG;IACjD,kEAAkE;IAClE,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,4EAA4E;IAC5E,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAC5B,eAAe,CAwBjB"}
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAoB,MAAM,8BAA8B,CAAC;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EACL,cAAc,EAEf,MAAM,mCAAmC,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC9C,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC9C,aAAa,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC9C,UAAU,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC9C,4BAA4B,EAAE,gBAAgB,CAAC,iCAAiC,CAAC,CAAC;IAClF,eAAe,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAClD,kBAAkB,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACxC,gCAAgC,EAAE,aAAa,CAAC,2BAA2B,CAAC,CAAC;IAC7E,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACzB,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IACzC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5B,mBAAmB,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG;IAC/C,iFAAiF;IACjF,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC,CAAC;AAEF;;;;;KAKK;AACL,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,mBAAmB,GAChC,aAAa,CAkCf;AAED,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG;IACjD,kEAAkE;IAClE,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,4EAA4E;IAC5E,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAC5B,eAAe,CAwBjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zoralabs/protocol-sdk",
3
- "version": "0.9.5",
3
+ "version": "0.10.0",
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.3.1"
20
+ "@zoralabs/protocol-deployments": "^0.3.2"
21
21
  },
22
22
  "peerDependencies": {
23
23
  "viem": "^2.13.2"
@@ -0,0 +1,19 @@
1
+ import { Address, Hex } from "viem";
2
+
3
+ export const multicall3Abi = [
4
+ "struct Call { address target; bytes callData; }",
5
+ "struct Call3 { address target; bool allowFailure; bytes callData; }",
6
+ "struct Call3Value { address target; bool allowFailure; uint256 value; bytes callData; }",
7
+ "struct Result { bool success; bytes returnData; }",
8
+ "function aggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData)",
9
+ "function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData)",
10
+ "function aggregate3Value(Call3Value[] calldata calls) public payable returns (Result[] memory returnData)",
11
+ ] as const;
12
+
13
+ export const multicall3Address = "0xcA11bde05977b3631167028862bE2a173976CA11";
14
+
15
+ export type Multicall3Call3 = {
16
+ target: Address;
17
+ allowFailure: boolean;
18
+ callData: Hex;
19
+ };
@@ -0,0 +1,33 @@
1
+ import { getApiNetworkConfigForChain } from "src/mint/subgraph-mint-getter";
2
+ import { NetworkConfig } from "./chain-constants";
3
+ import {
4
+ ISubgraphQuerier,
5
+ ISubgraphQuery,
6
+ SubgraphQuerier,
7
+ } from "./subgraph-querier";
8
+ import { httpClient as defaultHttpClient } from "../apis/http-api-base";
9
+
10
+ export class SubgraphGetter {
11
+ public readonly subgraphQuerier: ISubgraphQuerier;
12
+ networkConfig: NetworkConfig;
13
+
14
+ constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {
15
+ this.subgraphQuerier =
16
+ subgraphQuerier || new SubgraphQuerier(defaultHttpClient);
17
+ this.networkConfig = getApiNetworkConfigForChain(chainId);
18
+ }
19
+
20
+ async querySubgraphWithRetries<T>({
21
+ query,
22
+ variables,
23
+ parseResponseData,
24
+ }: ISubgraphQuery<T>) {
25
+ const responseData = await this.subgraphQuerier.query({
26
+ subgraphUrl: this.networkConfig.subgraphUrl,
27
+ query,
28
+ variables,
29
+ });
30
+
31
+ return parseResponseData(responseData);
32
+ }
33
+ }
@@ -95,11 +95,11 @@ describe("create-helper", () => {
95
95
  });
96
96
 
97
97
  const { request } = await publicClient.simulateContract(parameters);
98
- const receipt = await writeContractWithRetries(
98
+ const receipt = await writeContractWithRetries({
99
99
  request,
100
100
  walletClient,
101
101
  publicClient,
102
- );
102
+ });
103
103
  expect(receipt).not.toBeNull();
104
104
  expect(receipt.to).to.equal("0x777777c338d93e2c7adf08d102d45ca7cc4ed021");
105
105
  expect(getTokenIdFromCreateReceipt(receipt)).to.be.equal(1n);
@@ -171,7 +171,7 @@ describe("create-helper", () => {
171
171
 
172
172
  const { request } = await publicClient.simulateContract(parameters);
173
173
 
174
- await writeContractWithRetries(request, walletClient, publicClient);
174
+ await writeContractWithRetries({ request, walletClient, publicClient });
175
175
 
176
176
  expect(
177
177
  await minterIsMinterOnToken({
@@ -213,11 +213,11 @@ describe("create-helper", () => {
213
213
  });
214
214
  const { request: simulateResponse } =
215
215
  await publicClient.simulateContract(request);
216
- const receipt = await writeContractWithRetries(
217
- simulateResponse,
216
+ const receipt = await writeContractWithRetries({
217
+ request: simulateResponse,
218
218
  walletClient,
219
219
  publicClient,
220
- );
220
+ });
221
221
  const firstTokenId = getTokenIdFromCreateReceipt(receipt);
222
222
  expect(firstTokenId).to.be.equal(1n);
223
223
 
@@ -258,11 +258,11 @@ describe("create-helper", () => {
258
258
  const { request: simulateRequest } = await publicClient.simulateContract(
259
259
  newTokenOnExistingContract.parameters,
260
260
  );
261
- const newReceipt = await writeContractWithRetries(
262
- simulateRequest,
261
+ const newReceipt = await writeContractWithRetries({
262
+ request: simulateRequest,
263
263
  walletClient,
264
264
  publicClient,
265
- );
265
+ });
266
266
 
267
267
  const tokenId = getTokenIdFromCreateReceipt(newReceipt);
268
268
  expect(tokenId).to.be.equal(2n);
@@ -294,11 +294,11 @@ describe("create-helper", () => {
294
294
  });
295
295
  const { request: simulationResponse } =
296
296
  await publicClient.simulateContract(request);
297
- const receipt = await writeContractWithRetries(
298
- simulationResponse,
297
+ const receipt = await writeContractWithRetries({
298
+ request: simulationResponse,
299
299
  walletClient,
300
300
  publicClient,
301
- );
301
+ });
302
302
  expect(receipt.to).to.equal("0x777777c338d93e2c7adf08d102d45ca7cc4ed021");
303
303
  expect(getTokenIdFromCreateReceipt(receipt)).to.be.equal(newTokenId);
304
304
 
@@ -337,11 +337,11 @@ describe("create-helper", () => {
337
337
  const { request: createSimulation } =
338
338
  await publicClient.simulateContract(request);
339
339
 
340
- await writeContractWithRetries(
341
- createSimulation,
340
+ await writeContractWithRetries({
341
+ request: createSimulation,
342
342
  walletClient,
343
343
  publicClient,
344
- );
344
+ });
345
345
 
346
346
  const quantityToMint = 5n;
347
347
 
@@ -401,11 +401,11 @@ describe("create-helper", () => {
401
401
  });
402
402
  const { request: createSimulation } =
403
403
  await publicClient.simulateContract(request);
404
- await writeContractWithRetries(
405
- createSimulation,
404
+ await writeContractWithRetries({
405
+ request: createSimulation,
406
406
  walletClient,
407
407
  publicClient,
408
- );
408
+ });
409
409
 
410
410
  const quantityToMint = 5n;
411
411
 
@@ -1,14 +1,8 @@
1
- import { NetworkConfig } from "src/apis/chain-constants";
2
- import {
3
- ISubgraphQuerier,
4
- ISubgraphQuery,
5
- SubgraphQuerier,
6
- } from "src/apis/subgraph-querier";
7
- import { httpClient as defaultHttpClient } from "../apis/http-api-base";
1
+ import { ISubgraphQuerier } from "src/apis/subgraph-querier";
8
2
  import { Address } from "viem";
9
- import { getApiNetworkConfigForChain } from "src/mint/subgraph-mint-getter";
10
3
  import { buildContractInfoQuery } from "./subgraph-queries";
11
4
  import { retriesGeneric } from "src/retries";
5
+ import { SubgraphGetter } from "src/apis/subgraph-getter";
12
6
 
13
7
  export interface IContractGetter {
14
8
  getContractInfo: (params: {
@@ -22,28 +16,12 @@ export interface IContractGetter {
22
16
  }>;
23
17
  }
24
18
 
25
- export class SubgraphContractGetter implements IContractGetter {
26
- public readonly subgraphQuerier: ISubgraphQuerier;
27
- networkConfig: NetworkConfig;
28
-
19
+ export class SubgraphContractGetter
20
+ extends SubgraphGetter
21
+ implements IContractGetter
22
+ {
29
23
  constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {
30
- this.subgraphQuerier =
31
- subgraphQuerier || new SubgraphQuerier(defaultHttpClient);
32
- this.networkConfig = getApiNetworkConfigForChain(chainId);
33
- }
34
-
35
- async querySubgraphWithRetries<T>({
36
- query,
37
- variables,
38
- parseResponseData,
39
- }: ISubgraphQuery<T>) {
40
- const responseData = await this.subgraphQuerier.query({
41
- subgraphUrl: this.networkConfig.subgraphUrl,
42
- query,
43
- variables,
44
- });
45
-
46
- return parseResponseData(responseData);
24
+ super(chainId, subgraphQuerier);
47
25
  }
48
26
 
49
27
  async getContractInfo({
@@ -0,0 +1,55 @@
1
+ import { Address, parseEther, zeroAddress } from "viem";
2
+ import { TokenQueryResult } from "../mint/subgraph-queries";
3
+ import { zoraTimedSaleStrategyAddress } from "@zoralabs/protocol-deployments";
4
+ import { SALE_END_FOREVER } from "../create/minter-defaults";
5
+
6
+ export const mockTimedSaleStrategyTokenQueryResult = ({
7
+ tokenId,
8
+ contractAddress,
9
+ contractVersion,
10
+ chainId,
11
+ saleEnd = SALE_END_FOREVER,
12
+ }: {
13
+ tokenId: bigint;
14
+ contractAddress: Address;
15
+ contractVersion: string;
16
+ chainId: number;
17
+ saleEnd?: bigint;
18
+ }): TokenQueryResult => ({
19
+ contract: {
20
+ address: contractAddress,
21
+ contractVersion,
22
+ // not used:
23
+ mintFeePerQuantity: "0",
24
+ name: "",
25
+ contractURI: "",
26
+ salesStrategies: [],
27
+ },
28
+ creator: zeroAddress,
29
+ maxSupply: "1000",
30
+ tokenStandard: "ERC1155",
31
+ totalMinted: "0",
32
+ uri: "",
33
+ tokenId: tokenId.toString(),
34
+ salesStrategies: [
35
+ {
36
+ type: "ZORA_TIMED",
37
+ zoraTimedMinter: {
38
+ address:
39
+ zoraTimedSaleStrategyAddress[
40
+ chainId as keyof typeof zoraTimedSaleStrategyAddress
41
+ ],
42
+ mintFee: parseEther("0.000111").toString(),
43
+ saleEnd: saleEnd.toString(),
44
+ saleStart: SALE_END_FOREVER.toString(),
45
+ erc20Z: {
46
+ // not needed
47
+ id: zeroAddress,
48
+ // note needed
49
+ pool: zeroAddress,
50
+ },
51
+ secondaryActivated: false,
52
+ },
53
+ },
54
+ ],
55
+ });
@@ -0,0 +1,25 @@
1
+ import { Address } from "viem";
2
+ import {
3
+ RewardsToken,
4
+ CreatorERC20zQueryResult,
5
+ } from "../rewards/subgraph-queries";
6
+
7
+ const mockResult = (erz20z: Address): RewardsToken => ({
8
+ salesStrategies: [
9
+ {
10
+ zoraTimedMinter: {
11
+ erc20Z: {
12
+ id: erz20z,
13
+ },
14
+ },
15
+ },
16
+ ],
17
+ });
18
+
19
+ export const mockRewardsQueryResults = ({
20
+ erc20z,
21
+ }: {
22
+ erc20z: Address[];
23
+ }): CreatorERC20zQueryResult => ({
24
+ zoraCreateTokens: erc20z.map(mockResult),
25
+ });
@@ -1,10 +1,7 @@
1
1
  import { describe, expect, vi } from "vitest";
2
- import { Address, erc20Abi, parseAbi, parseEther, zeroAddress } from "viem";
2
+ import { Address, erc20Abi, parseAbi, parseEther } from "viem";
3
3
  import { zora, zoraSepolia } from "viem/chains";
4
- import {
5
- zoraCreator1155ImplABI,
6
- zoraTimedSaleStrategyAddress,
7
- } from "@zoralabs/protocol-deployments";
4
+ import { zoraCreator1155ImplABI } from "@zoralabs/protocol-deployments";
8
5
  import { forkUrls, makeAnvilTest, writeContractWithRetries } from "src/anvil";
9
6
  import { createCollectorClient, createCreatorClient } from "src/sdk";
10
7
  import { getAllowListEntry } from "src/allow-list/allow-list-client";
@@ -15,7 +12,7 @@ import {
15
12
  import { SubgraphMintGetter } from "./subgraph-mint-getter";
16
13
  import { new1155ContractVersion } from "src/create/contract-setup";
17
14
  import { ISubgraphQuerier } from "src/apis/subgraph-querier";
18
- import { TokenQueryResult } from "./subgraph-queries";
15
+ import { mockTimedSaleStrategyTokenQueryResult } from "src/fixtures/mint-query-results";
19
16
 
20
17
  const erc721ABI = parseAbi([
21
18
  "function balanceOf(address owner) public view returns (uint256)",
@@ -369,46 +366,21 @@ describe("mint-helper", () => {
369
366
 
370
367
  const { request: createRequest } =
371
368
  await publicClient.simulateContract(parameters);
372
- await writeContractWithRetries(createRequest, walletClient, publicClient);
373
-
374
- const zoraCreateToken: TokenQueryResult = {
375
- contract: {
376
- address: contractAddress,
377
- contractVersion: new1155ContractVersion(chain.id),
378
- // not used:
379
- mintFeePerQuantity: "0",
380
- name: "",
381
- contractURI: "",
382
- salesStrategies: [],
383
- },
384
- creator: creator,
385
- maxSupply: "1000",
386
- tokenStandard: "ERC1155",
387
- totalMinted: "0",
388
- uri: "",
389
- tokenId: newTokenId.toString(),
390
- salesStrategies: [
391
- {
392
- type: "ZORA_TIMED",
393
- zoraTimedMinter: {
394
- address:
395
- zoraTimedSaleStrategyAddress[
396
- chain.id as keyof typeof zoraTimedSaleStrategyAddress
397
- ],
398
- mintFee: "111000000000000",
399
- saleEnd: "0",
400
- saleStart: "0",
401
- erc20Z: {
402
- // not needed
403
- id: zeroAddress,
404
- // note needed
405
- pool: zeroAddress,
406
- },
407
- secondaryActivated: false,
408
- },
409
- },
410
- ],
411
- };
369
+ await writeContractWithRetries({
370
+ request: createRequest,
371
+ walletClient,
372
+ publicClient,
373
+ });
374
+
375
+ const zoraCreateToken = mockTimedSaleStrategyTokenQueryResult({
376
+ chainId: chain.id,
377
+ contractAddress,
378
+ contractVersion:
379
+ new1155ContractVersion[
380
+ chain.id as keyof typeof new1155ContractVersion
381
+ ],
382
+ tokenId: newTokenId,
383
+ });
412
384
 
413
385
  const mockQuery = vi.fn<ISubgraphQuerier["query"]>().mockResolvedValue({
414
386
  zoraCreateToken,
@@ -1,10 +1,5 @@
1
1
  import { Address } from "viem";
2
- import { httpClient as defaultHttpClient } from "../apis/http-api-base";
3
- import {
4
- ISubgraphQuerier,
5
- ISubgraphQuery,
6
- SubgraphQuerier,
7
- } from "../apis/subgraph-querier";
2
+ import { ISubgraphQuerier } from "../apis/subgraph-querier";
8
3
  import { NetworkConfig, networkConfigByChain } from "src/apis/chain-constants";
9
4
  import { GenericTokenIdTypes } from "src/types";
10
5
  import {
@@ -21,6 +16,7 @@ import {
21
16
  SalesStrategyResult,
22
17
  TokenQueryResult,
23
18
  } from "./subgraph-queries";
19
+ import { SubgraphGetter } from "src/apis/subgraph-getter";
24
20
 
25
21
  export const getApiNetworkConfigForChain = (chainId: number): NetworkConfig => {
26
22
  if (!networkConfigByChain[chainId]) {
@@ -161,34 +157,18 @@ function getTargetStrategy({
161
157
  return targetStrategy;
162
158
  }
163
159
 
164
- export class SubgraphMintGetter implements IOnchainMintGetter {
165
- public readonly subgraphQuerier: ISubgraphQuerier;
166
- networkConfig: NetworkConfig;
167
-
160
+ export class SubgraphMintGetter
161
+ extends SubgraphGetter
162
+ implements IOnchainMintGetter
163
+ {
168
164
  constructor(chainId: number, subgraphQuerier?: ISubgraphQuerier) {
169
- this.subgraphQuerier =
170
- subgraphQuerier || new SubgraphQuerier(defaultHttpClient);
171
- this.networkConfig = getApiNetworkConfigForChain(chainId);
165
+ super(chainId, subgraphQuerier);
172
166
  }
173
167
 
174
168
  async getContractMintFee(contract: TokenQueryResult["contract"]) {
175
169
  return BigInt(contract.mintFeePerQuantity);
176
170
  }
177
171
 
178
- async querySubgraphWithRetries<T>({
179
- query,
180
- variables,
181
- parseResponseData,
182
- }: ISubgraphQuery<T>) {
183
- const responseData = await this.subgraphQuerier.query({
184
- subgraphUrl: this.networkConfig.subgraphUrl,
185
- query,
186
- variables,
187
- });
188
-
189
- return parseResponseData(responseData);
190
- }
191
-
192
172
  getMintable: IOnchainMintGetter["getMintable"] = async ({
193
173
  tokenAddress,
194
174
  tokenId,