@zoralabs/protocol-sdk 0.5.14 → 0.5.15

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.
@@ -1,16 +1,23 @@
1
+ import { Address } from "viem";
1
2
  import { IHttpClient } from "../apis/http-api-base";
2
3
  import { NetworkConfig } from "src/apis/chain-constants";
3
4
  import { GenericTokenIdTypes } from "src/types";
4
- import { Address } from "viem";
5
- type FixedPriceSaleStrategyResult = {
5
+ export type SaleType = "fixedPrice" | "erc20";
6
+ type SaleStrategy<T extends SaleType> = {
7
+ saleType: T;
6
8
  address: Address;
7
- pricePerToken: string;
9
+ pricePerToken: bigint;
8
10
  saleEnd: string;
9
11
  saleStart: string;
10
- maxTokensPerAddress: string;
12
+ maxTokensPerAddress: bigint;
13
+ };
14
+ type FixedPriceSaleStrategy = SaleStrategy<"fixedPrice">;
15
+ type ERC20SaleStrategy = SaleStrategy<"erc20"> & {
16
+ currency: Address;
11
17
  };
18
+ type SaleStrategies = FixedPriceSaleStrategy | ERC20SaleStrategy;
12
19
  export type SalesConfigAndTokenInfo = {
13
- fixedPrice: FixedPriceSaleStrategyResult;
20
+ salesConfig: SaleStrategies;
14
21
  mintFeePerQuantity: bigint;
15
22
  };
16
23
  export declare const getApiNetworkConfigForChain: (chainId: number) => NetworkConfig;
@@ -18,9 +25,10 @@ export declare class MintAPIClient {
18
25
  httpClient: IHttpClient;
19
26
  networkConfig: NetworkConfig;
20
27
  constructor(chainId: number, httpClient?: IHttpClient);
21
- getSalesConfigAndTokenInfo({ tokenAddress, tokenId, }: {
28
+ getSalesConfigAndTokenInfo({ tokenAddress, tokenId, saleType, }: {
22
29
  tokenAddress: Address;
23
30
  tokenId?: GenericTokenIdTypes;
31
+ saleType?: SaleType;
24
32
  }): Promise<SalesConfigAndTokenInfo>;
25
33
  }
26
34
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"mint-api-client.d.ts","sourceRoot":"","sources":["../../src/mint/mint-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,KAAK,4BAA4B,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAMF,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,4BAA4B,CAAC;IACzC,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,2BAA2B,YAAa,MAAM,KAAG,aAK7D,CAAC;AAEF,qBAAa,aAAa;IACxB,UAAU,EAAE,WAAW,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW;IAK/C,0BAA0B,CAAC,EAC/B,YAAY,EACZ,OAAO,GACR,EAAE;QACD,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC;KAC/B,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAmErC"}
1
+ {"version":3,"file":"mint-api-client.d.ts","sourceRoot":"","sources":["../../src/mint/mint-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAEL,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAiC9C,KAAK,YAAY,CAAC,CAAC,SAAS,QAAQ,IAAI;IACtC,QAAQ,EAAE,CAAC,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,KAAK,sBAAsB,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAEzD,KAAK,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG;IAC/C,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,cAAc,GAAG,sBAAsB,GAAG,iBAAiB,CAAC;AAEjE,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,EAAE,cAAc,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,2BAA2B,YAAa,MAAM,KAAG,aAK7D,CAAC;AAEF,qBAAa,aAAa;IACxB,UAAU,EAAE,WAAW,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW;IAK/C,0BAA0B,CAAC,EAC/B,YAAY,EACZ,OAAO,EACP,QAAQ,GACT,EAAE;QACD,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC;QAC9B,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAwFrC"}
@@ -1,7 +1,7 @@
1
1
  import { Address, Chain, PublicClient, Account, SimulateContractParameters } from "viem";
2
- import { IHttpClient } from "../apis/http-api-base";
3
- import { MintAPIClient, SalesConfigAndTokenInfo } from "./mint-api-client";
2
+ import { IHttpClient } from "src/apis/http-api-base";
4
3
  import { GenericTokenIdTypes } from "src/types";
4
+ import { MintAPIClient, SalesConfigAndTokenInfo, SaleType } from "./mint-api-client";
5
5
  declare class MintError extends Error {
6
6
  }
7
7
  declare class MintInactiveError extends Error {
@@ -15,6 +15,7 @@ type MintArguments = {
15
15
  mintComment?: string;
16
16
  mintReferral?: Address;
17
17
  mintToAddress: Address;
18
+ saleType?: SaleType;
18
19
  };
19
20
  declare class MintClient {
20
21
  readonly apiClient: MintAPIClient;
@@ -1 +1 @@
1
- {"version":3,"file":"mint-client.d.ts","sourceRoot":"","sources":["../../src/mint/mint-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EACL,YAAY,EAMZ,OAAO,EACP,0BAA0B,EAC3B,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAK3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAIhD,cAAM,SAAU,SAAQ,KAAK;CAAG;AAChC,cAAM,iBAAkB,SAAQ,KAAK;CAAG;AAExC,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,cAAM,UAAU;IACd,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;gBAGlC,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,YAAY,EAC3B,UAAU,CAAC,EAAE,WAAW;IAO1B;;;;;;OAMG;IACG,0BAA0B,CAAC,EAC/B,GAAG,IAAI,EACR,EAAE;QACD,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC;QACjC,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC;QAC9B,aAAa,EAAE,aAAa,CAAC;KAC9B;CAOF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,YAAY,EACZ,UAAU,GACX,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B,cAEA;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAsE9D,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,uBAAuB,EACvB,cAAc,GACf,EAAE;IACD,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,SAAS,CAWZ"}
1
+ {"version":3,"file":"mint-client.d.ts","sourceRoot":"","sources":["../../src/mint/mint-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EACL,YAAY,EAMZ,OAAO,EACP,0BAA0B,EAC3B,MAAM,MAAM,CAAC;AAOd,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAE3B,cAAM,SAAU,SAAQ,KAAK;CAAG;AAChC,cAAM,iBAAkB,SAAQ,KAAK;CAAG;AAExC,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,cAAM,UAAU;IACd,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;gBAGlC,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,YAAY,EAC3B,UAAU,CAAC,EAAE,WAAW;IAO1B;;;;;;OAMG;IACG,0BAA0B,CAAC,EAC/B,GAAG,IAAI,EACR,EAAE;QACD,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC;QACjC,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC;QAC9B,aAAa,EAAE,aAAa,CAAC;KAC9B;CAOF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,YAAY,EACZ,UAAU,GACX,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B,cAEA;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AA0E9D,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,uBAAuB,EACvB,cAAc,GACf,EAAE;IACD,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,SAAS,CAWZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"preminter.d.ts","sourceRoot":"","sources":["../../src/premint/preminter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preminter.d.ts","sourceRoot":"","sources":["../../src/premint/preminter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zoralabs/protocol-sdk",
3
- "version": "0.5.14",
3
+ "version": "0.5.15",
4
4
  "repository": "https://github.com/ourzora/zora-protocol",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/constants.ts CHANGED
@@ -15,3 +15,39 @@ export const zora721Abi = parseAbi([
15
15
  "function mintWithRewards(address recipient, uint256 quantity, string calldata comment, address mintReferral) external payable",
16
16
  "function zoraFeeForAmount(uint256 amount) public view returns (address, uint256)",
17
17
  ] as const);
18
+
19
+ export const NFT_SALE_QUERY = `
20
+ fragment SaleStrategy on SalesStrategyConfig {
21
+ type
22
+ fixedPrice {
23
+ address
24
+ pricePerToken
25
+ saleEnd
26
+ saleStart
27
+ maxTokensPerAddress
28
+ }
29
+ erc20Minter {
30
+ address
31
+ pricePerToken
32
+ currency
33
+ saleEnd
34
+ saleStart
35
+ maxTokensPerAddress
36
+ }
37
+ }
38
+
39
+ query ($id: ID!) {
40
+ zoraCreateToken(id: $id) {
41
+ id
42
+ contract {
43
+ mintFeePerQuantity
44
+ salesStrategies(where: {type_in: ["FIXED_PRICE", "ERC_20_MINTER"]}) {
45
+ ...SaleStrategy
46
+ }
47
+ }
48
+ salesStrategies(where: {type_in: ["FIXED_PRICE", "ERC_20_MINTER"]}) {
49
+ ...SaleStrategy
50
+ }
51
+ }
52
+ }
53
+ `;
@@ -1,10 +1,13 @@
1
+ import { Address } from "viem";
1
2
  import {
2
3
  httpClient as defaultHttpClient,
3
4
  IHttpClient,
4
5
  } from "../apis/http-api-base";
5
6
  import { NetworkConfig, networkConfigByChain } from "src/apis/chain-constants";
6
7
  import { GenericTokenIdTypes } from "src/types";
7
- import { Address } from "viem";
8
+ import { NFT_SALE_QUERY } from "src/constants";
9
+
10
+ export type SaleType = "fixedPrice" | "erc20";
8
11
 
9
12
  type FixedPriceSaleStrategyResult = {
10
13
  address: Address;
@@ -14,12 +17,48 @@ type FixedPriceSaleStrategyResult = {
14
17
  maxTokensPerAddress: string;
15
18
  };
16
19
 
17
- type SaleStrategyResult = {
18
- fixedPrice: FixedPriceSaleStrategyResult;
20
+ type ERC20SaleStrategyResult = FixedPriceSaleStrategyResult & {
21
+ currency: Address;
22
+ };
23
+
24
+ type SalesStrategyResult =
25
+ | {
26
+ type: "FIXED_PRICE";
27
+ fixedPrice: FixedPriceSaleStrategyResult;
28
+ }
29
+ | {
30
+ type: "ERC_20_MINTER";
31
+ erc20Minter: ERC20SaleStrategyResult;
32
+ };
33
+
34
+ type TokenQueryResult = {
35
+ tokenId?: string;
36
+ salesStrategies?: SalesStrategyResult[];
37
+ contract: {
38
+ mintFeePerQuantity: "string";
39
+ salesStrategies: SalesStrategyResult[];
40
+ };
19
41
  };
20
42
 
43
+ type SaleStrategy<T extends SaleType> = {
44
+ saleType: T;
45
+ address: Address;
46
+ pricePerToken: bigint;
47
+ saleEnd: string;
48
+ saleStart: string;
49
+ maxTokensPerAddress: bigint;
50
+ };
51
+
52
+ type FixedPriceSaleStrategy = SaleStrategy<"fixedPrice">;
53
+
54
+ type ERC20SaleStrategy = SaleStrategy<"erc20"> & {
55
+ currency: Address;
56
+ };
57
+
58
+ type SaleStrategies = FixedPriceSaleStrategy | ERC20SaleStrategy;
59
+
21
60
  export type SalesConfigAndTokenInfo = {
22
- fixedPrice: FixedPriceSaleStrategyResult;
61
+ salesConfig: SaleStrategies;
23
62
  mintFeePerQuantity: bigint;
24
63
  };
25
64
 
@@ -42,40 +81,16 @@ export class MintAPIClient {
42
81
  async getSalesConfigAndTokenInfo({
43
82
  tokenAddress,
44
83
  tokenId,
84
+ saleType,
45
85
  }: {
46
86
  tokenAddress: Address;
47
87
  tokenId?: GenericTokenIdTypes;
88
+ saleType?: SaleType;
48
89
  }): Promise<SalesConfigAndTokenInfo> {
49
90
  const { retries, post } = this.httpClient;
50
91
  return retries(async () => {
51
92
  const response = await post<any>(this.networkConfig.subgraphUrl, {
52
- query: `
53
- fragment SaleStrategy on SalesStrategyConfig {
54
- type
55
- fixedPrice {
56
- address
57
- pricePerToken
58
- saleEnd
59
- saleStart
60
- maxTokensPerAddress
61
- }
62
- }
63
-
64
- query ($id: ID!) {
65
- zoraCreateToken(id: $id) {
66
- id
67
- contract {
68
- mintFeePerQuantity
69
- salesStrategies(where: { type: "FIXED_PRICE" }) {
70
- ...SaleStrategy
71
- }
72
- }
73
- salesStrategies(where: { type: "FIXED_PRICE" }) {
74
- ...SaleStrategy
75
- }
76
- }
77
- }
78
- `,
93
+ query: NFT_SALE_QUERY,
79
94
  variables: {
80
95
  id:
81
96
  tokenId !== undefined
@@ -85,31 +100,78 @@ export class MintAPIClient {
85
100
  },
86
101
  });
87
102
 
88
- const token = response.data?.zoraCreateToken;
103
+ const token = response.data?.zoraCreateToken as TokenQueryResult;
89
104
 
90
105
  if (!token) {
91
106
  throw new Error("Cannot find a token to mint");
92
107
  }
93
108
 
94
- const saleStrategies: SaleStrategyResult[] =
95
- tokenId !== undefined
109
+ const allStrategies =
110
+ (typeof tokenId !== "undefined"
96
111
  ? token.salesStrategies
97
- : token.contract.salesStrategies;
112
+ : token.contract.salesStrategies) || [];
98
113
 
99
- const fixedPrice = saleStrategies
100
- ?.sort((a: SaleStrategyResult, b: SaleStrategyResult) =>
101
- BigInt(a.fixedPrice.saleEnd) > BigInt(b.fixedPrice.saleEnd) ? 1 : -1,
114
+ const saleStrategies = allStrategies.sort((a, b) =>
115
+ BigInt(
116
+ a.type === "ERC_20_MINTER"
117
+ ? a.erc20Minter.saleEnd
118
+ : a.fixedPrice.saleEnd,
119
+ ) >
120
+ BigInt(
121
+ b.type === "FIXED_PRICE"
122
+ ? b.fixedPrice.saleEnd
123
+ : b.erc20Minter.saleEnd,
102
124
  )
103
- ?.find(() => true)?.fixedPrice;
125
+ ? 1
126
+ : -1,
127
+ );
104
128
 
105
- if (!fixedPrice) {
106
- throw new Error("Cannot find fixed price sale strategy");
129
+ let targetStrategy: SalesStrategyResult | undefined;
130
+
131
+ if (!saleType) {
132
+ targetStrategy = saleStrategies[0];
133
+ if (!targetStrategy) {
134
+ throw new Error("Cannot find sale strategy");
135
+ }
136
+ } else {
137
+ const mappedSaleType =
138
+ saleType === "erc20" ? "ERC_20_MINTER" : "FIXED_PRICE";
139
+ targetStrategy = saleStrategies.find(
140
+ (strategy: SalesStrategyResult) => strategy.type === mappedSaleType,
141
+ );
142
+ if (!targetStrategy) {
143
+ throw new Error(`Cannot find sale strategy for ${mappedSaleType}`);
144
+ }
145
+ }
146
+
147
+ if (targetStrategy.type === "FIXED_PRICE") {
148
+ return {
149
+ salesConfig: {
150
+ saleType: "fixedPrice",
151
+ ...targetStrategy.fixedPrice,
152
+ maxTokensPerAddress: BigInt(
153
+ targetStrategy.fixedPrice.maxTokensPerAddress,
154
+ ),
155
+ pricePerToken: BigInt(targetStrategy.fixedPrice.pricePerToken),
156
+ },
157
+ mintFeePerQuantity: BigInt(token.contract.mintFeePerQuantity),
158
+ };
159
+ }
160
+ if (targetStrategy.type === "ERC_20_MINTER") {
161
+ return {
162
+ salesConfig: {
163
+ saleType: "erc20",
164
+ ...targetStrategy.erc20Minter,
165
+ maxTokensPerAddress: BigInt(
166
+ targetStrategy.erc20Minter.maxTokensPerAddress,
167
+ ),
168
+ pricePerToken: BigInt(targetStrategy.erc20Minter.pricePerToken),
169
+ },
170
+ mintFeePerQuantity: BigInt(token.contract.mintFeePerQuantity),
171
+ };
107
172
  }
108
173
 
109
- return {
110
- fixedPrice,
111
- mintFeePerQuantity: BigInt(token.contract.mintFeePerQuantity),
112
- };
174
+ throw new Error("Invalid saleType");
113
175
  });
114
176
  }
115
177
  }
@@ -1,8 +1,11 @@
1
+ import { describe, expect } from "vitest";
1
2
  import { Address, parseAbi, parseEther } from "viem";
2
3
  import { zora } from "viem/chains";
3
- import { describe, expect } from "vitest";
4
+ import {
5
+ zoraCreator1155ImplABI,
6
+ erc20MinterAddress,
7
+ } from "@zoralabs/protocol-deployments";
4
8
  import { createMintClient } from "./mint-client";
5
- import { zoraCreator1155ImplABI } from "@zoralabs/protocol-deployments";
6
9
  import { anvilTest, forkUrls, makeAnvilTest } from "src/anvil";
7
10
 
8
11
  const erc721ABI = parseAbi([
@@ -111,4 +114,112 @@ describe("mint-helper", () => {
111
114
  },
112
115
  12 * 1000,
113
116
  );
117
+
118
+ makeAnvilTest({
119
+ forkUrl: forkUrls.zoraMainnet,
120
+ forkBlockNumber: 14484183,
121
+ })(
122
+ "mints an 1155 token with an ERC20 token",
123
+ async ({ viemClients }) => {
124
+ const { testClient, walletClient, publicClient } = viemClients;
125
+
126
+ const targetContract: Address =
127
+ "0x689bc305456c38656856d12469aed282fbd89fe0";
128
+ const targetTokenId = 16n;
129
+
130
+ const minter = createMintClient({ chain: zora });
131
+
132
+ const mockCollector = "0xb6b701878a1f80197dF2c209D0BDd292EA73164D";
133
+ await testClient.impersonateAccount({
134
+ address: mockCollector,
135
+ });
136
+
137
+ const erc20Currency = "0xa6b280b42cb0b7c4a4f789ec6ccc3a7609a1bc39";
138
+ const erc20PricePerToken = 1000000000000000000n;
139
+
140
+ const erc20Abi = parseAbi([
141
+ "function balanceOf(address) public view returns (uint256)",
142
+ "function approve(address spender, uint256 amount) public returns (bool)",
143
+ "function allowance(address owner, address spender) public view returns (uint256)",
144
+ ]);
145
+
146
+ const beforeERC20Balance = await publicClient.readContract({
147
+ abi: erc20Abi,
148
+ address: erc20Currency,
149
+ functionName: "balanceOf",
150
+ args: [mockCollector],
151
+ });
152
+
153
+ const { request } = await publicClient.simulateContract({
154
+ account: mockCollector,
155
+ address: erc20Currency,
156
+ abi: erc20Abi,
157
+ functionName: "approve",
158
+ args: [erc20MinterAddress[7777777], erc20PricePerToken],
159
+ });
160
+ const approveHash = await walletClient.writeContract(request);
161
+ const approveTxReciept = await publicClient.waitForTransactionReceipt({
162
+ hash: approveHash,
163
+ });
164
+ expect(approveTxReciept).to.not.be.null;
165
+
166
+ const beforeAllowance = await publicClient.readContract({
167
+ abi: erc20Abi,
168
+ address: erc20Currency,
169
+ functionName: "allowance",
170
+ args: [mockCollector, erc20MinterAddress[7777777]],
171
+ });
172
+ expect(beforeAllowance).to.be.equal(erc20PricePerToken);
173
+
174
+ const params = await minter.makePrepareMintTokenParams({
175
+ minterAccount: mockCollector,
176
+ tokenId: targetTokenId,
177
+ tokenAddress: targetContract,
178
+ mintArguments: {
179
+ mintToAddress: mockCollector,
180
+ quantityToMint: 1,
181
+ },
182
+ });
183
+
184
+ const beforeCollector1155Balance = await publicClient.readContract({
185
+ abi: zoraCreator1155ImplABI,
186
+ address: targetContract,
187
+ functionName: "balanceOf",
188
+ args: [mockCollector, targetTokenId],
189
+ });
190
+ expect(beforeCollector1155Balance).to.be.equal(0n);
191
+
192
+ const simulationResult = await publicClient.simulateContract(params);
193
+ const hash = await walletClient.writeContract(simulationResult.request);
194
+ const receipt = await publicClient.waitForTransactionReceipt({ hash });
195
+ expect(receipt).to.not.be.null;
196
+
197
+ const afterAllowance = await publicClient.readContract({
198
+ abi: erc20Abi,
199
+ address: erc20Currency,
200
+ functionName: "allowance",
201
+ args: [mockCollector, erc20MinterAddress[7777777]],
202
+ });
203
+ expect(afterAllowance).to.be.equal(0n);
204
+
205
+ const afterERC20Balance = await publicClient.readContract({
206
+ abi: erc20Abi,
207
+ address: erc20Currency,
208
+ functionName: "balanceOf",
209
+ args: [mockCollector],
210
+ });
211
+ expect(beforeERC20Balance - afterERC20Balance).to.be.equal(
212
+ erc20PricePerToken,
213
+ );
214
+
215
+ const afterCollector1155Balance = await publicClient.readContract({
216
+ abi: zoraCreator1155ImplABI,
217
+ address: targetContract,
218
+ functionName: "balanceOf",
219
+ args: [mockCollector, targetTokenId],
220
+ });
221
+ expect(afterCollector1155Balance).to.be.equal(1n);
222
+ },
223
+ 12 * 1000,
224
+ );
114
225
  });
@@ -10,15 +10,21 @@ import {
10
10
  Account,
11
11
  SimulateContractParameters,
12
12
  } from "viem";
13
- import { IHttpClient } from "../apis/http-api-base";
14
- import { MintAPIClient, SalesConfigAndTokenInfo } from "./mint-api-client";
15
13
  import {
14
+ erc20MinterABI,
15
+ erc20MinterAddress,
16
16
  zoraCreator1155ImplABI,
17
17
  zoraCreatorFixedPriceSaleStrategyAddress,
18
18
  } from "@zoralabs/protocol-deployments";
19
- import { GenericTokenIdTypes } from "src/types";
19
+ import { IHttpClient } from "src/apis/http-api-base";
20
20
  import { zora721Abi } from "src/constants";
21
+ import { GenericTokenIdTypes } from "src/types";
21
22
  import { makeSimulateContractParamaters } from "src/utils";
23
+ import {
24
+ MintAPIClient,
25
+ SalesConfigAndTokenInfo,
26
+ SaleType,
27
+ } from "./mint-api-client";
22
28
 
23
29
  class MintError extends Error {}
24
30
  class MintInactiveError extends Error {}
@@ -33,6 +39,7 @@ type MintArguments = {
33
39
  mintComment?: string;
34
40
  mintReferral?: Address;
35
41
  mintToAddress: Address;
42
+ saleType?: SaleType;
36
43
  };
37
44
 
38
45
  class MintClient {
@@ -98,6 +105,7 @@ async function makePrepareMintTokenParams({
98
105
  apiClient,
99
106
  tokenId,
100
107
  tokenAddress,
108
+ mintArguments,
101
109
  ...rest
102
110
  }: {
103
111
  publicClient: PublicClient;
@@ -112,12 +120,14 @@ async function makePrepareMintTokenParams({
112
120
  const salesConfigAndTokenInfo = await apiClient.getSalesConfigAndTokenInfo({
113
121
  tokenId,
114
122
  tokenAddress,
123
+ saleType: mintArguments.saleType,
115
124
  });
116
125
 
117
126
  if (tokenId === undefined) {
118
127
  return makePrepareMint721TokenParams({
119
128
  salesConfigAndTokenInfo,
120
129
  tokenAddress,
130
+ mintArguments,
121
131
  ...rest,
122
132
  });
123
133
  }
@@ -126,6 +136,7 @@ async function makePrepareMintTokenParams({
126
136
  salesConfigAndTokenInfo,
127
137
  tokenAddress,
128
138
  tokenId,
139
+ mintArguments,
129
140
  ...rest,
130
141
  });
131
142
  }
@@ -177,7 +188,7 @@ export function getMintCosts({
177
188
  const mintFeeForTokens =
178
189
  salesConfigAndTokenInfo.mintFeePerQuantity * quantityToMint;
179
190
  const tokenPurchaseCost =
180
- BigInt(salesConfigAndTokenInfo.fixedPrice.pricePerToken) * quantityToMint;
191
+ BigInt(salesConfigAndTokenInfo.salesConfig.pricePerToken) * quantityToMint;
181
192
 
182
193
  return {
183
194
  mintFee: mintFeeForTokens,
@@ -206,23 +217,53 @@ async function makePrepareMint1155TokenParams({
206
217
  quantityToMint: mintQuantity,
207
218
  }).totalCost;
208
219
 
209
- return makeSimulateContractParamaters({
210
- abi: zoraCreator1155ImplABI,
211
- functionName: "mintWithRewards",
212
- account: minterAccount,
213
- value: mintValue,
214
- address: tokenAddress,
215
- /* args: minter, tokenId, quantity, minterArguments, mintReferral */
216
- args: [
217
- (salesConfigAndTokenInfo?.fixedPrice.address ||
218
- zoraCreatorFixedPriceSaleStrategyAddress[999]) as Address,
219
- BigInt(tokenId),
220
- mintQuantity,
221
- encodeAbiParameters(parseAbiParameters("address, string"), [
222
- mintArguments.mintToAddress,
223
- mintArguments.mintComment || "",
224
- ]),
225
- mintArguments.mintReferral || zeroAddress,
226
- ],
227
- });
220
+ switch (salesConfigAndTokenInfo.salesConfig.saleType) {
221
+ case "fixedPrice":
222
+ const fixedPriceArgs = mintArguments;
223
+
224
+ return makeSimulateContractParamaters({
225
+ abi: zoraCreator1155ImplABI,
226
+ functionName: "mintWithRewards",
227
+ account: minterAccount,
228
+ value: mintValue,
229
+ address: tokenAddress,
230
+ /* args: minter, tokenId, quantity, minterArguments, mintReferral */
231
+ args: [
232
+ (salesConfigAndTokenInfo.salesConfig.address ||
233
+ zoraCreatorFixedPriceSaleStrategyAddress[999999999]) as Address,
234
+ BigInt(tokenId),
235
+ mintQuantity,
236
+ encodeAbiParameters(parseAbiParameters("address, string"), [
237
+ fixedPriceArgs.mintToAddress,
238
+ fixedPriceArgs.mintComment || "",
239
+ ]),
240
+ fixedPriceArgs.mintReferral || zeroAddress,
241
+ ],
242
+ });
243
+
244
+ case "erc20":
245
+ const erc20Args = mintArguments;
246
+
247
+ return makeSimulateContractParamaters({
248
+ abi: erc20MinterABI,
249
+ functionName: "mint",
250
+ account: minterAccount,
251
+ address: (salesConfigAndTokenInfo?.salesConfig.address ||
252
+ erc20MinterAddress[999999999]) as Address,
253
+ /* args: mintTo, quantity, tokenAddress, tokenId, totalValue, currency, mintReferral, comment */
254
+ args: [
255
+ mintArguments.mintToAddress,
256
+ mintQuantity,
257
+ tokenAddress,
258
+ BigInt(tokenId),
259
+ salesConfigAndTokenInfo.salesConfig.pricePerToken,
260
+ salesConfigAndTokenInfo.salesConfig.currency,
261
+ erc20Args.mintReferral || zeroAddress,
262
+ erc20Args.mintComment || "",
263
+ ],
264
+ });
265
+
266
+ default:
267
+ throw new MintError("Unsupported sale type");
268
+ }
228
269
  }
@@ -50,6 +50,8 @@ export async function isAuthorizedToCreatePremint({
50
50
  publicClient: PublicClient;
51
51
  signer: Address;
52
52
  }) {
53
+ if (collection.additionalAdmins.length > 0)
54
+ throw new Error("additionalAdmins not supported yet.");
53
55
  // otherwize, we must assume the newer version of premint executor is deployed, so we call that.
54
56
  return await publicClient.readContract({
55
57
  abi: preminterAbi,