@zoralabs/protocol-sdk 0.9.1 → 0.9.3

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 (50) hide show
  1. package/.turbo/turbo-build.log +7 -7
  2. package/CHANGELOG.md +12 -0
  3. package/dist/anvil.d.ts.map +1 -1
  4. package/dist/apis/http-api-base.d.ts +1 -1
  5. package/dist/apis/http-api-base.d.ts.map +1 -1
  6. package/dist/apis/subgraph-querier.d.ts +6 -0
  7. package/dist/apis/subgraph-querier.d.ts.map +1 -1
  8. package/dist/create/1155-create-helper.d.ts +4 -1
  9. package/dist/create/1155-create-helper.d.ts.map +1 -1
  10. package/dist/create/contract-getter.d.ts +30 -0
  11. package/dist/create/contract-getter.d.ts.map +1 -0
  12. package/dist/create/contract-setup.d.ts +4 -8
  13. package/dist/create/contract-setup.d.ts.map +1 -1
  14. package/dist/create/mint-from-create.d.ts +3 -3
  15. package/dist/create/mint-from-create.d.ts.map +1 -1
  16. package/dist/create/minter-defaults.d.ts +1 -1
  17. package/dist/create/minter-defaults.d.ts.map +1 -1
  18. package/dist/create/subgraph-queries.d.ts +13 -0
  19. package/dist/create/subgraph-queries.d.ts.map +1 -0
  20. package/dist/create/token-setup.d.ts +2 -0
  21. package/dist/create/token-setup.d.ts.map +1 -1
  22. package/dist/index.cjs +2166 -2099
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.js +2188 -2121
  25. package/dist/index.js.map +1 -1
  26. package/dist/mint/subgraph-mint-getter.d.ts +2 -2
  27. package/dist/mint/subgraph-mint-getter.d.ts.map +1 -1
  28. package/dist/mint/subgraph-queries.d.ts +1 -5
  29. package/dist/mint/subgraph-queries.d.ts.map +1 -1
  30. package/dist/retries.d.ts +7 -0
  31. package/dist/retries.d.ts.map +1 -0
  32. package/dist/sdk.d.ts +2 -0
  33. package/dist/sdk.d.ts.map +1 -1
  34. package/package.json +1 -1
  35. package/src/apis/http-api-base.ts +12 -20
  36. package/src/apis/subgraph-querier.ts +7 -0
  37. package/src/create/1155-create-helper.test.ts +68 -3
  38. package/src/create/1155-create-helper.ts +23 -9
  39. package/src/create/contract-getter.ts +90 -0
  40. package/src/create/contract-setup.ts +17 -46
  41. package/src/create/mint-from-create.ts +7 -15
  42. package/src/create/minter-defaults.ts +11 -20
  43. package/src/create/subgraph-queries.ts +35 -0
  44. package/src/create/token-setup.ts +5 -1
  45. package/src/create/types.ts +1 -1
  46. package/src/mint/subgraph-mint-getter.ts +5 -2
  47. package/src/mint/subgraph-queries.ts +1 -7
  48. package/src/retries.ts +49 -0
  49. package/src/sdk.ts +8 -0
  50. package/test-integration/create-multiple-tokens-on-contract.ts +104 -0
@@ -1,8 +1,8 @@
1
1
  import { Address } from "viem";
2
- import { ISubgraphQuerier } from "../apis/subgraph-querier";
2
+ import { ISubgraphQuerier, ISubgraphQuery } from "../apis/subgraph-querier";
3
3
  import { NetworkConfig } from "src/apis/chain-constants";
4
4
  import { IOnchainMintGetter, SaleType, OnchainSalesConfigAndTokenInfo } from "./types";
5
- import { ISubgraphQuery, TokenQueryResult } from "./subgraph-queries";
5
+ import { TokenQueryResult } from "./subgraph-queries";
6
6
  export declare const getApiNetworkConfigForChain: (chainId: number) => NetworkConfig;
7
7
  export declare class SubgraphMintGetter implements IOnchainMintGetter {
8
8
  readonly subgraphQuerier: ISubgraphQuerier;
@@ -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,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EACL,kBAAkB,EAClB,QAAQ,EAER,8BAA8B,EAE/B,MAAM,SAAS,CAAC;AACjB,OAAO,EAIL,cAAc,EAEd,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,2BAA2B,YAAa,MAAM,KAAG,aAK7D,CAAC;AA6HF,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;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;AA6HF,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,3 +1,4 @@
1
+ import { ISubgraphQuery } from "src/apis/subgraph-querier";
1
2
  import { GenericTokenIdTypes } from "src/types";
2
3
  import { Address } from "viem";
3
4
  export type FixedPriceSaleStrategyResult = {
@@ -69,11 +70,6 @@ export declare function buildNftTokenSalesQuery({ tokenId, tokenAddress, }: {
69
70
  export declare function buildContractTokensQuery({ tokenAddress, }: {
70
71
  tokenAddress: Address;
71
72
  }): ISubgraphQuery<TokenQueryResult[]>;
72
- export type ISubgraphQuery<T> = {
73
- query: string;
74
- variables: Record<string, any>;
75
- parseResponseData: (data: any | undefined) => T | undefined;
76
- };
77
73
  export declare function buildPremintsOfContractQuery({ tokenAddress, }: {
78
74
  tokenAddress: Address;
79
75
  }): ISubgraphQuery<{
@@ -1 +1 @@
1
- {"version":3,"file":"subgraph-queries.d.ts","sourceRoot":"","sources":["../../src/mint/subgraph-queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subgraph-queries.d.ts","sourceRoot":"","sources":["../../src/mint/subgraph-queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const retriesGeneric: <T>(params: {
2
+ tryFn: () => T;
3
+ maxTries?: number;
4
+ linearBackoffMS?: number;
5
+ shouldRetryOnError?: (err: any) => boolean;
6
+ }) => Promise<T>;
7
+ //# sourceMappingURL=retries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retries.d.ts","sourceRoot":"","sources":["../src/retries.ts"],"names":[],"mappings":"AAsCA,eAAO,MAAM,cAAc,GAAU,CAAC,UAAU;IAC9C,KAAK,EAAE,MAAM,CAAC,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CAC5C,eAKA,CAAC"}
package/dist/sdk.d.ts CHANGED
@@ -4,6 +4,7 @@ import { MintClient } from "./mint/mint-client";
4
4
  import { ClientConfig } from "./utils";
5
5
  import { IPremintAPI } from "./premint/premint-api-client";
6
6
  import { IOnchainMintGetter } from "./mint/types";
7
+ import { IContractGetter } from "./create/contract-getter";
7
8
  export type CreatorClient = {
8
9
  createPremint: PremintClient["createPremint"];
9
10
  updatePremint: PremintClient["updatePremint"];
@@ -22,6 +23,7 @@ export type CollectorClient = {
22
23
  export type CreatorClientConfig = ClientConfig & {
23
24
  /** API for submitting and getting premints. Defaults to the Zora Premint API */
24
25
  premintApi?: IPremintAPI;
26
+ contractGetter?: IContractGetter;
25
27
  };
26
28
  /**
27
29
  * 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;AAElD,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;CAC1B,CAAC;AAEF;;;;;KAKK;AACL,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,mBAAmB,GAChC,aAAa,CAqBf;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;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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zoralabs/protocol-sdk",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "repository": "https://github.com/ourzora/zora-protocol",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,3 +1,5 @@
1
+ import { retriesGeneric } from "src/retries";
2
+
1
3
  export class BadResponseError<T = any> extends Error {
2
4
  status: number;
3
5
  json: T;
@@ -9,12 +11,6 @@ export class BadResponseError<T = any> extends Error {
9
11
  }
10
12
  }
11
13
 
12
- async function wait(delayMs: number) {
13
- return new Promise((resolve) => {
14
- setTimeout(resolve, delayMs);
15
- });
16
- }
17
-
18
14
  /**
19
15
  * A simple fetch() wrapper for HTTP gets.
20
16
  * Can be overridden as needed.
@@ -86,22 +82,18 @@ export const post = async <T>(url: string, data: any) => {
86
82
  export const retries = async <T>(
87
83
  tryFn: () => T,
88
84
  maxTries: number = 3,
89
- atTry: number = 1,
90
85
  linearBackoffMS: number = 200,
91
86
  ): Promise<T> => {
92
- try {
93
- return await tryFn();
94
- } catch (err: any) {
95
- if (err instanceof BadResponseError) {
96
- if (err.status >= 500) {
97
- if (atTry <= maxTries) {
98
- await wait(atTry * linearBackoffMS);
99
- return await retries(tryFn, maxTries, atTry + 1);
100
- }
101
- }
102
- }
103
- throw err;
104
- }
87
+ const shouldRetry = (err: any) => {
88
+ return err instanceof BadResponseError && err.status >= 500;
89
+ };
90
+
91
+ return retriesGeneric({
92
+ tryFn,
93
+ maxTries,
94
+ linearBackoffMS,
95
+ shouldRetryOnError: shouldRetry,
96
+ });
105
97
  };
106
98
 
107
99
  export interface IHttpClient {
@@ -1,10 +1,17 @@
1
1
  import { IHttpClient } from "./http-api-base";
2
2
 
3
+ export type ISubgraphQuery<T> = {
4
+ query: string;
5
+ variables: Record<string, any>;
6
+ parseResponseData: (data: any | undefined) => T | undefined;
7
+ };
8
+
3
9
  export interface ISubgraphQuerier {
4
10
  query: (params: {
5
11
  subgraphUrl: string;
6
12
  query: string;
7
13
  variables?: Record<string, any>;
14
+ maxRetries?: number;
8
15
  }) => Promise<object | undefined>;
9
16
  }
10
17
 
@@ -1,4 +1,4 @@
1
- import { describe, expect } from "vitest";
1
+ import { describe, expect, vi } from "vitest";
2
2
  import {
3
3
  getContractAddressFromReceipt,
4
4
  getTokenIdFromCreateReceipt,
@@ -6,16 +6,25 @@ import {
6
6
  import { createCreatorClient } from "src/sdk";
7
7
  import {
8
8
  zoraCreator1155ImplABI,
9
+ zoraTimedSaleStrategyABI,
9
10
  zoraTimedSaleStrategyAddress,
10
11
  } from "@zoralabs/protocol-deployments";
11
12
  import { waitForSuccess } from "src/test-utils";
12
- import { Address, parseEther, PublicClient, TransactionReceipt } from "viem";
13
+ import {
14
+ Address,
15
+ erc20Abi,
16
+ parseEther,
17
+ PublicClient,
18
+ TransactionReceipt,
19
+ } from "viem";
13
20
  import { makePrepareMint1155TokenParams } from "src/mint/mint-transactions";
14
21
  import { forkUrls, makeAnvilTest } from "src/anvil";
15
22
  import { zora } from "viem/chains";
16
23
  import { AllowList } from "src/allow-list/types";
17
24
  import { createAllowList } from "src/allow-list/allow-list-client";
18
25
  import { NewContractParams } from "./types";
26
+ import { SubgraphContractGetter } from "./contract-getter";
27
+ import { inspect } from "util";
19
28
 
20
29
  export const demoTokenMetadataURI =
21
30
  "ipfs://bafkreice23maski3x52tsfqgxstx3kbiifnt5jotg3a5ynvve53c4soi2u";
@@ -54,6 +63,7 @@ function logFailure(receipt: TransactionReceipt) {
54
63
  if (receipt.status !== "success") {
55
64
  console.log("transaction failed");
56
65
  console.log(receipt.logs);
66
+ console.log(inspect(receipt, { depth: 10 }));
57
67
  }
58
68
  }
59
69
 
@@ -64,6 +74,13 @@ function randomNewContract(): NewContractParams {
64
74
  };
65
75
  }
66
76
 
77
+ const add24HoursToNowInSeconds = (): number => {
78
+ const currentTimeInSeconds = Math.floor(Date.now() / 1000);
79
+ const add24Hours = 24 * 60 * 60;
80
+
81
+ return currentTimeInSeconds + add24Hours;
82
+ };
83
+
67
84
  describe("create-helper", () => {
68
85
  anvilTest(
69
86
  "when no sales config is provided, it creates a new 1155 contract and token using the timed sale strategy",
@@ -75,15 +92,24 @@ describe("create-helper", () => {
75
92
  chainId: chain.id,
76
93
  publicClient: publicClient,
77
94
  });
95
+
96
+ const saleStart = 5n;
97
+ const saleEnd = BigInt(add24HoursToNowInSeconds());
98
+ const contract = randomNewContract();
78
99
  const {
79
100
  parameters: parameters,
80
101
  contractAddress,
81
102
  newTokenId,
82
103
  } = await creatorClient.create1155({
83
- contract: randomNewContract(),
104
+ contract,
84
105
  token: {
85
106
  tokenMetadataURI: demoTokenMetadataURI,
86
107
  mintToCreatorCount: 1,
108
+ salesConfig: {
109
+ saleStart,
110
+ saleEnd,
111
+ type: "timed",
112
+ },
87
113
  },
88
114
  account: creatorAddress,
89
115
  });
@@ -100,6 +126,27 @@ describe("create-helper", () => {
100
126
  contractAddress,
101
127
  );
102
128
 
129
+ const salesConfig = await publicClient.readContract({
130
+ abi: zoraTimedSaleStrategyABI,
131
+ address:
132
+ zoraTimedSaleStrategyAddress[
133
+ chain.id as keyof typeof zoraTimedSaleStrategyAddress
134
+ ],
135
+ functionName: "sale",
136
+ args: [contractAddress, newTokenId],
137
+ });
138
+
139
+ expect(salesConfig.saleEnd).toBe(saleEnd);
140
+ expect(salesConfig.saleStart).toBe(saleStart);
141
+
142
+ const erc20Name = await publicClient.readContract({
143
+ abi: erc20Abi,
144
+ address: salesConfig.erc20zAddress,
145
+ functionName: "name",
146
+ });
147
+
148
+ expect(erc20Name).toBe(contract.name);
149
+
103
150
  expect(
104
151
  await minterIsMinterOnToken({
105
152
  contractAddress,
@@ -168,9 +215,12 @@ describe("create-helper", () => {
168
215
  const addresses = await walletClient.getAddresses();
169
216
  const creatorAccount = addresses[0]!;
170
217
 
218
+ const contractGetter = new SubgraphContractGetter(chain.id);
219
+
171
220
  const creatorClient = createCreatorClient({
172
221
  chainId: chain.id,
173
222
  publicClient: publicClient,
223
+ contractGetter,
174
224
  });
175
225
 
176
226
  const { parameters: request, contractAddress: contractAddress } =
@@ -202,6 +252,21 @@ describe("create-helper", () => {
202
252
  }),
203
253
  ).toBe(3n);
204
254
 
255
+ const contractVersion = await publicClient.readContract({
256
+ abi: zoraCreator1155ImplABI,
257
+ address: contractAddress,
258
+ functionName: "contractVersion",
259
+ });
260
+
261
+ contractGetter.getContractInfo = vi
262
+ .fn<SubgraphContractGetter["getContractInfo"]>()
263
+ .mockResolvedValueOnce({
264
+ contractVersion,
265
+ mintFee: parseEther("0.000777"),
266
+ name: "test",
267
+ nextTokenId: 2n,
268
+ });
269
+
205
270
  const newTokenOnExistingContract =
206
271
  await creatorClient.create1155OnExistingContract({
207
272
  contractAddress: contractAddress,
@@ -13,8 +13,8 @@ import type {
13
13
  import { decodeEventLog } from "viem";
14
14
  import { makeContractParameters } from "src/utils";
15
15
  import {
16
- getContractInfoExistingContract,
17
16
  getDeterministicContractAddress,
17
+ getNewContractMintFee,
18
18
  new1155ContractVersion,
19
19
  } from "./contract-setup";
20
20
  import {
@@ -27,6 +27,7 @@ import {
27
27
  } from "./types";
28
28
  import { constructCreate1155TokenCalls } from "./token-setup";
29
29
  import { makeOnchainPrepareMintFromCreate } from "./mint-from-create";
30
+ import { IContractGetter } from "./contract-getter";
30
31
 
31
32
  // Default royalty bps
32
33
  const ROYALTY_BPS_DEFAULT = 1000;
@@ -136,16 +137,20 @@ function makeCreateTokenCall({
136
137
  export class Create1155Client {
137
138
  private readonly chainId: number;
138
139
  private readonly publicClient: Pick<PublicClient, "readContract">;
140
+ public readonly contractGetter: IContractGetter;
139
141
 
140
142
  constructor({
141
143
  chainId,
142
144
  publicClient,
145
+ contractGetter,
143
146
  }: {
144
147
  chainId: number;
145
148
  publicClient: Pick<PublicClient, "readContract">;
149
+ contractGetter: IContractGetter;
146
150
  }) {
147
151
  this.chainId = chainId;
148
152
  this.publicClient = publicClient;
153
+ this.contractGetter = contractGetter;
149
154
  }
150
155
 
151
156
  async createNew1155(
@@ -171,6 +176,7 @@ export class Create1155Client {
171
176
  getAdditionalSetupActions,
172
177
  publicClient: this.publicClient,
173
178
  chainId: this.chainId,
179
+ contractGetter: this.contractGetter,
174
180
  });
175
181
  }
176
182
  }
@@ -200,6 +206,7 @@ async function createNew1155ContractAndToken({
200
206
  nextTokenId,
201
207
  token,
202
208
  getAdditionalSetupActions,
209
+ contractName: contract.name,
203
210
  });
204
211
 
205
212
  const request = makeCreateContractAndTokenCall({
@@ -223,9 +230,14 @@ async function createNew1155ContractAndToken({
223
230
  contractAddress: contractAddress,
224
231
  contractVersion,
225
232
  minter,
226
- publicClient,
227
233
  result: newToken.salesConfig,
228
234
  tokenId: nextTokenId,
235
+ // to get the contract wide mint fee, we get what it would be for a new contract
236
+ getContractMintFee: async () =>
237
+ getNewContractMintFee({
238
+ publicClient,
239
+ chainId,
240
+ }),
229
241
  });
230
242
 
231
243
  return {
@@ -245,17 +257,15 @@ async function createNew1155Token({
245
257
  account,
246
258
  getAdditionalSetupActions,
247
259
  token,
248
- publicClient,
249
260
  chainId,
261
+ contractGetter,
250
262
  }: CreateNew1155TokenParams & {
251
263
  publicClient: Pick<PublicClient, "readContract">;
252
264
  chainId: number;
265
+ contractGetter: IContractGetter;
253
266
  }): Promise<CreateNew1155TokenReturn> {
254
- const { nextTokenId, contractVersion } =
255
- await getContractInfoExistingContract({
256
- publicClient,
257
- contractAddress: contractAddress,
258
- });
267
+ const { nextTokenId, contractVersion, mintFee, name } =
268
+ await contractGetter.getContractInfo({ contractAddress, retries: 5 });
259
269
 
260
270
  const {
261
271
  minter,
@@ -268,6 +278,7 @@ async function createNew1155Token({
268
278
  nextTokenId,
269
279
  token,
270
280
  getAdditionalSetupActions,
281
+ contractName: name,
271
282
  });
272
283
 
273
284
  const request = makeCreateTokenCall({
@@ -280,9 +291,9 @@ async function createNew1155Token({
280
291
  contractAddress: contractAddress,
281
292
  contractVersion,
282
293
  minter,
283
- publicClient,
284
294
  result: newToken.salesConfig,
285
295
  tokenId: nextTokenId,
296
+ getContractMintFee: async () => mintFee,
286
297
  });
287
298
 
288
299
  return {
@@ -302,11 +313,13 @@ async function prepareSetupActions({
302
313
  contractVersion,
303
314
  nextTokenId,
304
315
  token,
316
+ contractName,
305
317
  getAdditionalSetupActions,
306
318
  }: {
307
319
  chainId: number;
308
320
  contractVersion: string;
309
321
  nextTokenId: bigint;
322
+ contractName: string;
310
323
  } & CreateNew1155ParamsBase) {
311
324
  const {
312
325
  minter,
@@ -318,6 +331,7 @@ async function prepareSetupActions({
318
331
  contractVersion,
319
332
  nextTokenId,
320
333
  ...token,
334
+ contractName,
321
335
  });
322
336
 
323
337
  const setupActions = getAdditionalSetupActions
@@ -0,0 +1,90 @@
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";
8
+ import { Address } from "viem";
9
+ import { getApiNetworkConfigForChain } from "src/mint/subgraph-mint-getter";
10
+ import { buildContractInfoQuery } from "./subgraph-queries";
11
+ import { retriesGeneric } from "src/retries";
12
+
13
+ export interface IContractGetter {
14
+ getContractInfo: (params: {
15
+ contractAddress: Address;
16
+ retries?: number;
17
+ }) => Promise<{
18
+ name: string;
19
+ contractVersion: string;
20
+ nextTokenId: bigint;
21
+ mintFee: bigint;
22
+ }>;
23
+ }
24
+
25
+ export class SubgraphContractGetter implements IContractGetter {
26
+ public readonly subgraphQuerier: ISubgraphQuerier;
27
+ networkConfig: NetworkConfig;
28
+
29
+ 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);
47
+ }
48
+
49
+ async getContractInfo({
50
+ contractAddress,
51
+ retries = 1,
52
+ }: {
53
+ contractAddress: Address;
54
+ retries?: number;
55
+ }): Promise<{
56
+ name: string;
57
+ contractVersion: string;
58
+ nextTokenId: bigint;
59
+ mintFee: bigint;
60
+ }> {
61
+ const tryFn = async () => {
62
+ const responseData = await this.querySubgraphWithRetries(
63
+ buildContractInfoQuery({ contractAddress }),
64
+ );
65
+ if (!responseData) {
66
+ console.log("could not find contract");
67
+ throw new Error("Cannot find contract");
68
+ }
69
+ return responseData;
70
+ };
71
+
72
+ const responseData = await retriesGeneric({
73
+ tryFn,
74
+ maxTries: retries,
75
+ linearBackoffMS: 1000,
76
+ });
77
+
78
+ const nextTokenId =
79
+ responseData.tokens.length === 0
80
+ ? 1n
81
+ : BigInt(responseData.tokens[0]!.tokenId) + 1n;
82
+
83
+ return {
84
+ name: responseData.name,
85
+ contractVersion: responseData.contractVersion,
86
+ mintFee: BigInt(responseData.mintFeePerQuantity),
87
+ nextTokenId,
88
+ };
89
+ }
90
+ }
@@ -18,52 +18,6 @@ export function new1155ContractVersion(chainId: number): string {
18
18
  return address.CONTRACT_1155_IMPL_VERSION;
19
19
  }
20
20
 
21
- export async function getContractInfoExistingContract({
22
- publicClient,
23
- contractAddress,
24
- }: {
25
- publicClient: Pick<PublicClient, "readContract">;
26
- contractAddress: Address;
27
- // Account that is the creator of the contract
28
- }): Promise<{
29
- contractVersion: string;
30
- contractName: string;
31
- nextTokenId: bigint;
32
- }> {
33
- // Check if contract exists either from metadata or the static address passed in.
34
- // If a static address is passed in, this fails if that contract does not exist.
35
- let contractVersion: string;
36
- try {
37
- contractVersion = await publicClient.readContract({
38
- abi: zoraCreator1155ImplABI,
39
- address: contractAddress,
40
- functionName: "contractVersion",
41
- });
42
- } catch (e: any) {
43
- // This logic branch is hit if the contract doesn't exist
44
- // falling back to contractExists to false.
45
- throw new Error(`Contract does not exist at ${contractAddress}`);
46
- }
47
-
48
- const nextTokenId = await publicClient.readContract({
49
- address: contractAddress,
50
- abi: zoraCreator1155ImplABI,
51
- functionName: "nextTokenId",
52
- });
53
-
54
- const contractName = await publicClient.readContract({
55
- address: contractAddress,
56
- abi: zoraCreator1155ImplABI,
57
- functionName: "name",
58
- });
59
-
60
- return {
61
- contractVersion,
62
- contractName,
63
- nextTokenId,
64
- };
65
- }
66
-
67
21
  export async function getDeterministicContractAddress({
68
22
  publicClient,
69
23
  account,
@@ -96,3 +50,20 @@ export async function getDeterministicContractAddress({
96
50
 
97
51
  return contractAddress;
98
52
  }
53
+
54
+ export async function getNewContractMintFee({
55
+ publicClient,
56
+ chainId,
57
+ }: {
58
+ publicClient: Pick<PublicClient, "readContract">;
59
+ chainId: number;
60
+ }) {
61
+ const implAddress = contracts1155.addresses[chainId as contracts1155Address]
62
+ .CONTRACT_1155_IMPL as Address;
63
+
64
+ return await publicClient.readContract({
65
+ abi: zoraCreator1155ImplABI,
66
+ address: implAddress,
67
+ functionName: "mintFee",
68
+ });
69
+ }
@@ -1,4 +1,4 @@
1
- import { Address, parseEther, PublicClient, zeroAddress } from "viem";
1
+ import { Address, parseEther, zeroAddress } from "viem";
2
2
  import { ConcreteSalesConfig } from "./types";
3
3
  import {
4
4
  AsyncPrepareMint,
@@ -6,7 +6,6 @@ import {
6
6
  OnchainSalesStrategies,
7
7
  PrepareMintReturn,
8
8
  } from "src/mint/types";
9
- import { zoraCreator1155ImplABI } from "@zoralabs/protocol-deployments";
10
9
  import {
11
10
  makePrepareMint1155TokenParams,
12
11
  parseMintCosts,
@@ -16,13 +15,11 @@ import { getRequiredErc20Approvals } from "src/mint/mint-queries";
16
15
  async function toSalesStrategyFromSubgraph({
17
16
  minter,
18
17
  salesConfig,
19
- publicClient,
20
- contractAddress,
18
+ getContractMintFee,
21
19
  }: {
22
20
  minter: Address;
23
21
  salesConfig: ConcreteSalesConfig;
24
- publicClient: Pick<PublicClient, "readContract">;
25
- contractAddress: Address;
22
+ getContractMintFee: () => Promise<bigint>;
26
23
  }): Promise<OnchainSalesStrategies> {
27
24
  if (salesConfig.type === "timed") {
28
25
  return {
@@ -51,11 +48,7 @@ async function toSalesStrategyFromSubgraph({
51
48
  maxTokensPerAddress: salesConfig.maxTokensPerAddress,
52
49
  };
53
50
  }
54
- const contractMintFee = await publicClient.readContract({
55
- abi: zoraCreator1155ImplABI,
56
- address: contractAddress,
57
- functionName: "mintFee",
58
- });
51
+ const contractMintFee = await getContractMintFee();
59
52
  if (salesConfig.type === "fixedPrice") {
60
53
  return {
61
54
  saleType: "fixedPrice",
@@ -81,21 +74,20 @@ export function makeOnchainPrepareMintFromCreate({
81
74
  tokenId,
82
75
  result,
83
76
  minter,
84
- publicClient,
77
+ getContractMintFee,
85
78
  contractVersion,
86
79
  }: {
87
80
  contractAddress: Address;
88
81
  tokenId: bigint;
89
82
  result: ConcreteSalesConfig;
90
83
  minter: Address;
91
- publicClient: Pick<PublicClient, "readContract">;
84
+ getContractMintFee: () => Promise<bigint>;
92
85
  contractVersion: string;
93
86
  }): AsyncPrepareMint {
94
87
  return async (params: MintParametersBase): Promise<PrepareMintReturn> => {
95
88
  const subgraphSalesConfig = await toSalesStrategyFromSubgraph({
96
89
  minter,
97
- contractAddress,
98
- publicClient,
90
+ getContractMintFee,
99
91
  salesConfig: result,
100
92
  });
101
93
  return {