@zoralabs/protocol-sdk 0.9.1 → 0.9.2

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 (43) hide show
  1. package/.turbo/turbo-build.log +7 -7
  2. package/CHANGELOG.md +6 -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/subgraph-queries.d.ts +13 -0
  17. package/dist/create/subgraph-queries.d.ts.map +1 -0
  18. package/dist/index.cjs +176 -97
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.js +155 -76
  21. package/dist/index.js.map +1 -1
  22. package/dist/mint/subgraph-mint-getter.d.ts +2 -2
  23. package/dist/mint/subgraph-mint-getter.d.ts.map +1 -1
  24. package/dist/mint/subgraph-queries.d.ts +1 -5
  25. package/dist/mint/subgraph-queries.d.ts.map +1 -1
  26. package/dist/retries.d.ts +7 -0
  27. package/dist/retries.d.ts.map +1 -0
  28. package/dist/sdk.d.ts +2 -0
  29. package/dist/sdk.d.ts.map +1 -1
  30. package/package.json +1 -1
  31. package/src/apis/http-api-base.ts +12 -20
  32. package/src/apis/subgraph-querier.ts +7 -0
  33. package/src/create/1155-create-helper.test.ts +22 -1
  34. package/src/create/1155-create-helper.ts +18 -9
  35. package/src/create/contract-getter.ts +90 -0
  36. package/src/create/contract-setup.ts +17 -46
  37. package/src/create/mint-from-create.ts +7 -15
  38. package/src/create/subgraph-queries.ts +35 -0
  39. package/src/mint/subgraph-mint-getter.ts +5 -2
  40. package/src/mint/subgraph-queries.ts +1 -7
  41. package/src/retries.ts +49 -0
  42. package/src/sdk.ts +8 -0
  43. 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.2",
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,
@@ -16,6 +16,8 @@ import { zora } from "viem/chains";
16
16
  import { AllowList } from "src/allow-list/types";
17
17
  import { createAllowList } from "src/allow-list/allow-list-client";
18
18
  import { NewContractParams } from "./types";
19
+ import { SubgraphContractGetter } from "./contract-getter";
20
+ import { inspect } from "util";
19
21
 
20
22
  export const demoTokenMetadataURI =
21
23
  "ipfs://bafkreice23maski3x52tsfqgxstx3kbiifnt5jotg3a5ynvve53c4soi2u";
@@ -54,6 +56,7 @@ function logFailure(receipt: TransactionReceipt) {
54
56
  if (receipt.status !== "success") {
55
57
  console.log("transaction failed");
56
58
  console.log(receipt.logs);
59
+ console.log(inspect(receipt, { depth: 10 }));
57
60
  }
58
61
  }
59
62
 
@@ -168,9 +171,12 @@ describe("create-helper", () => {
168
171
  const addresses = await walletClient.getAddresses();
169
172
  const creatorAccount = addresses[0]!;
170
173
 
174
+ const contractGetter = new SubgraphContractGetter(chain.id);
175
+
171
176
  const creatorClient = createCreatorClient({
172
177
  chainId: chain.id,
173
178
  publicClient: publicClient,
179
+ contractGetter,
174
180
  });
175
181
 
176
182
  const { parameters: request, contractAddress: contractAddress } =
@@ -202,6 +208,21 @@ describe("create-helper", () => {
202
208
  }),
203
209
  ).toBe(3n);
204
210
 
211
+ const contractVersion = await publicClient.readContract({
212
+ abi: zoraCreator1155ImplABI,
213
+ address: contractAddress,
214
+ functionName: "contractVersion",
215
+ });
216
+
217
+ contractGetter.getContractInfo = vi
218
+ .fn<SubgraphContractGetter["getContractInfo"]>()
219
+ .mockResolvedValueOnce({
220
+ contractVersion,
221
+ mintFee: parseEther("0.000777"),
222
+ name: "test",
223
+ nextTokenId: 2n,
224
+ });
225
+
205
226
  const newTokenOnExistingContract =
206
227
  await creatorClient.create1155OnExistingContract({
207
228
  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
  }
@@ -223,9 +229,14 @@ async function createNew1155ContractAndToken({
223
229
  contractAddress: contractAddress,
224
230
  contractVersion,
225
231
  minter,
226
- publicClient,
227
232
  result: newToken.salesConfig,
228
233
  tokenId: nextTokenId,
234
+ // to get the contract wide mint fee, we get what it would be for a new contract
235
+ getContractMintFee: async () =>
236
+ getNewContractMintFee({
237
+ publicClient,
238
+ chainId,
239
+ }),
229
240
  });
230
241
 
231
242
  return {
@@ -245,17 +256,15 @@ async function createNew1155Token({
245
256
  account,
246
257
  getAdditionalSetupActions,
247
258
  token,
248
- publicClient,
249
259
  chainId,
260
+ contractGetter,
250
261
  }: CreateNew1155TokenParams & {
251
262
  publicClient: Pick<PublicClient, "readContract">;
252
263
  chainId: number;
264
+ contractGetter: IContractGetter;
253
265
  }): Promise<CreateNew1155TokenReturn> {
254
- const { nextTokenId, contractVersion } =
255
- await getContractInfoExistingContract({
256
- publicClient,
257
- contractAddress: contractAddress,
258
- });
266
+ const { nextTokenId, contractVersion, mintFee } =
267
+ await contractGetter.getContractInfo({ contractAddress, retries: 5 });
259
268
 
260
269
  const {
261
270
  minter,
@@ -280,9 +289,9 @@ async function createNew1155Token({
280
289
  contractAddress: contractAddress,
281
290
  contractVersion,
282
291
  minter,
283
- publicClient,
284
292
  result: newToken.salesConfig,
285
293
  tokenId: nextTokenId,
294
+ getContractMintFee: async () => mintFee,
286
295
  });
287
296
 
288
297
  return {
@@ -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 {
@@ -0,0 +1,35 @@
1
+ import { ISubgraphQuery } from "src/apis/subgraph-querier";
2
+ import { Address } from "viem";
3
+
4
+ export function buildContractInfoQuery({
5
+ contractAddress,
6
+ }: {
7
+ contractAddress: Address;
8
+ }): ISubgraphQuery<{
9
+ name: string;
10
+ contractVersion: string;
11
+ mintFeePerQuantity: string;
12
+ tokens: {
13
+ tokenId: Address;
14
+ }[];
15
+ }> {
16
+ return {
17
+ query: `
18
+ query ($contractAddress: Bytes!) {
19
+ zoraCreateContract(id: $contractAddress) {
20
+ contractVersion
21
+ name
22
+ mintFeePerQuantity
23
+ tokens(first: 1, orderBy: tokenId, orderDirection: desc) {
24
+ tokenId
25
+ }
26
+ }
27
+ }
28
+ `,
29
+ variables: {
30
+ contractAddress: contractAddress.toLowerCase(),
31
+ },
32
+ parseResponseData: (responseData: any | undefined) =>
33
+ responseData.zoraCreateContract,
34
+ };
35
+ }
@@ -1,6 +1,10 @@
1
1
  import { Address } from "viem";
2
2
  import { httpClient as defaultHttpClient } from "../apis/http-api-base";
3
- import { ISubgraphQuerier, SubgraphQuerier } from "../apis/subgraph-querier";
3
+ import {
4
+ ISubgraphQuerier,
5
+ ISubgraphQuery,
6
+ SubgraphQuerier,
7
+ } from "../apis/subgraph-querier";
4
8
  import { NetworkConfig, networkConfigByChain } from "src/apis/chain-constants";
5
9
  import { GenericTokenIdTypes } from "src/types";
6
10
  import {
@@ -14,7 +18,6 @@ import {
14
18
  buildContractTokensQuery,
15
19
  buildNftTokenSalesQuery,
16
20
  buildPremintsOfContractQuery,
17
- ISubgraphQuery,
18
21
  SalesStrategyResult,
19
22
  TokenQueryResult,
20
23
  } from "./subgraph-queries";
@@ -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
 
@@ -189,13 +190,6 @@ query ($contract: Bytes!) {
189
190
  responseData?.zoraCreateTokens,
190
191
  };
191
192
  }
192
-
193
- export type ISubgraphQuery<T> = {
194
- query: string;
195
- variables: Record<string, any>;
196
- parseResponseData: (data: any | undefined) => T | undefined;
197
- };
198
-
199
193
  export function buildPremintsOfContractQuery({
200
194
  tokenAddress,
201
195
  }: {
package/src/retries.ts ADDED
@@ -0,0 +1,49 @@
1
+ async function wait(delayMs: number) {
2
+ return new Promise((resolve) => {
3
+ setTimeout(resolve, delayMs);
4
+ });
5
+ }
6
+
7
+ const retryInternal = async <T>({
8
+ tryFn,
9
+ maxTries = 3,
10
+ atTry,
11
+ linearBackoffMS = 200,
12
+ shouldRetryOnError = () => true,
13
+ }: {
14
+ tryFn: () => T;
15
+ maxTries?: number;
16
+ atTry: number;
17
+ linearBackoffMS?: number;
18
+ shouldRetryOnError?: (err: any) => boolean;
19
+ }): Promise<T> => {
20
+ try {
21
+ return await tryFn();
22
+ } catch (err: any) {
23
+ if (shouldRetryOnError(err)) {
24
+ if (atTry <= maxTries) {
25
+ await wait(atTry * linearBackoffMS);
26
+ return await retryInternal({
27
+ tryFn,
28
+ maxTries,
29
+ atTry: atTry + 1,
30
+ linearBackoffMS,
31
+ shouldRetryOnError,
32
+ });
33
+ }
34
+ }
35
+ throw err;
36
+ }
37
+ };
38
+
39
+ export const retriesGeneric = async <T>(params: {
40
+ tryFn: () => T;
41
+ maxTries?: number;
42
+ linearBackoffMS?: number;
43
+ shouldRetryOnError?: (err: any) => boolean;
44
+ }) => {
45
+ return retryInternal({
46
+ ...params,
47
+ atTry: 1,
48
+ });
49
+ };