@zoralabs/protocol-sdk 0.5.14 → 0.5.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +6 -6
- package/CHANGELOG.md +15 -0
- package/README.md +42 -2
- package/dist/anvil.d.ts +4 -4
- package/dist/anvil.d.ts.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/create/1155-create-helper.d.ts +3 -4
- package/dist/create/1155-create-helper.d.ts.map +1 -1
- package/dist/index.cjs +534 -375
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +517 -356
- package/dist/index.js.map +1 -1
- package/dist/mint/mint-api-client.d.ts +14 -6
- package/dist/mint/mint-api-client.d.ts.map +1 -1
- package/dist/mint/mint-client.d.ts +25 -19
- package/dist/mint/mint-client.d.ts.map +1 -1
- package/dist/mints/mints-contracts.d.ts +688 -3
- package/dist/mints/mints-contracts.d.ts.map +1 -1
- package/dist/premint/premint-client.d.ts +111 -1465
- package/dist/premint/premint-client.d.ts.map +1 -1
- package/dist/premint/preminter.d.ts +2 -1
- package/dist/premint/preminter.d.ts.map +1 -1
- package/dist/utils.d.ts +6872 -1
- package/dist/utils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/constants.ts +36 -0
- package/src/create/1155-create-helper.test.ts +10 -3
- package/src/create/1155-create-helper.ts +8 -7
- package/src/mint/mint-api-client.ts +107 -45
- package/src/mint/mint-client.test.ts +113 -2
- package/src/mint/mint-client.ts +95 -53
- package/src/premint/premint-client.test.ts +16 -10
- package/src/premint/premint-client.ts +566 -374
- package/src/premint/preminter.ts +3 -1
- package/src/utils.ts +25 -0
- package/test-integration/premint-client.test.ts +2 -2
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,OAAO,EAEP,KAAK,EACL,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EACH,OAAO,EAEP,KAAK,EACL,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,IAAI,gBAAgB,EAChC,0BAA0B,EAC1B,SAAS,EAGV,MAAM,MAAM,CAAC;AACd,OAAO,EACL,WAAW,EAEZ,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,8BAA8B,0fAmBlC,CAAC;AAEV,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO5E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zoralabs/protocol-sdk",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.16",
|
|
4
4
|
"repository": "https://github.com/ourzora/zora-protocol",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@zoralabs/protocol-deployments": "*"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"viem": "^2.
|
|
31
|
+
"viem": "^2.11.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@lavamoat/preinstall-always-fail": "2.0.0",
|
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
|
+
`;
|
|
@@ -12,7 +12,9 @@ const demoContractMetadataURI = "ipfs://DUMMY/contract.json";
|
|
|
12
12
|
describe("create-helper", () => {
|
|
13
13
|
anvilTest(
|
|
14
14
|
"creates a new contract given arguments",
|
|
15
|
-
async ({
|
|
15
|
+
async ({
|
|
16
|
+
viemClients: { testClient, publicClient, walletClient, chain },
|
|
17
|
+
}) => {
|
|
16
18
|
const addresses = await walletClient.getAddresses();
|
|
17
19
|
const creatorAddress = addresses[0]!;
|
|
18
20
|
await testClient.setBalance({
|
|
@@ -20,6 +22,7 @@ describe("create-helper", () => {
|
|
|
20
22
|
value: parseEther("1"),
|
|
21
23
|
});
|
|
22
24
|
const creatorClient = create1155CreatorClient({
|
|
25
|
+
chain,
|
|
23
26
|
publicClient: publicClient,
|
|
24
27
|
});
|
|
25
28
|
const { request } = await creatorClient.createNew1155Token({
|
|
@@ -43,11 +46,12 @@ describe("create-helper", () => {
|
|
|
43
46
|
);
|
|
44
47
|
anvilTest(
|
|
45
48
|
"creates a new contract, than creates a new token on this existing contract",
|
|
46
|
-
async ({ viemClients: { publicClient, walletClient } }) => {
|
|
49
|
+
async ({ viemClients: { publicClient, walletClient, chain } }) => {
|
|
47
50
|
const addresses = await walletClient.getAddresses();
|
|
48
51
|
const creatorAccount = addresses[0]!;
|
|
49
52
|
|
|
50
53
|
const creatorClient = create1155CreatorClient({
|
|
54
|
+
chain,
|
|
51
55
|
publicClient: publicClient,
|
|
52
56
|
});
|
|
53
57
|
|
|
@@ -103,7 +107,9 @@ describe("create-helper", () => {
|
|
|
103
107
|
);
|
|
104
108
|
anvilTest(
|
|
105
109
|
"creates a new token with a create referral address",
|
|
106
|
-
async ({
|
|
110
|
+
async ({
|
|
111
|
+
viemClients: { testClient, publicClient, walletClient, chain },
|
|
112
|
+
}) => {
|
|
107
113
|
const addresses = await walletClient.getAddresses();
|
|
108
114
|
const creatorAddress = addresses[0]!;
|
|
109
115
|
await testClient.setBalance({
|
|
@@ -111,6 +117,7 @@ describe("create-helper", () => {
|
|
|
111
117
|
value: parseEther("1"),
|
|
112
118
|
});
|
|
113
119
|
const creatorClient = create1155CreatorClient({
|
|
120
|
+
chain,
|
|
114
121
|
publicClient: publicClient,
|
|
115
122
|
});
|
|
116
123
|
const { request } = await creatorClient.createNew1155Token({
|
|
@@ -8,13 +8,17 @@ import type {
|
|
|
8
8
|
Account,
|
|
9
9
|
Address,
|
|
10
10
|
Hex,
|
|
11
|
-
PublicClient,
|
|
12
11
|
SimulateContractParameters,
|
|
13
12
|
TransactionReceipt,
|
|
14
13
|
} from "viem";
|
|
15
14
|
import { decodeEventLog, encodeFunctionData, zeroAddress } from "viem";
|
|
16
15
|
import { OPEN_EDITION_MINT_SIZE } from "../constants";
|
|
17
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
makeSimulateContractParamaters,
|
|
18
|
+
ClientConfig,
|
|
19
|
+
PublicClient,
|
|
20
|
+
setupClient,
|
|
21
|
+
} from "src/utils";
|
|
18
22
|
|
|
19
23
|
// Sales end forever amount (uint64 max)
|
|
20
24
|
const SALE_END_FOREVER = 18446744073709551615n;
|
|
@@ -242,11 +246,8 @@ type CreateNew1155TokenReturn = {
|
|
|
242
246
|
contractExists: boolean;
|
|
243
247
|
};
|
|
244
248
|
|
|
245
|
-
export function create1155CreatorClient({
|
|
246
|
-
publicClient
|
|
247
|
-
}: {
|
|
248
|
-
publicClient: PublicClient;
|
|
249
|
-
}) {
|
|
249
|
+
export function create1155CreatorClient(clientConfig: ClientConfig) {
|
|
250
|
+
const { publicClient } = setupClient(clientConfig);
|
|
250
251
|
async function createNew1155Token({
|
|
251
252
|
contract,
|
|
252
253
|
tokenMetadataURI,
|
|
@@ -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 {
|
|
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
|
|
18
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
125
|
+
? 1
|
|
126
|
+
: -1,
|
|
127
|
+
);
|
|
104
128
|
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
});
|