mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
* change hint and enable contract name field * fix form re-submiting * update screenshot * change vyper multi part method * vyper standard input json method * fix required error message for sources field * pin api host * fix locked form * clean up
71 lines
2.5 KiB
TypeScript
71 lines
2.5 KiB
TypeScript
import { Link } from '@chakra-ui/react';
|
|
import { useQueryClient } from '@tanstack/react-query';
|
|
import React from 'react';
|
|
import type { ControllerRenderProps } from 'react-hook-form';
|
|
import { useFormContext, Controller } from 'react-hook-form';
|
|
|
|
import type { FormFields } from '../types';
|
|
import type { SmartContractVerificationConfig } from 'types/api/contract';
|
|
|
|
import { getResourceKey } from 'lib/api/useApiQuery';
|
|
import useIsMobile from 'lib/hooks/useIsMobile';
|
|
import FancySelect from 'ui/shared/FancySelect/FancySelect';
|
|
|
|
import ContractVerificationFormRow from '../ContractVerificationFormRow';
|
|
|
|
interface Props {
|
|
isVyper?: boolean;
|
|
}
|
|
|
|
const ContractVerificationFieldEvmVersion = ({ isVyper }: Props) => {
|
|
const { formState, control } = useFormContext<FormFields>();
|
|
const isMobile = useIsMobile();
|
|
const queryClient = useQueryClient();
|
|
const config = queryClient.getQueryData<SmartContractVerificationConfig>(getResourceKey('contract_verification_config'));
|
|
|
|
const options = React.useMemo(() => (
|
|
(isVyper ? config?.vyper_evm_versions : config?.solidity_evm_versions)?.map((option) => ({ label: option, value: option })) || []
|
|
), [ config?.solidity_evm_versions, config?.vyper_evm_versions, isVyper ]);
|
|
|
|
const renderControl = React.useCallback(({ field }: {field: ControllerRenderProps<FormFields, 'evm_version'>}) => {
|
|
const error = 'evm_version' in formState.errors ? formState.errors.evm_version : undefined;
|
|
|
|
return (
|
|
<FancySelect
|
|
{ ...field }
|
|
options={ options }
|
|
size={ isMobile ? 'md' : 'lg' }
|
|
placeholder="EVM Version"
|
|
isDisabled={ formState.isSubmitting }
|
|
error={ error }
|
|
isRequired
|
|
/>
|
|
);
|
|
}, [ formState.errors, formState.isSubmitting, isMobile, options ]);
|
|
|
|
return (
|
|
<ContractVerificationFormRow>
|
|
<Controller
|
|
name="evm_version"
|
|
control={ control }
|
|
render={ renderControl }
|
|
rules={{ required: true }}
|
|
/>
|
|
<>
|
|
<span>The EVM version the contract is written for. If the bytecode does not match the version, we try to verify using the latest EVM version. </span>
|
|
<Link
|
|
href={ isVyper ?
|
|
'https://docs.vyperlang.org/en/stable/compiling-a-contract.html#target-options' :
|
|
'https://docs.soliditylang.org/en/latest/using-the-compiler.html#target-options'
|
|
}
|
|
target="_blank"
|
|
>
|
|
EVM version details
|
|
</Link>
|
|
</>
|
|
</ContractVerificationFormRow>
|
|
);
|
|
};
|
|
|
|
export default React.memo(ContractVerificationFieldEvmVersion);
|