Commit 66a22025 authored by tom's avatar tom

support is_rust_verifier_microservice_enabled flag

parent ac7bfb2a
......@@ -124,6 +124,7 @@ export interface SmartContractVerificationConfigRaw {
verification_options: Array<string>;
vyper_compiler_versions: Array<string>;
vyper_evm_versions: Array<string>;
is_rust_verifier_microservice_enabled: boolean;
}
export interface SmartContractVerificationConfig extends SmartContractVerificationConfigRaw {
......
......@@ -16,6 +16,7 @@ const hooksConfig = {
const hash = '0x2F99338637F027CFB7494E46B49987457beCC6E3';
const formConfig: SmartContractVerificationConfig = {
is_rust_verifier_microservice_enabled: true,
solidity_compiler_versions: [
'v0.8.17+commit.8df45f5f',
'v0.8.16+commit.07a7930e',
......
......@@ -22,15 +22,6 @@ import ContractVerificationVyperContract from './methods/ContractVerificationVyp
import ContractVerificationVyperMultiPartFile from './methods/ContractVerificationVyperMultiPartFile';
import { prepareRequestBody, formatSocketErrors, getDefaultValues } from './utils';
const METHOD_COMPONENTS = {
'flattened-code': <ContractVerificationFlattenSourceCode/>,
'standard-input': <ContractVerificationStandardInput/>,
sourcify: <ContractVerificationSourcify/>,
'multi-part': <ContractVerificationMultiPartFile/>,
'vyper-code': <ContractVerificationVyperContract/>,
'vyper-multi-part': <ContractVerificationVyperMultiPartFile/>,
};
interface Props {
method?: SmartContractVerificationMethod;
config: SmartContractVerificationConfig;
......@@ -122,8 +113,18 @@ const ContractVerificationForm = ({ method: methodFromQuery, config, hash }: Pro
handler: handleNewSocketMessage,
});
const methods = React.useMemo(() => {
return {
'flattened-code': <ContractVerificationFlattenSourceCode config={ config }/>,
'standard-input': <ContractVerificationStandardInput/>,
sourcify: <ContractVerificationSourcify/>,
'multi-part': <ContractVerificationMultiPartFile/>,
'vyper-code': <ContractVerificationVyperContract config={ config }/>,
'vyper-multi-part': <ContractVerificationVyperMultiPartFile/>,
};
}, [ config ]);
const method = watch('method');
const content = METHOD_COMPONENTS[method?.value] || null;
const content = methods[method?.value] || null;
const methodValue = method?.value;
useUpdateEffect(() => {
......
......@@ -11,9 +11,10 @@ import ContractVerificationFormRow from '../ContractVerificationFormRow';
interface Props {
hint?: string;
isReadOnly?: boolean;
}
const ContractVerificationFieldName = ({ hint }: Props) => {
const ContractVerificationFieldName = ({ hint, isReadOnly }: Props) => {
const { formState, control } = useFormContext<FormFields>();
const renderControl = React.useCallback(({ field }: {field: ControllerRenderProps<FormFields, 'name'>}) => {
......@@ -26,13 +27,13 @@ const ContractVerificationFieldName = ({ hint }: Props) => {
required
isInvalid={ Boolean(error) }
maxLength={ 255 }
isDisabled={ formState.isSubmitting }
isDisabled={ formState.isSubmitting || isReadOnly }
autoComplete="off"
/>
<InputPlaceholder text="Contract name" error={ error }/>
</FormControl>
);
}, [ formState.errors, formState.isSubmitting ]);
}, [ formState.errors, formState.isSubmitting, isReadOnly ]);
return (
<ContractVerificationFormRow>
......
import React from 'react';
import type { SmartContractVerificationConfig } from 'types/api/contract';
import ContractVerificationMethod from '../ContractVerificationMethod';
import ContractVerificationFieldAutodetectArgs from '../fields/ContractVerificationFieldAutodetectArgs';
import ContractVerificationFieldCode from '../fields/ContractVerificationFieldCode';
......@@ -10,16 +12,16 @@ import ContractVerificationFieldLibraries from '../fields/ContractVerificationFi
import ContractVerificationFieldName from '../fields/ContractVerificationFieldName';
import ContractVerificationFieldOptimization from '../fields/ContractVerificationFieldOptimization';
const ContractVerificationFlattenSourceCode = () => {
const ContractVerificationFlattenSourceCode = ({ config }: { config: SmartContractVerificationConfig }) => {
return (
<ContractVerificationMethod title="Contract verification via Solidity (flattened source code)">
<ContractVerificationFieldName/>
<ContractVerificationFieldIsYul/>
{ !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldName/> }
{ config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldIsYul/> }
<ContractVerificationFieldCompiler/>
<ContractVerificationFieldEvmVersion/>
<ContractVerificationFieldOptimization/>
<ContractVerificationFieldCode/>
<ContractVerificationFieldAutodetectArgs/>
{ !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldAutodetectArgs/> }
<ContractVerificationFieldLibraries/>
</ContractVerificationMethod>
);
......
import React from 'react';
import type { SmartContractVerificationConfig } from 'types/api/contract';
import ContractVerificationMethod from '../ContractVerificationMethod';
import ContractVerificationFieldCode from '../fields/ContractVerificationFieldCode';
import ContractVerificationFieldCompiler from '../fields/ContractVerificationFieldCompiler';
import ContractVerificationFieldConstructorArgs from '../fields/ContractVerificationFieldConstructorArgs';
import ContractVerificationFieldEvmVersion from '../fields/ContractVerificationFieldEvmVersion';
import ContractVerificationFieldName from '../fields/ContractVerificationFieldName';
const ContractVerificationVyperContract = () => {
const ContractVerificationVyperContract = ({ config }: { config: SmartContractVerificationConfig }) => {
return (
<ContractVerificationMethod title="Contract verification via Vyper (contract)">
<ContractVerificationFieldName hint="Must match the name specified in the code."/>
<ContractVerificationFieldName hint="Must match the name specified in the code." isReadOnly/>
<ContractVerificationFieldCompiler isVyper/>
{ config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldEvmVersion isVyper/> }
<ContractVerificationFieldCode isVyper/>
<ContractVerificationFieldConstructorArgs/>
{ !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldConstructorArgs/> }
</ContractVerificationMethod>
);
};
......
......@@ -14,7 +14,7 @@ interface MethodOption {
export interface FormFieldsFlattenSourceCode {
method: MethodOption;
is_yul: boolean;
name: string;
name: string | undefined;
compiler: Option | null;
evm_version: Option | null;
is_optimization_enabled: boolean;
......@@ -53,9 +53,10 @@ export interface FormFieldsMultiPartFile {
export interface FormFieldsVyperContract {
method: MethodOption;
name: string;
evm_version: Option | null;
compiler: Option | null;
code: string;
constructor_args: string;
constructor_args: string | undefined;
}
export interface FormFieldsVyperMultiPartFile {
......
......@@ -84,8 +84,9 @@ export const DEFAULT_VALUES: Record<SmartContractVerificationMethod, FormFields>
value: 'vyper-code' as const,
label: METHOD_LABELS['vyper-code'],
},
name: '',
name: 'Vyper_contract',
compiler: null,
evm_version: null,
code: '',
constructor_args: '',
},
......@@ -113,6 +114,13 @@ export function getDefaultValues(method: SmartContractVerificationMethod, config
}
}
if (config.is_rust_verifier_microservice_enabled) {
if (method === 'flattened-code') {
'name' in defaultValues && (defaultValues.name = undefined);
'autodetect_constructor_args' in defaultValues && (defaultValues.autodetect_constructor_args = false);
}
}
return defaultValues;
}
......@@ -145,7 +153,7 @@ export function prepareRequestBody(data: FormFields): FetchParams['body'] {
is_optimization_enabled: _data.is_optimization_enabled,
is_yul_contract: _data.is_yul,
optimization_runs: _data.optimization_runs,
contract_name: _data.name,
contract_name: _data.name || undefined,
libraries: reduceLibrariesArray(_data.libraries),
evm_version: _data.evm_version?.value,
autodetect_constructor_args: _data.autodetect_constructor_args,
......@@ -196,6 +204,7 @@ export function prepareRequestBody(data: FormFields): FetchParams['body'] {
return {
compiler_version: _data.compiler?.value,
evm_version: _data.evm_version?.value,
source_code: _data.code,
contract_name: _data.name,
constructor_args: _data.constructor_args,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment