Skip to content

Commit 4957745

Browse files
committed
fix ERC1155 single phase claim conditions
1 parent 9c737a1 commit 4957745

File tree

9 files changed

+66
-24
lines changed

9 files changed

+66
-24
lines changed

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/hooks.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,17 @@ type Options =
5555
};
5656

5757
export async function getClaimPhasesInLegacyFormat(
58-
options: BaseTransactionOptions<Options>,
58+
options: BaseTransactionOptions<Options> & { isSinglePhase?: boolean },
5959
): Promise<CombinedClaimCondition[]> {
6060
const conditions = await (async () => {
6161
switch (options.type) {
6262
case "erc20":
6363
return ERC20Ext.getClaimConditions(options);
6464
case "erc721":
6565
return ERC721Ext.getClaimConditions(options);
66-
case "erc1155":
66+
case "erc1155": {
6767
return ERC1155Ext.getClaimConditions(options);
68+
}
6869
}
6970
})();
7071

@@ -126,7 +127,7 @@ export async function getClaimPhasesInLegacyFormat(
126127
type PhaseInput = z.input<typeof LegacyClaimConditionInputSchema>;
127128

128129
export function setClaimPhasesTx(
129-
baseOptions: BaseTransactionOptions<Options>,
130+
baseOptions: BaseTransactionOptions<Options> & { isSinglePhase?: boolean },
130131
rawPhases: PhaseInput[],
131132
) {
132133
const phases = rawPhases.map((phase) => {
@@ -172,6 +173,7 @@ export function setClaimPhasesTx(
172173
contract: baseOptions.contract,
173174
phases,
174175
tokenId: baseOptions.tokenId,
176+
singlePhaseDrop: baseOptions.isSinglePhase,
175177
});
176178
}
177179
}

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,11 +222,15 @@ export const ClaimConditionsForm: React.FC<ClaimConditionsFormProps> = ({
222222

223223
const claimConditionsQuery = useReadContract(getClaimPhasesInLegacyFormat, {
224224
contract,
225+
isSinglePhase: !isMultiPhase,
225226
...(isErc20
226227
? { type: "erc20", decimals: tokenDecimals.data }
227228
: isErc721
228229
? { type: "erc721" }
229-
: { type: "erc1155", tokenId: BigInt(tokenId || 0) }),
230+
: {
231+
type: "erc1155",
232+
tokenId: BigInt(tokenId || 0),
233+
}),
230234
});
231235

232236
const transformedQueryData = useMemo(() => {
@@ -370,6 +374,7 @@ export const ClaimConditionsForm: React.FC<ClaimConditionsFormProps> = ({
370374
const tx = setClaimPhasesTx(
371375
{
372376
contract,
377+
isSinglePhase: !isMultiPhase,
373378
...(isErc20
374379
? { type: "erc20", decimals: tokenDecimals.data }
375380
: isErc721

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ interface ClaimConditionsProps {
1010
isColumn?: true;
1111
isERC20: boolean;
1212
twAccount: Account | undefined;
13+
isMultiphase: boolean;
1314
}
1415
export const ClaimConditions: React.FC<ClaimConditionsProps> = ({
1516
contract,
1617
tokenId,
1718
isColumn,
1819
isERC20,
1920
twAccount,
21+
isMultiphase,
2022
}) => {
2123
return (
2224
<div className="flex w-full flex-col gap-6">
@@ -37,8 +39,7 @@ export const ClaimConditions: React.FC<ClaimConditionsProps> = ({
3739
contract={contract}
3840
tokenId={tokenId}
3941
isColumn={isColumn}
40-
// always multi phase!
41-
isMultiPhase={true}
42+
isMultiPhase={isMultiphase}
4243
/>
4344
</div>
4445
);

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/claim-conditions/ClaimConditions.client.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export function ClaimConditionsClient(props: {
3636
contract={props.contract}
3737
isERC20={supportedERCs.isERC20}
3838
twAccount={props.twAccount}
39+
isMultiphase={true}
3940
/>
4041
);
4142
}

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/claim-conditions/page.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export default async function Page(props: {
4141
contract={contract}
4242
isERC20={supportedERCs.isERC20}
4343
twAccount={account}
44+
isMultiphase={true}
4445
/>
4546
);
4647
}

apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/nfts/[tokenId]/useNftDrawerTabs.tsx

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,21 @@ export function useNFTDrawerTabs({
6666

6767
return useMemo(() => {
6868
const hasERC1155ClaimConditions = (() => {
69-
return [
70-
// reads
71-
ERC1155Ext.isGetClaimConditionByIdSupported(functionSelectors),
72-
ERC1155Ext.isGetClaimConditionsSupported(functionSelectors),
73-
ERC1155Ext.isGetActiveClaimConditionSupported(functionSelectors),
74-
// writes
75-
ERC1155Ext.isSetClaimConditionsSupported(functionSelectors),
76-
ERC1155Ext.isResetClaimEligibilitySupported(functionSelectors),
77-
].every(Boolean);
69+
return (
70+
true ||
71+
[
72+
// reads
73+
ERC1155Ext.isGetClaimConditionsSupported(functionSelectors),
74+
ERC1155Ext.isGetActiveClaimConditionSupported(functionSelectors),
75+
// writes
76+
ERC1155Ext.isSetClaimConditionsSupported(functionSelectors),
77+
ERC1155Ext.isResetClaimEligibilitySupported(functionSelectors),
78+
].every(Boolean)
79+
);
80+
})();
81+
82+
const isERC1155Multiphase = (() => {
83+
return ERC1155Ext.isGetClaimConditionByIdSupported(functionSelectors);
7884
})();
7985

8086
const isBurnable = (() => {
@@ -130,6 +136,7 @@ export function useNFTDrawerTabs({
130136
tokenId={tokenId}
131137
isColumn
132138
twAccount={twAccount}
139+
isMultiphase={isERC1155Multiphase}
133140
/>
134141
),
135142
},

packages/thirdweb/src/extensions/erc1155/drops/read/getActiveClaimCondition.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ import {
99
getClaimConditionById,
1010
isGetClaimConditionByIdSupported,
1111
} from "../../__generated__/IDrop1155/read/getClaimConditionById.js";
12+
import {
13+
claimCondition,
14+
isClaimConditionSupported,
15+
} from "../../__generated__/IDropSinglePhase1155/read/claimCondition.js";
1216

1317
export type GetActiveClaimConditionParams = GetActiveClaimConditionIdParams;
1418
/**
@@ -30,7 +34,12 @@ export async function getActiveClaimCondition(
3034
const conditionId = await getActiveClaimConditionId(options);
3135
return getClaimConditionById({ ...options, conditionId });
3236
} catch {
33-
throw new Error("Claim condition not found");
37+
// try single phase
38+
try {
39+
return claimCondition({ ...options });
40+
} catch {
41+
throw new Error("Claim condition not found");
42+
}
3443
}
3544
}
3645

@@ -49,9 +58,10 @@ export async function getActiveClaimCondition(
4958
export function isGetActiveClaimConditionSupported(
5059
availableSelectors: string[],
5160
) {
52-
// if multi phase is supported, return true
5361
return (
54-
isGetActiveClaimConditionIdSupported(availableSelectors) &&
55-
isGetClaimConditionByIdSupported(availableSelectors)
62+
// check multi-phase
63+
(isGetActiveClaimConditionIdSupported(availableSelectors) &&
64+
isGetClaimConditionByIdSupported(availableSelectors)) ||
65+
isClaimConditionSupported(availableSelectors) // check single phase
5666
);
5767
}

packages/thirdweb/src/extensions/erc1155/drops/read/getClaimConditions.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import type { BaseTransactionOptions } from "../../../../transaction/types.js";
22
import type { ClaimCondition } from "../../../../utils/extensions/drops/types.js";
33
import * as MultiPhase from "../../__generated__/IDrop1155/read/claimCondition.js";
44
import * as MultiById from "../../__generated__/IDrop1155/read/getClaimConditionById.js";
5+
import {
6+
claimCondition as claimConditionSinglePhase,
7+
isClaimConditionSupported,
8+
} from "../../__generated__/IDropSinglePhase1155/read/claimCondition.js";
59

610
export type GetClaimConditionsParams = {
711
tokenId: bigint;
@@ -19,9 +23,15 @@ export type GetClaimConditionsParams = {
1923
* ```
2024
*/
2125
export async function getClaimConditions(
22-
options: BaseTransactionOptions<GetClaimConditionsParams>,
26+
options: BaseTransactionOptions<GetClaimConditionsParams> & {
27+
isSinglePhase?: boolean;
28+
},
2329
): Promise<ClaimCondition[]> {
2430
try {
31+
if (options.isSinglePhase) {
32+
return Promise.all([claimConditionSinglePhase({ ...options })]);
33+
}
34+
2535
const [startId, count] = await MultiPhase.claimCondition(options);
2636

2737
const conditionPromises: Array<
@@ -56,7 +66,8 @@ export async function getClaimConditions(
5666
export function isGetClaimConditionsSupported(availableSelectors: string[]) {
5767
// if multi phase is supported, return true
5868
return (
59-
MultiPhase.isClaimConditionSupported(availableSelectors) &&
60-
MultiById.isGetClaimConditionByIdSupported(availableSelectors)
69+
(MultiPhase.isClaimConditionSupported(availableSelectors) &&
70+
MultiById.isGetClaimConditionByIdSupported(availableSelectors)) ||
71+
isClaimConditionSupported(availableSelectors)
6172
);
6273
}

packages/thirdweb/src/extensions/erc1155/drops/write/resetClaimEligibility.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {
55
isSetClaimConditionsSupported,
66
setClaimConditions,
77
} from "../../__generated__/IDrop1155/write/setClaimConditions.js";
8+
import { isClaimConditionSupported } from "../../__generated__/IDropSinglePhase1155/read/claimCondition.js";
9+
import { isSetClaimConditionsSupported as isSetClaimConditionsSupportedGeneratedSinglePhase } from "../../__generated__/IDropSinglePhase1155/write/setClaimConditions.js";
810
import {
911
type GetClaimConditionsParams,
1012
getClaimConditions,
@@ -70,7 +72,9 @@ export function resetClaimEligibility(
7072
*/
7173
export function isResetClaimEligibilitySupported(availableSelectors: string[]) {
7274
return (
73-
isGetClaimConditionsSupported(availableSelectors) &&
74-
isSetClaimConditionsSupported(availableSelectors)
75+
(isGetClaimConditionsSupported(availableSelectors) &&
76+
isSetClaimConditionsSupported(availableSelectors)) ||
77+
isClaimConditionSupported(availableSelectors) ||
78+
isSetClaimConditionsSupportedGeneratedSinglePhase(availableSelectors)
7579
);
7680
}

0 commit comments

Comments
 (0)