Skip to content

Commit 7d67711

Browse files
committed
Update deploy configs
1 parent 45ac0cb commit 7d67711

File tree

4 files changed

+107
-13
lines changed

4 files changed

+107
-13
lines changed

apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ import { Flex, FormControl } from "@chakra-ui/react";
1414
import { useMutation, useQuery } from "@tanstack/react-query";
1515
import { verifyContract } from "app/(dashboard)/(chain)/[chain_id]/[contractAddress]/sources/ContractSourcesPage";
1616
import { NetworkSelectorButton } from "components/selects/NetworkSelectorButton";
17-
import { DEFAULT_FEE_BPS, DEFAULT_FEE_RECIPIENT } from "constants/addresses";
17+
import {
18+
DEFAULT_FEE_BPS,
19+
DEFAULT_FEE_RECIPIENT,
20+
THIRDWEB_PUBLISHER_ADDRESS,
21+
} from "constants/addresses";
1822
import { SolidityInput } from "contract-ui/components/solidity-inputs";
1923
import { useTrack } from "hooks/analytics/useTrack";
2024
import { useTxNotifications } from "hooks/useTxNotifications";
@@ -161,6 +165,13 @@ export const CustomContractForm: React.FC<CustomContractFormProps> = ({
161165
const constructorParams =
162166
metadata.abi.find((a) => a.type === "constructor")?.inputs || [];
163167

168+
const defaultFeeRecipientFunction = metadata.abi.find(
169+
(a) => a.type === "function" && a.name === "DEFAULT_FEE_RECIPIENT",
170+
);
171+
const hasInbuiltDefaultFeeConfig =
172+
defaultFeeRecipientFunction &&
173+
metadata.publisher === THIRDWEB_PUBLISHER_ADDRESS;
174+
164175
const [customFactoryNetwork, customFactoryAddress] = Object.entries(
165176
metadata?.factoryDeploymentData?.customFactoryInput
166177
?.customFactoryAddresses || {},
@@ -457,8 +468,12 @@ export const CustomContractForm: React.FC<CustomContractFormProps> = ({
457468
name: params.contractMetadata?.name || "",
458469
contractURI: _contractURI,
459470
defaultAdmin: params.deployParams._defaultAdmin as string,
460-
platformFeeBps: DEFAULT_FEE_BPS,
461-
platformFeeRecipient: DEFAULT_FEE_RECIPIENT,
471+
platformFeeBps: hasInbuiltDefaultFeeConfig
472+
? Number(params.deployParams._platformFeeBps)
473+
: DEFAULT_FEE_BPS,
474+
platformFeeRecipient: hasInbuiltDefaultFeeConfig
475+
? (params.deployParams._platformFeeRecipient as string)
476+
: DEFAULT_FEE_RECIPIENT,
462477
trustedForwarders: params.deployParams._trustedForwarders
463478
? JSON.parse(params.deployParams._trustedForwarders as string)
464479
: undefined,
@@ -473,8 +488,12 @@ export const CustomContractForm: React.FC<CustomContractFormProps> = ({
473488
payees,
474489
shares,
475490
_contractURI,
476-
_platformFeeBps: DEFAULT_FEE_BPS,
477-
_platformFeeRecipient: DEFAULT_FEE_RECIPIENT,
491+
platformFeeBps: hasInbuiltDefaultFeeConfig
492+
? Number(params.deployParams._platformFeeBps)
493+
: DEFAULT_FEE_BPS,
494+
platformFeeRecipient: hasInbuiltDefaultFeeConfig
495+
? (params.deployParams._platformFeeRecipient as string)
496+
: DEFAULT_FEE_RECIPIENT,
478497
};
479498

480499
const salt = params.deployDeterministic
@@ -709,7 +728,11 @@ export const CustomContractForm: React.FC<CustomContractFormProps> = ({
709728
)}
710729

711730
{hasPlatformFee && (
712-
<PlatformFeeFieldset isMarketplace={isMarketplace} />
731+
<PlatformFeeFieldset
732+
form={form}
733+
isMarketplace={isMarketplace}
734+
hasInbuiltDefaultFeeConfig={!!hasInbuiltDefaultFeeConfig}
735+
/>
713736
)}
714737

715738
{isSplit && <SplitFieldset form={form} />}

apps/dashboard/src/components/contract-components/contract-deploy-form/platform-fee-fieldset.tsx

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
1+
import { FormFieldSetup } from "@/components/blocks/FormFieldSetup";
2+
import { BasisPointsInput } from "components/inputs/BasisPointsInput";
3+
import { SolidityInput } from "contract-ui/components/solidity-inputs";
14
import Link from "next/link";
25
import { Fieldset } from "./common";
6+
import type { CustomContractDeploymentForm } from "./custom-contract";
37

48
interface PlatformFeeFieldsetProps {
9+
form: CustomContractDeploymentForm;
510
isMarketplace: boolean;
11+
hasInbuiltDefaultFeeConfig: boolean;
612
}
713

8-
export const PlatformFeeFieldset: React.FC<PlatformFeeFieldsetProps> = (
9-
props,
10-
) => {
14+
export const PlatformFeeFieldset: React.FC<PlatformFeeFieldsetProps> = ({
15+
form,
16+
isMarketplace,
17+
hasInbuiltDefaultFeeConfig,
18+
}) => {
1119
return (
1220
<Fieldset legend="Platform fees">
1321
<div className="flex flex-col gap-4 md:flex-row">
14-
{props.isMarketplace ? (
22+
{isMarketplace ? (
1523
<p className="mb-3 pt-4 text-muted-foreground text-sm italic">
1624
A 2.5% platform fee is deducted from each sale to support ongoing
1725
platform operations and improvements.{" "}
@@ -40,6 +48,59 @@ export const PlatformFeeFieldset: React.FC<PlatformFeeFieldsetProps> = (
4048
</Link>
4149
</p>
4250
)}
51+
{hasInbuiltDefaultFeeConfig && (
52+
<FormFieldSetup
53+
className="grow"
54+
label="Recipient Address"
55+
isRequired
56+
errorMessage={
57+
form.getFieldState(
58+
"deployParams._platformFeeRecipient",
59+
form.formState,
60+
).error?.message
61+
}
62+
helperText={
63+
<>
64+
For contract with primary sales, get additional fees for all
65+
primary sales that happen on this contract. (This is useful if
66+
you are deploying this contract for a 3rd party and want to take
67+
fees for your service). <br /> If this contract is a
68+
marketplace, get a percentage of all the secondary sales that
69+
happen on your contract.
70+
</>
71+
}
72+
>
73+
<SolidityInput
74+
solidityType="address"
75+
{...form.register("deployParams._platformFeeRecipient")}
76+
/>
77+
</FormFieldSetup>
78+
)}
79+
80+
{hasInbuiltDefaultFeeConfig && (
81+
<FormFieldSetup
82+
label="Percentage"
83+
isRequired
84+
className="shrink-0 md:max-w-[150px]"
85+
errorMessage={
86+
form.getFieldState("deployParams._platformFeeBps", form.formState)
87+
.error?.message
88+
}
89+
>
90+
<BasisPointsInput
91+
value={Number(form.watch("deployParams._platformFeeBps"))}
92+
onChange={(value) =>
93+
form.setValue(
94+
"deployParams._platformFeeBps",
95+
value.toString(),
96+
{
97+
shouldTouch: true,
98+
},
99+
)
100+
}
101+
/>
102+
</FormFieldSetup>
103+
)}
43104
</div>
44105
</Fieldset>
45106
);

apps/dashboard/src/components/contract-functions/contract-function.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,15 +285,22 @@ export const ContractFunctionsPanel: React.FC<ContractFunctionsPanelProps> = ({
285285
twAccount,
286286
}) => {
287287
// TODO: clean this up
288+
288289
const functionsWithExtension = useMemo(() => {
289-
const allFunctions = fnsOrEvents
290-
.filter((f) => f.type === "function")
291-
.filter(
290+
const defaultFeeRecipientFunction = fnsOrEvents.find(
291+
(a) => a.type === "function" && a.name === "DEFAULT_FEE_RECIPIENT",
292+
);
293+
294+
let allFunctions = fnsOrEvents.filter((f) => f.type === "function");
295+
296+
if (!defaultFeeRecipientFunction) {
297+
allFunctions = allFunctions.filter(
292298
(f) =>
293299
f.name !== "setPlatformFeeInfo" &&
294300
f.name !== "setFlatPlatformFeeInfo" &&
295301
f.name !== "setPlatformFeeType",
296302
);
303+
}
297304
const results: ExtensionFunctions[] = [];
298305
results.push({
299306
extension: "",

apps/dashboard/src/constants/addresses.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
export const THIRDWEB_DEPLOYER_ADDRESS =
22
"0xdd99b75f095d0c4d5112aCe938e4e6ed962fb024";
33

4+
export const THIRDWEB_PUBLISHER_ADDRESS =
5+
"0xdd99b75f095d0c4d5112aCe938e4e6ed962fb024";
6+
47
export const DEFAULT_FEE_RECIPIENT =
58
"0x1af20c6b23373350ad464700b5965ce4b0d2ad94";
69

0 commit comments

Comments
 (0)