Commit b518b5af authored by tom's avatar tom

fix contract verification form test

parent f3f51ee8
...@@ -140,6 +140,8 @@ export const SelectValueText = React.forwardRef< ...@@ -140,6 +140,8 @@ export const SelectValueText = React.forwardRef<
if (items.length === 1) { if (items.length === 1) {
const item = items[0] as SelectOption; const item = items[0] as SelectOption;
if (!item) return placeholder;
const icon = (() => { const icon = (() => {
if (item.icon) { if (item.icon) {
return typeof item.icon === 'string' ? <IconSvg name={ item.icon as IconName } boxSize={ 5 } flexShrink={ 0 }/> : item.icon; return typeof item.icon === 'string' ? <IconSvg name={ item.icon as IconName } boxSize={ 5 } flexShrink={ 0 }/> : item.icon;
......
...@@ -78,14 +78,12 @@ test('flatten source code method +@dark-mode +@mobile', async({ render, page }) ...@@ -78,14 +78,12 @@ test('flatten source code method +@dark-mode +@mobile', async({ render, page })
const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig }); const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig });
// select license // select license
await component.getByLabel(/contract license/i).focus(); await component.locator('button').filter({ hasText: 'Contract license' }).click();
await component.getByLabel(/contract license/i).fill('mit'); await page.getByRole('option', { name: 'MIT License' }).click();
await page.getByRole('button', { name: /mit license/i }).click();
// select method // select method
await component.getByLabel(/verification method/i).focus(); await component.locator('button').filter({ hasText: 'Verification method' }).click();
await component.getByLabel(/verification method/i).fill('solidity'); await page.getByRole('option', { name: 'Solidity (Single file)' }).click();
await page.getByRole('button', { name: /single file/i }).click();
await page.getByText(/add contract libraries/i).click(); await page.getByText(/add contract libraries/i).click();
await page.locator('button[aria-label="add"]').click(); await page.locator('button[aria-label="add"]').click();
...@@ -97,9 +95,8 @@ test('standard input json method', async({ render, page }) => { ...@@ -97,9 +95,8 @@ test('standard input json method', async({ render, page }) => {
const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig }); const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig });
// select method // select method
await component.getByLabel(/verification method/i).focus(); await component.locator('button').filter({ hasText: 'Verification method' }).click();
await component.getByLabel(/verification method/i).fill('solidity'); await page.getByRole('option', { name: 'Solidity (Standard JSON input)' }).click();
await page.getByRole('button', { name: /standard json input/i }).click();
await expect(component).toHaveScreenshot(); await expect(component).toHaveScreenshot();
}); });
...@@ -115,9 +112,8 @@ test.describe('sourcify', () => { ...@@ -115,9 +112,8 @@ test.describe('sourcify', () => {
); );
// select method // select method
await component.getByLabel(/verification method/i).focus(); await component.locator('button').filter({ hasText: 'Verification method' }).click();
await component.getByLabel(/verification method/i).fill('solidity'); await page.getByRole('option', { name: 'Solidity (Sourcify)' }).click();
await page.getByRole('button', { name: /sourcify/i }).click();
await page.getByText(/drop files/i).click(); await page.getByText(/drop files/i).click();
await page.locator('input[name="sources"]').setInputFiles([ await page.locator('input[name="sources"]').setInputFiles([
...@@ -141,9 +137,8 @@ test.describe('sourcify', () => { ...@@ -141,9 +137,8 @@ test.describe('sourcify', () => {
}, },
}); });
await component.getByLabel(/contract name/i).focus(); await component.locator('button').filter({ hasText: 'Contract name*' }).click();
await component.getByLabel(/contract name/i).fill('e'); const contractNameOption = page.getByRole('option', { name: 'MockERC20' });
const contractNameOption = page.getByRole('button', { name: /MockERC20/i });
await expect(contractNameOption).toBeVisible(); await expect(contractNameOption).toBeVisible();
...@@ -155,9 +150,8 @@ test('multi-part files method', async({ render, page }) => { ...@@ -155,9 +150,8 @@ test('multi-part files method', async({ render, page }) => {
const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig }); const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig });
// select method // select method
await component.getByLabel(/verification method/i).focus(); await component.locator('button').filter({ hasText: 'Verification method' }).click();
await component.getByLabel(/verification method/i).fill('solidity'); await page.getByRole('option', { name: 'Solidity (Multi-part files)' }).click();
await page.getByRole('button', { name: /multi-part files/i }).click();
await expect(component).toHaveScreenshot(); await expect(component).toHaveScreenshot();
}); });
...@@ -166,9 +160,8 @@ test('vyper contract method', async({ render, page }) => { ...@@ -166,9 +160,8 @@ test('vyper contract method', async({ render, page }) => {
const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig }); const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig });
// select method // select method
await component.getByLabel(/verification method/i).focus(); await component.locator('button').filter({ hasText: 'Verification method' }).click();
await component.getByLabel(/verification method/i).fill('vyper'); await page.getByRole('option', { name: 'Vyper (Contract)' }).click();
await page.getByRole('button', { name: /contract/i }).click();
await expect(component).toHaveScreenshot(); await expect(component).toHaveScreenshot();
}); });
...@@ -177,9 +170,8 @@ test('vyper multi-part method', async({ render, page }) => { ...@@ -177,9 +170,8 @@ test('vyper multi-part method', async({ render, page }) => {
const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig }); const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig });
// select method // select method
await component.getByLabel(/verification method/i).focus(); await component.locator('button').filter({ hasText: 'Verification method' }).click();
await component.getByLabel(/verification method/i).fill('vyper'); await page.getByRole('option', { name: 'Vyper (Multi-part files)' }).click();
await page.getByRole('button', { name: /multi-part files/i }).click();
await expect(component).toHaveScreenshot(); await expect(component).toHaveScreenshot();
}); });
...@@ -188,9 +180,8 @@ test('vyper vyper-standard-input method', async({ render, page }) => { ...@@ -188,9 +180,8 @@ test('vyper vyper-standard-input method', async({ render, page }) => {
const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig }); const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig });
// select method // select method
await component.getByLabel(/verification method/i).focus(); await component.locator('button').filter({ hasText: 'Verification method' }).click();
await component.getByLabel(/verification method/i).fill('vyper'); await page.getByRole('option', { name: 'Vyper (Standard JSON input)' }).click();
await page.getByRole('button', { name: /standard json input/i }).click();
await expect(component).toHaveScreenshot(); await expect(component).toHaveScreenshot();
}); });
...@@ -199,9 +190,8 @@ test('solidity-hardhat method', async({ render, page }) => { ...@@ -199,9 +190,8 @@ test('solidity-hardhat method', async({ render, page }) => {
const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig }); const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig });
// select method // select method
await component.getByLabel(/verification method/i).focus(); await component.locator('button').filter({ hasText: 'Verification method' }).click();
await component.getByLabel(/verification method/i).fill('hardhat'); await page.getByRole('option', { name: 'Solidity (Hardhat)' }).click();
await page.getByRole('button', { name: /hardhat/i }).click();
await expect(component).toHaveScreenshot(); await expect(component).toHaveScreenshot();
}); });
...@@ -210,9 +200,8 @@ test('solidity-foundry method', async({ render, page }) => { ...@@ -210,9 +200,8 @@ test('solidity-foundry method', async({ render, page }) => {
const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig }); const component = await render(<ContractVerificationForm config={ formConfig } hash={ hash }/>, { hooksConfig });
// select method // select method
await component.getByLabel(/verification method/i).focus(); await component.locator('button').filter({ hasText: 'Verification method' }).click();
await component.getByLabel(/verification method/i).fill('foundry'); await page.getByRole('option', { name: 'Solidity (Foundry)' }).click();
await page.getByRole('button', { name: /foundry/i }).click();
await expect(component).toHaveScreenshot(); await expect(component).toHaveScreenshot();
}); });
...@@ -241,9 +230,8 @@ test('verification of stylus rust contract', async({ render, page }) => { ...@@ -241,9 +230,8 @@ test('verification of stylus rust contract', async({ render, page }) => {
const component = await render(<ContractVerificationForm config={ stylusRustFormConfig } hash={ hash }/>, { hooksConfig }); const component = await render(<ContractVerificationForm config={ stylusRustFormConfig } hash={ hash }/>, { hooksConfig });
// select method // select method
await component.getByLabel(/verification method/i).focus(); await component.locator('button').filter({ hasText: 'Verification method' }).click();
await component.getByLabel(/verification method/i).fill('stylus'); await page.getByRole('option', { name: 'Stylus (GitHub repository)' }).click();
await page.getByRole('button', { name: /stylus/i }).click();
// check validation of github repository field // check validation of github repository field
const githubRepositoryField = component.getByLabel(/github repository url/i); const githubRepositoryField = component.getByLabel(/github repository url/i);
......
...@@ -163,13 +163,13 @@ const ContractVerificationForm = ({ method: methodFromQuery, config, hash }: Pro ...@@ -163,13 +163,13 @@ const ContractVerificationForm = ({ method: methodFromQuery, config, hash }: Pro
'flattened-code': <ContractVerificationFlattenSourceCode config={ config }/>, 'flattened-code': <ContractVerificationFlattenSourceCode config={ config }/>,
'standard-input': <ContractVerificationStandardInput config={ config }/>, 'standard-input': <ContractVerificationStandardInput config={ config }/>,
sourcify: <ContractVerificationSourcify/>, sourcify: <ContractVerificationSourcify/>,
'multi-part': <ContractVerificationMultiPartFile/>, 'multi-part': <ContractVerificationMultiPartFile config={ config }/>,
'vyper-code': <ContractVerificationVyperContract config={ config }/>, 'vyper-code': <ContractVerificationVyperContract config={ config }/>,
'vyper-multi-part': <ContractVerificationVyperMultiPartFile/>, 'vyper-multi-part': <ContractVerificationVyperMultiPartFile config={ config }/>,
'vyper-standard-input': <ContractVerificationVyperStandardInput/>, 'vyper-standard-input': <ContractVerificationVyperStandardInput config={ config }/>,
'solidity-hardhat': <ContractVerificationSolidityHardhat config={ config }/>, 'solidity-hardhat': <ContractVerificationSolidityHardhat config={ config }/>,
'solidity-foundry': <ContractVerificationSolidityFoundry/>, 'solidity-foundry': <ContractVerificationSolidityFoundry/>,
'stylus-github-repository': <ContractVerificationStylusGitHubRepo/>, 'stylus-github-repository': <ContractVerificationStylusGitHubRepo config={ config }/>,
}; };
}, [ config ]); }, [ config ]);
const method = watch('method'); const method = watch('method');
......
import { chakra, Code, createListCollection } from '@chakra-ui/react'; import { chakra, Code, createListCollection } from '@chakra-ui/react';
import { useQueryClient } from '@tanstack/react-query';
import React from 'react'; import React from 'react';
import { useFormContext } from 'react-hook-form'; import { useFormContext } from 'react-hook-form';
import type { FormFields } from '../types'; import type { FormFields } from '../types';
import type { SmartContractVerificationConfig } from 'types/client/contract'; import type { SmartContractVerificationConfig } from 'types/client/contract';
import { getResourceKey } from 'lib/api/useApiQuery';
import { Checkbox } from 'toolkit/chakra/checkbox'; import { Checkbox } from 'toolkit/chakra/checkbox';
import FormFieldSelectAsync from 'ui/shared/forms/fields/FormFieldSelectAsync'; import FormFieldSelectAsync from 'ui/shared/forms/fields/FormFieldSelectAsync';
...@@ -17,13 +15,12 @@ const OPTIONS_LIMIT = 50; ...@@ -17,13 +15,12 @@ const OPTIONS_LIMIT = 50;
interface Props { interface Props {
isVyper?: boolean; isVyper?: boolean;
isStylus?: boolean; isStylus?: boolean;
config: SmartContractVerificationConfig;
} }
const ContractVerificationFieldCompiler = ({ isVyper, isStylus }: Props) => { const ContractVerificationFieldCompiler = ({ isVyper, isStylus, config }: Props) => {
const [ isNightly, setIsNightly ] = React.useState(false); const [ isNightly, setIsNightly ] = React.useState(false);
const { formState, getValues, resetField } = useFormContext<FormFields>(); const { formState, getValues, resetField } = useFormContext<FormFields>();
const queryClient = useQueryClient();
const config = queryClient.getQueryData<SmartContractVerificationConfig>(getResourceKey('contract_verification_config'));
const handleCheckboxChange = React.useCallback(() => { const handleCheckboxChange = React.useCallback(() => {
setIsNightly(prev => { setIsNightly(prev => {
......
import { createListCollection } from '@chakra-ui/react'; import { createListCollection } from '@chakra-ui/react';
import { useQueryClient } from '@tanstack/react-query';
import React from 'react'; import React from 'react';
import type { FormFields } from '../types'; import type { FormFields } from '../types';
import type { SmartContractVerificationConfig } from 'types/client/contract'; import type { SmartContractVerificationConfig } from 'types/client/contract';
import { getResourceKey } from 'lib/api/useApiQuery';
import { Link } from 'toolkit/chakra/link'; import { Link } from 'toolkit/chakra/link';
import FormFieldSelect from 'ui/shared/forms/fields/FormFieldSelect'; import FormFieldSelect from 'ui/shared/forms/fields/FormFieldSelect';
...@@ -13,12 +11,10 @@ import ContractVerificationFormRow from '../ContractVerificationFormRow'; ...@@ -13,12 +11,10 @@ import ContractVerificationFormRow from '../ContractVerificationFormRow';
interface Props { interface Props {
isVyper?: boolean; isVyper?: boolean;
config: SmartContractVerificationConfig;
} }
const ContractVerificationFieldEvmVersion = ({ isVyper }: Props) => { const ContractVerificationFieldEvmVersion = ({ isVyper, config }: Props) => {
const queryClient = useQueryClient();
const config = queryClient.getQueryData<SmartContractVerificationConfig>(getResourceKey('contract_verification_config'));
const collection = React.useMemo(() => { const collection = React.useMemo(() => {
const items = (isVyper ? config?.vyper_evm_versions : config?.solidity_evm_versions)?.map((option) => ({ label: option, value: option })) || []; const items = (isVyper ? config?.vyper_evm_versions : config?.solidity_evm_versions)?.map((option) => ({ label: option, value: option })) || [];
......
import { Box, createListCollection } from '@chakra-ui/react'; import { Box, createListCollection } from '@chakra-ui/react';
import { useQueryClient } from '@tanstack/react-query';
import React from 'react'; import React from 'react';
import type { FormFields } from '../types'; import type { FormFields } from '../types';
import type { SmartContractVerificationConfig } from 'types/client/contract'; import type { SmartContractVerificationConfig } from 'types/client/contract';
import { getResourceKey } from 'lib/api/useApiQuery';
import { Link } from 'toolkit/chakra/link'; import { Link } from 'toolkit/chakra/link';
import FormFieldSelectAsync from 'ui/shared/forms/fields/FormFieldSelectAsync'; import FormFieldSelectAsync from 'ui/shared/forms/fields/FormFieldSelectAsync';
...@@ -13,10 +11,7 @@ import ContractVerificationFormRow from '../ContractVerificationFormRow'; ...@@ -13,10 +11,7 @@ import ContractVerificationFormRow from '../ContractVerificationFormRow';
const OPTIONS_LIMIT = 50; const OPTIONS_LIMIT = 50;
const ContractVerificationFieldZkCompiler = () => { const ContractVerificationFieldZkCompiler = ({ config }: { config: SmartContractVerificationConfig }) => {
const queryClient = useQueryClient();
const config = queryClient.getQueryData<SmartContractVerificationConfig>(getResourceKey('contract_verification_config'));
const versions = React.useMemo(() => ( const versions = React.useMemo(() => (
config?.zk_compiler_versions || [] config?.zk_compiler_versions || []
), [ config?.zk_compiler_versions ]); ), [ config?.zk_compiler_versions ]);
......
...@@ -17,8 +17,8 @@ const ContractVerificationFlattenSourceCode = ({ config }: { config: SmartContra ...@@ -17,8 +17,8 @@ const ContractVerificationFlattenSourceCode = ({ config }: { config: SmartContra
<ContractVerificationMethod title="Contract verification via Solidity (flattened source code)"> <ContractVerificationMethod title="Contract verification via Solidity (flattened source code)">
{ !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldName/> } { !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldName/> }
{ config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldIsYul/> } { config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldIsYul/> }
<ContractVerificationFieldCompiler/> <ContractVerificationFieldCompiler config={ config }/>
<ContractVerificationFieldEvmVersion/> <ContractVerificationFieldEvmVersion config={ config }/>
<ContractVerificationFieldOptimization/> <ContractVerificationFieldOptimization/>
<ContractVerificationFieldCode/> <ContractVerificationFieldCode/>
{ !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldAutodetectArgs/> } { !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldAutodetectArgs/> }
......
import React from 'react'; import React from 'react';
import type { SmartContractVerificationConfig } from 'types/client/contract';
import ContractVerificationMethod from '../ContractVerificationMethod'; import ContractVerificationMethod from '../ContractVerificationMethod';
import ContractVerificationFieldCompiler from '../fields/ContractVerificationFieldCompiler'; import ContractVerificationFieldCompiler from '../fields/ContractVerificationFieldCompiler';
import ContractVerificationFieldEvmVersion from '../fields/ContractVerificationFieldEvmVersion'; import ContractVerificationFieldEvmVersion from '../fields/ContractVerificationFieldEvmVersion';
...@@ -9,11 +11,11 @@ import ContractVerificationFieldSources from '../fields/ContractVerificationFiel ...@@ -9,11 +11,11 @@ import ContractVerificationFieldSources from '../fields/ContractVerificationFiel
const FILE_TYPES = [ '.sol' as const, '.yul' as const ]; const FILE_TYPES = [ '.sol' as const, '.yul' as const ];
const ContractVerificationMultiPartFile = () => { const ContractVerificationMultiPartFile = ({ config }: { config: SmartContractVerificationConfig }) => {
return ( return (
<ContractVerificationMethod title="Contract verification via Solidity (multi-part files)"> <ContractVerificationMethod title="Contract verification via Solidity (multi-part files)">
<ContractVerificationFieldCompiler/> <ContractVerificationFieldCompiler config={ config }/>
<ContractVerificationFieldEvmVersion/> <ContractVerificationFieldEvmVersion config={ config }/>
<ContractVerificationFieldOptimization/> <ContractVerificationFieldOptimization/>
<ContractVerificationFieldSources <ContractVerificationFieldSources
fileTypes={ FILE_TYPES } fileTypes={ FILE_TYPES }
......
...@@ -18,8 +18,8 @@ const ContractVerificationStandardInput = ({ config }: { config: SmartContractVe ...@@ -18,8 +18,8 @@ const ContractVerificationStandardInput = ({ config }: { config: SmartContractVe
return ( return (
<ContractVerificationMethod title="Contract verification via Solidity (standard JSON input) " disableScroll={ config.verification_options.length === 1 }> <ContractVerificationMethod title="Contract verification via Solidity (standard JSON input) " disableScroll={ config.verification_options.length === 1 }>
{ !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldName/> } { !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldName/> }
<ContractVerificationFieldCompiler/> <ContractVerificationFieldCompiler config={ config }/>
{ rollupFeature.isEnabled && rollupFeature.type === 'zkSync' && <ContractVerificationFieldZkCompiler/> } { rollupFeature.isEnabled && rollupFeature.type === 'zkSync' && <ContractVerificationFieldZkCompiler config={ config }/> }
<ContractVerificationFieldSources <ContractVerificationFieldSources
fileTypes={ FILE_TYPES } fileTypes={ FILE_TYPES }
title="Standard Input JSON" title="Standard Input JSON"
......
import React from 'react'; import React from 'react';
import type { FormFields } from '../types'; import type { FormFields } from '../types';
import type { SmartContractVerificationConfig } from 'types/client/contract';
import FormFieldText from 'ui/shared/forms/fields/FormFieldText'; import FormFieldText from 'ui/shared/forms/fields/FormFieldText';
...@@ -10,12 +11,12 @@ import ContractVerificationFieldCommit from '../fields/ContractVerificationField ...@@ -10,12 +11,12 @@ import ContractVerificationFieldCommit from '../fields/ContractVerificationField
import ContractVerificationFieldCompiler from '../fields/ContractVerificationFieldCompiler'; import ContractVerificationFieldCompiler from '../fields/ContractVerificationFieldCompiler';
import ContractVerificationFieldGitHubRepo from '../fields/ContractVerificationFieldGitHubRepo'; import ContractVerificationFieldGitHubRepo from '../fields/ContractVerificationFieldGitHubRepo';
const ContractVerificationStylusGitHubRepo = () => { const ContractVerificationStylusGitHubRepo = ({ config }: { config: SmartContractVerificationConfig }) => {
const [ latestCommitHash, setLatestCommitHash ] = React.useState<string | undefined>(undefined); const [ latestCommitHash, setLatestCommitHash ] = React.useState<string | undefined>(undefined);
return ( return (
<ContractVerificationMethod title="Contract verification via Stylus (GitHub repository) "> <ContractVerificationMethod title="Contract verification via Stylus (GitHub repository) ">
<ContractVerificationFieldCompiler isStylus/> <ContractVerificationFieldCompiler config={ config } isStylus/>
<ContractVerificationFieldGitHubRepo onCommitHashChange={ setLatestCommitHash }/> <ContractVerificationFieldGitHubRepo onCommitHashChange={ setLatestCommitHash }/>
<ContractVerificationFieldCommit latestCommitHash={ latestCommitHash }/> <ContractVerificationFieldCommit latestCommitHash={ latestCommitHash }/>
......
...@@ -13,8 +13,8 @@ const ContractVerificationVyperContract = ({ config }: { config: SmartContractVe ...@@ -13,8 +13,8 @@ const ContractVerificationVyperContract = ({ config }: { config: SmartContractVe
return ( return (
<ContractVerificationMethod title="Contract verification via Vyper (contract)"> <ContractVerificationMethod title="Contract verification via Vyper (contract)">
<ContractVerificationFieldName hint="The contract name is the name assigned to the verified contract in Blockscout."/> <ContractVerificationFieldName hint="The contract name is the name assigned to the verified contract in Blockscout."/>
<ContractVerificationFieldCompiler isVyper/> <ContractVerificationFieldCompiler config={ config } isVyper/>
{ config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldEvmVersion isVyper/> } { config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldEvmVersion isVyper config={ config }/> }
<ContractVerificationFieldCode isVyper/> <ContractVerificationFieldCode isVyper/>
{ !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldConstructorArgs/> } { !config?.is_rust_verifier_microservice_enabled && <ContractVerificationFieldConstructorArgs/> }
</ContractVerificationMethod> </ContractVerificationMethod>
......
import React from 'react'; import React from 'react';
import type { SmartContractVerificationConfig } from 'types/client/contract';
import { Link } from 'toolkit/chakra/link'; import { Link } from 'toolkit/chakra/link';
import ContractVerificationMethod from '../ContractVerificationMethod'; import ContractVerificationMethod from '../ContractVerificationMethod';
...@@ -10,7 +12,7 @@ import ContractVerificationFieldSources from '../fields/ContractVerificationFiel ...@@ -10,7 +12,7 @@ import ContractVerificationFieldSources from '../fields/ContractVerificationFiel
const MAIN_SOURCES_TYPES = [ '.vy' as const ]; const MAIN_SOURCES_TYPES = [ '.vy' as const ];
const INTERFACE_TYPES = [ '.vy' as const, '.json' as const ]; const INTERFACE_TYPES = [ '.vy' as const, '.json' as const ];
const ContractVerificationVyperMultiPartFile = () => { const ContractVerificationVyperMultiPartFile = ({ config }: { config: SmartContractVerificationConfig }) => {
const interfacesHint = ( const interfacesHint = (
<> <>
...@@ -22,8 +24,8 @@ const ContractVerificationVyperMultiPartFile = () => { ...@@ -22,8 +24,8 @@ const ContractVerificationVyperMultiPartFile = () => {
return ( return (
<ContractVerificationMethod title="Contract verification via Vyper (multi-part files)"> <ContractVerificationMethod title="Contract verification via Vyper (multi-part files)">
<ContractVerificationFieldCompiler isVyper/> <ContractVerificationFieldCompiler config={ config } isVyper/>
<ContractVerificationFieldEvmVersion isVyper/> <ContractVerificationFieldEvmVersion isVyper config={ config }/>
<ContractVerificationFieldSources <ContractVerificationFieldSources
name="sources" name="sources"
fileTypes={ MAIN_SOURCES_TYPES } fileTypes={ MAIN_SOURCES_TYPES }
......
import React from 'react'; import React from 'react';
import type { SmartContractVerificationConfig } from 'types/client/contract';
import ContractVerificationMethod from '../ContractVerificationMethod'; import ContractVerificationMethod from '../ContractVerificationMethod';
import ContractVerificationFieldCompiler from '../fields/ContractVerificationFieldCompiler'; import ContractVerificationFieldCompiler from '../fields/ContractVerificationFieldCompiler';
import ContractVerificationFieldSources from '../fields/ContractVerificationFieldSources'; import ContractVerificationFieldSources from '../fields/ContractVerificationFieldSources';
const FILE_TYPES = [ '.json' as const ]; const FILE_TYPES = [ '.json' as const ];
const ContractVerificationVyperStandardInput = () => { const ContractVerificationVyperStandardInput = ({ config }: { config: SmartContractVerificationConfig }) => {
return ( return (
<ContractVerificationMethod title="Contract verification via Vyper (standard JSON input) "> <ContractVerificationMethod title="Contract verification via Vyper (standard JSON input) ">
<ContractVerificationFieldCompiler isVyper/> <ContractVerificationFieldCompiler config={ config } isVyper/>
<ContractVerificationFieldSources <ContractVerificationFieldSources
fileTypes={ FILE_TYPES } fileTypes={ FILE_TYPES }
title="Standard Input JSON" title="Standard Input JSON"
......
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