diff --git a/src/lib/models/ui.ts b/src/lib/models/ui.ts index cfa0782..20a50b8 100644 --- a/src/lib/models/ui.ts +++ b/src/lib/models/ui.ts @@ -24,6 +24,7 @@ export type GlobalState = { source?: CompilationFileSources | null | SourceWithTarget, version?: string, data?: CompilationResult | null, + enforceDeterministicReason?: string, } form: { network?: string | TenantNetworkResponse; diff --git a/src/lib/wizard/components/Deploy.svelte b/src/lib/wizard/components/Deploy.svelte index ddebbfa..3559c06 100644 --- a/src/lib/wizard/components/Deploy.svelte +++ b/src/lib/wizard/components/Deploy.svelte @@ -54,7 +54,8 @@ let enforceDeterministic = $derived.by(() => { const selectedMultisig = globalState.form.approvalType === 'existing' && isMultisig(globalState.form.approvalProcessSelected?.viaType); const toCreateMultisig = globalState.form.approvalType === 'new' && isMultisig(globalState.form.approvalProcessToCreate?.viaType); - return selectedMultisig || toCreateMultisig; + const hasReasonMessage = globalState.contract?.enforceDeterministicReason !== undefined; + return selectedMultisig || toCreateMultisig || hasReasonMessage; }); const deploymentUrl = $derived( @@ -97,6 +98,10 @@ if (globalState.contract?.target && compilationResult) { inputs = getConstructorInputsWizard(globalState.contract.target, compilationResult.output.contracts); + + // Clear deploy status messages + successMessage = ""; + errorMessage = ""; } isCompiling = false; } @@ -226,7 +231,11 @@ } if ((isDeterministic || enforceDeterministic) && !salt) { - displayMessage("Salt is required", "error"); + if (globalState.contract?.enforceDeterministicReason) { + displayMessage(`Salt is required: ${globalState.contract.enforceDeterministicReason}`, "error"); + } else { + displayMessage("Salt is required", "error"); + } return; } diff --git a/src/lib/wizard/index.ts b/src/lib/wizard/index.ts index 890be70..7c084b7 100644 --- a/src/lib/wizard/index.ts +++ b/src/lib/wizard/index.ts @@ -4,6 +4,7 @@ import { globalState } from "$lib/state/state.svelte"; export interface DefenderDeployMessage { kind: 'oz-wizard-defender-deploy'; sources: ContractSources; + enforceDeterministicReason?: string; } export const initWizardPlugin = () => { @@ -18,7 +19,8 @@ function listenToContracts() { source: { sources: e.data.sources, }, - target: getMainContractName(e.data.sources) + target: getMainContractName(e.data.sources), + enforceDeterministicReason: e.data.enforceDeterministicReason, }; } });