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