From 030b510e931895025f77f83f55d55b36e8b2faf7 Mon Sep 17 00:00:00 2001 From: tom Date: Fri, 30 Aug 2024 14:16:47 +0200 Subject: [PATCH 1/8] support "alertStatus" field in address metadata payload --- lib/address/parseMetaPayload.ts | 1 + types/api/addressMetadata.ts | 3 +++ ui/address/details/AddressMetadataAlert.tsx | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/address/parseMetaPayload.ts b/lib/address/parseMetaPayload.ts index c02d2c4f20..f8d6fbc570 100644 --- a/lib/address/parseMetaPayload.ts +++ b/lib/address/parseMetaPayload.ts @@ -30,6 +30,7 @@ export default function parseMetaPayload(meta: AddressMetadataTag['meta']): Addr 'data', 'alertBgColor', 'alertTextColor', + 'alertStatus', ]; for (const stringField of stringFields) { diff --git a/types/api/addressMetadata.ts b/types/api/addressMetadata.ts index caabd8535a..6840a8235f 100644 --- a/types/api/addressMetadata.ts +++ b/types/api/addressMetadata.ts @@ -1,3 +1,5 @@ +import type { AlertStatus } from '@chakra-ui/react'; + export interface AddressMetadataInfo { addresses: Record; @@ -35,6 +37,7 @@ export interface AddressMetadataTagApi extends Omit data?: string; alertBgColor?: string; alertTextColor?: string; + alertStatus?: AlertStatus; } | null; } diff --git a/ui/address/details/AddressMetadataAlert.tsx b/ui/address/details/AddressMetadataAlert.tsx index 707ba804d4..10e024a94f 100644 --- a/ui/address/details/AddressMetadataAlert.tsx +++ b/ui/address/details/AddressMetadataAlert.tsx @@ -23,7 +23,7 @@ const AddressMetadataAlert = ({ tags }: Props) => { Date: Fri, 30 Aug 2024 18:43:25 +0200 Subject: [PATCH 2/8] add support of raw string inputs for json-like config ENVs --- configs/app/utils.ts | 19 +++++++++++++++-- deploy/scripts/download_assets.sh | 35 ++++++++++++++++++++++++------- docs/ENVS.md | 4 ++-- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/configs/app/utils.ts b/configs/app/utils.ts index 95541649f1..351595b229 100644 --- a/configs/app/utils.ts +++ b/configs/app/utils.ts @@ -39,10 +39,25 @@ export const getExternalAssetFilePath = (envName: string) => { export const buildExternalAssetFilePath = (name: string, value: string) => { try { const fileName = name.replace(/^NEXT_PUBLIC_/, '').replace(/_URL$/, '').toLowerCase(); - const url = new URL(value); - const fileExtension = url.pathname.match(regexp.FILE_EXTENSION)?.[1]; + + const fileExtension = getAssetFileExtension(value); + if (!fileExtension) { + throw new Error('Cannot get file path'); + } return `/assets/configs/${ fileName }.${ fileExtension }`; } catch (error) { return; } }; + +function getAssetFileExtension(value: string) { + try { + const url = new URL(value); + return url.pathname.match(regexp.FILE_EXTENSION)?.[1]; + } catch (error) { + try { + parseEnvJson(value); + return 'json'; + } catch (error) {} + } +} diff --git a/deploy/scripts/download_assets.sh b/deploy/scripts/download_assets.sh index 747b7269c9..d21e63482d 100755 --- a/deploy/scripts/download_assets.sh +++ b/deploy/scripts/download_assets.sh @@ -49,10 +49,14 @@ get_target_filename() { # Extract the extension from the filename local extension="${filename##*.}" else - # Remove query parameters from the URL and get the filename - local filename=$(basename "${url%%\?*}") - # Extract the extension from the filename - local extension="${filename##*.}" + if [[ "$url" == http* ]]; then + # Remove query parameters from the URL and get the filename + local filename=$(basename "${url%%\?*}") + # Extract the extension from the filename + local extension="${filename##*.}" + else + local extension="json" + fi fi # Convert the extension to lowercase @@ -80,16 +84,31 @@ download_and_save_asset() { # Copy the local file to the destination cp "${url#file://}" "$destination" else - # Download the asset using curl - curl -s -o "$destination" "$url" + # Check if the value is a URL + if [[ "$url" == http* ]]; then + # Download the asset using curl + curl -s -o "$destination" "$url" + else + # Convert single-quoted JSON-like content to valid JSON + json_content=$(echo "${!env_var}" | sed "s/'/\"/g") + + # Save the JSON content to a file + echo "$json_content" > "$destination" + fi + fi + + if [[ "$url" == file://* ]] || [[ "$url" == http* ]]; then + local source_name=$url + else + local source_name="raw input" fi # Check if the download was successful if [ $? -eq 0 ]; then - echo " [+] $env_var: Successfully saved file from $url to $destination." + echo " [+] $env_var: Successfully saved file from $source_name to $destination." return 0 else - echo " [-] $env_var: Failed to save file from $url." + echo " [-] $env_var: Failed to save file from $source_name." return 1 fi } diff --git a/docs/ENVS.md b/docs/ENVS.md index 6909cdc1c7..6ab67b7bb2 100644 --- a/docs/ENVS.md +++ b/docs/ENVS.md @@ -132,7 +132,7 @@ Please be aware that all environment variables prefixed with `NEXT_PUBLIC_` will | NEXT_PUBLIC_NETWORK_LOGO_DARK | `string` | Network logo for dark color mode; if not provided, **inverted** regular logo will be used instead | - | - | `https://placekitten.com/240/40` | v1.0.x+ | | NEXT_PUBLIC_NETWORK_ICON | `string` | Network icon; used as a replacement for regular network logo when nav bar is collapsed; if not provided, placeholder will be shown; *Note* the icon size should be at least 60px by 60px | - | - | `https://placekitten.com/60/60` | v1.0.x+ | | NEXT_PUBLIC_NETWORK_ICON_DARK | `string` | Network icon for dark color mode; if not provided, **inverted** regular icon will be used instead | - | - | `https://placekitten.com/60/60` | v1.0.x+ | -| NEXT_PUBLIC_FEATURED_NETWORKS | `string` | URL of configuration file (`.json` format only) which contains list of featured networks that will be shown in the network menu. See [below](#featured-network-configuration-properties) list of available properties for particular network | - | - | `https://example.com/featured_networks_config.json` | v1.0.x+ | +| NEXT_PUBLIC_FEATURED_NETWORKS | `string` | URL of configuration file (`.json` format only) or file content string representation. It contains list of featured networks that will be shown in the network menu. See [below](#featured-network-configuration-properties) list of available properties for particular network | - | - | `https://example.com/featured_networks_config.json` \| `[{'title':'Astar(EVM)','url':'https://astar.blockscout.com/','group':'Mainnets','icon':'https://example.com/astar.svg'}]` | v1.0.x+ | | NEXT_PUBLIC_OTHER_LINKS | `Array<{url: string; text: string}>` | List of links for the "Other" navigation menu | - | - | `[{'url':'https://blockscout.com','text':'Blockscout'}]` | v1.0.x+ | | NEXT_PUBLIC_NAVIGATION_HIDDEN_LINKS | `Array` | List of external links hidden in the navigation. Supported ids are `eth_rpc_api`, `rpc_api` | - | - | `['eth_rpc_api']` | v1.16.0+ | | NEXT_PUBLIC_NAVIGATION_HIGHLIGHTED_ROUTES | `Array` | List of menu item routes that should have a lightning label | - | - | `['/accounts']` | v1.31.0+ | @@ -155,7 +155,7 @@ Please be aware that all environment variables prefixed with `NEXT_PUBLIC_` will | Variable | Type| Description | Compulsoriness | Default value | Example value | Version | | --- | --- | --- | --- | --- | --- | --- | -| NEXT_PUBLIC_FOOTER_LINKS | `string` | URL of configuration file (`.json` format only) which contains list of link groups to be displayed in the footer. See [below](#footer-links-configuration-properties) list of available properties for particular group | - | - | `https://example.com/footer_links_config.json` | v1.1.1+ | +| NEXT_PUBLIC_FOOTER_LINKS | `string` | URL of configuration file (`.json` format only) or file content string representation. It contains list of link groups to be displayed in the footer. See [below](#footer-links-configuration-properties) list of available properties for particular group | - | - | `https://example.com/footer_links_config.json` \| `[{'title':'My chain','links':[{'text':'About','url':'https://example.com/about'},{'text':'Contacts','url':'https://example.com/contacts'}]}]` | v1.1.1+ | The app version shown in the footer is derived from build-time ENV variables `NEXT_PUBLIC_GIT_TAG` and `NEXT_PUBLIC_GIT_COMMIT_SHA` and cannot be overwritten at run-time. From 7f9e454718dca7e201487ecdb3f711babd1b3b50 Mon Sep 17 00:00:00 2001 From: tom Date: Fri, 30 Aug 2024 19:21:26 +0200 Subject: [PATCH 3/8] fix tests --- configs/app/utils.ts | 5 +---- ui/pages/Marketplace.pw.tsx | 4 ++-- ui/pages/MarketplaceApp.pw.tsx | 4 ++-- ui/pages/SearchResults.pw.tsx | 2 +- ui/snippets/searchBar/SearchBar.pw.tsx | 2 +- 5 files changed, 7 insertions(+), 10 deletions(-) diff --git a/configs/app/utils.ts b/configs/app/utils.ts index 351595b229..b188d14e8d 100644 --- a/configs/app/utils.ts +++ b/configs/app/utils.ts @@ -55,9 +55,6 @@ function getAssetFileExtension(value: string) { const url = new URL(value); return url.pathname.match(regexp.FILE_EXTENSION)?.[1]; } catch (error) { - try { - parseEnvJson(value); - return 'json'; - } catch (error) {} + return parseEnvJson(value) ? 'json' : undefined; } } diff --git a/ui/pages/Marketplace.pw.tsx b/ui/pages/Marketplace.pw.tsx index 49f046ace9..ab0b4d65f7 100644 --- a/ui/pages/Marketplace.pw.tsx +++ b/ui/pages/Marketplace.pw.tsx @@ -8,8 +8,8 @@ import { test, expect, devices } from 'playwright/lib'; import Marketplace from './Marketplace'; -const MARKETPLACE_CONFIG_URL = 'http://localhost/marketplace-config.json'; -const MARKETPLACE_SECURITY_REPORTS_URL = 'https://marketplace-security-reports.json'; +const MARKETPLACE_CONFIG_URL = 'http://localhost:4000/marketplace-config.json'; +const MARKETPLACE_SECURITY_REPORTS_URL = 'https://localhost:4000/marketplace-security-reports.json'; test.beforeEach(async({ mockConfigResponse, mockEnvs, mockAssetResponse, page }) => { await mockEnvs([ diff --git a/ui/pages/MarketplaceApp.pw.tsx b/ui/pages/MarketplaceApp.pw.tsx index e17d554f3d..ef89aa13ed 100644 --- a/ui/pages/MarketplaceApp.pw.tsx +++ b/ui/pages/MarketplaceApp.pw.tsx @@ -17,8 +17,8 @@ const hooksConfig = { }, }; -const MARKETPLACE_CONFIG_URL = 'https://marketplace-config.json'; -const MARKETPLACE_SECURITY_REPORTS_URL = 'https://marketplace-security-reports.json'; +const MARKETPLACE_CONFIG_URL = 'http://localhost:4000/marketplace-config.json'; +const MARKETPLACE_SECURITY_REPORTS_URL = 'http://localhost:4000/marketplace-security-reports.json'; const testFn: Parameters[1] = async({ render, mockConfigResponse, mockAssetResponse, mockEnvs, mockRpcResponse, page }) => { await mockEnvs([ diff --git a/ui/pages/SearchResults.pw.tsx b/ui/pages/SearchResults.pw.tsx index 55ebfc23ce..e469d9ee56 100644 --- a/ui/pages/SearchResults.pw.tsx +++ b/ui/pages/SearchResults.pw.tsx @@ -152,7 +152,7 @@ test('search by user op hash +@mobile', async({ render, mockApiResponse, mockEnv test.describe('with apps', () => { test('default view +@mobile', async({ render, mockApiResponse, mockConfigResponse, mockAssetResponse, mockEnvs }) => { - const MARKETPLACE_CONFIG_URL = 'https://marketplace-config.json'; + const MARKETPLACE_CONFIG_URL = 'https://localhost:4000/marketplace-config.json'; const hooksConfig = { router: { query: { q: 'o' }, diff --git a/ui/snippets/searchBar/SearchBar.pw.tsx b/ui/snippets/searchBar/SearchBar.pw.tsx index 6cf78d1eed..4189e113e5 100644 --- a/ui/snippets/searchBar/SearchBar.pw.tsx +++ b/ui/snippets/searchBar/SearchBar.pw.tsx @@ -196,7 +196,7 @@ test('recent keywords suggest +@mobile', async({ render, page }, { project }) => }); test.describe('with apps', () => { - const MARKETPLACE_CONFIG_URL = 'https://marketplace-config.json'; + const MARKETPLACE_CONFIG_URL = 'http://localhost:4000/marketplace-config.json'; test('default view +@mobile', async({ render, page, mockApiResponse, mockConfigResponse, mockAssetResponse, mockEnvs }) => { await mockEnvs([ From 08500d90dd474849b94d1b121d0a175358609932 Mon Sep 17 00:00:00 2001 From: tom Date: Tue, 3 Sep 2024 12:26:56 +0200 Subject: [PATCH 4/8] fix note metadata alert on mobile --- .../details/AddressMetadataAlert.pw.tsx | 3 +-- ui/address/details/AddressMetadataAlert.tsx | 11 ++++++----- ...tadataAlert.pw.tsx_default_base-view-1.png | Bin 4407 -> 4474 bytes ui/pages/Address.tsx | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ui/address/details/AddressMetadataAlert.pw.tsx b/ui/address/details/AddressMetadataAlert.pw.tsx index 22db404125..7fedde5059 100644 --- a/ui/address/details/AddressMetadataAlert.pw.tsx +++ b/ui/address/details/AddressMetadataAlert.pw.tsx @@ -1,4 +1,3 @@ -import { Box } from '@chakra-ui/react'; import React from 'react'; import * as metadataMock from 'mocks/metadata/address'; @@ -7,7 +6,7 @@ import { test, expect } from 'playwright/lib'; import AddressMetadataAlert from './AddressMetadataAlert'; test('base view', async({ render }) => { - const component = await render(); + const component = await render(); await expect(component).toHaveScreenshot(); }); diff --git a/ui/address/details/AddressMetadataAlert.tsx b/ui/address/details/AddressMetadataAlert.tsx index 10e024a94f..aced9dc091 100644 --- a/ui/address/details/AddressMetadataAlert.tsx +++ b/ui/address/details/AddressMetadataAlert.tsx @@ -1,13 +1,14 @@ -import { Alert } from '@chakra-ui/react'; +import { Alert, chakra } from '@chakra-ui/react'; import React from 'react'; import type { AddressMetadataTagFormatted } from 'types/client/addressMetadata'; interface Props { tags: Array | undefined; + className?: string; } -const AddressMetadataAlert = ({ tags }: Props) => { +const AddressMetadataAlert = ({ tags, className }: Props) => { const noteTag = tags?.find(({ tagType }) => tagType === 'note'); if (!noteTag) { return null; @@ -21,12 +22,12 @@ const AddressMetadataAlert = ({ tags }: Props) => { return ( { ); }; -export default React.memo(AddressMetadataAlert); +export default React.memo(chakra(AddressMetadataAlert)); diff --git a/ui/address/details/__screenshots__/AddressMetadataAlert.pw.tsx_default_base-view-1.png b/ui/address/details/__screenshots__/AddressMetadataAlert.pw.tsx_default_base-view-1.png index b77a94064dd527c1119dfc5c198056a3fe0ef477..68bf3dc7d066fa6070f4356a46f49e0bba009425 100644 GIT binary patch literal 4474 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 D%tBq+ diff --git a/ui/pages/Address.tsx b/ui/pages/Address.tsx index f834e3fee5..1163db5597 100644 --- a/ui/pages/Address.tsx +++ b/ui/pages/Address.tsx @@ -347,7 +347,7 @@ const AddressPageContent = () => { isLoading={ isLoading } /> { !addressMetadataQuery.isPending && - } + } { config.features.metasuites.isEnabled && } { /* should stay before tabs to scroll up with pagination */ } From 8d1994b8a62883942157cdb9c0b847ea8c4a916b Mon Sep 17 00:00:00 2001 From: tom Date: Wed, 4 Sep 2024 15:49:23 +0200 Subject: [PATCH 5/8] remove isMounted check for AddressDetails component --- ui/address/AddressDetails.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ui/address/AddressDetails.tsx b/ui/address/AddressDetails.tsx index a0e3bc93b9..d8c3f72f31 100644 --- a/ui/address/AddressDetails.tsx +++ b/ui/address/AddressDetails.tsx @@ -4,7 +4,6 @@ import React from 'react'; import config from 'configs/app'; import throwOnResourceLoadError from 'lib/errors/throwOnResourceLoadError'; -import useIsMounted from 'lib/hooks/useIsMounted'; import getQueryParamString from 'lib/router/getQueryParamString'; import AddressCounterItem from 'ui/address/details/AddressCounterItem'; import ServiceDegradationWarning from 'ui/shared/alerts/ServiceDegradationWarning'; @@ -63,8 +62,6 @@ const AddressDetails = ({ addressQuery, scrollRef }: Props) => { has_validated_blocks: false, }), [ addressHash ]); - const isMounted = useIsMounted(); - // error handling (except 404 codes) if (addressQuery.isError) { if (isCustomAppError(addressQuery.error)) { @@ -79,7 +76,7 @@ const AddressDetails = ({ addressQuery, scrollRef }: Props) => { const data = addressQuery.isError ? error404Data : addressQuery.data; - if (!data || !isMounted) { + if (!data) { return null; } From f2038ac2811f21e6e9bd30eeff2a21aadc9592b8 Mon Sep 17 00:00:00 2001 From: isstuev Date: Thu, 5 Sep 2024 12:10:50 +0200 Subject: [PATCH 6/8] fix address blocks validated --- ui/address/AddressDetails.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/address/AddressDetails.tsx b/ui/address/AddressDetails.tsx index a0e3bc93b9..7a2ce3f804 100644 --- a/ui/address/AddressDetails.tsx +++ b/ui/address/AddressDetails.tsx @@ -5,6 +5,8 @@ import React from 'react'; import config from 'configs/app'; import throwOnResourceLoadError from 'lib/errors/throwOnResourceLoadError'; import useIsMounted from 'lib/hooks/useIsMounted'; +import getNetworkValidationActionText from 'lib/networks/getNetworkValidationActionText'; +import getNetworkValidatorTitle from 'lib/networks/getNetworkValidatorTitle'; import getQueryParamString from 'lib/router/getQueryParamString'; import AddressCounterItem from 'ui/address/details/AddressCounterItem'; import ServiceDegradationWarning from 'ui/shared/alerts/ServiceDegradationWarning'; @@ -219,10 +221,10 @@ const AddressDetails = ({ addressQuery, scrollRef }: Props) => { { data.has_validated_blocks && ( <> - Blocks validated + { `Blocks ${ getNetworkValidationActionText() }` } { addressQuery.data ? ( From 06d1d604b652c341ea396e2b6adc490d3e93bf3a Mon Sep 17 00:00:00 2001 From: isstuev Date: Thu, 5 Sep 2024 12:11:16 +0200 Subject: [PATCH 7/8] fix arbitrum tx message info --- ui/tx/details/TxInfo.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/tx/details/TxInfo.tsx b/ui/tx/details/TxInfo.tsx index 386f57eb48..db2e14d08e 100644 --- a/ui/tx/details/TxInfo.tsx +++ b/ui/tx/details/TxInfo.tsx @@ -790,7 +790,7 @@ const TxInfo = ({ data, isLoading, socketStatus }: Props) => { <> - { data.arbitrum?.message_related_info && ( + { data.arbitrum?.contains_message && data.arbitrum?.message_related_info && ( <> Date: Fri, 6 Sep 2024 15:20:38 +0200 Subject: [PATCH 8/8] remove optimization fields for zkSync contract verification --- ...ault_verification-of-zkSync-contract-1.png | Bin 84539 -> 81391 bytes ...ontractVerificationFieldZkOptimization.tsx | 78 ------------------ .../ContractVerificationStandardInput.tsx | 2 - ui/contractVerification/types.ts | 2 - ui/contractVerification/utils.ts | 6 -- 5 files changed, 88 deletions(-) delete mode 100644 ui/contractVerification/fields/ContractVerificationFieldZkOptimization.tsx diff --git a/ui/contractVerification/__screenshots__/ContractVerificationForm.pw.tsx_default_verification-of-zkSync-contract-1.png b/ui/contractVerification/__screenshots__/ContractVerificationForm.pw.tsx_default_verification-of-zkSync-contract-1.png index 8cb52d3594f73de692b5706ca3ced48b7903a16a..45ebc4da4bb14c43144349cbb5e0fc349be56614 100644 GIT binary patch delta 13955 zcmcJ02UL^Gw{O&=9Q7bakBFeaQ7HlfN2-*7ih=} zBArkJNQZ*Lp7{CS3Vi^Z2*_8>e*yW2tRVYG7j zn3;I$S)}NFVx|}6<`*fX~L@v_xuPjH) z{RXGxE!GHi8=stKvwu)pRh257Cjt_ek|g2_4*hQ{fS=^!6qVaOhske>wEQ5UAu`-K zuhVZ}pvpcXh0%mGros8W%yE0xYD=#aklRITNp)-CNmmB@n0xh#^ z@-BjlW97bH&bbGygBasp?a;n7m((h25f;j~ntO^}?FCTWPF+fGR{vAAW;UXzzq=|ULWk|9 zGGFplwOfhsa0$jn$(G*i(Ckf7-IqFjYGhO+U`IqiWdtn>3`Lpbxq z*moa_pi@nh&1JY8|CO2%7qON6Ue^HuzMI4K=!w=w+?N9%*nJVvA z?ER`W*K*2dnRJi3jPf>*z;stev_-C>bkB~U9$LLUwT0K2xw=UlR;f%%u6(wCjx*Py zy(_a=veLfz+RN4|+mk1UMwZjzl&)F&&dw$%i|gKjkC)%tdYP@OmlZDU3`Xx=$YO@j zhBut36}&DZehLw(ayet{>-lWi%q1I|3U*F9nIZ z9_X1{7)Mpd*ZX)_XE#lbYu=GRq*6qlJ=Nydt1Qx6EG$SxAXsp@=&(~k7W@V!UsprV zoZB3Xc{5iSN2i^g+UZwpXPDYKZ~O=CY_IpT^266oB$W%UPq%$q|JP!U1 z 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 { - const [ isEnabled, setIsEnabled ] = React.useState(false); - const { formState, control } = useFormContext(); - - const error = 'optimization_mode' in formState.errors ? formState.errors.optimization_mode : undefined; - - const handleCheckboxChange = React.useCallback(() => { - setIsEnabled(prev => !prev); - }, []); - - const renderCheckboxControl = React.useCallback(({ field }: {field: ControllerRenderProps}) => ( - - - text="Optimization enabled" - field={ field } - onChange={ handleCheckboxChange } - isDisabled={ formState.isSubmitting } - /> - - ), [ formState.isSubmitting, handleCheckboxChange ]); - - const renderInputControl = React.useCallback(({ field }: {field: ControllerRenderProps}) => { - return ( - - ); - }, [ config.zk_optimization_modes, error, formState.isSubmitting ]); - - return ( - - - - { isEnabled && ( - - ) } - - - ); -}; - -export default React.memo(ContractVerificationFieldZkOptimization); diff --git a/ui/contractVerification/methods/ContractVerificationStandardInput.tsx b/ui/contractVerification/methods/ContractVerificationStandardInput.tsx index 4cca7f95e6..9f0e9b0974 100644 --- a/ui/contractVerification/methods/ContractVerificationStandardInput.tsx +++ b/ui/contractVerification/methods/ContractVerificationStandardInput.tsx @@ -10,7 +10,6 @@ import ContractVerificationFieldCompiler from '../fields/ContractVerificationFie import ContractVerificationFieldName from '../fields/ContractVerificationFieldName'; import ContractVerificationFieldSources from '../fields/ContractVerificationFieldSources'; import ContractVerificationFieldZkCompiler from '../fields/ContractVerificationFieldZkCompiler'; -import ContractVerificationFieldZkOptimization from '../fields/ContractVerificationFieldZkOptimization'; const FILE_TYPES = [ '.json' as const ]; const rollupFeature = config.features.rollup; @@ -27,7 +26,6 @@ const ContractVerificationStandardInput = ({ config }: { config: SmartContractVe hint="Upload the standard input JSON file created during contract compilation." required /> - { rollupFeature.isEnabled && rollupFeature.type === 'zkSync' && } { !config?.is_rust_verifier_microservice_enabled && } ); diff --git a/ui/contractVerification/types.ts b/ui/contractVerification/types.ts index 838457cafb..b526b3c830 100644 --- a/ui/contractVerification/types.ts +++ b/ui/contractVerification/types.ts @@ -54,8 +54,6 @@ export interface FormFieldsStandardInputZk { autodetect_constructor_args: boolean; constructor_args: string; license_type: LicenseOption | null; - is_optimization_enabled: boolean; - optimization_mode: string | undefined; } export interface FormFieldsSourcify { diff --git a/ui/contractVerification/utils.ts b/ui/contractVerification/utils.ts index 2c4a728fe0..a4e8b17190 100644 --- a/ui/contractVerification/utils.ts +++ b/ui/contractVerification/utils.ts @@ -250,12 +250,6 @@ export function prepareRequestBody(data: FormFields): FetchParams['body'] { // zkSync fields 'zk_compiler' in _data && _data.zk_compiler && body.set('zk_compiler_version', _data.zk_compiler.value); - if ('is_optimization_enabled' in _data) { - body.set('is_optimization_enabled', String(Boolean(_data.is_optimization_enabled))); - if (_data.is_optimization_enabled && 'optimization_mode' in _data && _data.optimization_mode) { - body.set('optimization_runs', _data.optimization_mode); - } - } return body; }