diff --git a/apps/circuit-compiler/.eslintrc b/apps/circuit-compiler/.eslintrc new file mode 100644 index 0000000000..2d85f9fa66 --- /dev/null +++ b/apps/circuit-compiler/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "../../.eslintrc.json", +} \ No newline at end of file diff --git a/apps/circuit-compiler/src/app/contexts/index.ts b/apps/circuit-compiler/src/app/contexts/index.ts index 45fe6d3aeb..8c84ae6b14 100644 --- a/apps/circuit-compiler/src/app/contexts/index.ts +++ b/apps/circuit-compiler/src/app/contexts/index.ts @@ -1,4 +1,4 @@ -import {createContext} from 'react' -import {ICircuitAppContext} from '../types' +import { createContext } from 'react' +import { ICircuitAppContext } from '../types' export const CircuitAppContext = createContext({} as ICircuitAppContext) diff --git a/apps/circuit-compiler/src/app/reducers/state.ts b/apps/circuit-compiler/src/app/reducers/state.ts index 6e1c21cd9a..e63b5e5a2a 100644 --- a/apps/circuit-compiler/src/app/reducers/state.ts +++ b/apps/circuit-compiler/src/app/reducers/state.ts @@ -1,4 +1,4 @@ -import {Actions, AppState} from '../types' +import { Actions, AppState } from '../types' import { compiler_list } from 'circom_wasm' export const appInitialState: AppState = { diff --git a/apps/circuit-compiler/src/app/services/circomPluginClient.ts b/apps/circuit-compiler/src/app/services/circomPluginClient.ts index 8ba5bb4672..44d69b9314 100644 --- a/apps/circuit-compiler/src/app/services/circomPluginClient.ts +++ b/apps/circuit-compiler/src/app/services/circomPluginClient.ts @@ -163,7 +163,7 @@ export class CircomPluginClient extends PluginClient { } else { this.lastCompiledFile = path const fileName = extractNameFromKey(path) - + this.lastCompiledCircuitPath = extractParentFromKey(path) + "/.bin/" + fileName.replace('circom', 'wasm') // @ts-ignore await this.call('fileManager', 'writeFile', this.lastCompiledCircuitPath, circuitProgram, { encoding: null }) @@ -179,7 +179,7 @@ export class CircomPluginClient extends PluginClient { this.internalEvents.emit('circuit_compiling_done', []) } circuitApi.log().map(log => { - log && this.call('terminal', 'log', { type: 'log', value: log }) + log && this.call('terminal', 'log', { type: 'log', value: log }) }) // @ts-ignore this.call('terminal', 'log', { type: 'typewritersuccess', value: 'Everything went okay' }) @@ -222,11 +222,11 @@ export class CircomPluginClient extends PluginClient { this.internalEvents.emit('circuit_generating_r1cs_done') const fileName = extractNameFromKey(path) const writePath = extractParentFromKey(path) + "/.bin/" + fileName.replace('circom', 'r1cs') - + // @ts-ignore await this.call('fileManager', 'writeFile', writePath, r1csProgram, true) r1csApi.log().map(log => { - log && this.call('terminal', 'log', { type: 'log', value: log }) + log && this.call('terminal', 'log', { type: 'log', value: log }) }) // @ts-ignore this.call('terminal', 'log', { type: 'typewritersuccess', value: 'Everything went okay' }) @@ -339,7 +339,7 @@ export class CircomPluginClient extends PluginClient { absFilePath = include.startsWith('circomlib') ? absFilePath.substring(1) : absFilePath if (!blackPath.includes(absFilePath)) { - if(!includeName.startsWith('circomlib')) { + if (!includeName.startsWith('circomlib')) { dependencyContent = dependencyContent.replace(`${includeName}`, `${absFilePath}`) return absFilePath } diff --git a/apps/circuit-compiler/src/app/types/index.ts b/apps/circuit-compiler/src/app/types/index.ts index fc78c3a237..64f3b3281f 100644 --- a/apps/circuit-compiler/src/app/types/index.ts +++ b/apps/circuit-compiler/src/app/types/index.ts @@ -1,5 +1,5 @@ import { compiler_list } from 'circom_wasm' -import {Dispatch} from 'react' +import { Dispatch } from 'react' import type { CircomPluginClient } from '../services/circomPluginClient' export type CompilerStatus = "compiling" | "generating" | "computing" | "idle" | "errored" | "warning" diff --git a/apps/debugger/.eslintrc b/apps/debugger/.eslintrc new file mode 100644 index 0000000000..2d85f9fa66 --- /dev/null +++ b/apps/debugger/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "../../.eslintrc.json", +} \ No newline at end of file diff --git a/apps/debugger/src/app/debugger.ts b/apps/debugger/src/app/debugger.ts index 008402467d..c2c138e7e6 100644 --- a/apps/debugger/src/app/debugger.ts +++ b/apps/debugger/src/app/debugger.ts @@ -1,13 +1,13 @@ import { PluginClient } from "@remixproject/plugin"; import { createClient } from "@remixproject/plugin-webview"; -import { IDebuggerApi, LineColumnLocation, +import { IDebuggerApi, LineColumnLocation, onBreakpointClearedListener, onBreakpointAddedListener, onEditorContentChanged, onEnvChangedListener, TransactionReceipt } from '@remix-ui/debugger-ui' import { DebuggerApiMixin } from '@remix-ui/debugger-ui' import { CompilerAbstract } from '@remix-project/remix-solidity' -export class DebuggerClientApi extends DebuggerApiMixin(PluginClient) { +export class DebuggerClientApi extends DebuggerApiMixin(PluginClient) { constructor () { - super() + super() createClient(this as any) this.initDebuggerApi() } diff --git a/apps/doc-gen/.eslintrc b/apps/doc-gen/.eslintrc new file mode 100644 index 0000000000..2d85f9fa66 --- /dev/null +++ b/apps/doc-gen/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "../../.eslintrc.json", +} \ No newline at end of file diff --git a/apps/doc-gen/src/app/docgen-client.ts b/apps/doc-gen/src/app/docgen-client.ts index ee06c3237f..c3801ecf81 100644 --- a/apps/doc-gen/src/app/docgen-client.ts +++ b/apps/doc-gen/src/app/docgen-client.ts @@ -17,7 +17,7 @@ export class DocGenClient extends PluginClient { public docs: string[] = [] private fileName: string = '' private contractPath: string = '' - + constructor() { super() this.eventEmitter = new EventEmitter() @@ -30,7 +30,7 @@ export class DocGenClient extends PluginClient { async setListeners() { this.currentTheme = await this.call('theme', 'currentTheme') - + this.on('theme', 'themeChanged', (theme: any) => { this.currentTheme = theme this.eventEmitter.emit('themeChanged', this.currentTheme) @@ -50,7 +50,7 @@ export class DocGenClient extends PluginClient { } const segmentedPathList = normalizeContractPath(fileName) this.fileName = segmentedPathList[segmentedPathList.length - 1] - this.contractPath = segmentedPathList[0] + this.contractPath = segmentedPathList[0] this.eventEmitter.emit('compilationFinished', this.build, this.fileName) }) } diff --git a/apps/doc-gen/src/app/docgen/common/properties.ts b/apps/doc-gen/src/app/docgen/common/properties.ts index 5366e8d7ef..f3e197953e 100644 --- a/apps/doc-gen/src/app/docgen/common/properties.ts +++ b/apps/doc-gen/src/app/docgen/common/properties.ts @@ -36,47 +36,47 @@ export function fullName ({ item, contract }: DocItemContext): string { export function signature ({ item }: DocItemContext): string | undefined { switch (item.nodeType) { - case 'ContractDefinition': - return undefined; - - case 'FunctionDefinition': { - const { kind, name } = item; - const params = item.parameters.parameters; - const returns = item.returnParameters.parameters; - const head = (kind === 'function' || kind === 'freeFunction') ? [kind, name].join(' ') : kind; - const res = [ - `${head}(${params.map(formatVariable).join(', ')})`, - item.visibility, - ]; - if (item.stateMutability !== 'nonpayable') { - res.push(item.stateMutability); - } - if (item.virtual) { - res.push('virtual'); - } - if (returns.length > 0) { - res.push(`returns (${returns.map(formatVariable).join(', ')})`); - } - return res.join(' '); + case 'ContractDefinition': + return undefined; + + case 'FunctionDefinition': { + const { kind, name } = item; + const params = item.parameters.parameters; + const returns = item.returnParameters.parameters; + const head = (kind === 'function' || kind === 'freeFunction') ? [kind, name].join(' ') : kind; + const res = [ + `${head}(${params.map(formatVariable).join(', ')})`, + item.visibility, + ]; + if (item.stateMutability !== 'nonpayable') { + res.push(item.stateMutability); } - - case 'EventDefinition': { - const params = item.parameters.parameters; - return `event ${item.name}(${params.map(formatVariable).join(', ')})`; + if (item.virtual) { + res.push('virtual'); } - - case 'ErrorDefinition': { - const params = item.parameters.parameters; - return `error ${item.name}(${params.map(formatVariable).join(', ')})`; + if (returns.length > 0) { + res.push(`returns (${returns.map(formatVariable).join(', ')})`); } + return res.join(' '); + } - case 'ModifierDefinition': { - const params = item.parameters.parameters; - return `modifier ${item.name}(${params.map(formatVariable).join(', ')})`; - } + case 'EventDefinition': { + const params = item.parameters.parameters; + return `event ${item.name}(${params.map(formatVariable).join(', ')})`; + } + + case 'ErrorDefinition': { + const params = item.parameters.parameters; + return `error ${item.name}(${params.map(formatVariable).join(', ')})`; + } + + case 'ModifierDefinition': { + const params = item.parameters.parameters; + return `modifier ${item.name}(${params.map(formatVariable).join(', ')})`; + } - case 'VariableDeclaration': - return formatVariable(item); + case 'VariableDeclaration': + return formatVariable(item); } } diff --git a/apps/doc-gen/src/app/docgen/templates.ts b/apps/doc-gen/src/app/docgen/templates.ts index b83d0ac77d..34ee88df38 100644 --- a/apps/doc-gen/src/app/docgen/templates.ts +++ b/apps/doc-gen/src/app/docgen/templates.ts @@ -3,7 +3,7 @@ import { mapKeys } from './utils/map-keys'; import { DocItemContext } from './site'; import * as defaultProperties from './common/properties'; -import * as themeHelpers from './themes/markdown/helpers' +import * as themeHelpers from './themes/markdown/helpers' const common = require('./themes/markdown/common.hbs'); const contract = require('./themes/markdown/contract.hbs'); @@ -45,7 +45,6 @@ export async function loadTemplates(defaultTheme: string, root: string, userTemp properties: { ...defaultProperties }, }; - // Add partials and helpers from all themes, prefixed with the theme name. for (const [themeName, theme] of Object.entries(themes)) { const addPrefix = (k: string) => `${themeName}/${k}`; @@ -86,7 +85,7 @@ async function readPartials() { } async function readHelpers(name: string) { - + const helpers: Record any> = {}; for (const name in themeHelpers) { @@ -94,7 +93,7 @@ async function readHelpers(name: string) { helpers[name] = themeHelpers[name]; } } - + return helpers; } diff --git a/apps/doc-gen/src/app/docgen/utils/memoized-getter.ts b/apps/doc-gen/src/app/docgen/utils/memoized-getter.ts index 1a2fef4ae5..d4814e1da2 100644 --- a/apps/doc-gen/src/app/docgen/utils/memoized-getter.ts +++ b/apps/doc-gen/src/app/docgen/utils/memoized-getter.ts @@ -6,17 +6,17 @@ export function defineGetterMemoized { +export const getEtherScanApi = (networkId: any) => { if (!(networkId in scanAPIurls)) { throw new Error("no known network to verify against") } @@ -26,7 +26,7 @@ export const getNetworkName = async (client: RemixClient) => { const network = await client.call("network", "detectNetwork") if (!network) { throw new Error("no known network to verify against") - } + } return { network: network.name!.toLowerCase(), networkId: network.id } } diff --git a/apps/etherscan/src/app/utils/verify.ts b/apps/etherscan/src/app/utils/verify.ts index 4dbc70f743..41b74c0e2e 100644 --- a/apps/etherscan/src/app/utils/verify.ts +++ b/apps/etherscan/src/app/utils/verify.ts @@ -23,7 +23,7 @@ export const verify = async ( compilationResultParam: CompilerAbstract, chainRef: number | string, isProxyContract: boolean, - expectedImplAddress: string, + expectedImplAddress: string, client: PluginClient, onVerifiedContract: (value: EtherScanReturn) => void, setResults: (value: string) => void @@ -47,7 +47,7 @@ export const verify = async ( etherscanApi = getEtherScanApi(networkChainId) } } - + try { const contractMetadata = getContractMetadata( // cast from the remix-plugin interface to the solidity one. Should be fixed when remix-plugin move to the remix-project repository @@ -61,7 +61,7 @@ export const verify = async ( message: "Please recompile contract" } } - + const contractMetadataParsed = JSON.parse(contractMetadata) const fileName = getContractFileName( @@ -146,9 +146,9 @@ export const verify = async ( title: result, }) const returnValue = { - message: result, - succeed: false, - isProxyContract + message: result, + succeed: false, + isProxyContract } resetAfter10Seconds(client, setResults) return returnValue @@ -184,7 +184,7 @@ export const getContractFileName = ( } return fileName } - + export const getContractMetadata = ( compilationResult: CompilationResult, contractName: string diff --git a/apps/learneth/.eslintrc b/apps/learneth/.eslintrc new file mode 100644 index 0000000000..2d85f9fa66 --- /dev/null +++ b/apps/learneth/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "../../.eslintrc.json", +} \ No newline at end of file diff --git a/apps/learneth/src/redux/hooks.ts b/apps/learneth/src/redux/hooks.ts index 256734f44f..ea60cb751a 100644 --- a/apps/learneth/src/redux/hooks.ts +++ b/apps/learneth/src/redux/hooks.ts @@ -1,5 +1,5 @@ -import {useDispatch, type TypedUseSelectorHook, useSelector} from 'react-redux' -import {type AppDispatch, type RootState} from './store' +import { useDispatch, type TypedUseSelectorHook, useSelector } from 'react-redux' +import { type AppDispatch, type RootState } from './store' export const useAppDispatch: () => AppDispatch = useDispatch export const useAppSelector: TypedUseSelectorHook = useSelector diff --git a/apps/learneth/src/redux/models/loading.ts b/apps/learneth/src/redux/models/loading.ts index 38e09ef7c2..9969fde351 100644 --- a/apps/learneth/src/redux/models/loading.ts +++ b/apps/learneth/src/redux/models/loading.ts @@ -1,11 +1,11 @@ -import {type ModelType} from '../store' +import { type ModelType } from '../store' const Model: ModelType = { namespace: 'loading', - state: {screen: true}, + state: { screen: true }, reducers: { - save(state, {payload}) { - return {...state, ...payload} + save(state, { payload }) { + return { ...state, ...payload } }, }, effects: {}, diff --git a/apps/learneth/src/redux/models/remixide.ts b/apps/learneth/src/redux/models/remixide.ts index 2dea0d96f4..01575201d9 100644 --- a/apps/learneth/src/redux/models/remixide.ts +++ b/apps/learneth/src/redux/models/remixide.ts @@ -1,7 +1,7 @@ -import {toast} from 'react-toastify' -import {type ModelType} from '../store' +import { toast } from 'react-toastify' +import { type ModelType } from '../store' import remixClient from '../../remix-client' -import {router} from '../../App' +import { router } from '../../App' function getFilePath(file: string): string { const name = file.split('/') @@ -17,12 +17,12 @@ const Model: ModelType = { // theme: '', }, reducers: { - save(state, {payload}) { - return {...state, ...payload} + save(state, { payload }) { + return { ...state, ...payload } }, }, effects: { - *connect(_, {put}) { + *connect(_, { put }) { toast.info('connecting to the REMIX IDE') yield put({ @@ -45,7 +45,7 @@ const Model: ModelType = { yield router.navigate('/home') }, - *displayFile({payload: step}, {select, put}) { + *displayFile({ payload: step }, { select, put }) { let content = '' let path = '' if (step.solidity?.file) { @@ -73,7 +73,7 @@ const Model: ModelType = { }, }) - const {detail, selectedId} = yield select((state) => state.workshop) + const { detail, selectedId } = yield select((state) => state.workshop) const workshop = detail[selectedId] console.log('loading ', step, workshop) @@ -87,7 +87,7 @@ const Model: ModelType = { yield remixClient.call('fileManager', 'switchFile', `${path}`) yield put({ type: 'remixide/save', - payload: {errorLoadingFile: false}, + payload: { errorLoadingFile: false }, }) toast.dismiss() } catch (error) { @@ -95,7 +95,7 @@ const Model: ModelType = { toast.error('File could not be loaded. Please try again.') yield put({ type: 'remixide/save', - payload: {errorLoadingFile: true}, + payload: { errorLoadingFile: true }, }) } yield put({ @@ -105,7 +105,7 @@ const Model: ModelType = { }, }) }, - *testStep({payload: step}, {select, put}) { + *testStep({ payload: step }, { select, put }) { yield put({ type: 'loading/save', payload: { @@ -116,9 +116,9 @@ const Model: ModelType = { try { yield put({ type: 'remixide/save', - payload: {success: false}, + payload: { success: false }, }) - const {detail, selectedId} = yield select((state) => state.workshop) + const { detail, selectedId } = yield select((state) => state.workshop) const workshop = detail[selectedId] @@ -141,7 +141,7 @@ const Model: ModelType = { if (!result) { yield put({ type: 'remixide/save', - payload: {errors: ['Compiler failed to test this file']}, + payload: { errors: ['Compiler failed to test this file']}, }) } else { const success = result.totalFailing === 0 @@ -149,7 +149,7 @@ const Model: ModelType = { if (success) { yield put({ type: 'remixide/save', - payload: {errors: [], success: true}, + payload: { errors: [], success: true }, }) } else { yield put({ @@ -164,7 +164,7 @@ const Model: ModelType = { console.log('TESTING ERROR', err) yield put({ type: 'remixide/save', - payload: {errors: [String(err)]}, + payload: { errors: [String(err)]}, }) } yield put({ @@ -174,7 +174,7 @@ const Model: ModelType = { }, }) }, - *showAnswer({payload: step}, {select, put}) { + *showAnswer({ payload: step }, { select, put }) { yield put({ type: 'loading/save', payload: { @@ -189,7 +189,7 @@ const Model: ModelType = { const content = step.answer.content let path = getFilePath(step.answer.file) - const {detail, selectedId} = yield select((state) => state.workshop) + const { detail, selectedId } = yield select((state) => state.workshop) const workshop = detail[selectedId] path = `.learneth/${workshop.name}/${step.name}/${path}` @@ -198,7 +198,7 @@ const Model: ModelType = { } catch (err) { yield put({ type: 'remixide/save', - payload: {errors: [String(err)]}, + payload: { errors: [String(err)]}, }) } @@ -210,7 +210,7 @@ const Model: ModelType = { }, }) }, - *testSolidityCompiler(_, {put, select}) { + *testSolidityCompiler(_, { put, select }) { try { yield remixClient.call('solidity', 'getCompilationResult') } catch (err) { diff --git a/apps/learneth/src/redux/models/workshop.ts b/apps/learneth/src/redux/models/workshop.ts index 8c975cc48c..d2ef96bd6a 100644 --- a/apps/learneth/src/redux/models/workshop.ts +++ b/apps/learneth/src/redux/models/workshop.ts @@ -1,10 +1,10 @@ import axios from 'axios' -import {toast} from 'react-toastify' +import { toast } from 'react-toastify' import groupBy from 'lodash/groupBy' import pick from 'lodash/pick' -import {type ModelType} from '../store' +import { type ModelType } from '../store' import remixClient from '../../remix-client' -import {router} from '../../App' +import { router } from '../../App' // const apiUrl = 'http://localhost:3001'; const apiUrl = 'https://static.220.14.12.49.clients.your-server.de:3000' @@ -17,12 +17,12 @@ const Model: ModelType = { selectedId: '', }, reducers: { - save(state, {payload}) { - return {...state, ...payload} + save(state, { payload }) { + return { ...state, ...payload } }, }, effects: { - *init(_, {put}) { + *init(_, { put }) { const cache = localStorage.getItem('workshop.state') if (cache) { @@ -41,7 +41,7 @@ const Model: ModelType = { }) } }, - *loadRepo({payload}, {put, select}) { + *loadRepo({ payload }, { put, select }) { toast.info(`loading ${payload.name}/${payload.branch}`) yield put({ @@ -51,18 +51,18 @@ const Model: ModelType = { }, }) - const {list, detail} = yield select((state) => state.workshop) + const { list, detail } = yield select((state) => state.workshop) const url = `${apiUrl}/clone/${encodeURIComponent(payload.name)}/${payload.branch}?${Math.random()}` console.log('loading ', url) - const {data} = yield axios.get(url) + const { data } = yield axios.get(url) const repoId = `${payload.name}-${payload.branch}` for (let i = 0; i < data.ids.length; i++) { const { steps, metadata: { - data: {steps: metadataSteps}, + data: { steps: metadataSteps }, }, } = data.entities[data.ids[i]] @@ -130,8 +130,8 @@ const Model: ModelType = { }) if (payload.id) { - const {detail, selectedId} = workshopState - const {ids, entities} = detail[selectedId] + const { detail, selectedId } = workshopState + const { ids, entities } = detail[selectedId] for (let i = 0; i < ids.length; i++) { const entity = entities[ids[i]] if (entity.metadata.data.id === payload.id || i + 1 === payload.id) { @@ -141,7 +141,7 @@ const Model: ModelType = { } } }, - *resetAll(_, {put}) { + *resetAll(_, { put }) { yield put({ type: 'workshop/save', payload: { diff --git a/apps/learneth/src/redux/store.ts b/apps/learneth/src/redux/store.ts index 5092828cc6..a39bde7b2b 100644 --- a/apps/learneth/src/redux/store.ts +++ b/apps/learneth/src/redux/store.ts @@ -1,6 +1,6 @@ -import {configureStore, createSlice, type PayloadAction, type Reducer} from '@reduxjs/toolkit' +import { configureStore, createSlice, type PayloadAction, type Reducer } from '@reduxjs/toolkit' import createSagaMiddleware from 'redux-saga' -import {call, put, takeEvery, delay, select, all, fork, type ForkEffect} from 'redux-saga/effects' +import { call, put, takeEvery, delay, select, all, fork, type ForkEffect } from 'redux-saga/effects' // @ts-expect-error const context = require.context('./models', false, /\.ts$/) @@ -39,7 +39,7 @@ function createReducer(model: ModelType): Reducer { } const rootReducer = models.reduce((prev: any, model: ModelType) => { - return {...prev, [model.namespace]: createReducer(model)} + return { ...prev, [model.namespace]: createReducer(model) } }, {}) function watchEffects(model: ModelType): ForkEffect { diff --git a/apps/learneth/src/remix-client.ts b/apps/learneth/src/remix-client.ts index 4d4ab9844f..8ee04dce2a 100644 --- a/apps/learneth/src/remix-client.ts +++ b/apps/learneth/src/remix-client.ts @@ -1,7 +1,7 @@ -import {PluginClient} from '@remixproject/plugin' -import {createClient} from '@remixproject/plugin-webview' -import {store} from './redux/store' -import {router} from './App' +import { PluginClient } from '@remixproject/plugin' +import { createClient } from '@remixproject/plugin-webview' +import { store } from './redux/store' +import { router } from './App' class RemixClient extends PluginClient { constructor() { diff --git a/apps/remix-ide/src/app/editor/editor.js b/apps/remix-ide/src/app/editor/editor.js index 99499f7690..92e0a637a9 100644 --- a/apps/remix-ide/src/app/editor/editor.js +++ b/apps/remix-ide/src/app/editor/editor.js @@ -54,7 +54,8 @@ class Editor extends Plugin { ts: 'typescript', move: 'move', circom: 'circom', - nr: 'rust' + nr: 'rust', + toml: 'toml' } this.activated = false diff --git a/apps/remix-ide/src/app/files/dgitProvider.ts b/apps/remix-ide/src/app/files/dgitProvider.ts index 5b7314f781..088b7f6d72 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.ts +++ b/apps/remix-ide/src/app/files/dgitProvider.ts @@ -571,7 +571,7 @@ class DGitProvider extends Plugin { const result = await this.call('isogit', 'clone', cmd) this.call('fs', 'openWindow', folder) return result - } catch (e) { + } catch (e){ this.call('notification', 'alert', { id: 'dgitAlert', message: 'Unexpected error while cloning the repository: \n' + e.toString(), @@ -708,9 +708,8 @@ class DGitProvider extends Plugin { this.call('terminal', 'log', { type: 'error', value: `Could not checkout submodule to ${result[0]}` - }) - } else { - this.call('terminal', 'logHtml', `Checked out submodule ${dir} to ${result[0]}`) + })} else { + this.call('terminal', 'logHtml',`Checked out submodule ${dir} to ${result[0]}`) } } diff --git a/apps/remix-ide/src/remixAppManager.js b/apps/remix-ide/src/remixAppManager.js index 0f49d86712..63a725eb2e 100644 --- a/apps/remix-ide/src/remixAppManager.js +++ b/apps/remix-ide/src/remixAppManager.js @@ -76,7 +76,8 @@ let requiredModules = [ // services + layout views + system views 'home', 'doc-viewer', 'doc-gen', - 'remix-templates' + 'remix-templates', + 'solhint' ] diff --git a/apps/solhint/.eslintrc b/apps/solhint/.eslintrc new file mode 100644 index 0000000000..f24184d929 --- /dev/null +++ b/apps/solhint/.eslintrc @@ -0,0 +1,18 @@ +{ + "extends": "../../.eslintrc.json", + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": { + "@nrwl/nx/enforce-module-boundaries": [ + "off" + ] + } + } + ] +} \ No newline at end of file diff --git a/apps/solhint/src/app/SolhintPluginClient.ts b/apps/solhint/src/app/SolhintPluginClient.ts index e386096114..25a7479192 100644 --- a/apps/solhint/src/app/SolhintPluginClient.ts +++ b/apps/solhint/src/app/SolhintPluginClient.ts @@ -1,6 +1,7 @@ import { PluginClient } from '@remixproject/plugin' import { createClient } from '@remixproject/plugin-webview' import EventEmitter from 'events' +// eslint-disable @nrwl/nx/enforce-module-boundaries import { processStr } from 'solhint' import { applyExtends } from 'solhint/lib/config/config-file' import bestPractises from 'solhint/lib/rules/best-practises' @@ -44,7 +45,7 @@ export class SolHint extends PluginClient { } async lintOnCompilation() { - if(!this.triggerLinter) return + if (!this.triggerLinter) return this.on('solidity', 'compilationFinished', async (fileName, source, languageVersion, data) => { const hints = await this.lint(fileName) console.log('after compile', { hints }) diff --git a/apps/solhint/src/index.d.ts b/apps/solhint/src/index.d.ts new file mode 100644 index 0000000000..c98dcafe0b --- /dev/null +++ b/apps/solhint/src/index.d.ts @@ -0,0 +1,5 @@ +declare module 'solhint' { + export function processStr (inputStr: any, config?: any, fileName?: string) + export function processFile (file: any, config: any) + export function processPath (path: any, config: any) +} \ No newline at end of file diff --git a/apps/solidity-compiler/.eslintrc b/apps/solidity-compiler/.eslintrc new file mode 100644 index 0000000000..f7a0ddac8e --- /dev/null +++ b/apps/solidity-compiler/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "../../.eslintrc.json" +} \ No newline at end of file diff --git a/apps/solidity-compiler/src/app/compiler.ts b/apps/solidity-compiler/src/app/compiler.ts index 9915d473b4..d86d5322cb 100644 --- a/apps/solidity-compiler/src/app/compiler.ts +++ b/apps/solidity-compiler/src/app/compiler.ts @@ -22,7 +22,7 @@ export class CompilerClientApi extends CompilerApiMixin(PluginClient) implements this.compileTabLogic = new CompileTabLogic(this, this.contentImport) this.compiler = this.compileTabLogic.compiler this.compileTabLogic.init() - this.initCompilerApi() + this.initCompilerApi() } getCompilerQueryParameters () { diff --git a/apps/vyper/src/app/utils/types.ts b/apps/vyper/src/app/utils/types.ts index fc7b3d56c5..928f30ed07 100644 --- a/apps/vyper/src/app/utils/types.ts +++ b/apps/vyper/src/app/utils/types.ts @@ -1,4 +1,4 @@ -import {CompilationResult, ABIDescription} from '@remixproject/plugin-api' +import { CompilationResult, ABIDescription } from '@remixproject/plugin-api' export interface VyperCompilationResult { status: 'success' @@ -18,7 +18,6 @@ export interface VyperCompilationError { message: string } - export type VyperCompilationResultType = { buildDependencies: any compilers: [ @@ -85,68 +84,68 @@ export type VyperCompilationResultType = { } export interface PackageManifest { - title: string; + title: string; description: string; - type: TypeEnum; - required: string[]; - version: string; - properties: PackageManifestProperties; + type: TypeEnum; + required: string[]; + version: string; + properties: PackageManifestProperties; definitions: Definitions; } export interface Definitions { - packageMeta: ByteString; - contractType: ByteString; - contractInstance: ContractInstance; - byteString: ByteString; - bytecodeObject: BytecodeObject; - linkReference: LinkReference; - linkValue: LinkValue; - identifier: ByteString; - contractInstanceName: ByteString; - deployment: Deployment; + packageMeta: ByteString; + contractType: ByteString; + contractInstance: ContractInstance; + byteString: ByteString; + bytecodeObject: BytecodeObject; + linkReference: LinkReference; + linkValue: LinkValue; + identifier: ByteString; + contractInstanceName: ByteString; + deployment: Deployment; packageContractInstanceName: ByteString; - compilerInformation: CompilerInformation; - address: Address; - transactionHash: Address; - blockHash: Address; - contentURI: ByteString; + compilerInformation: CompilerInformation; + address: Address; + transactionHash: Address; + blockHash: Address; + contentURI: ByteString; } export interface Address { - title: string; + title: string; description: string; - allOf: AllOf[]; + allOf: AllOf[]; } export interface AllOf { - ref?: string; + ref?: string; minLength?: number; maxLength?: number; } export interface ByteStringProperties { - contractName?: ByteString; + contractName?: ByteString; deploymentBytecode?: Meta; - runtimeBytecode?: Meta; - abi?: ByteString; - natspec?: ByteString; - compiler?: Meta; - authors?: ByteString; - license?: ByteString; - description?: ByteString; - keywords?: ByteString; - links?: Links; + runtimeBytecode?: Meta; + abi?: ByteString; + natspec?: ByteString; + compiler?: Meta; + authors?: ByteString; + license?: ByteString; + description?: ByteString; + keywords?: ByteString; + links?: Links; } export interface ByteString { - title: string; - description?: string; - type: TypeEnum; - pattern?: string; - format?: string; - items?: Items; - properties?: ByteStringProperties; + title: string; + description?: string; + type: TypeEnum; + pattern?: string; + format?: string; + items?: Items; + properties?: ByteStringProperties; patternProperties?: { [key: string]: Meta }; } @@ -155,29 +154,29 @@ export interface Meta { } export interface Links { - title: string; - descriptions: string; - type: TypeEnum; + title: string; + descriptions: string; + type: TypeEnum; additionalProperties: AdditionalProperties; } export interface AdditionalProperties { - type: TypeEnum; + type: TypeEnum; format: string; } export type TypeEnum = "string" | "array" | "object"; export interface Items { - ref?: string; + ref?: string; type?: TypeEnum; } export interface BytecodeObject { - title: string - type: TypeEnum + title: string + type: TypeEnum offsets: number[] - anyOf: BytecodeObjectAnyOf[] + anyOf: BytecodeObjectAnyOf[] properties: BytecodeObjectProperties bytecode: string linkReferences?: { offset?: any; length?: number; name?: string}[] @@ -188,56 +187,56 @@ export interface BytecodeObjectAnyOf { } export interface BytecodeObjectProperties { - bytecode: Meta; - linkReferences: Link; + bytecode: Meta; + linkReferences: Link; linkDependencies: Link; } export interface Link { - type: TypeEnum; + type: TypeEnum; items: Meta; } export interface CompilerInformation { - title: string; + title: string; description: string; - type: TypeEnum; - required: string[]; - properties: CompilerInformationProperties; + type: TypeEnum; + required: string[]; + properties: CompilerInformationProperties; } export interface CompilerInformationProperties { - name: Name; - version: Name; + name: Name; + version: Name; settings: Name; } export interface Name { description: string; - type: TypeEnum; + type: TypeEnum; } export interface ContractInstance { - title: string; + title: string; description: string; - type: TypeEnum; - required: string[]; - properties: ContractInstanceProperties; + type: TypeEnum; + required: string[]; + properties: ContractInstanceProperties; } export interface ContractInstanceProperties { - contractType: ByteString; - address: Meta; - transaction: Meta; - block: Meta; - runtimeBytecode: Meta; - compiler: Meta; + contractType: ByteString; + address: Meta; + transaction: Meta; + block: Meta; + runtimeBytecode: Meta; + compiler: Meta; linkDependencies: ByteString; } export interface Deployment { - title: string; - type: TypeEnum; + title: string; + type: TypeEnum; patternProperties: DeploymentPatternProperties; } @@ -246,36 +245,36 @@ export interface DeploymentPatternProperties { } export interface LinkReference { - title: string; + title: string; description: string; - type: TypeEnum; - required: string[]; - properties: LinkReferenceProperties; + type: TypeEnum; + required: string[]; + properties: LinkReferenceProperties; } export interface LinkReferenceProperties { offsets: Offsets; - length: Length; - name: Meta; + length: Length; + name: Meta; } export interface Length { - type: string; + type: string; minimum: number; } export interface Offsets { - type: TypeEnum; + type: TypeEnum; items: Length; } export interface LinkValue { - title: string; + title: string; description: string; - type: TypeEnum; - required: string[]; - properties: LinkValueProperties; - oneOf: OneOf[]; + type: TypeEnum; + required: string[]; + properties: LinkValueProperties; + oneOf: OneOf[]; } export interface OneOf { @@ -283,7 +282,7 @@ export interface OneOf { } export interface OneOfProperties { - type: TypeClass; + type: TypeClass; value: PurpleValue; } @@ -292,14 +291,14 @@ export interface TypeClass { } export interface PurpleValue { - ref?: string; + ref?: string; anyOf?: Meta[]; } export interface LinkValueProperties { offsets: Offsets; - type: Name; - value: FluffyValue; + type: Name; + value: FluffyValue; } export interface FluffyValue { @@ -307,19 +306,19 @@ export interface FluffyValue { } export interface PackageManifestProperties { - manifestVersion: ManifestVersion; - packageName: ByteString; - meta: Meta; - version: Version; - sources: Sources; - contractTypes: ByteString; - deployments: ByteString; + manifestVersion: ManifestVersion; + packageName: ByteString; + meta: Meta; + version: Version; + sources: Sources; + contractTypes: ByteString; + deployments: ByteString; buildDependencies: BuildDependencies; } export interface BuildDependencies { - title: string; - type: TypeEnum; + title: string; + type: TypeEnum; patternProperties: BuildDependenciesPatternProperties; } @@ -328,16 +327,16 @@ export interface BuildDependenciesPatternProperties { } export interface ManifestVersion { - type: TypeEnum; - title: string; + type: TypeEnum; + title: string; description: string; - default: string; - enum: string[]; + default: string; + enum: string[]; } export interface Sources { - title: string; - type: TypeEnum; + title: string; + type: TypeEnum; patternProperties: SourcesPatternProperties; } @@ -351,13 +350,13 @@ export interface Empty { export interface AnyOf { title?: string; - type?: TypeEnum; - ref?: string; + type?: TypeEnum; + ref?: string; } export interface Version { title: string; - type: TypeEnum; + type: TypeEnum; } export type CompileFormat = { @@ -448,7 +447,6 @@ deployments: { [contractName: string]: ContractInstanceObject } - } export type CompilerInformationObject = { @@ -496,45 +494,45 @@ export type ContractInstanceObject = { export type ASTSrc = { jumpCode: string; - length: number; + length: number; } export type Child = { - astType: string; - children: Child[]; + astType: string; + children: Child[]; classification: number; - colOffset: number; - endColOffset: number; - endLineno: number; - lineno: number; - name?: string; - src: ChildSrc; - docStr?: Child; + colOffset: number; + endColOffset: number; + endLineno: number; + lineno: number; + name?: string; + src: ChildSrc; + docStr?: Child; } export type ChildSrc = { jumpCode: string; - length: number; - start: number; + length: number; + start: number; } export type AST = { - astType: string; - children: Child[]; + astType: string; + children: Child[]; classification: number; - colOffset: number; - endColOffset: number; - endLineno: number; - lineno: number; - name: string; - src: ASTSrc; + colOffset: number; + endColOffset: number; + endLineno: number; + lineno: number; + name: string; + src: ASTSrc; } export type ABI = { - anonymous?: boolean; - inputs: any[]; - name?: string; - type: any + anonymous?: boolean; + inputs: any[]; + name?: string; + type: any stateMutability?: any; - outputs?: any[]; + outputs?: any[]; } diff --git a/apps/walletconnect/.eslintrc b/apps/walletconnect/.eslintrc new file mode 100644 index 0000000000..2d85f9fa66 --- /dev/null +++ b/apps/walletconnect/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "../../.eslintrc.json", +} \ No newline at end of file diff --git a/apps/walletconnect/src/services/WalletConnectRemixClient.ts b/apps/walletconnect/src/services/WalletConnectRemixClient.ts index d8e8656cc0..f23f057a6d 100644 --- a/apps/walletconnect/src/services/WalletConnectRemixClient.ts +++ b/apps/walletconnect/src/services/WalletConnectRemixClient.ts @@ -1,9 +1,9 @@ -import {PluginClient} from '@remixproject/plugin' -import {createClient} from '@remixproject/plugin-webview' +import { PluginClient } from '@remixproject/plugin' +import { createClient } from '@remixproject/plugin-webview' import { createWeb3Modal, defaultConfig } from '@web3modal/ethers5/react' import { constants } from '../utils/constants' import EventManager from 'events' -import {PROJECT_ID as projectId, METADATA as metadata} from './constant' +import { PROJECT_ID as projectId, METADATA as metadata } from './constant' import { Chain, RequestArguments } from '../types' export class WalletConnectRemixClient extends PluginClient { @@ -39,7 +39,7 @@ export class WalletConnectRemixClient extends PluginClient { metadata, rpcUrl: 'https://cloudflare-eth.com' }) - + this.web3modal = createWeb3Modal({ projectId, chains: constants.chains, metadata, ethersConfig }) this.ethersConfig = ethersConfig this.chains = constants.chains @@ -50,16 +50,16 @@ export class WalletConnectRemixClient extends PluginClient { subscribeToEvents() { this.web3modal.subscribeProvider(({ address, isConnected, chainId })=>{ - if(isConnected){ + if (isConnected){ if (address !== this.currentAccount) { this.currentAccount = address - this.emit('accountsChanged', [address]) + this.emit('accountsChanged', [address]) } if (this.currentChain !== chainId) { this.currentChain = chainId this.emit('chainChanged', chainId) } - }else{ + } else { this.emit('accountsChanged', []) this.currentAccount = '' this.emit('chainChanged', 0) @@ -106,7 +106,7 @@ export class WalletConnectRemixClient extends PluginClient { error, id: data.id }) - } + } } return resolve(response) }) @@ -114,16 +114,16 @@ export class WalletConnectRemixClient extends PluginClient { } else { try { const message = await provider.request(data) - return {jsonrpc: '2.0', result: message, id: data.id} + return { jsonrpc: '2.0', result: message, id: data.id } } catch (e) { - return {jsonrpc: '2.0', error: { message: e.message, code: -32603 }, id: data.id} + return { jsonrpc: '2.0', error: { message: e.message, code: -32603 }, id: data.id } } } } } else { const err = `Cannot make ${data.method} request. Remix client is not connected to walletconnect client` console.error(err) - return {jsonrpc: '2.0', error: { message: err, code: -32603 }, id: data.id} + return { jsonrpc: '2.0', error: { message: err, code: -32603 }, id: data.id } } } diff --git a/libs/ghaction-helper/src/artifacts-helper.ts b/libs/ghaction-helper/src/artifacts-helper.ts index 3cc02ff9b5..315de14e3e 100644 --- a/libs/ghaction-helper/src/artifacts-helper.ts +++ b/libs/ghaction-helper/src/artifacts-helper.ts @@ -13,7 +13,7 @@ export async function getArtifactsByContractName (contractIdentifier: string) { const artifact = await fs.readFile(path.join(global.remixContractArtifactsPath, artifactFile), 'utf-8') const artifactJSON: CompilationResult = JSON.parse(artifact) const contractFullPath = (Object.keys(artifactJSON.contracts!)).find((contractName) => artifactJSON.contracts![contractName] && artifactJSON.contracts![contractName][contractIdentifier]) - + contract = contractFullPath ? artifactJSON.contracts![contractFullPath!][contractIdentifier] : undefined if (contract) break } diff --git a/libs/ghaction-helper/src/ethers.ts b/libs/ghaction-helper/src/ethers.ts index d3941e6dd4..9be004426a 100644 --- a/libs/ghaction-helper/src/ethers.ts +++ b/libs/ghaction-helper/src/ethers.ts @@ -2,7 +2,7 @@ import { ethers } from 'ethers' import * as hhEtherMethods from './methods' -for(const method in hhEtherMethods) Object.defineProperty(ethers, method, { value: hhEtherMethods[method]}) +for (const method in hhEtherMethods) Object.defineProperty(ethers, method, { value: hhEtherMethods[method] }) export * from 'ethers' export { ethers } \ No newline at end of file diff --git a/libs/ghaction-helper/src/methods.ts b/libs/ghaction-helper/src/methods.ts index 9bfa470033..793d904db8 100644 --- a/libs/ghaction-helper/src/methods.ts +++ b/libs/ghaction-helper/src/methods.ts @@ -11,7 +11,7 @@ const providerConfig = { blockNumber: global.blockNumber || null } -const config = { defaultTransactionType: '0x0' } +const config = { defaultTransactionType: '0x0' } global.remixProvider = new Provider(providerConfig) global.remixProvider.init() global.web3Provider = new ethers.providers.Web3Provider(global.remixProvider) @@ -194,9 +194,9 @@ const getContractAt = async (contractNameOrABI: ethers.ContractInterface, addres //@ts-ignore const provider = web3Provider - if(typeof contractNameOrABI === 'string') { + if (typeof contractNameOrABI === 'string') { const result = await getArtifactsByContractName(contractNameOrABI) - + if (result) { return new ethers.Contract(address, result.abi, signer || provider.getSigner()) } else { diff --git a/libs/remix-analyzer/test/analysis/staticAnalysisCommon-test.ts b/libs/remix-analyzer/test/analysis/staticAnalysisCommon-test.ts index 4dd79d9689..596abee649 100644 --- a/libs/remix-analyzer/test/analysis/staticAnalysisCommon-test.ts +++ b/libs/remix-analyzer/test/analysis/staticAnalysisCommon-test.ts @@ -1,4 +1,4 @@ -import { default as test} from "tape" +import { default as test } from "tape" import * as common from '../../src/solidity-analyzer/modules/staticAnalysisCommon' const { localCall, thisLocalCall, libCall, externalDirect, superLocal, assignment, abiNamespaceCallNodes, inlineAssembly, unaryOperation, nowAst, blockTimestamp, stateVariableContractNode, @@ -6,7 +6,6 @@ const { localCall, thisLocalCall, libCall, externalDirect, superLocal, assignmen // eslint-disable-next-line @typescript-eslint/no-var-requires lowlevelCall, parameterFunction, parameterFunctionCall, inheritance, blockHashAccess, contractDefinition, funcDefForComplexParams } = require('./astBlocks') - // eslint-disable-next-line @typescript-eslint/no-var-requires const compiledContractObj = require('./compilationDetails/CompiledContractObj.json') function escapeRegExp (str) { @@ -89,7 +88,7 @@ test('staticAnalysisCommon.helpers.operator', function (t) { test('staticAnalysisCommon.helpers.nodeType', function (t) { t.plan(3) - const node = { nodeType: 'Identifier', name: 'now'} + const node = { nodeType: 'Identifier', name: 'now' } const node2 = { nodeType: 'FunctionCall', memberName: 'call' } t.ok(common.helpers.nodeType(node, common.nodeTypes.IDENTIFIER), 'should work for identifier') @@ -140,7 +139,7 @@ test('staticAnalysisCommon.helpers.expressionTypeDescription', function (t) { test('staticAnalysisCommon.getType', function (t) { t.plan(3) - const node = { "argumentTypes": null, + const node = { "argumentTypes": null, "id": 3, "name": "a", "nodeType": "Identifier", @@ -357,9 +356,9 @@ test('staticAnalysisCommon.isStateVariable', function (t) { test('staticAnalysisCommon.isConstantFunction', function (t) { t.plan(3) t.ok(common.isConstantFunction(functionDefinition), 'should be const func definition') - functionDefinition.stateMutability = 'view' + functionDefinition.stateMutability = 'view' t.ok(common.isConstantFunction(functionDefinition), 'should be const func definition') - functionDefinition.stateMutability = 'nonpayable' + functionDefinition.stateMutability = 'nonpayable' t.notOk(common.isConstantFunction(functionDefinition), 'should not be const func definition') }) diff --git a/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.4.24.ts b/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.4.24.ts index 305b53ae97..7c3273a0a8 100644 --- a/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.4.24.ts +++ b/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.4.24.ts @@ -46,7 +46,7 @@ test('setup', function (t: test.Test) { testFiles.forEach((fileName) => { const content: string = readFileSync(join(__dirname, 'test-contracts/' + folder, fileName), 'utf8') - // Latest AST is available under 'compileStandardWrapper' under solc for, 0.4.12 <= version < 0.5.0 + // Latest AST is available under 'compileStandardWrapper' under solc for, 0.4.12 <= version < 0.5.0 compilationResults[fileName] = JSON.parse(compiler.compile(compilerInput(content))) }) @@ -820,5 +820,5 @@ function runModuleOnFiles (Module: any, t: test.Test, cb: ((fname: string, repor t.comment('Error while executing Module: ' + JSON.stringify(report)) } cb(fileName, report) - }) + }) } diff --git a/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.5.0.ts b/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.5.0.ts index 18881e20ef..6957b9de48 100644 --- a/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.5.0.ts +++ b/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.5.0.ts @@ -53,9 +53,6 @@ test('setup', function (t) { }) }); - - - test('Integration test thisLocal module', function (t: test.Test) { t.plan(testFiles.length) const module: any = modules.thisLocal diff --git a/libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.4.24.ts b/libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.4.24.ts index 2a6091dc32..94f7c32636 100644 --- a/libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.4.24.ts +++ b/libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.4.24.ts @@ -29,11 +29,11 @@ test('staticAnalysisIssues.functionParameterPassingError', function (t) { const res: CompilationResult = compile('functionParameters.sol') const Module: any = checksEffectsInteraction const statRunner: StatRunner = new StatRunner() - + t.doesNotThrow(() => { - statRunner.runWithModuleList(res, [{ name: new Module().name, mod: new Module()}]) + statRunner.runWithModuleList(res, [{ name: new Module().name, mod: new Module() }]) }, 'Analysis should not throw') - const reports = statRunner.runWithModuleList(res, [{ name: new Module().name, mod: new Module()}]) + const reports = statRunner.runWithModuleList(res, [{ name: new Module().name, mod: new Module() }]) t.ok(!reports.some((mod: AnalysisReport) => mod.report.some((rep: AnalysisReportObj) => rep.warning.includes('INTERNAL ERROR')), 'Should not have internal errors')) }) diff --git a/libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.5.0.ts b/libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.5.0.ts index 43234e4168..212eb0114c 100644 --- a/libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.5.0.ts +++ b/libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.5.0.ts @@ -6,7 +6,7 @@ import { default as StatRunner } from '../../src/solidity-analyzer' import solc from 'solc'; import { CompilationResult, AnalysisReportObj, AnalysisReport } from '../../src/types' import { checksEffectsInteraction } from '../../src/solidity-analyzer/modules/' -const {compilerInput } = helpers.compiler +const { compilerInput } = helpers.compiler const folder: string = 'solidity-v0.5' let compiler diff --git a/libs/remix-astwalker/tests/resources/legacyAST.ts b/libs/remix-astwalker/tests/resources/legacyAST.ts index 6b842f95f0..d6399af1d6 100644 --- a/libs/remix-astwalker/tests/resources/legacyAST.ts +++ b/libs/remix-astwalker/tests/resources/legacyAST.ts @@ -1,4 +1,4 @@ -const node = { "legacyAST": { "children": [{ "attributes": { "literals": ["solidity", ">=", "0.5", ".0", "<", "0.6", ".0"] }, "id": 1, "name": "PragmaDirective", "src": "0:31:0" }, { "attributes": { "SourceUnit": 53, "absolutePath": "mortal.sol", "file": "mortal.sol", "scope": 26, "symbolAliases": [null], "unitAlias": "" }, "id": 2, "name": "ImportDirective", "src": "32:20:0" }, { "attributes": { "contractDependencies": [52], "contractKind": "contract", "documentation": null, "fullyImplemented": true, "linearizedBaseContracts": [25, 52], "name": "Greeter", "scope": 26 }, "children": [{ "attributes": { "arguments": null }, "children": [{ "attributes": { "contractScope": null, "name": "Mortal", "referencedDeclaration": 52, "type": "contract Mortal" }, "id": 3, "name": "UserDefinedTypeName", "src": "74:6:0" }], "id": 4, "name": "InheritanceSpecifier", "src": "74:6:0" }, { "attributes": { "constant": false, "name": "greeting", "scope": 25, "stateVariable": true, "storageLocation": "default", "type": "string", "value": null, "visibility": "internal" }, "children": [{ "attributes": { "name": "string", "type": "string" }, "id": 5, "name": "ElementaryTypeName", "src": "141:6:0" }], "id": 6, "name": "VariableDeclaration", "src": "141:15:0" }, { "attributes": { "documentation": null, "implemented": true, "isConstructor": true, "kind": "constructor", "modifiers": [null], "name": "", "scope": 25, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, "children": [{ "children": [{ "attributes": { "constant": false, "name": "_greeting", "scope": 16, "stateVariable": false, "storageLocation": "memory", "type": "string", "value": null, "visibility": "internal" }, "children": [{ "attributes": { "name": "string", "type": "string" }, "id": 7, "name": "ElementaryTypeName", "src": "225:6:0" }], "id": 8, "name": "VariableDeclaration", "src": "225:23:0" }], "id": 9, "name": "ParameterList", "src": "224:25:0" }, { "attributes": { "parameters": [null] }, "children": [], "id": 10, "name": "ParameterList", "src": "257:0:0" }, { "children": [{ "children": [{ "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "operator": "=", "type": "string storage ref" }, "children": [{ "attributes": { "argumentTypes": null, "overloadedDeclarations": [null], "referencedDeclaration": 6, "type": "string storage ref", "value": "greeting" }, "id": 11, "name": "Identifier", "src": "267:8:0" }, { "attributes": { "argumentTypes": null, "overloadedDeclarations": [null], "referencedDeclaration": 8, "type": "string memory", "value": "_greeting" }, "id": 12, "name": "Identifier", "src": "278:9:0" }], "id": 13, "name": "Assignment", "src": "267:20:0" }], "id": 14, "name": "ExpressionStatement", "src": "267:20:0" }], "id": 15, "name": "Block", "src": "257:37:0" }], "id": 16, "name": "FunctionDefinition", "src": "213:81:0" }, { "attributes": { "documentation": null, "implemented": true, "isConstructor": false, "kind": "function", "modifiers": [null], "name": "greet", "scope": 25, "stateMutability": "view", "superFunction": null, "visibility": "public" }, "children": [{ "attributes": { "parameters": [null] }, "children": [], "id": 17, "name": "ParameterList", "src": "338:2:0" }, { "children": [{ "attributes": { "constant": false, "name": "", "scope": 24, "stateVariable": false, "storageLocation": "memory", "type": "string", "value": null, "visibility": "internal" }, "children": [{ "attributes": { "name": "string", "type": "string" }, "id": 18, "name": "ElementaryTypeName", "src": "362:6:0" }], "id": 19, "name": "VariableDeclaration", "src": "362:13:0" }], "id": 20, "name": "ParameterList", "src": "361:15:0" }, { "children": [{ "attributes": { "functionReturnParameters": 20 }, "children": [{ "attributes": { "argumentTypes": null, "overloadedDeclarations": [null], "referencedDeclaration": 6, "type": "string storage ref", "value": "greeting" }, "id": 21, "name": "Identifier", "src": "394:8:0" }], "id": 22, "name": "Return", "src": "387:15:0" }], "id": 23, "name": "Block", "src": "377:32:0" }], "id": 24, "name": "FunctionDefinition", "src": "324:85:0" }], "id": 25, "name": "ContractDefinition", "src": "54:357:0" }], "name": "SourceUnit", "attributes": { "absolutePath": "greeter.sol", "exportedSymbols": { "Greeter": [25] } }, "id": 26, "src": "0:412:0" } } +const node = { "legacyAST": { "children": [{ "attributes": { "literals": ["solidity", ">=", "0.5", ".0", "<", "0.6", ".0"]}, "id": 1, "name": "PragmaDirective", "src": "0:31:0" }, { "attributes": { "SourceUnit": 53, "absolutePath": "mortal.sol", "file": "mortal.sol", "scope": 26, "symbolAliases": [null], "unitAlias": "" }, "id": 2, "name": "ImportDirective", "src": "32:20:0" }, { "attributes": { "contractDependencies": [52], "contractKind": "contract", "documentation": null, "fullyImplemented": true, "linearizedBaseContracts": [25, 52], "name": "Greeter", "scope": 26 }, "children": [{ "attributes": { "arguments": null }, "children": [{ "attributes": { "contractScope": null, "name": "Mortal", "referencedDeclaration": 52, "type": "contract Mortal" }, "id": 3, "name": "UserDefinedTypeName", "src": "74:6:0" }], "id": 4, "name": "InheritanceSpecifier", "src": "74:6:0" }, { "attributes": { "constant": false, "name": "greeting", "scope": 25, "stateVariable": true, "storageLocation": "default", "type": "string", "value": null, "visibility": "internal" }, "children": [{ "attributes": { "name": "string", "type": "string" }, "id": 5, "name": "ElementaryTypeName", "src": "141:6:0" }], "id": 6, "name": "VariableDeclaration", "src": "141:15:0" }, { "attributes": { "documentation": null, "implemented": true, "isConstructor": true, "kind": "constructor", "modifiers": [null], "name": "", "scope": 25, "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, "children": [{ "children": [{ "attributes": { "constant": false, "name": "_greeting", "scope": 16, "stateVariable": false, "storageLocation": "memory", "type": "string", "value": null, "visibility": "internal" }, "children": [{ "attributes": { "name": "string", "type": "string" }, "id": 7, "name": "ElementaryTypeName", "src": "225:6:0" }], "id": 8, "name": "VariableDeclaration", "src": "225:23:0" }], "id": 9, "name": "ParameterList", "src": "224:25:0" }, { "attributes": { "parameters": [null]}, "children": [], "id": 10, "name": "ParameterList", "src": "257:0:0" }, { "children": [{ "children": [{ "attributes": { "argumentTypes": null, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "operator": "=", "type": "string storage ref" }, "children": [{ "attributes": { "argumentTypes": null, "overloadedDeclarations": [null], "referencedDeclaration": 6, "type": "string storage ref", "value": "greeting" }, "id": 11, "name": "Identifier", "src": "267:8:0" }, { "attributes": { "argumentTypes": null, "overloadedDeclarations": [null], "referencedDeclaration": 8, "type": "string memory", "value": "_greeting" }, "id": 12, "name": "Identifier", "src": "278:9:0" }], "id": 13, "name": "Assignment", "src": "267:20:0" }], "id": 14, "name": "ExpressionStatement", "src": "267:20:0" }], "id": 15, "name": "Block", "src": "257:37:0" }], "id": 16, "name": "FunctionDefinition", "src": "213:81:0" }, { "attributes": { "documentation": null, "implemented": true, "isConstructor": false, "kind": "function", "modifiers": [null], "name": "greet", "scope": 25, "stateMutability": "view", "superFunction": null, "visibility": "public" }, "children": [{ "attributes": { "parameters": [null]}, "children": [], "id": 17, "name": "ParameterList", "src": "338:2:0" }, { "children": [{ "attributes": { "constant": false, "name": "", "scope": 24, "stateVariable": false, "storageLocation": "memory", "type": "string", "value": null, "visibility": "internal" }, "children": [{ "attributes": { "name": "string", "type": "string" }, "id": 18, "name": "ElementaryTypeName", "src": "362:6:0" }], "id": 19, "name": "VariableDeclaration", "src": "362:13:0" }], "id": 20, "name": "ParameterList", "src": "361:15:0" }, { "children": [{ "attributes": { "functionReturnParameters": 20 }, "children": [{ "attributes": { "argumentTypes": null, "overloadedDeclarations": [null], "referencedDeclaration": 6, "type": "string storage ref", "value": "greeting" }, "id": 21, "name": "Identifier", "src": "394:8:0" }], "id": 22, "name": "Return", "src": "387:15:0" }], "id": 23, "name": "Block", "src": "377:32:0" }], "id": 24, "name": "FunctionDefinition", "src": "324:85:0" }], "id": 25, "name": "ContractDefinition", "src": "54:357:0" }], "name": "SourceUnit", "attributes": { "absolutePath": "greeter.sol", "exportedSymbols": { "Greeter": [25]} }, "id": 26, "src": "0:412:0" } } node['source'] = `contract test { int x; diff --git a/libs/remix-astwalker/tests/resources/newAST.ts b/libs/remix-astwalker/tests/resources/newAST.ts index cda95ae756..bd9a146095 100644 --- a/libs/remix-astwalker/tests/resources/newAST.ts +++ b/libs/remix-astwalker/tests/resources/newAST.ts @@ -291,7 +291,6 @@ const node: Node = { } } - node.source = `contract test { int x; diff --git a/libs/remix-core-plugin/src/lib/compiler-artefacts.ts b/libs/remix-core-plugin/src/lib/compiler-artefacts.ts index 698b03c0d3..d008795aec 100644 --- a/libs/remix-core-plugin/src/lib/compiler-artefacts.ts +++ b/libs/remix-core-plugin/src/lib/compiler-artefacts.ts @@ -78,9 +78,9 @@ export class CompilerArtefacts extends Plugin { saveCompilationPerFileResult(file, source, languageVersion, data) }) } - + /** - * Get artefacts for last compiled contract + * Get artefacts for last compiled contract * * @returns last compiled contract compiler abstract */ getLastCompilationResult () { @@ -120,14 +120,14 @@ export class CompilerArtefacts extends Plugin { /** * Get a particular contract output/artefacts from a compiler output of a Solidity file compilation - * @param compilerOutput compiler output + * @param compilerOutput compiler output * @param contractName contract name * @returns arefacts object, with fully qualified name (e.g; contracts/1_Storage.sol:Storage) as key */ _getAllContractArtefactsfromOutput (compilerOutput, contractName) { const contractArtefacts = {} for (const filename in compilerOutput) { - if(Object.keys(compilerOutput[filename]).includes(contractName)) contractArtefacts[filename + ':' + contractName] = compilerOutput[filename][contractName] + if (Object.keys(compilerOutput[filename]).includes(contractName)) contractArtefacts[filename + ':' + contractName] = compilerOutput[filename][contractName] } return contractArtefacts } @@ -141,10 +141,10 @@ export class CompilerArtefacts extends Plugin { */ async _populateAllContractArtefactsFromFE (path, contractName, contractArtefacts) { const dirList = await this.call('fileManager', 'dirList', path) - if(dirList && dirList.length) { + if (dirList && dirList.length) { for (const dirPath of dirList) { // check if directory contains an 'artifacts' folder and a 'build-info' folder inside 'artifacts' - if(dirPath === path + '/artifacts' && await this.call('fileManager', 'exists', dirPath + '/build-info')) { + if (dirPath === path + '/artifacts' && await this.call('fileManager', 'exists', dirPath + '/build-info')) { const buildFileList = await this.call('fileManager', 'fileList', dirPath + '/build-info') // process each build-info file to populate the artefacts for contractName for (const buildFile of buildFileList) { @@ -156,13 +156,13 @@ export class CompilerArtefacts extends Plugin { Object.assign(contractArtefacts, artefacts) } } else await this._populateAllContractArtefactsFromFE (dirPath, contractName, contractArtefacts) - } + } } else return } /** * Get artefacts for a contract (called by script-runner) - * @param name contract name or fully qualified name i.e. : e.g: contracts/1_Storage.sol:Storage + * @param name contract name or fully qualified name i.e. : e.g: contracts/1_Storage.sol:Storage * @returns artefacts for the contract */ async getArtefactsByContractName (name) { @@ -173,12 +173,12 @@ export class CompilerArtefacts extends Plugin { const nameArr = fullyQualifiedName.split(':') const filename = nameArr[0] const contract = nameArr[1] - if(Object.keys(contractsDataByFilename).includes(filename) && contractsDataByFilename[filename][contract]) + if (Object.keys(contractsDataByFilename).includes(filename) && contractsDataByFilename[filename][contract]) return contractsDataByFilename[filename][contract] else { const allContractsData = {} await this._populateAllContractArtefactsFromFE ('contracts', contract, allContractsData) - if(allContractsData[fullyQualifiedName]) return { fullyQualifiedName, artefact: allContractsData[fullyQualifiedName]} + if (allContractsData[fullyQualifiedName]) return { fullyQualifiedName, artefact: allContractsData[fullyQualifiedName] } else throw new Error(`Could not find artifacts for ${fullyQualifiedName}. Compile contract to generate artifacts.`) } } else { diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index 649044250e..54f99a2984 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -44,7 +44,7 @@ export class CompilerImports extends Plugin { return {} } }) - + } onActivation(): void { @@ -155,7 +155,7 @@ export class CompilerImports extends Plugin { if (targetPath && this.currentRequest) { const canCall = await this.askUserPermission('resolveAndSave', 'This action will update the path ' + targetPath) if (!canCall) throw new Error('No permission to update ' + targetPath) - } + } const provider = await this.call('fileManager', 'getProviderOf', url) if (provider) { if (provider.type === 'localhost' && !provider.isConnected()) { diff --git a/libs/remix-core-plugin/src/lib/compiler-fetch-and-compile.ts b/libs/remix-core-plugin/src/lib/compiler-fetch-and-compile.ts index da73f7af52..fd9e738623 100644 --- a/libs/remix-core-plugin/src/lib/compiler-fetch-and-compile.ts +++ b/libs/remix-core-plugin/src/lib/compiler-fetch-and-compile.ts @@ -155,7 +155,7 @@ export class FetchAndCompile extends Plugin { this.call('notification', 'toast', e.message) setTimeout(_ => this.emit('notFound', contractAddress), 0) // plugin framework returns a time out error although it actually didn't find the source... this.unresolvedAddresses.push(contractAddress) - return localCompilation() + return localCompilation() } } @@ -176,7 +176,7 @@ export class FetchAndCompile extends Plugin { } } const { settings, compilationTargets } = data - + try { setTimeout(_ => this.emit('compiling', settings), 0) const compData = await compile( diff --git a/libs/remix-core-plugin/src/lib/compiler-metadata.ts b/libs/remix-core-plugin/src/lib/compiler-metadata.ts index b45daeb5f0..10fdf7a06a 100644 --- a/libs/remix-core-plugin/src/lib/compiler-metadata.ts +++ b/libs/remix-core-plugin/src/lib/compiler-metadata.ts @@ -78,19 +78,19 @@ export class CompilerMetadata extends Plugin { solcLongVersion, input }) - const id = createHash('md5').update(Buffer.from(json)).digest().toString('hex') - const buildFilename = this.joinPath(path, this.innerPath, 'build-info/' + id + '.json') + const id = createHash('md5').update(Buffer.from(json)).digest().toString('hex') + const buildFilename = this.joinPath(path, this.innerPath, 'build-info/' + id + '.json') // If there are no file in buildInfoNames,it means compilation is running first time after loading Remix if (!this.buildInfoNames[filePath]) { // Check the existing build-info and delete all the previous build files for compiled file await this.removeStoredBuildInfo(input, path, filePath) this.buildInfoNames[filePath] = buildFilename - const buildData = {id, _format: format, solcVersion, solcLongVersion, input, output} + const buildData = { id, _format: format, solcVersion, solcLongVersion, input, output } await this.call('fileManager', 'writeFile', buildFilename, JSON.stringify(buildData, null, '\t')) } else if (this.buildInfoNames[filePath] && this.buildInfoNames[filePath] !== buildFilename) { await this.call('fileManager', 'remove', this.buildInfoNames[filePath]) this.buildInfoNames[filePath] = buildFilename - const buildData = {id, _format: format, solcVersion, solcLongVersion, input, output} + const buildData = { id, _format: format, solcVersion, solcLongVersion, input, output } await this.call('fileManager', 'writeFile', buildFilename, JSON.stringify(buildData, null, '\t')) } } @@ -136,7 +136,7 @@ export class CompilerMetadata extends Plugin { }, abi: contract.object.abi } - await this.call('fileManager', 'writeFile', fileName, JSON.stringify(data, null, '\t')) + await this.call('fileManager', 'writeFile', fileName, JSON.stringify(data, null, '\t')) this.emit('artefactsUpdated', fileName, contract) } diff --git a/libs/remix-core-plugin/src/lib/constants/uups.ts b/libs/remix-core-plugin/src/lib/constants/uups.ts index 2b54aaa86a..52689b7fbe 100644 --- a/libs/remix-core-plugin/src/lib/constants/uups.ts +++ b/libs/remix-core-plugin/src/lib/constants/uups.ts @@ -140,7 +140,6 @@ export const UUPSupgradeAbi = { "type": "function" } - export const UUPSupgradeToAndCallAbi = { "inputs": [ { diff --git a/libs/remix-core-plugin/src/lib/gist-handler.ts b/libs/remix-core-plugin/src/lib/gist-handler.ts index 83c932d4c6..7d71742552 100644 --- a/libs/remix-core-plugin/src/lib/gist-handler.ts +++ b/libs/remix-core-plugin/src/lib/gist-handler.ts @@ -117,7 +117,7 @@ export class GistHandler extends Plugin { const gistIdWorkspace = 'gist ' + gistId const workspaces = await this.call('filePanel', 'getWorkspaces') const found = workspaces.find((workspace) => workspace.name === gistIdWorkspace) - if (found) { + if (found) { await this.call('notification', 'alert', { id: 'gistAlert', message: `workspace "${gistIdWorkspace}" already exists`, diff --git a/libs/remix-core-plugin/src/lib/openzeppelin-proxy.ts b/libs/remix-core-plugin/src/lib/openzeppelin-proxy.ts index 661ead7a6f..5f16219aa8 100644 --- a/libs/remix-core-plugin/src/lib/openzeppelin-proxy.ts +++ b/libs/remix-core-plugin/src/lib/openzeppelin-proxy.ts @@ -88,7 +88,7 @@ export class OpenZeppelinProxy extends Plugin { } async deployUUPSProxy(implAddress: string, _data: string, implementationContractObject): Promise { - + const args = [implAddress, _data] const constructorData = await this.blockchain.getEncodedParams(args, UUPSfunAbi) const proxyName = 'ERC1967Proxy' @@ -109,7 +109,7 @@ export class OpenZeppelinProxy extends Plugin { data.dataHex = UUPSBytecode + constructorData.replace('0x', '') data.funAbi = UUPSfunAbi this.call('terminal', 'logHtml', `Deploying ERC1967 < 5.0.0 as proxy...`) - }else{ + } else { this.call('terminal', 'logHtml', `Deploying ERC1967 >= 5.0.0 as proxy...`) } // re-use implementation contract's ABI for UI display in udapp and change name to proxy name. diff --git a/libs/remix-debug/src/Ethdebugger.ts b/libs/remix-debug/src/Ethdebugger.ts index f4e2d66ae8..a22b29313c 100644 --- a/libs/remix-debug/src/Ethdebugger.ts +++ b/libs/remix-debug/src/Ethdebugger.ts @@ -44,10 +44,10 @@ export class Ethdebugger { this.event = new EventManager() this.traceManager = new TraceManager({ web3: this.web3 }) this.codeManager = new CodeManager(this.traceManager) - this.solidityProxy = new SolidityProxy({ - getCurrentCalledAddressAt: this.traceManager.getCurrentCalledAddressAt.bind(this.traceManager), + this.solidityProxy = new SolidityProxy({ + getCurrentCalledAddressAt: this.traceManager.getCurrentCalledAddressAt.bind(this.traceManager), getCode: this.codeManager.getCode.bind(this.codeManager), - compilationResult: this.compilationResult + compilationResult: this.compilationResult }) this.storageResolver = null @@ -63,8 +63,8 @@ export class Ethdebugger { setManagers () { this.traceManager = new TraceManager({ web3: this.web3 }) this.codeManager = new CodeManager(this.traceManager) - this.solidityProxy = new SolidityProxy({ - getCurrentCalledAddressAt: this.traceManager.getCurrentCalledAddressAt.bind(this.traceManager), + this.solidityProxy = new SolidityProxy({ + getCurrentCalledAddressAt: this.traceManager.getCurrentCalledAddressAt.bind(this.traceManager), getCode: this.codeManager.getCode.bind(this.codeManager), compilationResult: this.compilationResult }) diff --git a/libs/remix-debug/src/debugger/VmDebugger.ts b/libs/remix-debug/src/debugger/VmDebugger.ts index 19a8be3d51..d8c3c909b6 100644 --- a/libs/remix-debug/src/debugger/VmDebugger.ts +++ b/libs/remix-debug/src/debugger/VmDebugger.ts @@ -110,7 +110,7 @@ export class VmDebuggerLogic { } catch (e) { console.log(e) } - + try { const memory = this._traceManager.getMemoryAt(index) if (this.stepManager.currentStepIndex === index) { @@ -122,9 +122,9 @@ export class VmDebuggerLogic { try { const address = this._traceManager.getCurrentCalledAddressAt(index) if (!this.storageResolver) return - + const storageViewer = new StorageViewer({ stepIndex: this.stepManager.currentStepIndex, tx: this.tx, address: address }, this.storageResolver, this._traceManager) - + storageViewer.storageRange().then((storage) => { if (this.stepManager.currentStepIndex === index) { const header = storageViewer.isComplete(address) ? '[Completely Loaded]' : '[Partially Loaded]' @@ -145,8 +145,8 @@ export class VmDebuggerLogic { } catch (error) { this.event.trigger('traceReturnValueUpdate', [[error]]) } - })() - }, 1000) + })() + }, 1000) try { const step = this._traceManager.getCurrentStep(index) diff --git a/libs/remix-debug/src/debugger/debugger.ts b/libs/remix-debug/src/debugger/debugger.ts index a939357a98..643a391719 100644 --- a/libs/remix-debug/src/debugger/debugger.ts +++ b/libs/remix-debug/src/debugger/debugger.ts @@ -84,10 +84,10 @@ export class Debugger { const generatedSources = this.debugger.callTree.sourceLocationTracker.getGeneratedSourcesFromAddress(address) const lineColumnPos = rawLocationAndOpcode.lineColumnPos - + let lineGasCostObj = null try { - lineGasCostObj = await this.debugger.callTree.getGasCostPerLine(rawLocation.file, lineColumnPos.start.line) + lineGasCostObj = await this.debugger.callTree.getGasCostPerLine(rawLocation.file, lineColumnPos.start.line) } catch (e) { console.log(e) } @@ -97,9 +97,9 @@ export class Debugger { const instructionIndexes = lineGasCostObj.indexes.map((index) => { // translate from vmtrace index to instruction index return this.debugger.codeManager.getInstructionIndex(address, index) }) - this.vmDebuggerLogic.event.trigger('lineGasCostChanged', [instructionIndexes, lineColumnPos.start.line ]) + this.vmDebuggerLogic.event.trigger('lineGasCostChanged', [instructionIndexes, lineColumnPos.start.line]) this.currentFile = rawLocation.file - this.currentLine = lineColumnPos.start.line + this.currentLine = lineColumnPos.start.line } } else { this.event.trigger('newSourceLocation', [null]) diff --git a/libs/remix-debug/src/debugger/solidityState.ts b/libs/remix-debug/src/debugger/solidityState.ts index 237be4e7da..3605cb946d 100644 --- a/libs/remix-debug/src/debugger/solidityState.ts +++ b/libs/remix-debug/src/debugger/solidityState.ts @@ -32,7 +32,7 @@ export class DebuggerSolidityState { } if (this.stepManager.currentStepIndex !== index) return - + if (!this.storageResolver) { return } diff --git a/libs/remix-debug/src/debugger/stepManager.ts b/libs/remix-debug/src/debugger/stepManager.ts index 8c0e6512d5..02da0263bb 100644 --- a/libs/remix-debug/src/debugger/stepManager.ts +++ b/libs/remix-debug/src/debugger/stepManager.ts @@ -77,7 +77,7 @@ export class DebuggerStepManager { const revertedReason = this.currentCall.outofgas ? 'outofgas' : 'reverted' this.revertionPoint = this.currentCall.return this.event.trigger('revertWarning', [revertedReason]) - return + return } for (let k = callsPath.length - 2; k >= 0; k--) { const parent = callsPath[k] diff --git a/libs/remix-debug/src/init.ts b/libs/remix-debug/src/init.ts index 28923df9d0..4ddafff021 100644 --- a/libs/remix-debug/src/init.ts +++ b/libs/remix-debug/src/init.ts @@ -1,9 +1,9 @@ 'use strict' import Web3, { Web3PluginBase } from 'web3' -import {toNumber} from 'web3-utils' +import { toNumber } from 'web3-utils' export function extendWeb3 (web3) { - if(!web3.debug){ + if (!web3.debug){ web3.registerPlugin(new Web3DebugPlugin()) } } diff --git a/libs/remix-debug/src/solidity-decoder/internalCallTree.ts b/libs/remix-debug/src/solidity-decoder/internalCallTree.ts index 4f74ad4585..3ac6fe985b 100644 --- a/libs/remix-debug/src/solidity-decoder/internalCallTree.ts +++ b/libs/remix-debug/src/solidity-decoder/internalCallTree.ts @@ -97,7 +97,7 @@ export class InternalCallTree { }) } catch (e) { console.log(e) - } + } } }) } @@ -214,7 +214,7 @@ export class InternalCallTree { } throw new Error('Could not find gas cost per line') } - + getLocalVariableById (id: number) { return this.variables[id] } @@ -226,7 +226,7 @@ async function buildTree (tree, step, scopeId, isCreation, functionDefinition?, const address = tree.traceManager.getCurrentCalledAddressAt(step) await registerFunctionParameters(tree, functionDefinition, step, scopeId, contractObj, validSourceLocation, address) } - + function callDepthChange (step, trace) { if (step + 1 < trace.length) { return trace[step].depth !== trace[step + 1].depth @@ -252,11 +252,11 @@ async function buildTree (tree, step, scopeId, isCreation, functionDefinition?, let sourceLocation let validSourceLocation let address - + try { address = tree.traceManager.getCurrentCalledAddressAt(step) sourceLocation = await tree.extractSourceLocation(step, address) - + if (!includedSource(sourceLocation, currentSourceLocation)) { tree.reducedTrace.push(step) currentSourceLocation = sourceLocation @@ -270,7 +270,7 @@ async function buildTree (tree, step, scopeId, isCreation, functionDefinition?, validSourceLocation = previousValidSourceLocation } else validSourceLocation = currentSourceLocation - + } catch (e) { return { outStep: step, error: 'InternalCallTree - Error resolving source location. ' + step + ' ' + e } } @@ -285,7 +285,7 @@ async function buildTree (tree, step, scopeId, isCreation, functionDefinition?, } else { stepDetail.gasCost = parseInt(stepDetail.gasCost as unknown as string) } - + // gas per line let lineColumnPos if (tree.offsetToLineColumnConverter) { @@ -299,7 +299,7 @@ async function buildTree (tree, step, scopeId, isCreation, functionDefinition?, sources[genSource.name] = { content: genSource.contents } } } - + lineColumnPos = await tree.offsetToLineColumnConverter.offsetToLineColumn(validSourceLocation, validSourceLocation.file, sources, astSources) if (!tree.gasCostPerLine[validSourceLocation.file]) tree.gasCostPerLine[validSourceLocation.file] = {} if (!tree.gasCostPerLine[validSourceLocation.file][lineColumnPos.start.line]) { @@ -391,7 +391,7 @@ function getGeneratedSources (tree, scopeId, contractObj) { async function registerFunctionParameters (tree, functionDefinition, step, scopeId, contractObj, sourceLocation, address) { tree.functionCallStack.push(step) - const functionDefinitionAndInputs = { functionDefinition, inputs: [] } + const functionDefinitionAndInputs = { functionDefinition, inputs: []} // means: the previous location was a function definition && JUMPDEST // => we are at the beginning of the function and input/output are setup try { diff --git a/libs/remix-debug/src/solidity-decoder/solidityProxy.ts b/libs/remix-debug/src/solidity-decoder/solidityProxy.ts index fd91e23195..b49e1d6fe7 100644 --- a/libs/remix-debug/src/solidity-decoder/solidityProxy.ts +++ b/libs/remix-debug/src/solidity-decoder/solidityProxy.ts @@ -64,7 +64,7 @@ export class SolidityProxy { */ async extractStatesDefinitions (address: string) { const compilationResult = await this.compilationResult(address) - if (!this.cache.contractDeclarations[address]) { + if (!this.cache.contractDeclarations[address]) { this.cache.contractDeclarations[address] = extractContractDefinitions(compilationResult.data.sources) } if (!this.cache.statesDefinitions[address]) { diff --git a/libs/remix-debug/src/trace/traceAnalyser.ts b/libs/remix-debug/src/trace/traceAnalyser.ts index ba41085d19..24491c9d77 100644 --- a/libs/remix-debug/src/trace/traceAnalyser.ts +++ b/libs/remix-debug/src/trace/traceAnalyser.ts @@ -1,5 +1,5 @@ 'use strict' -import { util } from '@remix-project/remix-lib' +import { util } from '@remix-project/remix-lib' import { bytesToHex } from '@ethereumjs/util' const { toHexPaddedString } = util import * as traceHelper from './traceHelper' diff --git a/libs/remix-debug/src/trace/traceManager.ts b/libs/remix-debug/src/trace/traceManager.ts index 97b3d70ce9..d8b164a0ab 100644 --- a/libs/remix-debug/src/trace/traceManager.ts +++ b/libs/remix-debug/src/trace/traceManager.ts @@ -155,7 +155,7 @@ export class TraceManager { return stack.map(el => toHexPaddedString(el)) } else { // it's an object coming from the VM. - // for performance reasons, + // for performance reasons, // we don't turn the stack coming from the VM into an array when the tx is executed // but now when the app needs it. const stack = [] diff --git a/libs/remix-debug/test.ts b/libs/remix-debug/test.ts index e1e5b12946..0fe8ab5edb 100644 --- a/libs/remix-debug/test.ts +++ b/libs/remix-debug/test.ts @@ -37,7 +37,7 @@ const compilationData = JSON.parse(solc.compileStandardWrapper(JSON.stringify(in console.dir(Object.keys(compilationData)) const compilation = {} compilation['data'] = compilationData -compilation['source'] = {sources: inputJson.sources} +compilation['source'] = { sources: inputJson.sources } console.dir(compilation) console.dir(compilation['data'].errors) diff --git a/libs/remix-debug/test/codeManager.ts b/libs/remix-debug/test/codeManager.ts index 3ba95be60a..449562afeb 100644 --- a/libs/remix-debug/test/codeManager.ts +++ b/libs/remix-debug/test/codeManager.ts @@ -5,7 +5,7 @@ import { CodeManager } from '../src/code/codeManager' const web3Test = require('./resources/testWeb3.ts') tape('CodeManager', function (t) { - const traceManager = new TraceManager({web3: web3Test}) + const traceManager = new TraceManager({ web3: web3Test }) const codeManager = new CodeManager(traceManager) const contractCode = web3Test.eth.getCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') codeManager.codeResolver.cacheExecutingCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', contractCode) // so a call to web3 is not necessary diff --git a/libs/remix-debug/test/debugger.ts b/libs/remix-debug/test/debugger.ts index 4c93d17f18..7c51ce7fc4 100644 --- a/libs/remix-debug/test/debugger.ts +++ b/libs/remix-debug/test/debugger.ts @@ -156,7 +156,7 @@ contract Ballot { output = JSON.parse(output) const param = '0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000148656c6c6f20576f726c64210000000000000000000000000000000000000000' const web3 = await vmCall.getWeb3() - vmCall.sendTx(web3, {nonce: 0, privateKey: privateKey}, undefined, 0, output.contracts['test.sol']['Ballot'].evm.bytecode.object + param, (error, hash) => { + vmCall.sendTx(web3, { nonce: 0, privateKey: privateKey }, undefined, 0, output.contracts['test.sol']['Ballot'].evm.bytecode.object + param, (error, hash) => { console.log(error, hash) if (error) { throw error @@ -177,7 +177,7 @@ contract Ballot { } } }) - + debugManager.callTree.event.register('callTreeReady', () => { testDebugging(debugManager) }) @@ -189,7 +189,7 @@ contract Ballot { console.error(error) throw error }) - + debugManager.debug(tx) }) .catch(error => { throw error }) @@ -279,10 +279,10 @@ function testDebugging (debugManager) { tape('breakPointManager', (t) => { t.plan(2) - const {traceManager, callTree, solidityProxy} = debugManager - const breakPointManager = new BreakpointManager({traceManager, callTree, solidityProxy}) + const { traceManager, callTree, solidityProxy } = debugManager + const breakPointManager = new BreakpointManager({ traceManager, callTree, solidityProxy }) - breakPointManager.add({fileName: 'test.sol', row: 39}) + breakPointManager.add({ fileName: 'test.sol', row: 39 }) breakPointManager.event.register('breakpointHit', function (sourceLocation, step) { t.equal(JSON.stringify(sourceLocation), JSON.stringify({ start: 1146, length: 6, file: 0, jump: '-' })) diff --git a/libs/remix-debug/test/decoder/contracts/calldata.ts b/libs/remix-debug/test/decoder/contracts/calldata.ts index 62d3df3ea4..39a5f08173 100644 --- a/libs/remix-debug/test/decoder/contracts/calldata.ts +++ b/libs/remix-debug/test/decoder/contracts/calldata.ts @@ -11,4 +11,4 @@ module.exports = { uint p = 45; } } -`} +` } diff --git a/libs/remix-debug/test/decoder/contracts/intLocal.ts b/libs/remix-debug/test/decoder/contracts/intLocal.ts index 0b4a112808..5a4775f888 100644 --- a/libs/remix-debug/test/decoder/contracts/intLocal.ts +++ b/libs/remix-debug/test/decoder/contracts/intLocal.ts @@ -39,4 +39,4 @@ contract intLocal { uint8 ui81 = asd; } } -`} +` } diff --git a/libs/remix-debug/test/decoder/contracts/miscLocal.ts b/libs/remix-debug/test/decoder/contracts/miscLocal.ts index 2447e2f959..56d3a63649 100644 --- a/libs/remix-debug/test/decoder/contracts/miscLocal.ts +++ b/libs/remix-debug/test/decoder/contracts/miscLocal.ts @@ -36,4 +36,4 @@ contract miscLocal { string memory smallstring = "test_test_test"; } } -`} +` } diff --git a/libs/remix-debug/test/decoder/contracts/structArrayLocal.ts b/libs/remix-debug/test/decoder/contracts/structArrayLocal.ts index c8391005d8..34b67e887c 100644 --- a/libs/remix-debug/test/decoder/contracts/structArrayLocal.ts +++ b/libs/remix-debug/test/decoder/contracts/structArrayLocal.ts @@ -81,4 +81,4 @@ contract structArrayLocal { arrayStruct.c = enumdef.three; } } -`} +` } diff --git a/libs/remix-debug/test/decoder/localDecoder.ts b/libs/remix-debug/test/decoder/localDecoder.ts index e8e92d25f2..637b636bda 100644 --- a/libs/remix-debug/test/decoder/localDecoder.ts +++ b/libs/remix-debug/test/decoder/localDecoder.ts @@ -31,7 +31,7 @@ async function test (st, privateKey) { let compilationResults = new CompilerAbstract('json', output, sources) console.log('intLocalTest') await intLocalTest(st, privateKey, output.contracts['test.sol']['intLocal'].evm.bytecode.object, compilationResults, intLocal.contract) - + output = compiler.compile(compilerInput(miscLocal.contract)) output = JSON.parse(output) sources = { @@ -41,7 +41,7 @@ async function test (st, privateKey) { compilationResults = new CompilerAbstract('json', output, sources) console.log('miscLocalTest') await miscLocalTest(st, privateKey, output.contracts['test.sol']['miscLocal'].evm.bytecode.object, compilationResults, miscLocal.contract) - + output = compiler.compile(compilerInput(miscLocal.contract)) output = JSON.parse(output) sources = { @@ -51,7 +51,7 @@ async function test (st, privateKey) { compilationResults = new CompilerAbstract('json', output, sources) console.log('misc2LocalTest') await misc2LocalTest(st, privateKey, output.contracts['test.sol']['miscLocal2'].evm.bytecode.object, compilationResults, miscLocal.contract) - + output = compiler.compile(compilerInput(structArrayLocal.contract)) output = JSON.parse(output) sources = { diff --git a/libs/remix-debug/test/decoder/localsTests/calldata.ts b/libs/remix-debug/test/decoder/localsTests/calldata.ts index 213fd5d96b..de2932ea0f 100644 --- a/libs/remix-debug/test/decoder/localsTests/calldata.ts +++ b/libs/remix-debug/test/decoder/localsTests/calldata.ts @@ -30,8 +30,8 @@ module.exports = async function (st, privateKey, contractBytecode, compilationRe const traceManager = new TraceManager({ web3 }) const codeManager = new CodeManager(traceManager) codeManager.clear() - const solidityProxy = new SolidityProxy({ - getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), + const solidityProxy = new SolidityProxy({ + getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), getCode: codeManager.getCode.bind(codeManager), compilationResult: () => compilationResult }) @@ -54,7 +54,7 @@ module.exports = async function (st, privateKey, contractBytecode, compilationRe callTree.event.register('callTreeReady', (scopes, scopeStarts) => { helper.decodeLocals(st, 140, traceManager, callTree, function (locals) { try { - const expected = {"p":{"value":"45","type":"uint256"},"foo":{"length":"1","value":[{"value":"3","type":"uint8"}],"type":"uint8[1]"},"boo":{"length":"1","value":[{"length":"2","value":[{"value":"R","type":"string"},{"value":"T","type":"string"}],"type":"string[2]"}],"type":"string[2][1]"}} + const expected = { "p":{ "value":"45","type":"uint256" },"foo":{ "length":"1","value":[{ "value":"3","type":"uint8" }],"type":"uint8[1]" },"boo":{ "length":"1","value":[{ "length":"2","value":[{ "value":"R","type":"string" },{ "value":"T","type":"string" }],"type":"string[2]" }],"type":"string[2][1]" } } st.deepEqual(locals, expected) } catch (e) { st.fail(e.message) @@ -62,7 +62,6 @@ module.exports = async function (st, privateKey, contractBytecode, compilationRe resolve({}) }) }) - traceManager.resolveTrace(tx).then(() => { debuggerEvent.trigger('newTraceLoaded', [traceManager.trace]) diff --git a/libs/remix-debug/test/decoder/localsTests/int.ts b/libs/remix-debug/test/decoder/localsTests/int.ts index fa52b55714..06b7a78e5d 100644 --- a/libs/remix-debug/test/decoder/localsTests/int.ts +++ b/libs/remix-debug/test/decoder/localsTests/int.ts @@ -12,9 +12,9 @@ import * as helper from './helper' module.exports = function (st, privateKey, contractBytecode, compilationResult, contractCode) { // eslint-disable-next-line no-async-promise-executor - return new Promise(async (resolve) => { + return new Promise(async (resolve) => { const web3 = await (vmCall as any).getWeb3(); - (vmCall as any).sendTx(web3, { nonce: 0, privateKey: privateKey }, undefined, 0, contractBytecode, function (error, hash) { + (vmCall as any).sendTx(web3, { nonce: 0, privateKey: privateKey }, undefined, 0, contractBytecode, function (error, hash) { if (error) { return st.fail(error) } @@ -24,10 +24,10 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, const traceManager = new TraceManager({ web3 }) const codeManager = new CodeManager(traceManager) codeManager.clear() - const solidityProxy = new SolidityProxy({ - getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), + const solidityProxy = new SolidityProxy({ + getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), getCode: codeManager.getCode.bind(codeManager), - compilationResult: () => compilationResult + compilationResult: () => compilationResult }) const debuggerEvent = new EventManager() const offsetToLineColumnConverter = { @@ -47,26 +47,26 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, }) callTree.event.register('callTreeReady', async (scopes, scopeStarts) => { try { - + // test gas cost per line st.equals((await callTree.getGasCostPerLine(0, 16)).gasCost, 11) st.equals((await callTree.getGasCostPerLine(0, 32)).gasCost, 84) - + const functions1 = callTree.retrieveFunctionsStack(103) const functions2 = callTree.retrieveFunctionsStack(116) const functions3 = callTree.retrieveFunctionsStack(13) - + st.equals(functions1.length, 2) st.equals(functions2.length, 3) st.equals(functions3.length, 1) - + st.equal(functions1[0].gasCost, 54) st.equal(functions1[1].gasCost, 436) st.equal(functions2[0].gasCost, 23) st.equal(functions2[1].gasCost, 54) st.equal(functions2[2].gasCost, 436) - + st.equals(Object.keys(functions1[0])[0], 'functionDefinition') st.equals(Object.keys(functions1[0])[1], 'inputs') st.equals(functions1[0].inputs[0], 'foo') @@ -76,11 +76,11 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, st.equals(Object.keys(functions2[1])[1], 'inputs') st.equals(functions2[0].inputs[0], 'asd') st.equals(functions2[1].inputs[0], 'foo') - + st.equals(functions1[0].functionDefinition.name, 'level11') st.equals(functions2[0].functionDefinition.name, 'level12') st.equals(functions2[1].functionDefinition.name, 'level11') - + st.equals(scopeStarts[0], '1') st.equals(scopeStarts[10], '1.1') st.equals(scopeStarts[102], '1.1.1') @@ -111,7 +111,7 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, } catch (e) { st.fail(e.message) } - + helper.decodeLocals(st, 95, traceManager, callTree, function (locals) { st.equals(Object.keys(locals).length, 16) st.equals(locals['ui8'].value, '130') @@ -130,7 +130,7 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, st.equals(locals['i'].value, '-32432423423') st.equals(locals['ishrink'].value, '2') }) - + helper.decodeLocals(st, 106, traceManager, callTree, function (locals) { try { st.equals(locals['ui8'].value, '123') diff --git a/libs/remix-debug/test/decoder/localsTests/misc.ts b/libs/remix-debug/test/decoder/localsTests/misc.ts index c7f7c329bf..1c76b42499 100644 --- a/libs/remix-debug/test/decoder/localsTests/misc.ts +++ b/libs/remix-debug/test/decoder/localsTests/misc.ts @@ -13,7 +13,7 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve) => { const web3 = await (vmCall as any).getWeb3(); - (vmCall as any).sendTx(web3, { nonce: 0, privateKey: privateKey }, undefined, 0, contractBytecode, function (error, hash) { + (vmCall as any).sendTx(web3, { nonce: 0, privateKey: privateKey }, undefined, 0, contractBytecode, function (error, hash) { if (error) { return st.fail(error) } @@ -23,10 +23,10 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, const traceManager = new TraceManager({ web3 }) const codeManager = new CodeManager(traceManager) codeManager.clear() - const solidityProxy = new SolidityProxy({ - getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), + const solidityProxy = new SolidityProxy({ + getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), getCode: codeManager.getCode.bind(codeManager), - compilationResult: () => compilationResult + compilationResult: () => compilationResult }) const debuggerEvent = new EventManager() const offsetToLineColumnConverter = { @@ -65,7 +65,7 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, st.fail(e.message) } }) - + helper.decodeLocals(st, 7, traceManager, callTree, function (locals) { try { // st.equals(Object.keys(locals).length, 0) @@ -84,5 +84,5 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, }) .catch(error => st.fail(error)) }) - }) + }) } diff --git a/libs/remix-debug/test/decoder/localsTests/misc2.ts b/libs/remix-debug/test/decoder/localsTests/misc2.ts index d92d2c59a9..c10dfacd46 100644 --- a/libs/remix-debug/test/decoder/localsTests/misc2.ts +++ b/libs/remix-debug/test/decoder/localsTests/misc2.ts @@ -23,10 +23,10 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, const traceManager = new TraceManager({ web3 }) const codeManager = new CodeManager(traceManager) codeManager.clear() - const solidityProxy = new SolidityProxy({ - getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), + const solidityProxy = new SolidityProxy({ + getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), getCode: codeManager.getCode.bind(codeManager), - compilationResult: () => compilationResult + compilationResult: () => compilationResult }) const debuggerEvent = new EventManager() const offsetToLineColumnConverter = { @@ -51,7 +51,7 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, st.fail(e.message) } }) - + helper.decodeLocals(st, 7, traceManager, callTree, function (locals) { try { // st.equals(Object.keys(locals).length, 0) @@ -70,5 +70,5 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult, }) .catch(error => st.fail(error)) }) - }) + }) } diff --git a/libs/remix-debug/test/decoder/localsTests/structArray.ts b/libs/remix-debug/test/decoder/localsTests/structArray.ts index 6324377a48..4410711624 100644 --- a/libs/remix-debug/test/decoder/localsTests/structArray.ts +++ b/libs/remix-debug/test/decoder/localsTests/structArray.ts @@ -23,10 +23,10 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult,c const traceManager = new TraceManager({ web3 }) const codeManager = new CodeManager(traceManager) codeManager.clear() - const solidityProxy = new SolidityProxy({ - getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), + const solidityProxy = new SolidityProxy({ + getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), getCode: codeManager.getCode.bind(codeManager), - compilationResult: () => compilationResult + compilationResult: () => compilationResult }) const debuggerEvent = new EventManager() const offsetToLineColumnConverter = { @@ -59,24 +59,24 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult,c st.equals(locals['f'].raw, '0x746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f746573745f6c6f6e675f') st.equals(locals['f'].value, 'test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_test_long_') st.equals(locals['e'].value['e'].value, true) - + st.equals(locals['simpleArray'].value[0].value, '45') st.equals(locals['simpleArray'].value[1].value, '324324') st.equals(locals['simpleArray'].value[2].value, '-333') st.equals(locals['simpleArray'].value[3].value, '5656') st.equals(locals['simpleArray'].value[4].value, '-1111') - + st.equals(locals['stringArray'].value[0].value, 'long_one_long_one_long_one_long_one_long_one_long_one_long_one_long_one_long_one_long_one_long_one_long_one_long_one_long_one_long_one_') st.equals(locals['stringArray'].value[1].value, 'two') st.equals(locals['stringArray'].value[2].value, 'three') - + st.equals(locals['dynArray'].value[0].value[0].value, '3423423532') st.equals(locals['dynArray'].value[1].value[0].value, '-342343323532') st.equals(locals['dynArray'].value[1].value[1].value, '23432') st.equals(locals['dynArray'].value[2].value[0].value, '-432432') st.equals(locals['dynArray'].value[2].value[1].value, '3423423532') st.equals(locals['dynArray'].value[2].value[2].value, '-432432') - + st.equals(locals['structArray'].value[0].value['a'].value, 'test') st.equals(locals['structArray'].value[0].value['a'].length, '0x8') st.equals(locals['structArray'].value[0].value['a'].raw, '0x74657374') @@ -86,31 +86,31 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult,c st.equals(locals['structArray'].value[0].value['c'].value, 'test_long_test_long_test_long_testtest_long_test_long_test_long_testtest_long_test_long_test_long_testtest_long_test_long_test_long_testtest_long_test_long_test_long_testtest_long_test_long_test_long_testtest_long_test_long_test_long_testtest_long_test_long_test_long_test') st.equals(locals['structArray'].value[0].value['d'].value, '3') st.equals(locals['structArray'].value[0].value['e'].value, true) - + st.equals(locals['structArray'].value[1].value['a'].value, 'item1 a') st.equals(locals['structArray'].value[1].value['b'].value, '20') st.equals(locals['structArray'].value[1].value['c'].value, 'item1 c') st.equals(locals['structArray'].value[1].value['d'].value, '-45') st.equals(locals['structArray'].value[1].value['e'].value, false) - + st.equals(locals['structArray'].value[2].value['a'].value, 'item2 a') st.equals(locals['structArray'].value[2].value['b'].value, '200') st.equals(locals['structArray'].value[2].value['c'].value, 'item2 c') st.equals(locals['structArray'].value[2].value['d'].value, '-450') st.equals(locals['structArray'].value[2].value['e'].value, true) - + st.equals(locals['arrayStruct'].value.a.value[0].value, 'string') st.equals(locals['arrayStruct'].value.b.value[0].value, '34') st.equals(locals['arrayStruct'].value.b.value[1].value, '-23') st.equals(locals['arrayStruct'].value.b.value[2].value, '-3') st.equals(locals['arrayStruct'].value.c.value, 'three') - + st.equals(Object.keys(locals).length, 8) } catch (e) { st.fail(e.message) } }) - + helper.decodeLocals(st, 7, traceManager, callTree, function (locals) { try { console.log('at 7', locals) @@ -130,5 +130,5 @@ module.exports = function (st, privateKey, contractBytecode, compilationResult,c }) .catch(error => st.fail(error)) }) - }) + }) } diff --git a/libs/remix-debug/test/decoder/stateTests/mapping.ts b/libs/remix-debug/test/decoder/stateTests/mapping.ts index d13f4c36f5..3ca31823a5 100644 --- a/libs/remix-debug/test/decoder/stateTests/mapping.ts +++ b/libs/remix-debug/test/decoder/stateTests/mapping.ts @@ -10,7 +10,7 @@ import { InternalCallTree } from '../../../src/solidity-decoder/internalCallTree import * as vmCall from '../../vmCall' import { StorageResolver } from '../../../src/storage/storageResolver' import { StorageViewer } from '../../../src/storage/storageViewer' -import { Address, bytesToHex } from '@ethereumjs/util' +import { Address, bytesToHex } from '@ethereumjs/util' module.exports = async function testMappingStorage (st, cb) { const mappingStorage = require('../contracts/mappingStorage') @@ -23,7 +23,7 @@ module.exports = async function testMappingStorage (st, cb) { } const compilationResults = new CompilerAbstract('json', output, sources) const web3 = await (vmCall as any).getWeb3(); - (vmCall as any).sendTx(web3, {nonce: 0, privateKey: privateKey}, undefined, 0, output.contracts['test.sol']['SimpleMappingState'].evm.bytecode.object, function (error, hash) { + (vmCall as any).sendTx(web3, { nonce: 0, privateKey: privateKey }, undefined, 0, output.contracts['test.sol']['SimpleMappingState'].evm.bytecode.object, function (error, hash) { if (error) { console.log(error) st.end(error) @@ -44,7 +44,7 @@ module.exports = async function testMappingStorage (st, cb) { } function testMapping (st, privateKey, contractAddress, output, compilationResults, web3, cb) { - (vmCall as any).sendTx(web3, {nonce: 1, privateKey: privateKey}, contractAddress, 0, '2fd0a83a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001074686973206973206120737472696e6700000000000000000000000000000000', + (vmCall as any).sendTx(web3, { nonce: 1, privateKey: privateKey }, contractAddress, 0, '2fd0a83a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001074686973206973206120737472696e6700000000000000000000000000000000', function (error, hash) { if (error) { console.log(error) @@ -74,7 +74,7 @@ function testMapping (st, privateKey, contractAddress, output, compilationResult stepIndex: 268, tx: tx, address: contractAddress - }, new StorageResolver({web3}), traceManager) + }, new StorageResolver({ web3 }), traceManager) const stateVars = stateDecoder.extractStateVariables('SimpleMappingState', output.sources) stateDecoder.decodeState(stateVars, storageViewer).then((result) => { st.equal(result['_num'].value, '1') diff --git a/libs/remix-debug/test/helpers/compilerHelper.ts b/libs/remix-debug/test/helpers/compilerHelper.ts index 542d10a1b9..1681520c95 100644 --- a/libs/remix-debug/test/helpers/compilerHelper.ts +++ b/libs/remix-debug/test/helpers/compilerHelper.ts @@ -13,8 +13,8 @@ export function compilerInput (contracts) { }, outputSelection: { '*': { - '': [ 'ast' ], - '*': [ 'abi', 'metadata', 'evm.legacyAssembly', 'evm.bytecode', 'evm.deployedBytecode', 'evm.methodIdentifiers', 'evm.gasEstimates' ] + '': ['ast'], + '*': ['abi', 'metadata', 'evm.legacyAssembly', 'evm.bytecode', 'evm.deployedBytecode', 'evm.methodIdentifiers', 'evm.gasEstimates'] } } } diff --git a/libs/remix-debug/test/resources/ast.ts b/libs/remix-debug/test/resources/ast.ts index f4ca65f47e..00a96493dc 100644 --- a/libs/remix-debug/test/resources/ast.ts +++ b/libs/remix-debug/test/resources/ast.ts @@ -1,14 +1,14 @@ const node = {} -node['ast'] = {"legacyAST":{"children":[{"attributes":{"fullyImplemented":true,"isLibrary":false,"linearizedBaseContracts":[5640396],"name":"test"},"children":[{"attributes":{"name":"x","type":"int256"},"children":[{"attributes":{"name":"int"},"id":5657860,"name":"ElementaryTypeName","src":"21:3:11"}],"id":5658100,"name":"VariableDeclaration","src":"21:5:11"},{"attributes":{"name":"y","type":"int256"},"children":[{"attributes":{"name":"int"},"id":5658180,"name":"ElementaryTypeName","src":"38:3:11"}],"id":5658268,"name":"VariableDeclaration","src":"38:5:11"},{"attributes":{"constant":false,"name":"set","public":true},"children":[{"children":[{"attributes":{"name":"_x","type":"int256"},"children":[{"attributes":{"name":"int"},"id":5658404,"name":"ElementaryTypeName","src":"68:3:11"}],"id":5658492,"name":"VariableDeclaration","src":"68:6:11"}],"id":5658572,"name":"ParameterList","src":"67:8:11"},{"children":[{"attributes":{"name":"_r","type":"int256"},"children":[{"attributes":{"name":"int"},"id":5658628,"name":"ElementaryTypeName","src":"85:3:11"}],"id":5658716,"name":"VariableDeclaration","src":"85:6:11"}],"id":5658796,"name":"ParameterList","src":"84:8:11"},{"children":[{"children":[{"attributes":{"operator":"=","type":"int256"},"children":[{"attributes":{"type":"int256","value":"x"},"id":5658900,"name":"Identifier","src":"108:1:11"},{"attributes":{"type":"int256","value":"_x"},"id":5658980,"name":"Identifier","src":"112:2:11"}],"id":5657492,"name":"Assignment","src":"108:6:11"}],"id":5659028,"name":"ExpressionStatement","src":"108:6:11"},{"children":[{"attributes":{"operator":"=","type":"int256"},"children":[{"attributes":{"type":"int256","value":"y"},"id":5659116,"name":"Identifier","src":"125:1:11"},{"attributes":{"string":null,"type":"int_const 10","value":"10"},"id":5659196,"name":"Literal","src":"129:2:11"}],"id":5659252,"name":"Assignment","src":"125:6:11"}],"id":5659316,"name":"ExpressionStatement","src":"125:6:11"},{"children":[{"attributes":{"operator":"=","type":"int256"},"children":[{"attributes":{"type":"int256","value":"_r"},"id":5659428,"name":"Identifier","src":"141:2:11"},{"attributes":{"type":"int256","value":"x"},"id":5639308,"name":"Identifier","src":"146:1:11"}],"id":5639356,"name":"Assignment","src":"141:6:11"}],"id":5639420,"name":"ExpressionStatement","src":"141:6:11"}],"id":5639516,"name":"Block","src":"97:57:11"}],"id":5639612,"name":"FunctionDefinition","src":"55:99:11"},{"attributes":{"constant":false,"name":"get","public":true},"children":[{"children":[],"id":5639764,"name":"ParameterList","src":"179:2:11"},{"children":[{"attributes":{"name":"x","type":"uint256"},"children":[{"attributes":{"name":"uint"},"id":5639820,"name":"ElementaryTypeName","src":"191:4:11"}],"id":5639908,"name":"VariableDeclaration","src":"191:6:11"},{"attributes":{"name":"y","type":"uint256"},"children":[{"attributes":{"name":"uint"},"id":5639988,"name":"ElementaryTypeName","src":"199:4:11"}],"id":5640076,"name":"VariableDeclaration","src":"199:6:11"}],"id":5640156,"name":"ParameterList","src":"190:16:11"},{"children":[],"id":5640212,"name":"Block","src":"212:17:11"}],"id":5640276,"name":"FunctionDefinition","src":"167:62:11"}],"id":5640396,"name":"ContractDefinition","src":"0:231:11"}],"name":"SourceUnit"}} +node['ast'] = { "legacyAST":{ "children":[{ "attributes":{ "fullyImplemented":true,"isLibrary":false,"linearizedBaseContracts":[5640396],"name":"test" },"children":[{ "attributes":{ "name":"x","type":"int256" },"children":[{ "attributes":{ "name":"int" },"id":5657860,"name":"ElementaryTypeName","src":"21:3:11" }],"id":5658100,"name":"VariableDeclaration","src":"21:5:11" },{ "attributes":{ "name":"y","type":"int256" },"children":[{ "attributes":{ "name":"int" },"id":5658180,"name":"ElementaryTypeName","src":"38:3:11" }],"id":5658268,"name":"VariableDeclaration","src":"38:5:11" },{ "attributes":{ "constant":false,"name":"set","public":true },"children":[{ "children":[{ "attributes":{ "name":"_x","type":"int256" },"children":[{ "attributes":{ "name":"int" },"id":5658404,"name":"ElementaryTypeName","src":"68:3:11" }],"id":5658492,"name":"VariableDeclaration","src":"68:6:11" }],"id":5658572,"name":"ParameterList","src":"67:8:11" },{ "children":[{ "attributes":{ "name":"_r","type":"int256" },"children":[{ "attributes":{ "name":"int" },"id":5658628,"name":"ElementaryTypeName","src":"85:3:11" }],"id":5658716,"name":"VariableDeclaration","src":"85:6:11" }],"id":5658796,"name":"ParameterList","src":"84:8:11" },{ "children":[{ "children":[{ "attributes":{ "operator":"=","type":"int256" },"children":[{ "attributes":{ "type":"int256","value":"x" },"id":5658900,"name":"Identifier","src":"108:1:11" },{ "attributes":{ "type":"int256","value":"_x" },"id":5658980,"name":"Identifier","src":"112:2:11" }],"id":5657492,"name":"Assignment","src":"108:6:11" }],"id":5659028,"name":"ExpressionStatement","src":"108:6:11" },{ "children":[{ "attributes":{ "operator":"=","type":"int256" },"children":[{ "attributes":{ "type":"int256","value":"y" },"id":5659116,"name":"Identifier","src":"125:1:11" },{ "attributes":{ "string":null,"type":"int_const 10","value":"10" },"id":5659196,"name":"Literal","src":"129:2:11" }],"id":5659252,"name":"Assignment","src":"125:6:11" }],"id":5659316,"name":"ExpressionStatement","src":"125:6:11" },{ "children":[{ "attributes":{ "operator":"=","type":"int256" },"children":[{ "attributes":{ "type":"int256","value":"_r" },"id":5659428,"name":"Identifier","src":"141:2:11" },{ "attributes":{ "type":"int256","value":"x" },"id":5639308,"name":"Identifier","src":"146:1:11" }],"id":5639356,"name":"Assignment","src":"141:6:11" }],"id":5639420,"name":"ExpressionStatement","src":"141:6:11" }],"id":5639516,"name":"Block","src":"97:57:11" }],"id":5639612,"name":"FunctionDefinition","src":"55:99:11" },{ "attributes":{ "constant":false,"name":"get","public":true },"children":[{ "children":[],"id":5639764,"name":"ParameterList","src":"179:2:11" },{ "children":[{ "attributes":{ "name":"x","type":"uint256" },"children":[{ "attributes":{ "name":"uint" },"id":5639820,"name":"ElementaryTypeName","src":"191:4:11" }],"id":5639908,"name":"VariableDeclaration","src":"191:6:11" },{ "attributes":{ "name":"y","type":"uint256" },"children":[{ "attributes":{ "name":"uint" },"id":5639988,"name":"ElementaryTypeName","src":"199:4:11" }],"id":5640076,"name":"VariableDeclaration","src":"199:6:11" }],"id":5640156,"name":"ParameterList","src":"190:16:11" },{ "children":[],"id":5640212,"name":"Block","src":"212:17:11" }],"id":5640276,"name":"FunctionDefinition","src":"167:62:11" }],"id":5640396,"name":"ContractDefinition","src":"0:231:11" }],"name":"SourceUnit" } } -node['ast'].ast = { +node['ast'].ast = { absolutePath: 'sample.sol', - exportedSymbols: { test: [ 33 ] }, + exportedSymbols: { test: [33]}, id: 34, nodeType: 'SourceUnit', nodes: - [ { + [{ abstract: false, baseContracts: [], contractDependencies: [], @@ -16,11 +16,11 @@ node['ast'].ast = { documentation: null, fullyImplemented: true, id: 33, - linearizedBaseContracts: [ 33 ], + linearizedBaseContracts: [33], name: 'test', nodeType: 'ContractDefinition', nodes: - [ { constant: false, + [{ constant: false, id: 2, name: 'x', nodeType: 'VariableDeclaration', @@ -30,12 +30,12 @@ node['ast'].ast = { stateVariable: true, storageLocation: 'default', typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' }, - typeName: { + typeName: { id: 1, name: 'int', nodeType: 'ElementaryTypeName', src: '20:3:0', - typeDescriptions: [Object] + typeDescriptions: [Object] }, value: null, visibility: 'internal' }, @@ -54,14 +54,14 @@ node['ast'].ast = { name: 'int', nodeType: 'ElementaryTypeName', src: '31:3:0', - typeDescriptions: [Object] }, + typeDescriptions: [Object]}, value: null, visibility: 'internal' }, { body: { id: 23, nodeType: 'Block', src: '96:55:0', statements: - [ { expression: + [{ expression: { argumentTypes: null, id: 13, isConstant: false, @@ -69,7 +69,7 @@ node['ast'].ast = { isPure: false, lValueRequested: false, leftHandSide: - { argumentTypes: null, + { argumentTypes: null, id: 11, name: 'x', nodeType: 'Identifier', @@ -89,7 +89,7 @@ node['ast'].ast = { src: '110:2:0', typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' } }, src: '106:6:0', - typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' } + typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' } }, id: 14, nodeType: 'ExpressionStatement', @@ -106,7 +106,7 @@ node['ast'].ast = { operator: '=', rightHandSide: [Object], src: '122:6:0', - typeDescriptions: [Object] }, + typeDescriptions: [Object]}, id: 18, nodeType: 'ExpressionStatement', src: '122:6:0' }, @@ -122,10 +122,10 @@ node['ast'].ast = { operator: '=', rightHandSide: [Object], src: '138:6:0', - typeDescriptions: [Object] }, + typeDescriptions: [Object]}, id: 22, nodeType: 'ExpressionStatement', - src: '138:6:0' } ] + src: '138:6:0' }] }, documentation: null, functionSelector: 'e5c19b2d', @@ -149,7 +149,7 @@ node['ast'].ast = { stateMutability: 'nonpayable', virtual: false, visibility: 'public' }, - { body: { id: 31, nodeType: 'Block', src: '214:17:0', statements: [] }, + { body: { id: 31, nodeType: 'Block', src: '214:17:0', statements: []}, documentation: null, functionSelector: '6d4ce63c', id: 32, @@ -173,13 +173,12 @@ node['ast'].ast = { src: '163:68:0', stateMutability: 'nonpayable', virtual: false, - visibility: 'public' } ], + visibility: 'public' }], scope: 34, - src: '0:233:0' - } ], - src: '0:233:0' + src: '0:233:0' + }], + src: '0:233:0' } - node['source'] = `contract test { int x; diff --git a/libs/remix-debug/test/resources/testWeb3.ts b/libs/remix-debug/test/resources/testWeb3.ts index e91f584fd4..60bf50eae6 100644 --- a/libs/remix-debug/test/resources/testWeb3.ts +++ b/libs/remix-debug/test/resources/testWeb3.ts @@ -7,7 +7,7 @@ let data = init.readFile(require('path').resolve(__dirname, 'testWeb3.json'), nu data = JSON.parse(data) let traceWithABIEncoder = init.readFile(require('path').resolve(__dirname, 'traceWithABIEncoder.json'), null) -traceWithABIEncoder = +traceWithABIEncoder = data.testTraces['0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd53'] = JSON.parse(traceWithABIEncoder) web3Override.eth.getCode = function (address, callback) { @@ -48,7 +48,7 @@ web3Override.eth.setProvider = function (provider) {} web3Override.eth.providers = { 'HttpProvider': function (url) {} } -web3Override.eth.currentProvider = {'host': 'test provider'} +web3Override.eth.currentProvider = { 'host': 'test provider' } if (typeof (module) !== 'undefined' && typeof (module.exports) !== 'undefined') { module.exports = web3Override diff --git a/libs/remix-debug/test/sourceLocationTracker.ts b/libs/remix-debug/test/sourceLocationTracker.ts index 2b5ad856f9..88a5b7977b 100644 --- a/libs/remix-debug/test/sourceLocationTracker.ts +++ b/libs/remix-debug/test/sourceLocationTracker.ts @@ -11,20 +11,20 @@ import { compilerInput } from './helpers/compilerHelper' tape('SourceLocationTracker', function (t) { t.test('SourceLocationTracker.getSourceLocationFromVMTraceIndex - simple contract', async function (st) { - const traceManager = new TraceManager({web3: web3Test}) - const codeManager = new CodeManager(traceManager) + const traceManager = new TraceManager({ web3: web3Test }) + const codeManager = new CodeManager(traceManager) let output = compiler.compile(compilerInput(contracts)) output = JSON.parse(output) - + codeManager.codeResolver.cacheExecutingCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', '0x' + output.contracts['test.sol']['test'].evm.deployedBytecode.object) - + const tx = web3Test.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd52') - traceManager.resolveTrace(tx).then(async () => { + traceManager.resolveTrace(tx).then(async () => { + + const sourceLocationTracker = new SourceLocationTracker(codeManager, { debugWithGeneratedSources: false }) - const sourceLocationTracker = new SourceLocationTracker(codeManager, {debugWithGeneratedSources: false}) - try { const map = await sourceLocationTracker.getSourceLocationFromVMTraceIndex('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', 0, output.contracts) st.equal(map['file'], 0) @@ -42,20 +42,18 @@ tape('SourceLocationTracker', function (t) { t.test('SourceLocationTracker.getSourceLocationFromVMTraceIndex - ABIEncoder V2 contract', async function (st) { - const traceManager = new TraceManager({web3: web3Test}) - const codeManager = new CodeManager(traceManager) + const traceManager = new TraceManager({ web3: web3Test }) + const codeManager = new CodeManager(traceManager) let output = compiler.compile(compilerInput(ABIEncoderV2)) output = JSON.parse(output) - + codeManager.codeResolver.cacheExecutingCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', '0x' + output.contracts['test.sol']['test'].evm.deployedBytecode.object) - + const tx = web3Test.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd53') - traceManager.resolveTrace(tx).then(async () => { + traceManager.resolveTrace(tx).then(async () => { - - try { // with debugWithGeneratedSources: false const sourceLocationTracker = new SourceLocationTracker(codeManager, { debugWithGeneratedSources: false }) @@ -67,7 +65,7 @@ tape('SourceLocationTracker', function (t) { map = await sourceLocationTracker.getSourceLocationFromVMTraceIndex('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', 45, output.contracts) st.equal(map['file'], 1) // 1 refers to the generated source (pragma experimental ABIEncoderV2) - + map = await sourceLocationTracker.getValidSourceLocationFromVMTraceIndex('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', 45, output.contracts) st.equal(map['file'], 0) // 1 refers to the generated source (pragma experimental ABIEncoderV2) st.equal(map['start'], 303) @@ -84,7 +82,7 @@ tape('SourceLocationTracker', function (t) { try { // with debugWithGeneratedSources: true const sourceLocationTracker = new SourceLocationTracker(codeManager, { debugWithGeneratedSources: true }) - + let map = await sourceLocationTracker.getSourceLocationFromVMTraceIndex('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', 0, output.contracts) console.log(map) st.equal(map['file'], 0) diff --git a/libs/remix-debug/test/traceManager.ts b/libs/remix-debug/test/traceManager.ts index 8128e21ac8..523d0d4927 100644 --- a/libs/remix-debug/test/traceManager.ts +++ b/libs/remix-debug/test/traceManager.ts @@ -7,7 +7,7 @@ tape('TraceManager', function (t) { let traceManager t.test('TraceManager.init', function (st) { - traceManager = new TraceManager({web3: web3Test}) + traceManager = new TraceManager({ web3: web3Test }) st.end() }) diff --git a/libs/remix-debug/test/vmCall.ts b/libs/remix-debug/test/vmCall.ts index e9d6e28012..0866b065e6 100644 --- a/libs/remix-debug/test/vmCall.ts +++ b/libs/remix-debug/test/vmCall.ts @@ -1,10 +1,9 @@ 'use strict' -import { extendWeb3 } from '../src/init' +import { extendWeb3 } from '../src/init' import { Address } from '@ethereumjs/util' import { Web3 } from 'web3'; const { Provider } = require('@remix-project/remix-simulator') - async function getWeb3 () { const remixSimulatorProvider = new Provider({ fork: 'berlin' }) await remixSimulatorProvider.init() diff --git a/libs/remix-simulator/src/VmProxy.ts b/libs/remix-simulator/src/VmProxy.ts index 04ecf1f1f8..90df1fb8f0 100644 --- a/libs/remix-simulator/src/VmProxy.ts +++ b/libs/remix-simulator/src/VmProxy.ts @@ -1,11 +1,11 @@ -import { util } from '@remix-project/remix-lib' +import { util } from '@remix-project/remix-lib' const { toHexPaddedString, formatMemory } = util import { helpers } from '@remix-project/remix-lib' -const { normalizeHexAddress } = helpers.ui +const { normalizeHexAddress } = helpers.ui import { ConsoleLogs, hash } from '@remix-project/remix-lib' -import { toChecksumAddress, bytesToHex, Address, toBytes, bigIntToHex} from '@ethereumjs/util' -import utils, {toBigInt} from 'web3-utils' -import {isBigInt} from 'web3-validator' +import { toChecksumAddress, bytesToHex, Address, toBytes, bigIntToHex } from '@ethereumjs/util' +import utils, { toBigInt } from 'web3-utils' +import { isBigInt } from 'web3-validator' import { ethers } from 'ethers' import { VMContext } from './vm-context' import type { EVMStateManagerInterface } from '@ethereumjs/common' @@ -99,7 +99,7 @@ export class VmProxy { setVM (vm) { if (this.vm === vm) return this.vm = vm - this.vm.evm.events.on('step', async (data: InterpreterStep, resolve: (result?: any) => void) => { + this.vm.evm.events.on('step', async (data: InterpreterStep, resolve: (result?: any) => void) => { await this.pushTrace(data) resolve() }) @@ -110,7 +110,7 @@ export class VmProxy { }) this.vm.events.on('beforeTx', async (data: TypedTransaction, resolve: (result?: any) => void) => { this.txRunning = true - await this.txWillProcess(data) + await this.txWillProcess(data) resolve() }) } @@ -124,7 +124,7 @@ export class VmProxy { recordVMSteps (record) { this.flagrecordVMSteps = record } - + async txWillProcess (data: TypedTransaction) { if (!this.flagrecordVMSteps) return this.lastMemoryUpdate = [] @@ -234,7 +234,7 @@ export class VmProxy { async pushTrace (data: InterpreterStep) { if (!this.flagrecordVMSteps) return - + try { const depth = data.depth + 1 // geth starts the depth from 1 if (!this.processingHash) { diff --git a/libs/remix-simulator/src/methods/accounts.ts b/libs/remix-simulator/src/methods/accounts.ts index 5ac0116555..5151499d9f 100644 --- a/libs/remix-simulator/src/methods/accounts.ts +++ b/libs/remix-simulator/src/methods/accounts.ts @@ -56,7 +56,7 @@ export class Web3Accounts { } catch (e) { console.error(e) } - + } newAccount (cb) { diff --git a/libs/remix-simulator/src/methods/blocks.ts b/libs/remix-simulator/src/methods/blocks.ts index 0ca0dd768f..f708dacd92 100644 --- a/libs/remix-simulator/src/methods/blocks.ts +++ b/libs/remix-simulator/src/methods/blocks.ts @@ -59,7 +59,7 @@ export class Blocks { nonce: bigIntToHex(tx.nonce), transactionIndex: this.TX_INDEX, value: bigIntToHex(tx.value), - to: receipt.to ? receipt.to : null + to: receipt.to ? receipt.to : null } } }) @@ -113,7 +113,7 @@ export class Blocks { nonce: bigIntToHex(tx.nonce), transactionIndex: this.TX_INDEX, value: bigIntToHex(tx.value), - to: receipt.to ? receipt.to : null + to: receipt.to ? receipt.to : null } } }) diff --git a/libs/remix-simulator/src/methods/transactions.ts b/libs/remix-simulator/src/methods/transactions.ts index 9ac74d3d79..416e2e4ad8 100644 --- a/libs/remix-simulator/src/methods/transactions.ts +++ b/libs/remix-simulator/src/methods/transactions.ts @@ -1,5 +1,5 @@ import { toHex, toNumber, toBigInt } from 'web3-utils' -import { toChecksumAddress, Address, bigIntToHex, bytesToHex} from '@ethereumjs/util' +import { toChecksumAddress, Address, bigIntToHex, bytesToHex } from '@ethereumjs/util' import { processTx } from './txProcess' import { execution } from '@remix-project/remix-lib' import { ethers } from 'ethers' @@ -59,7 +59,7 @@ export class Transactions { this.txRunnerInstance = new TxRunner(this.txRunnerVMInstance, {}) this.txRunnerInstance.vmaccounts = accounts } - + methods () { return { eth_sendTransaction: this.eth_sendTransaction.bind(this), @@ -163,7 +163,7 @@ export class Transactions { this.txRunnerInstance.internalRunner.standaloneTx = false this.vmContext.web3().recordVMSteps(true) if (error) return cb(error) - const result: any = value.result + const result: any = value.result if ((result as any).receipt?.status === '0x0' || (result as any).receipt?.status === 0) { try { const msg = `${bytesToHex(result.execResult.returnValue) || '0x00'}` diff --git a/libs/remix-simulator/src/provider.ts b/libs/remix-simulator/src/provider.ts index 95b7cf6632..39b1cd1c5f 100644 --- a/libs/remix-simulator/src/provider.ts +++ b/libs/remix-simulator/src/provider.ts @@ -26,7 +26,7 @@ export interface JSONRPCResponsePayload { jsonrpc: string; } -export type JSONRPCResponseCallback = (err: Error, result?: JSONRPCResponsePayload) => void +export type JSONRPCResponseCallback = (err: Error, result?: JSONRPCResponsePayload) => void export type State = Record @@ -83,7 +83,7 @@ export class Provider { } } - _send(payload: JSONRPCRequestPayload, callback: (err: Error, result?: JSONRPCResponsePayload) => void) { + _send(payload: JSONRPCRequestPayload, callback: (err: Error, result?: JSONRPCResponsePayload) => void) { // log.info('payload method is ', payload.method) // commented because, this floods the IDE console if (!this.initialized) { this.pendingRequests.push({ payload, callback }) @@ -109,13 +109,13 @@ export class Provider { callback(new Error('unknown method ' + payload.method)) } - sendAsync (payload: JSONRPCRequestPayload, callback: (err: Error, result?: JSONRPCResponsePayload) => void) { + sendAsync (payload: JSONRPCRequestPayload, callback: (err: Error, result?: JSONRPCResponsePayload) => void) { return new Promise((resolve,reject)=>{ const cb = (err, result) => { - if(typeof callback==='function'){ + if (typeof callback==='function'){ callback(err,result) } - if(err){ + if (err){ return reject(err) } return resolve(result) @@ -146,7 +146,7 @@ export class Provider { } export function extend (web3) { - if(!web3.remix){ + if (!web3.remix){ web3.registerPlugin(new Web3TestPlugin()) } } diff --git a/libs/remix-simulator/src/server.ts b/libs/remix-simulator/src/server.ts index 73a2cd0552..15636cac5a 100644 --- a/libs/remix-simulator/src/server.ts +++ b/libs/remix-simulator/src/server.ts @@ -22,7 +22,7 @@ class Server { start (host, port) { const wsApp = expressWs(app) - + app.use(cors()) app.use(bodyParser.urlencoded({ extended: true })) app.use(bodyParser.json()) diff --git a/libs/remix-simulator/src/vm-context.ts b/libs/remix-simulator/src/vm-context.ts index 0b85f4cf60..f7e532c508 100644 --- a/libs/remix-simulator/src/vm-context.ts +++ b/libs/remix-simulator/src/vm-context.ts @@ -59,7 +59,7 @@ class StateManagerCommonStorageDump extends DefaultStateManager { } shallowCopy(): StateManagerCommonStorageDump { - const copyState = new StateManagerCommonStorageDump({ + const copyState = new StateManagerCommonStorageDump({ trie: this._trie.shallowCopy(false), }) copyState.keyHashes = this.keyHashes @@ -93,7 +93,7 @@ class StateManagerCommonStorageDump extends DefaultStateManager { }) } catch (e) { reject(e) - } + } }) } } @@ -110,7 +110,7 @@ export interface CustomEthersStateManagerOpts { class CustomEthersStateManager extends StateManagerCommonStorageDump { private provider: ethers.providers.StaticJsonRpcProvider | ethers.providers.JsonRpcProvider private blockTag: string - + constructor(opts: CustomEthersStateManagerOpts) { super(opts) if (typeof opts.provider === 'string') { @@ -188,7 +188,7 @@ class CustomEthersStateManager extends StateManagerCommonStorageDump { async accountExists(address: Address): Promise { const account = await super.getAccount(address) if (!account.isEmpty()) return true - + // Get merkle proof for `address` from provider const proof = await this.provider.send('eth_getProof', [address.toString(), [], this.blockTag]) @@ -245,12 +245,11 @@ class CustomEthersStateManager extends StateManagerCommonStorageDump { codeHash: hexToBytes(codeHash) // storageRoot: toBuffer([]), // we have to remove this in order to force the creation of the Trie in the local state. }) - } + } return account } } - export type CurrentVm = { vm: VM, web3vm: VmProxy, @@ -263,7 +262,7 @@ export class VMCommon extends Common { /** * Always return the fork set at initialization */ - setHardforkBy() { + setHardforkBy() { return this._hardfork; } } @@ -281,7 +280,7 @@ export class VMContext { txByHash: Record currentVm: CurrentVm web3vm: VmProxy - logsManager: any // LogsManager + logsManager: any // LogsManager exeResults: Record nodeUrl: string blockNumber: number | 'latest' @@ -332,7 +331,7 @@ export class VMContext { const db = this.stateDb ? new Map(Object.entries(this.stateDb).map(([k, v]) => [k, hexToBytes(v)])) : new Map() const mapDb = new MapDB(db) const trie = await Trie.create({ useKeyHashing: true, db: mapDb, useRootPersistence: true }) - + stateManager = new StateManagerCommonStorageDump({ trie }) } @@ -357,7 +356,7 @@ export class VMContext { const blockchain = await Blockchain.create({ common, validateBlocks: false, validateConsensus: false, genesisBlock }) const evm = await EVM.create({ common, allowUnlimitedContractSize: true, stateManager, blockchain }) - + const vm = await VM.create({ common, activatePrecompiles: true, diff --git a/libs/remix-simulator/test/blocks.ts b/libs/remix-simulator/test/blocks.ts index 08c5fe2e10..7923103edd 100644 --- a/libs/remix-simulator/test/blocks.ts +++ b/libs/remix-simulator/test/blocks.ts @@ -93,7 +93,7 @@ describe('blocks', () => { it('should get block given its hash', async () => { const correctBlock = await web3.eth.getBlock(0) const numberTransactions = await (new Promise((resolve, reject) => { - web3['_requestManager'].send({method: 'eth_getUncleCountByBlockHash', params: [correctBlock.hash]}) + web3['_requestManager'].send({ method: 'eth_getUncleCountByBlockHash', params: [correctBlock.hash]}) .then(numberTransactions => resolve(numberTransactions)) .catch(err => reject(err)) })) @@ -105,7 +105,7 @@ describe('blocks', () => { it('should get block given its number', async () => { const correctBlock = await web3.eth.getBlock(0) const numberTransactions = await (new Promise((resolve, reject) => { - web3['_requestManager'].send({method: 'eth_getUncleCountByBlockHash', params: [0]}) + web3['_requestManager'].send({ method: 'eth_getUncleCountByBlockHash', params: [0]}) .then(numberTransactions => resolve(numberTransactions)) .catch(err => reject(err)) })) @@ -201,7 +201,7 @@ describe('blocks', () => { const contract = new web3.eth.Contract(abi) const accounts = await web3.eth.getAccounts() - const contractInstance: any = await contract.deploy({ data: code, arguments: [100] }).send({ from: accounts[0], gas: '400000' }) + const contractInstance: any = await contract.deploy({ data: code, arguments: [100]}).send({ from: accounts[0], gas: '400000' }) contractInstance.currentProvider = web3.eth.currentProvider // contractInstance.givenProvider = web3.eth.currentProvider @@ -307,7 +307,7 @@ describe('blocks', () => { const contract = new web3.eth.Contract(abi) const accounts = await web3.eth.getAccounts() - const contractInstance: any = await contract.deploy({ data: code, arguments: [100] }).send({ from: accounts[0], gas: '400000' }) + const contractInstance: any = await contract.deploy({ data: code, arguments: [100]}).send({ from: accounts[0], gas: '400000' }) contractInstance.currentProvider = web3.eth.currentProvider const value = await contractInstance.methods.get().call({ from: accounts[0] }) diff --git a/libs/remix-simulator/test/events.ts b/libs/remix-simulator/test/events.ts index de8bb9b02a..7d8fad7e9c 100644 --- a/libs/remix-simulator/test/events.ts +++ b/libs/remix-simulator/test/events.ts @@ -47,7 +47,7 @@ describe('Events', () => { toBlock: 'latest', topics: ['0x342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735', '0xdcd9c7fa0342f01013bd0bf2bec103a81936162dcebd1f0c38b1d4164c17e0fc'] }) - + // this should include the event triggered by the "set" transaction call. assert.equal(testLogs.length, 1, '1) testLogs length should be equal to 1') assert.equal(ownerLogs.length, 1, '2) ownerLogs length should be equal to 1') @@ -80,8 +80,8 @@ pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; -contract test { - event testEvent(uint indexed value); +contract test { + event testEvent(uint indexed value); function set(Owner p) public { p.changeOwner(address(this)); emit testEvent(123); @@ -119,5 +119,5 @@ contract Owner { function getOwner() external view returns (address) { return owner; } -} +} */ diff --git a/libs/remix-simulator/test/misc.ts b/libs/remix-simulator/test/misc.ts index 785cc3dd55..673e98a35b 100644 --- a/libs/remix-simulator/test/misc.ts +++ b/libs/remix-simulator/test/misc.ts @@ -13,7 +13,7 @@ describe('Misc', () => { describe('web3_clientVersion', () => { it('should get correct remix simulator version', async () => { - web3['_requestManager'].send({ method: 'web3_clientVersion', params: [] }) + web3['_requestManager'].send({ method: 'web3_clientVersion', params: []}) .then(version => { const remixVersion = require('../package.json').version assert.equal(version, 'Remix Simulator/' + remixVersion) @@ -24,7 +24,7 @@ describe('Misc', () => { describe('eth_protocolVersion', () => { it('should get protocol version', async () => { - web3['_requestManager'].send({ method: 'eth_protocolVersion', params: [] }) + web3['_requestManager'].send({ method: 'eth_protocolVersion', params: []}) .then(result => assert.equal(result, '0x3f')) .catch(err => { throw new Error(err) }) }) @@ -53,7 +53,7 @@ describe('Misc', () => { describe('web3_sha3', () => { it('should get result of a sha3', async () => { - web3['_requestManager'].send({ method: 'web3_sha3', params: ['0x68656c6c6f20776f726c64'] }) + web3['_requestManager'].send({ method: 'web3_sha3', params: ['0x68656c6c6f20776f726c64']}) .then(result => assert.equal(result, '0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad')) .catch(err => { throw new Error(err)} ) }) @@ -61,7 +61,7 @@ describe('Misc', () => { describe('eth_getCompilers', () => { it('should get list of compilers', async () => { - web3['_requestManager'].send({ method: 'eth_getCompilers', params: [] }) + web3['_requestManager'].send({ method: 'eth_getCompilers', params: []}) .then(result => assert.equal(result, 0)) .catch(err => { throw new Error(err) }) }) @@ -69,7 +69,7 @@ describe('Misc', () => { describe('eth_compileSolidity', () => { it('get unsupported result when requesting solidity compiler', async () => { - web3['_requestManager'].send({ method: 'eth_compileSolidity', params: [] }) + web3['_requestManager'].send({ method: 'eth_compileSolidity', params: []}) .then(result => assert.equal(result, 'unsupported')) .catch(err => { throw new Error(err) }) }) @@ -77,7 +77,7 @@ describe('Misc', () => { describe('eth_compileLLL', () => { it('get unsupported result when requesting LLL compiler', async () => { - web3['_requestManager'].send({ method: 'eth_compileLLL', params: [] }) + web3['_requestManager'].send({ method: 'eth_compileLLL', params: []}) .then(result => assert.equal(result, 'unsupported')) .catch(err => { throw new Error(err) }) }) @@ -85,7 +85,7 @@ describe('Misc', () => { describe('eth_compileSerpent', () => { it('get unsupported result when requesting serpent compiler', async () => { - web3['_requestManager'].send({ method: 'eth_compileSerpent', params: [] }) + web3['_requestManager'].send({ method: 'eth_compileSerpent', params: []}) .then(result => assert.equal(result, 'unsupported')) .catch(err => { throw new Error(err)} ) }) diff --git a/libs/remix-simulator/test/transactions.ts b/libs/remix-simulator/test/transactions.ts index 30f9a96fd2..88e7a09c05 100644 --- a/libs/remix-simulator/test/transactions.ts +++ b/libs/remix-simulator/test/transactions.ts @@ -6,7 +6,7 @@ import * as assert from 'assert' describe('Transactions', () => { before(async function () { - const provider = new Provider({ fork: 'shanghai'}) + const provider = new Provider({ fork: 'shanghai' }) await provider.init() web3.setProvider(provider as any) }) diff --git a/libs/remix-solidity/src/compiler/compiler-input.ts b/libs/remix-solidity/src/compiler/compiler-input.ts index 61c8ece472..f0c5666622 100644 --- a/libs/remix-solidity/src/compiler/compiler-input.ts +++ b/libs/remix-solidity/src/compiler/compiler-input.ts @@ -20,7 +20,7 @@ export default (sources: Source, opts: CompilerInputOptions): string => { }, remappings: opts.remappings || [] } - } + } if (opts.evmVersion) { if (opts.evmVersion.toLowerCase() == 'default') { opts.evmVersion = null diff --git a/libs/remix-solidity/src/compiler/compiler.ts b/libs/remix-solidity/src/compiler/compiler.ts index fd5f5be51e..5bfab4b882 100644 --- a/libs/remix-solidity/src/compiler/compiler.ts +++ b/libs/remix-solidity/src/compiler/compiler.ts @@ -82,7 +82,7 @@ export class Compiler { */ internalCompile(files: Source, missingInputs?: string[], timeStamp?: number): void { - if(timeStamp < this.state.compilationStartTime && this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger ) { + if (timeStamp < this.state.compilationStartTime && this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger ) { return } this.gatherImports(files, missingInputs, (error, input) => { diff --git a/libs/remix-solidity/src/compiler/helper.ts b/libs/remix-solidity/src/compiler/helper.ts index f4eb8e3f21..8a74603044 100644 --- a/libs/remix-solidity/src/compiler/helper.ts +++ b/libs/remix-solidity/src/compiler/helper.ts @@ -36,7 +36,7 @@ export default { } } }, - + // ^ e.g: // browser/gm.sol: Warning: Source file does not specify required compiler version! Consider adding "pragma solidity ^0.6.12 // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.2.0/contracts/introspection/IERC1820Registry.sol:3:1: ParserError: Source file requires different compiler version (current compiler is 0.7.4+commit.3f05b770.Emscripten.clang) - note that nightly builds are considered to be strictly less than the released version diff --git a/libs/remix-solidity/src/compiler/types.ts b/libs/remix-solidity/src/compiler/types.ts index 8754b8c63d..79718c071a 100644 --- a/libs/remix-solidity/src/compiler/types.ts +++ b/libs/remix-solidity/src/compiler/types.ts @@ -161,7 +161,7 @@ export enum CompilerRetriggerMode { } export interface CompilerState { - compileJSON: ((input: SourceWithTarget, timeStamp?: number) => void) | null, + compileJSON: ((input: SourceWithTarget, timeStamp?: number) => void) | null, worker: any, currentVersion: string| null| undefined, compilerLicense: string| null diff --git a/libs/remix-solidity/tests/compiler-input.spec.ts b/libs/remix-solidity/tests/compiler-input.spec.ts index 3dc247624b..b80b040d3f 100644 --- a/libs/remix-solidity/tests/compiler-input.spec.ts +++ b/libs/remix-solidity/tests/compiler-input.spec.ts @@ -20,6 +20,6 @@ describe('compiler-input', () => { expect(getValidLanguage(undefined)).toBe(null) expect(getValidLanguage('')).toBe(null) expect(getValidLanguage('A')).toBe(null) - expect(getValidLanguage('Something')).toBe(null) + expect(getValidLanguage('Something')).toBe(null) }) }) diff --git a/libs/remix-tests/src/compiler.ts b/libs/remix-tests/src/compiler.ts index 591609c5a8..1c6f7e8064 100644 --- a/libs/remix-tests/src/compiler.ts +++ b/libs/remix-tests/src/compiler.ts @@ -25,7 +25,7 @@ export function writeTestAccountsContract (accounts: string[]) { body += `return accounts[index];` } else { body = `return address(0);` - } + } return testAccountContract.replace('>accounts<', body) } @@ -91,7 +91,7 @@ export function compileFileOrFiles (filename: string, isDirectory: boolean, opts const filepath: string = (isDirectory ? filename : path.dirname(filename)) const importsCallback = (url, cb) => { try { - if(fs.existsSync(url)) cb(null, fs.readFileSync(url, 'utf-8')) + if (fs.existsSync(url)) cb(null, fs.readFileSync(url, 'utf-8')) else { const urlResolver = new RemixURLResolver() urlResolver.resolve(url).then((result) => cb(null, result.content)).catch((error) => cb(error.message)) diff --git a/libs/remix-tests/tests/testRunner.cli.spec.ts b/libs/remix-tests/tests/testRunner.cli.spec.ts index 363e69cb8d..b1d8b97cf4 100644 --- a/libs/remix-tests/tests/testRunner.cli.spec.ts +++ b/libs/remix-tests/tests/testRunner.cli.spec.ts @@ -9,10 +9,10 @@ describe('testRunner: remix-tests CLI', function(){ const executablePath = resolve(__dirname + '/../../../dist/libs/remix-tests/bin/remix-tests') const result = spawnSync('ls', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) - if(result) { + if (result) { const dirContent = result.stdout.toString() // Install dependencies if 'node_modules' is not already present - if(!dirContent.includes('node_modules')) { + if (!dirContent.includes('node_modules')) { execSync('yarn add @remix-project/remix-lib ../../libs/remix-lib', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) execSync('yarn add @remix-project/remix-url-resolver ../../libs/remix-url-resolver', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) execSync('yarn add @remix-project/remix-solidity ../../libs/remix-solidity', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) @@ -21,7 +21,6 @@ describe('testRunner: remix-tests CLI', function(){ } } - describe('test various CLI options', function() { it('remix-tests version', () => { const res = spawnSync(executablePath, ['-V']) @@ -79,8 +78,6 @@ Commands: }) - - it('remix-tests running a test file with custom compiler version', () => { const res = spawnSync(executablePath, ['--compiler', '0.7.4', resolve(__dirname + '/examples_0/assert_ok_test.sol')]) // match initial lines diff --git a/libs/remix-tests/tests/testRunner.spec.ts b/libs/remix-tests/tests/testRunner.spec.ts index 799bdfb3f9..0d2dcf260d 100644 --- a/libs/remix-tests/tests/testRunner.spec.ts +++ b/libs/remix-tests/tests/testRunner.spec.ts @@ -8,8 +8,6 @@ import { deployAll } from '../src/deployer' import { runTest, compilationInterface } from '../src/index' import { ResultsInterface, TestCbInterface, ResultCbInterface } from '../src/index' - - // deepEqualExcluding allows us to exclude specific keys whose values vary. // In this specific test, we'll use this helper to exclude `time` keys. // Assertions for the existence of these will be made at the correct places. @@ -177,8 +175,6 @@ describe('testRunner', function () { }) }) - - describe('assert library NOTEQUAL method tests', function () { const filename: string = __dirname + '/examples_0/assert_notEqual_test.sol' diff --git a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx index 4de6095f26..def6633d02 100644 --- a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx +++ b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx @@ -9,6 +9,7 @@ import { solidityTokensProvider, solidityLanguageConfig } from './syntaxes/solid import { cairoTokensProvider, cairoLanguageConfig } from './syntaxes/cairo' import { zokratesTokensProvider, zokratesLanguageConfig } from './syntaxes/zokrates' import { moveTokenProvider, moveLanguageConfig } from './syntaxes/move' +import { tomlLanguageConfig, tomlTokenProvider } from './syntaxes/toml' import { monacoTypes } from '@remix-ui/editor' import { loadTypes } from './web-types' import { retrieveNodesAtPosition } from './helpers/retrieveNodesAtPosition' @@ -359,6 +360,8 @@ export const EditorUI = (props: EditorUIProps) => { monacoRef.current.editor.setModelLanguage(file.model, 'remix-move') } else if (file.language === 'circom') { monacoRef.current.editor.setModelLanguage(file.model, 'remix-circom') + } else if (file.language === 'toml') { + monacoRef.current.editor.setModelLanguage(file.model, 'remix-toml') } }, [props.currentFile, props.isDiff]) @@ -911,6 +914,7 @@ export const EditorUI = (props: EditorUIProps) => { monacoRef.current.languages.register({ id: 'remix-zokrates' }) monacoRef.current.languages.register({ id: 'remix-move' }) monacoRef.current.languages.register({ id: 'remix-circom' }) + monacoRef.current.languages.register({ id: 'remix-toml' }) // Allow JSON schema requests monacoRef.current.languages.json.jsonDefaults.setDiagnosticsOptions({ enableSchemaRequest: true }) @@ -931,6 +935,9 @@ export const EditorUI = (props: EditorUIProps) => { monacoRef.current.languages.setMonarchTokensProvider('remix-circom', circomTokensProvider as any) monacoRef.current.languages.setLanguageConfiguration('remix-circom', circomLanguageConfig(monacoRef.current) as any) + monacoRef.current.languages.setMonarchTokensProvider('remix-toml', tomlTokenProvider as any) + monacoRef.current.languages.setLanguageConfiguration('remix-toml', tomlLanguageConfig as any) + monacoRef.current.languages.registerDefinitionProvider('remix-solidity', new RemixDefinitionProvider(props, monaco)) monacoRef.current.languages.registerDocumentHighlightProvider('remix-solidity', new RemixHighLightProvider(props, monaco)) monacoRef.current.languages.registerReferenceProvider('remix-solidity', new RemixReferenceProvider(props, monaco)) diff --git a/libs/remix-ui/editor/src/lib/syntaxes/toml.ts b/libs/remix-ui/editor/src/lib/syntaxes/toml.ts new file mode 100644 index 0000000000..c0c5aa3b21 --- /dev/null +++ b/libs/remix-ui/editor/src/lib/syntaxes/toml.ts @@ -0,0 +1,62 @@ +/* eslint-disable no-useless-escape */ +export const tomlLanguageConfig = { + comments: { + lineComment: "#", + }, + brackets: [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ], + autoClosingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: '"', close: '"' }, + { open: "'", close: "'" }, + ], + surroundingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: '"', close: '"' }, + { open: "'", close: "'" }, + ], +} + +export const tomlTokenProvider = { + defaultToken: "", + tokenPostfix: ".toml", + + escapes: + /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/, + + tokenizer: { + root: [ + [/([a-zA-Z0-9_-]+)(\s*)(=)/, ["variable.name", "operators", ""]], + [/\[[a-zA-Z0-9_.-]+\]/, "type.identifier"], + [/\s*((#).*)$/, "comment"], + + [/\d*\.\d+([eE][\-+]?\d+)?/, "number.float"], + [/0[xX][0-9a-fA-F]+/, "number.hex"], + [/\d+/, "number"], + + [/"([^"\\]|\\.)*$/, "string.invalid"], + [/'([^'\\]|\\.)*$/, "string.invalid"], + [/"/, "string", "@string_double"], + [/'/, "string", "@string_single"], + ], + string_double: [ + [/[^\\"]+/, "string"], + [/@escapes/, "string.escape"], + [/\\./, "string.escape.invalid"], + [/"/, "string", "@pop"], + ], + string_single: [ + [/[^\\']+/, "string"], + [/@escapes/, "string.escape"], + [/\\./, "string.escape.invalid"], + [/'/, "string", "@pop"], + ], + }, +} diff --git a/libs/remix-ui/run-tab/src/lib/run-tab.tsx b/libs/remix-ui/run-tab/src/lib/run-tab.tsx index ae1dec6d06..3e3985a772 100644 --- a/libs/remix-ui/run-tab/src/lib/run-tab.tsx +++ b/libs/remix-ui/run-tab/src/lib/run-tab.tsx @@ -326,7 +326,14 @@ export function RunTabUI(props: RunTabProps) { getFuncABIInputs={getFuncABIValues} exEnvironment={runTab.selectExEnv} editInstance={(instance) => { - plugin.call('dapp-draft', 'edit', { address: instance.address, abi: instance.contractData.abi, name: instance.name, network: runTab.networkName }) + plugin.call('dapp-draft', 'edit', { + address: instance.address, + abi: instance.contractData.abi, + name: instance.name, + network: runTab.networkName, + devdoc: instance.contractData.object.devdoc, + methodIdentifiers: instance.contractData.object.evm.methodIdentifiers, + }) }} /> diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index f9b77e2b3e..b1225ccdb5 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -64,7 +64,7 @@ export class RemixURLResolver { // eslint-disable-next-line no-useless-catch try { const req = `https://raw.githubusercontent.com/${root}/${reference}/${filePath}` - const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) + const response: AxiosResponse = await axios.get(req, { transformResponse: []}) return { content: response.data, cleanUrl: root + '/' + filePath } } catch (e) { throw e @@ -79,7 +79,7 @@ export class RemixURLResolver { async handleHttp(url: string, cleanUrl: string): Promise { // eslint-disable-next-line no-useless-catch try { - const response: AxiosResponse = await axios.get(url, { transformResponse: [] }) + const response: AxiosResponse = await axios.get(url, { transformResponse: []}) return { content: response.data, cleanUrl } } catch (e) { throw e @@ -94,7 +94,7 @@ export class RemixURLResolver { async handleHttps(url: string, cleanUrl: string): Promise { // eslint-disable-next-line no-useless-catch try { - const response: AxiosResponse = await axios.get(url, { transformResponse: [] }) + const response: AxiosResponse = await axios.get(url, { transformResponse: []}) return { content: response.data, cleanUrl } } catch (e) { throw e @@ -106,7 +106,7 @@ export class RemixURLResolver { try { const bzz = new Bzz({ url: this.protocol + '//swarm-gateways.net' }) const url = bzz.getDownloadURL(cleanUrl, { mode: 'raw' }) - const response: AxiosResponse = await axios.get(url, { transformResponse: [] }) + const response: AxiosResponse = await axios.get(url, { transformResponse: []}) return { content: response.data, cleanUrl } } catch (e) { throw e @@ -125,7 +125,7 @@ export class RemixURLResolver { const req = 'https://jqgt.remixproject.org/' + url // If you don't find greeter.sol on ipfs gateway use local // const req = 'http://localhost:8080/' + url - const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) + const response: AxiosResponse = await axios.get(req, { transformResponse: []}) return { content: response.data, cleanUrl: url.replace('ipfs/', '') } } catch (e) { throw e @@ -190,7 +190,7 @@ export class RemixURLResolver { for (let i = 0; i < npm_urls.length; i++) { try { const req = npm_urls[i] + url - const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) + const response: AxiosResponse = await axios.get(req, { transformResponse: []}) content = response.data break } catch (e) { @@ -201,7 +201,6 @@ export class RemixURLResolver { if (!content) throw new Error('Unable to load ' + url) return { content, cleanUrl: url } } - getHandlers (): Handler[] { return [ diff --git a/libs/remix-url-resolver/tests/test.ts b/libs/remix-url-resolver/tests/test.ts index 952967d9c3..1a8eebe0ba 100644 --- a/libs/remix-url-resolver/tests/test.ts +++ b/libs/remix-url-resolver/tests/test.ts @@ -109,7 +109,7 @@ describe('testRunner', () => { it('should return contract content of given github path', () => { const expt: object = { cleanUrl: 'ethereum/remix-project/libs/remix-url-resolver/tests/example_1/greeter.sol', - content: fs.readFileSync(__dirname + '/example_1/greeter.sol', { encoding: 'utf8'}), + content: fs.readFileSync(__dirname + '/example_1/greeter.sol', { encoding: 'utf8' }), type: 'github' } assert.deepEqual(results, expt) @@ -139,7 +139,7 @@ describe('testRunner', () => { it('should return contract content of given github path', () => { const expt: object = { cleanUrl: 'ethereum/remix-project/libs/remix-url-resolver/tests/example_1/greeter.sol', - content: fs.readFileSync(__dirname + '/example_1/greeter.sol', { encoding: 'utf8'}) + '\n', + content: fs.readFileSync(__dirname + '/example_1/greeter.sol', { encoding: 'utf8' }) + '\n', type: 'github' } assert.deepEqual(results, expt) @@ -169,7 +169,7 @@ describe('testRunner', () => { it('should return contract content of given github path', () => { const expt: object = { cleanUrl: 'ethereum/remix-project/libs/remix-url-resolver/tests/example_1/greeter.sol', - content: fs.readFileSync(__dirname + '/example_1/greeter.sol', { encoding: 'utf8'}), + content: fs.readFileSync(__dirname + '/example_1/greeter.sol', { encoding: 'utf8' }), type: 'github' } assert.deepEqual(results, expt) @@ -257,7 +257,7 @@ describe('testRunner', () => { assert.equal(Object.keys(results).length, 3) }) it('should return contract content from IPFS url', () => { - const content = fs.readFileSync(__dirname + '/example_1/greeter.sol', { encoding: 'utf8'}) + const content = fs.readFileSync(__dirname + '/example_1/greeter.sol', { encoding: 'utf8' }) const expt: object = { content: content, cleanUrl: 'QmcuCKyokk9Z6f65ADAADNiS2R2xCjfRkv7mYBSWDwtA7M', diff --git a/libs/remix-ws-templates/src/script-templates/contract-deployer/basic-contract-deploy.ts b/libs/remix-ws-templates/src/script-templates/contract-deployer/basic-contract-deploy.ts index 2753f9bcd0..8e4adf95a6 100644 --- a/libs/remix-ws-templates/src/script-templates/contract-deployer/basic-contract-deploy.ts +++ b/libs/remix-ws-templates/src/script-templates/contract-deployer/basic-contract-deploy.ts @@ -7,7 +7,7 @@ import { ethers } from 'ethers' * @param {Number} accountIndex account index from the exposed account * @return {Contract} deployed contract */ -export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { +export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { console.log(`deploying ${contractName}`) // Note that the script needs the ABI which is generated from the compilation artifact. @@ -16,12 +16,12 @@ export const deploy = async (contractName: string, args: Array, accountInde const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) // 'web3Provider' is a remix global variable object - + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) // The contract is NOT deployed yet; we must wait until it is mined await contract.deployed() diff --git a/libs/remix-ws-templates/src/script-templates/contract-deployer/index.ts b/libs/remix-ws-templates/src/script-templates/contract-deployer/index.ts index 93682c8002..5ef8cb395b 100644 --- a/libs/remix-ws-templates/src/script-templates/contract-deployer/index.ts +++ b/libs/remix-ws-templates/src/script-templates/contract-deployer/index.ts @@ -1,12 +1,12 @@ export const contractDeployerScripts = async (plugin) => { - await plugin.call('fileManager', 'writeFile', + await plugin.call('fileManager', 'writeFile', 'scripts/contract-deployer/create2-factory-deploy.ts' , // @ts-ignore (await import('!!raw-loader!./create2-factory-deploy.ts')).default) await plugin.call('fileManager', 'open', 'scripts/contract-deployer/create2-factory-deploy.ts') - - await plugin.call('fileManager', 'writeFile', + + await plugin.call('fileManager', 'writeFile', 'scripts/contract-deployer/basic-contract-deploy.ts' , // @ts-ignore (await import('!!raw-loader!./basic-contract-deploy.ts')).default) diff --git a/libs/remix-ws-templates/src/script-templates/create2-solidity-factory/index.ts b/libs/remix-ws-templates/src/script-templates/create2-solidity-factory/index.ts index 4d7bedb2d8..80283660a2 100644 --- a/libs/remix-ws-templates/src/script-templates/create2-solidity-factory/index.ts +++ b/libs/remix-ws-templates/src/script-templates/create2-solidity-factory/index.ts @@ -1,5 +1,5 @@ export const contractCreate2Factory = async (plugin) => { - await plugin.call('fileManager', 'writeFile', + await plugin.call('fileManager', 'writeFile', 'contracts/libs/create2-factory.sol' , // @ts-ignore (await import('!!raw-loader!./create2-factory.sol')).default) diff --git a/libs/remix-ws-templates/src/script-templates/etherscan/index.ts b/libs/remix-ws-templates/src/script-templates/etherscan/index.ts index 3abbe27dd6..747e4fd8b8 100644 --- a/libs/remix-ws-templates/src/script-templates/etherscan/index.ts +++ b/libs/remix-ws-templates/src/script-templates/etherscan/index.ts @@ -1,12 +1,12 @@ export const etherscanScripts = async (plugin) => { - await plugin.call('fileManager', 'writeFile', + await plugin.call('fileManager', 'writeFile', 'scripts/etherscan/verifyScript.ts' , // @ts-ignore (await import('!!raw-loader!./verifyScript.ts')).default) - + await plugin.call('fileManager', 'open', 'scripts/etherscan/verifyScript.ts') - await plugin.call('fileManager', 'writeFile', + await plugin.call('fileManager', 'writeFile', 'scripts/etherscan/receiptGuidScript.ts' , // @ts-ignore (await import('!!raw-loader!./receiptGuidScript.ts')).default) diff --git a/libs/remix-ws-templates/src/script-templates/etherscan/receiptGuidScript.ts b/libs/remix-ws-templates/src/script-templates/etherscan/receiptGuidScript.ts index cc96dc14e6..b5bdeb3139 100644 --- a/libs/remix-ws-templates/src/script-templates/etherscan/receiptGuidScript.ts +++ b/libs/remix-ws-templates/src/script-templates/etherscan/receiptGuidScript.ts @@ -5,5 +5,5 @@ * @returns {{ status, message, succeed }} receiptStatus */ export const receiptStatus = async (apikey: string, guid: string, isProxyContract?: boolean) => { - return await remix.call('etherscan' as any, 'receiptStatus', guid, apikey, isProxyContract) + return await remix.call('etherscan' as any, 'receiptStatus', guid, apikey, isProxyContract) } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/script-templates/etherscan/verifyScript.ts b/libs/remix-ws-templates/src/script-templates/etherscan/verifyScript.ts index 2126bca90b..ba9c552a70 100644 --- a/libs/remix-ws-templates/src/script-templates/etherscan/verifyScript.ts +++ b/libs/remix-ws-templates/src/script-templates/etherscan/verifyScript.ts @@ -13,5 +13,5 @@ export const verify = async (apikey: string, contractAddress: string, contractAr const compilationResultParam = await remix.call('compilerArtefacts' as any, 'getCompilerAbstract', contractFile) console.log('verifying.. ' + contractName) // update apiKey and chainRef to verify contract on multiple networks - return await remix.call('etherscan' as any, 'verify', apikey, contractAddress, contractArguments, contractName, compilationResultParam, chainRef, isProxyContract, expectedImplAddress) + return await remix.call('etherscan' as any, 'verify', apikey, contractAddress, contractArguments, contractName, compilationResultParam, chainRef, isProxyContract, expectedImplAddress) } diff --git a/libs/remix-ws-templates/src/script-templates/sindri/index.ts b/libs/remix-ws-templates/src/script-templates/sindri/index.ts index fdc58bfad1..0abcebdb2e 100644 --- a/libs/remix-ws-templates/src/script-templates/sindri/index.ts +++ b/libs/remix-ws-templates/src/script-templates/sindri/index.ts @@ -71,12 +71,12 @@ export const sindriScripts = async (plugin: any) => { if (a.isTemplateEntrypoint !== b.isTemplateEntrypoint) return +b.isTemplateEntrypoint - +a.isTemplateEntrypoint return a.path.localeCompare(b.path) }) - .map(({path}) => path)[0] || './circuit.circom' + .map(({ path }) => path)[0] || './circuit.circom' sindriManifest.circuitPath = circomCircuitPath } // Derive the circuit name from the workspace name. - const {name: workspaceName} = await plugin.call('filePanel', 'getCurrentWorkspace') + const { name: workspaceName } = await plugin.call('filePanel', 'getCurrentWorkspace') sindriManifest.name = workspaceName .replace(/\s*-+\s*\d*$/, '') diff --git a/libs/remix-ws-templates/src/script-templates/sindri/run_compile.ts b/libs/remix-ws-templates/src/script-templates/sindri/run_compile.ts index 40a2bb42ad..5d9acda605 100644 --- a/libs/remix-ws-templates/src/script-templates/sindri/run_compile.ts +++ b/libs/remix-ws-templates/src/script-templates/sindri/run_compile.ts @@ -1,4 +1,4 @@ -import {compile} from './utils' +import { compile } from './utils' const main = async () => { const circuit = await compile() diff --git a/libs/remix-ws-templates/src/script-templates/sindri/run_prove.ts b/libs/remix-ws-templates/src/script-templates/sindri/run_prove.ts index 98e2ea43d7..cd81dbde15 100644 --- a/libs/remix-ws-templates/src/script-templates/sindri/run_prove.ts +++ b/libs/remix-ws-templates/src/script-templates/sindri/run_prove.ts @@ -1,4 +1,4 @@ -import {prove} from './utils' +import { prove } from './utils' // You must modify the input signals to include the data you're trying to generate a proof for. const signals: {[name: string]: number | string} = {} diff --git a/libs/remix-ws-templates/src/script-templates/sindri/utils.ts b/libs/remix-ws-templates/src/script-templates/sindri/utils.ts index 8905d037da..006cd9fa6c 100644 --- a/libs/remix-ws-templates/src/script-templates/sindri/utils.ts +++ b/libs/remix-ws-templates/src/script-templates/sindri/utils.ts @@ -1,5 +1,5 @@ import sindriClient from 'sindri' -import type {CircuitInfoResponse, ProofInfoResponse} from 'sindri' +import type { CircuitInfoResponse, ProofInfoResponse } from 'sindri' sindriClient.logLevel = 'info' @@ -9,7 +9,7 @@ const authorize = async () => { if (!apiKey) { throw new Error('Missing API key.') } - sindriClient.authorize({apiKey}) + sindriClient.authorize({ apiKey }) } catch { const message = 'No Sindri API key found. Please click the gear in the lower left corner to open the settings page, and add your API key under "Sindri Credentials".' await remix.call('notification', 'toast', message) diff --git a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/ethers-lib.ts index 2753f9bcd0..8e4adf95a6 100644 --- a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/ethers-lib.ts @@ -7,7 +7,7 @@ import { ethers } from 'ethers' * @param {Number} accountIndex account index from the exposed account * @return {Contract} deployed contract */ -export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { +export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { console.log(`deploying ${contractName}`) // Note that the script needs the ABI which is generated from the compilation artifact. @@ -16,12 +16,12 @@ export const deploy = async (contractName: string, args: Array, accountInde const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) // 'web3Provider' is a remix global variable object - + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) // The contract is NOT deployed yet; we must wait until it is mined await contract.deployed() diff --git a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/web3-lib.ts index c57e501039..cbd4f48489 100644 --- a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/web3-lib.ts @@ -21,7 +21,7 @@ export const deploy = async (contractName: string, args: Array, from?: stri const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) const contractSend: ContractSendMethod = contract.deploy({ data: metadata.data.bytecode.object, @@ -32,5 +32,5 @@ export const deploy = async (contractName: string, args: Array, from?: stri from: from || accounts[0], gas: gas || 1500000 }) - return newContractInstance.options + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/hashchecker/scripts/groth16/groth16_trusted_setup.ts b/libs/remix-ws-templates/src/templates/hashchecker/scripts/groth16/groth16_trusted_setup.ts index 278146b08a..9692a62954 100644 --- a/libs/remix-ws-templates/src/templates/hashchecker/scripts/groth16/groth16_trusted_setup.ts +++ b/libs/remix-ws-templates/src/templates/hashchecker/scripts/groth16/groth16_trusted_setup.ts @@ -40,12 +40,12 @@ const logger = { console.log('exportVerificationKey') const vKey = await snarkjs.zKey.exportVerificationKey(zkey_final) await remix.call('fileManager', 'writeFile', './zk/keys/groth16/verification_key.json', JSON.stringify(vKey, null, 2)) - + console.log('save zkey_final') await remix.call('fileManager', 'writeFile', './zk/keys/groth16/zkey_final.txt', JSON.stringify(Array.from(((zkey_final as any).data)))) - + console.log('setup done.') - + } catch (e) { console.error(e.message) } diff --git a/libs/remix-ws-templates/src/templates/hashchecker/scripts/groth16/groth16_zkproof.ts b/libs/remix-ws-templates/src/templates/hashchecker/scripts/groth16/groth16_zkproof.ts index daea2ed230..146bdab52b 100644 --- a/libs/remix-ws-templates/src/templates/hashchecker/scripts/groth16/groth16_zkproof.ts +++ b/libs/remix-ws-templates/src/templates/hashchecker/scripts/groth16/groth16_zkproof.ts @@ -20,21 +20,21 @@ const logger = { // @ts-ignore const wasmBuffer = await remix.call('fileManager', 'readFile', 'circuits/.bin/calculate_hash.wasm', { encoding: null }); // @ts-ignore - const wasm = new Uint8Array(wasmBuffer); - + const wasm = new Uint8Array(wasmBuffer); + const zkey_final = { type: "mem", data: new Uint8Array(JSON.parse(await remix.call('fileManager', 'readFile', './zk/keys/groth16/zkey_final.txt'))) } - const wtns = { type: "mem" }; + const wtns = { type: "mem" }; const vKey = JSON.parse(await remix.call('fileManager', 'readFile', './zk/keys/groth16/verification_key.json')) - + const value1 = '1234' const value2 = '2' const value3 = '3' const value4 = '4' - + const wrongValue = '5' // put this in the poseidon hash calculation to simulate a non matching hash. const signals = { @@ -44,25 +44,24 @@ const logger = { value4, hash: poseidon([value1, value2, value3, value4]) } - + console.log('calculate') await snarkjs.wtns.calculate(signals, wasm, wtns); - + console.log('check') await snarkjs.wtns.check(r1cs, wtns, logger); - console.log('prove') const { proof, publicSignals } = await snarkjs.groth16.prove(zkey_final, wtns); - + const verified = await snarkjs.groth16.verify(vKey, publicSignals, proof, logger); console.log('zk proof validity', verified); - + const templates = { groth16: await remix.call('fileManager', 'readFile', 'templates/groth16_verifier.sol.ejs') } const solidityContract = await snarkjs.zKey.exportSolidityVerifier(zkey_final, templates) - + await remix.call('fileManager', 'writeFile', './zk/build/groth16/zk_verifier.sol', solidityContract) await remix.call('fileManager', 'writeFile', 'zk/build/groth16/input.json', JSON.stringify({ _pA: [proof.pi_a[0], proof.pi_a[1]], diff --git a/libs/remix-ws-templates/src/templates/hashchecker/scripts/plonk/plonk_zkproof.ts b/libs/remix-ws-templates/src/templates/hashchecker/scripts/plonk/plonk_zkproof.ts index 31b2b8a1f9..544cd10b6d 100644 --- a/libs/remix-ws-templates/src/templates/hashchecker/scripts/plonk/plonk_zkproof.ts +++ b/libs/remix-ws-templates/src/templates/hashchecker/scripts/plonk/plonk_zkproof.ts @@ -28,7 +28,7 @@ const logger = { const value2 = '2' const value3 = '3' const value4 = '4' - + const wrongValue = '5' // put this in the poseidon hash calculation to simulate a non matching hash. const signals = { @@ -41,11 +41,11 @@ const logger = { console.log('calculate') await snarkjs.wtns.calculate(signals, wasm, wtns, logger); - + const { proof, publicSignals } = await snarkjs.plonk.prove(zkey_final, wtns); const vKey = JSON.parse(await remix.call('fileManager', 'readFile', './zk/keys/plonk/verification_key.json')) - + const verified = await snarkjs.plonk.verify(vKey, publicSignals, proof); console.log('zk proof validity', verified); @@ -53,7 +53,7 @@ const logger = { plonk: await remix.call('fileManager', 'readFile', 'templates/plonk_verifier.sol.ejs') } const solidityContract = await snarkjs.zKey.exportSolidityVerifier(zkey_final, templates) - + await remix.call('fileManager', 'writeFile', 'zk/build/plonk/zk_verifier.sol', solidityContract) await remix.call('fileManager', 'writeFile', 'zk/build/plonk/input.json', JSON.stringify({ _proof: [ @@ -84,9 +84,9 @@ const logger = { ], _pubSignals: publicSignals }, null, 2)) - + console.log('proof done.') - + } catch (e) { console.error(e.message) } diff --git a/libs/remix-ws-templates/src/templates/ozerc1155/index.ts b/libs/remix-ws-templates/src/templates/ozerc1155/index.ts index f200464c07..40811b978f 100644 --- a/libs/remix-ws-templates/src/templates/ozerc1155/index.ts +++ b/libs/remix-ws-templates/src/templates/ozerc1155/index.ts @@ -29,6 +29,6 @@ export default async (opts) => { // @ts-ignore else filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default } - + return filesObj } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/ethers-lib.ts index 2753f9bcd0..8e4adf95a6 100644 --- a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/ethers-lib.ts @@ -7,7 +7,7 @@ import { ethers } from 'ethers' * @param {Number} accountIndex account index from the exposed account * @return {Contract} deployed contract */ -export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { +export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { console.log(`deploying ${contractName}`) // Note that the script needs the ABI which is generated from the compilation artifact. @@ -16,12 +16,12 @@ export const deploy = async (contractName: string, args: Array, accountInde const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) // 'web3Provider' is a remix global variable object - + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) // The contract is NOT deployed yet; we must wait until it is mined await contract.deployed() diff --git a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/web3-lib.ts index 921774572a..32369998ad 100644 --- a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/web3-lib.ts @@ -21,7 +21,7 @@ export const deploy = async (contractName: string, args: Array, from?: stri const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) const contractSend: ContractSendMethod = contract.deploy({ data: metadata.data.bytecode.object, @@ -32,5 +32,5 @@ export const deploy = async (contractName: string, args: Array, from?: stri from: from || accounts[0], gas: gas || 3600000 }) - return newContractInstance.options + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc20/index.ts b/libs/remix-ws-templates/src/templates/ozerc20/index.ts index 2a8b0c8f3c..09b55ae00b 100644 --- a/libs/remix-ws-templates/src/templates/ozerc20/index.ts +++ b/libs/remix-ws-templates/src/templates/ozerc20/index.ts @@ -23,7 +23,7 @@ export default async (opts) => { // If no options is selected, opts.upgradeable will be undefined // We do not show test file for upgradeable contract - + if (!opts || opts.upgradeable === undefined || !opts.upgradeable) { // @ts-ignore if (erc20.defaults.mintable) filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_mintable_test.sol')).default diff --git a/libs/remix-ws-templates/src/templates/ozerc20/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/ozerc20/scripts/ethers-lib.ts index 2753f9bcd0..8e4adf95a6 100644 --- a/libs/remix-ws-templates/src/templates/ozerc20/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc20/scripts/ethers-lib.ts @@ -7,7 +7,7 @@ import { ethers } from 'ethers' * @param {Number} accountIndex account index from the exposed account * @return {Contract} deployed contract */ -export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { +export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { console.log(`deploying ${contractName}`) // Note that the script needs the ABI which is generated from the compilation artifact. @@ -16,12 +16,12 @@ export const deploy = async (contractName: string, args: Array, accountInde const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) // 'web3Provider' is a remix global variable object - + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) // The contract is NOT deployed yet; we must wait until it is mined await contract.deployed() diff --git a/libs/remix-ws-templates/src/templates/ozerc20/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/ozerc20/scripts/web3-lib.ts index c57e501039..cbd4f48489 100644 --- a/libs/remix-ws-templates/src/templates/ozerc20/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc20/scripts/web3-lib.ts @@ -21,7 +21,7 @@ export const deploy = async (contractName: string, args: Array, from?: stri const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) const contractSend: ContractSendMethod = contract.deploy({ data: metadata.data.bytecode.object, @@ -32,5 +32,5 @@ export const deploy = async (contractName: string, args: Array, from?: stri from: from || accounts[0], gas: gas || 1500000 }) - return newContractInstance.options + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc721/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/ozerc721/scripts/ethers-lib.ts index 2753f9bcd0..8e4adf95a6 100644 --- a/libs/remix-ws-templates/src/templates/ozerc721/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc721/scripts/ethers-lib.ts @@ -7,7 +7,7 @@ import { ethers } from 'ethers' * @param {Number} accountIndex account index from the exposed account * @return {Contract} deployed contract */ -export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { +export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { console.log(`deploying ${contractName}`) // Note that the script needs the ABI which is generated from the compilation artifact. @@ -16,12 +16,12 @@ export const deploy = async (contractName: string, args: Array, accountInde const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) // 'web3Provider' is a remix global variable object - + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) // The contract is NOT deployed yet; we must wait until it is mined await contract.deployed() diff --git a/libs/remix-ws-templates/src/templates/ozerc721/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/ozerc721/scripts/web3-lib.ts index c57e501039..cbd4f48489 100644 --- a/libs/remix-ws-templates/src/templates/ozerc721/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc721/scripts/web3-lib.ts @@ -21,7 +21,7 @@ export const deploy = async (contractName: string, args: Array, from?: stri const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) const contractSend: ContractSendMethod = contract.deploy({ data: metadata.data.bytecode.object, @@ -32,5 +32,5 @@ export const deploy = async (contractName: string, args: Array, from?: stri from: from || accounts[0], gas: gas || 1500000 }) - return newContractInstance.options + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/playground/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/playground/scripts/ethers-lib.ts index 2753f9bcd0..8e4adf95a6 100644 --- a/libs/remix-ws-templates/src/templates/playground/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/playground/scripts/ethers-lib.ts @@ -7,7 +7,7 @@ import { ethers } from 'ethers' * @param {Number} accountIndex account index from the exposed account * @return {Contract} deployed contract */ -export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { +export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { console.log(`deploying ${contractName}`) // Note that the script needs the ABI which is generated from the compilation artifact. @@ -16,12 +16,12 @@ export const deploy = async (contractName: string, args: Array, accountInde const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) // 'web3Provider' is a remix global variable object - + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) // The contract is NOT deployed yet; we must wait until it is mined await contract.deployed() diff --git a/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts index c57e501039..cbd4f48489 100644 --- a/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/playground/scripts/web3-lib.ts @@ -21,7 +21,7 @@ export const deploy = async (contractName: string, args: Array, from?: stri const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) const contractSend: ContractSendMethod = contract.deploy({ data: metadata.data.bytecode.object, @@ -32,5 +32,5 @@ export const deploy = async (contractName: string, args: Array, from?: stri from: from || accounts[0], gas: gas || 1500000 }) - return newContractInstance.options + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/remixDefault/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/remixDefault/scripts/ethers-lib.ts index 2753f9bcd0..8e4adf95a6 100644 --- a/libs/remix-ws-templates/src/templates/remixDefault/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/remixDefault/scripts/ethers-lib.ts @@ -7,7 +7,7 @@ import { ethers } from 'ethers' * @param {Number} accountIndex account index from the exposed account * @return {Contract} deployed contract */ -export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { +export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { console.log(`deploying ${contractName}`) // Note that the script needs the ABI which is generated from the compilation artifact. @@ -16,12 +16,12 @@ export const deploy = async (contractName: string, args: Array, accountInde const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) // 'web3Provider' is a remix global variable object - + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) // The contract is NOT deployed yet; we must wait until it is mined await contract.deployed() diff --git a/libs/remix-ws-templates/src/templates/remixDefault/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/remixDefault/scripts/web3-lib.ts index c57e501039..cbd4f48489 100644 --- a/libs/remix-ws-templates/src/templates/remixDefault/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/remixDefault/scripts/web3-lib.ts @@ -21,7 +21,7 @@ export const deploy = async (contractName: string, args: Array, from?: stri const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) const contractSend: ContractSendMethod = contract.deploy({ data: metadata.data.bytecode.object, @@ -32,5 +32,5 @@ export const deploy = async (contractName: string, args: Array, from?: stri from: from || accounts[0], gas: gas || 1500000 }) - return newContractInstance.options + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/rln/scripts/groth16/groth16_trusted_setup.ts b/libs/remix-ws-templates/src/templates/rln/scripts/groth16/groth16_trusted_setup.ts index 19b9736314..c4a9513c92 100644 --- a/libs/remix-ws-templates/src/templates/rln/scripts/groth16/groth16_trusted_setup.ts +++ b/libs/remix-ws-templates/src/templates/rln/scripts/groth16/groth16_trusted_setup.ts @@ -40,12 +40,12 @@ const logger = { console.log('exportVerificationKey') const vKey = await snarkjs.zKey.exportVerificationKey(zkey_final) await remix.call('fileManager', 'writeFile', './zk/keys/groth16/verification_key.json', JSON.stringify(vKey, null, 2)) - + console.log('save zkey_final') await remix.call('fileManager', 'writeFile', './zk/keys/groth16/zkey_final.txt', (zkey_final as any).data, { encoding: null }) - + console.log('setup done.') - + } catch (e) { console.error(e.message) } diff --git a/libs/remix-ws-templates/src/templates/rln/scripts/groth16/groth16_zkproof.ts b/libs/remix-ws-templates/src/templates/rln/scripts/groth16/groth16_zkproof.ts index f8cef8c28e..d982568928 100644 --- a/libs/remix-ws-templates/src/templates/rln/scripts/groth16/groth16_zkproof.ts +++ b/libs/remix-ws-templates/src/templates/rln/scripts/groth16/groth16_zkproof.ts @@ -45,13 +45,13 @@ function hashNullifier(message: any): bigint { async function prove (signals, wasm, wtns, r1cs, zkey_final, vKey) { console.log('calculate') await snarkjs.wtns.calculate(signals, wasm, wtns); - + console.log('check') - await snarkjs.wtns.check(r1cs, wtns, logger); + await snarkjs.wtns.check(r1cs, wtns, logger); console.log('prove') const { proof, publicSignals } = await snarkjs.groth16.prove(zkey_final, wtns); - + const verified = await snarkjs.groth16.verify(vKey, publicSignals, proof, logger); console.log('zk proof validity', verified); @@ -81,33 +81,33 @@ async function prove (signals, wasm, wtns, r1cs, zkey_final, vKey) { // @ts-ignore const wasmBuffer = await remix.call('fileManager', 'readFile', 'circuits/.bin/rln.wasm', { encoding: null }); // @ts-ignore - const wasm = new Uint8Array(wasmBuffer); - + const wasm = new Uint8Array(wasmBuffer); + const zkey_final = { type: "mem", data: new Uint8Array(await remix.call('fileManager', 'readFile', './zk/keys/groth16/zkey_final.txt', { encoding: null })) } - const wtns = { type: "mem" }; + const wtns = { type: "mem" }; const vKey = JSON.parse(await remix.call('fileManager', 'readFile', './zk/keys/groth16/verification_key.json')) - + // build list of identity commitments const secrets = [] const identityCommitments = [] const rateCommitments = [] const userMessageLimit = 0x2 - for (let k = 0; k < 2; k++) { + for (let k = 0; k < 2; k++) { const identitySecret = BigInt(ethers.utils.hexlify(ethers.utils.randomBytes(32))) secrets.push(identitySecret) - + const identityCommitment = poseidon([identitySecret]) const rateCommitment = poseidon([identityCommitment, userMessageLimit]) identityCommitments.push(identityCommitment) rateCommitments.push(rateCommitment) } - + let tree - + try { tree = new IncrementalMerkleTree(poseidon, 20, BigInt(0), 2, rateCommitments) // Binary tree. } catch (e) { @@ -130,7 +130,7 @@ async function prove (signals, wasm, wtns, r1cs, zkey_final, vKey) { externalNullifier: 0xa // hash(epoch, appId) } const proof1 = await prove(signals1, wasm, wtns, r1cs, zkey_final, vKey) - + const signals2 = { identitySecret: secrets[0], userMessageLimit, @@ -146,12 +146,12 @@ async function prove (signals, wasm, wtns, r1cs, zkey_final, vKey) { console.log(secret.toString(10)) console.log(Fq.normalize(secrets[0])) - + const templates = { groth16: await remix.call('fileManager', 'readFile', 'templates/groth16_verifier.sol.ejs') } const solidityContract = await snarkjs.zKey.exportSolidityVerifier(zkey_final, templates) - + await remix.call('fileManager', 'writeFile', './zk/build/groth16/zk_verifier.sol', solidityContract) } catch (e) { console.error(e.message) diff --git a/libs/remix-ws-templates/src/templates/rln/scripts/plonk/plonk_zkproof.ts b/libs/remix-ws-templates/src/templates/rln/scripts/plonk/plonk_zkproof.ts index 09b0a885f8..b05c84720b 100644 --- a/libs/remix-ws-templates/src/templates/rln/scripts/plonk/plonk_zkproof.ts +++ b/libs/remix-ws-templates/src/templates/rln/scripts/plonk/plonk_zkproof.ts @@ -45,13 +45,13 @@ function hashNullifier(message: any): bigint { async function prove (signals, wasm, wtns, r1cs, zkey_final, vKey) { console.log('calculate') await snarkjs.wtns.calculate(signals, wasm, wtns); - + console.log('check') - await snarkjs.wtns.check(r1cs, wtns, logger); + await snarkjs.wtns.check(r1cs, wtns, logger); console.log('prove') const { proof, publicSignals } = await snarkjs.plonk.prove(zkey_final, wtns); - + const verified = await snarkjs.plonk.verify(vKey, publicSignals, proof, logger); console.log('zk proof validity', verified); @@ -84,7 +84,7 @@ async function prove (signals, wasm, wtns, r1cs, zkey_final, vKey) { ethers.utils.hexZeroPad(ethers.BigNumber.from(proof.eval_zw).toHexString(), 32), ] }, null, 2)) - + console.log('proof done.') return { proof, @@ -104,8 +104,8 @@ async function prove (signals, wasm, wtns, r1cs, zkey_final, vKey) { // @ts-ignore const wasmBuffer = await remix.call('fileManager', 'readFile', 'circuits/.bin/rln.wasm', { encoding: null }); // @ts-ignore - const wasm = new Uint8Array(wasmBuffer); - + const wasm = new Uint8Array(wasmBuffer); + const zkey_final = { type: "mem", // @ts-ignore @@ -114,24 +114,24 @@ async function prove (signals, wasm, wtns, r1cs, zkey_final, vKey) { const wtns = { type: "mem" }; const vKey = JSON.parse(await remix.call('fileManager', 'readFile', './zk/keys/plonk/verification_key.json')) - + // build list of identity commitments const secrets = [] const identityCommitments = [] const rateCommitments = [] const userMessageLimit = 0x2 - for (let k = 0; k < 2; k++) { + for (let k = 0; k < 2; k++) { const identitySecret = BigInt(ethers.utils.hexlify(ethers.utils.randomBytes(32))) secrets.push(identitySecret) - + const identityCommitment = poseidon([identitySecret]) const rateCommitment = poseidon([identityCommitment, userMessageLimit]) identityCommitments.push(identityCommitment) rateCommitments.push(rateCommitment) } - + let tree - + try { tree = new IncrementalMerkleTree(poseidon, 20, BigInt(0), 2, rateCommitments) // Binary tree. } catch (e) { @@ -154,7 +154,7 @@ async function prove (signals, wasm, wtns, r1cs, zkey_final, vKey) { externalNullifier: 0xa // hash(epoch, appId) } const proof1 = await prove(signals1, wasm, wtns, r1cs, zkey_final, vKey) - + const signals2 = { identitySecret: secrets[0], userMessageLimit, @@ -170,12 +170,12 @@ async function prove (signals, wasm, wtns, r1cs, zkey_final, vKey) { console.log(secret.toString(10)) console.log(Fq.normalize(secrets[0])) - + const templates = { plonk: await remix.call('fileManager', 'readFile', 'templates/plonk_verifier.sol.ejs') } const solidityContract = await snarkjs.zKey.exportSolidityVerifier(zkey_final, templates) - + await remix.call('fileManager', 'writeFile', './zk/build/plonk/zk_verifier.sol', solidityContract) } catch (e) { console.error(e.message) diff --git a/libs/remix-ws-templates/src/templates/semaphore/scripts/groth16/groth16_trusted_setup.ts b/libs/remix-ws-templates/src/templates/semaphore/scripts/groth16/groth16_trusted_setup.ts index d3b205f858..a155ef2192 100644 --- a/libs/remix-ws-templates/src/templates/semaphore/scripts/groth16/groth16_trusted_setup.ts +++ b/libs/remix-ws-templates/src/templates/semaphore/scripts/groth16/groth16_trusted_setup.ts @@ -40,13 +40,13 @@ const logger = { console.log('exportVerificationKey') const vKey = await snarkjs.zKey.exportVerificationKey(zkey_final) await remix.call('fileManager', 'writeFile', './zk/keys/groth16/verification_key.json', JSON.stringify(vKey, null, 2)) - + console.log('save zkey_final') // @ts-ignore await remix.call('fileManager', 'writeFile', './zk/keys/groth16/zkey_final.txt', (zkey_final as any).data, { encoding: null }) - + console.log('setup done.') - + } catch (e) { console.error(e.message) } diff --git a/libs/remix-ws-templates/src/templates/semaphore/scripts/groth16/groth16_zkproof.ts b/libs/remix-ws-templates/src/templates/semaphore/scripts/groth16/groth16_zkproof.ts index d477342506..35c708efa7 100644 --- a/libs/remix-ws-templates/src/templates/semaphore/scripts/groth16/groth16_zkproof.ts +++ b/libs/remix-ws-templates/src/templates/semaphore/scripts/groth16/groth16_zkproof.ts @@ -33,33 +33,33 @@ function hash(message: any): bigint { // @ts-ignore const wasmBuffer = await remix.call('fileManager', 'readFile', 'circuits/.bin/semaphore.wasm', true); // @ts-ignore - const wasm = new Uint8Array(wasmBuffer); - + const wasm = new Uint8Array(wasmBuffer); + const zkey_final = { type: "mem", // @ts-ignore data: new Uint8Array(await remix.call('fileManager', 'readFile', './zk/keys/groth16/zkey_final.txt', { encoding: null })) } - const wtns = { type: "mem" }; + const wtns = { type: "mem" }; const vKey = JSON.parse(await remix.call('fileManager', 'readFile', './zk/keys/groth16/verification_key.json')) - + // build list of identity commitments const secrets = [] const identityCommitments = [] for (let k = 0; k < 2; k++) { const identityTrapdoor = BigInt(ethers.utils.hexlify(ethers.utils.randomBytes(32))) const identityNullifier = BigInt(ethers.utils.hexlify(ethers.utils.randomBytes(32))) - secrets.push({identityTrapdoor, identityNullifier}) - + secrets.push({ identityTrapdoor, identityNullifier }) + const secret = poseidon([identityNullifier, identityTrapdoor]) const identityCommitment = poseidon([secret]) identityCommitments.push(identityCommitment) } //console.log('incremental tree', identityCommitments.map((x) => x.toString())) - + let tree - + try { tree = new IncrementalMerkleTree(poseidon, 20, BigInt(0), 2, identityCommitments) // Binary tree. } catch (e) { @@ -69,11 +69,11 @@ function hash(message: any): bigint { const index = tree.indexOf(identityCommitments[0]) console.log(index.toString()) - + const proof1 = tree.createProof(0) console.log('prepare signals for id ', identityCommitments[0].toString(), tree.indexOf(identityCommitments[0]), proof1.siblings.map((x)=> x.toString())) - + const signals = { identityTrapdoor: secrets[0].identityTrapdoor, identityNullifier: secrets[0].identityNullifier, @@ -82,16 +82,16 @@ function hash(message: any): bigint { externalNullifier: hash(42), signalHash: hash(ethers.utils.formatBytes32String("Hello World")) } - + console.log('calculate') await snarkjs.wtns.calculate(signals, wasm, wtns); - + console.log('check') await snarkjs.wtns.check(r1cs, wtns, logger); console.log('prove') const { proof, publicSignals } = await snarkjs.groth16.prove(zkey_final, wtns); - + const verified = await snarkjs.groth16.verify(vKey, publicSignals, proof, logger); console.log('zk proof validity', verified); proof1.root.toString() === publicSignals[0] ? console.log('merkle proof valid') : console.log('merkle proof invalid') @@ -100,7 +100,7 @@ function hash(message: any): bigint { groth16: await remix.call('fileManager', 'readFile', 'templates/groth16_verifier.sol.ejs') } const solidityContract = await snarkjs.zKey.exportSolidityVerifier(zkey_final, templates) - + await remix.call('fileManager', 'writeFile', './zk/build/groth16/zk_verifier.sol', solidityContract) await remix.call('fileManager', 'writeFile', 'zk/build/groth16/input.json', JSON.stringify({ _pA: [proof.pi_a[0], proof.pi_a[1]], diff --git a/libs/remix-ws-templates/src/templates/semaphore/scripts/plonk/plonk_trusted_setup.ts b/libs/remix-ws-templates/src/templates/semaphore/scripts/plonk/plonk_trusted_setup.ts index 8ebdab1e71..c6d73a91fb 100644 --- a/libs/remix-ws-templates/src/templates/semaphore/scripts/plonk/plonk_trusted_setup.ts +++ b/libs/remix-ws-templates/src/templates/semaphore/scripts/plonk/plonk_trusted_setup.ts @@ -24,13 +24,13 @@ const logger = { console.log('exportVerificationKey') const vKey = await snarkjs.zKey.exportVerificationKey(zkey_final) await remix.call('fileManager', 'writeFile', './zk/keys/plonk/verification_key.json', JSON.stringify(vKey, null, 2)) - + console.log('save zkey_final') // @ts-ignore await remix.call('fileManager', 'writeFile', './zk/keys/plonk/zkey_final.txt', (zkey_final as any).data, { encoding: null }) - + console.log('setup done.') - + } catch (e) { console.error(e.message) } diff --git a/libs/remix-ws-templates/src/templates/semaphore/scripts/plonk/plonk_zkproof.ts b/libs/remix-ws-templates/src/templates/semaphore/scripts/plonk/plonk_zkproof.ts index 6472567bb1..fd7f51d4a0 100644 --- a/libs/remix-ws-templates/src/templates/semaphore/scripts/plonk/plonk_zkproof.ts +++ b/libs/remix-ws-templates/src/templates/semaphore/scripts/plonk/plonk_zkproof.ts @@ -33,33 +33,33 @@ function hash(message: any): bigint { // @ts-ignore const wasmBuffer = await remix.call('fileManager', 'readFile', 'circuits/.bin/semaphore.wasm', true); // @ts-ignore - const wasm = new Uint8Array(wasmBuffer); - + const wasm = new Uint8Array(wasmBuffer); + const zkey_final = { type: "mem", // @ts-ignore data: new Uint8Array(await remix.call('fileManager', 'readFile', './zk/keys/plonk/zkey_final.txt', { encoding: null })) } - const wtns = { type: "mem" }; + const wtns = { type: "mem" }; const vKey = JSON.parse(await remix.call('fileManager', 'readFile', './zk/keys/plonk/verification_key.json')) - + // build list of identity commitments const secrets = [] const identityCommitments = [] for (let k = 0; k < 2; k++) { const identityTrapdoor = BigInt(ethers.utils.hexlify(ethers.utils.randomBytes(32))) const identityNullifier = BigInt(ethers.utils.hexlify(ethers.utils.randomBytes(32))) - secrets.push({identityTrapdoor, identityNullifier}) - + secrets.push({ identityTrapdoor, identityNullifier }) + const secret = poseidon([identityNullifier, identityTrapdoor]) const identityCommitment = poseidon([secret]) identityCommitments.push(identityCommitment) } //console.log('incremental tree', identityCommitments.map((x) => x.toString())) - + let tree - + try { tree = new IncrementalMerkleTree(poseidon, 20, BigInt(0), 2, identityCommitments) // Binary tree. } catch (e) { @@ -69,11 +69,11 @@ function hash(message: any): bigint { const index = tree.indexOf(identityCommitments[0]) console.log(index.toString()) - + const proof1 = tree.createProof(0) console.log('prepare signals for id ', identityCommitments[0].toString(), tree.indexOf(identityCommitments[0]), proof1.siblings.map((x)=> x.toString())) - + const signals = { identityTrapdoor: secrets[0].identityTrapdoor, identityNullifier: secrets[0].identityNullifier, @@ -82,16 +82,16 @@ function hash(message: any): bigint { externalNullifier: hash(42), signalHash: hash(ethers.utils.formatBytes32String("Hello World")) } - + console.log('calculate') await snarkjs.wtns.calculate(signals, wasm, wtns); - + console.log('check') await snarkjs.wtns.check(r1cs, wtns, logger); console.log('prove') const { proof, publicSignals } = await snarkjs.plonk.prove(zkey_final, wtns); - + const verified = await snarkjs.plonk.verify(vKey, publicSignals, proof, logger); console.log('zk proof validity', verified); proof1.root.toString() === publicSignals[0] ? console.log('merkle proof valid') : console.log('merkle proof invalid') @@ -100,7 +100,7 @@ function hash(message: any): bigint { plonk: await remix.call('fileManager', 'readFile', 'templates/plonk_verifier.sol.ejs') } const solidityContract = await snarkjs.zKey.exportSolidityVerifier(zkey_final, templates) - + await remix.call('fileManager', 'writeFile', './zk/build/plonk/zk_verifier.sol', solidityContract) await remix.call('fileManager', 'writeFile', 'zk/build/plonk/input.json', JSON.stringify({ _proof: [ @@ -131,7 +131,7 @@ function hash(message: any): bigint { ], _pubSignals: publicSignals }, null, 2)) - + console.log('proof done.') } catch (e) { console.error(e.message) diff --git a/libs/remix-ws-templates/src/templates/semaphore/scripts/run_setup.ts b/libs/remix-ws-templates/src/templates/semaphore/scripts/run_setup.ts index 1d8505b71d..26764841d7 100644 --- a/libs/remix-ws-templates/src/templates/semaphore/scripts/run_setup.ts +++ b/libs/remix-ws-templates/src/templates/semaphore/scripts/run_setup.ts @@ -53,19 +53,19 @@ function hash(message: any): bigint { console.log('exportVerificationKey') const vKey = await snarkjs.zKey.exportVerificationKey(zkey_final) await remix.call('fileManager', 'writeFile', './zk/build/verification_key.json', JSON.stringify(vKey)) - + const templates = { groth16: await remix.call('fileManager', 'readFile', 'templates/groth16_verifier.sol.ejs') } const solidityContract = await snarkjs.zKey.exportSolidityVerifier(zkey_final, templates) - + await remix.call('fileManager', 'writeFile', './zk/build/zk_verifier.sol', solidityContract) - + console.log('buffer', (zkey_final as any).data.length) await remix.call('fileManager', 'writeFile', './zk/build/zk_setup.txt', JSON.stringify(Array.from(((zkey_final as any).data)))) - + console.log('setup done.') - + } catch (e) { console.error(e.message) } diff --git a/libs/remix-ws-templates/src/templates/semaphore/scripts/run_verification.ts b/libs/remix-ws-templates/src/templates/semaphore/scripts/run_verification.ts index e97e4074e9..24da889470 100644 --- a/libs/remix-ws-templates/src/templates/semaphore/scripts/run_verification.ts +++ b/libs/remix-ws-templates/src/templates/semaphore/scripts/run_verification.ts @@ -31,32 +31,32 @@ function hash(message: any): bigint { // @ts-ignore const wasmBuffer = await remix.call('fileManager', 'readFile', 'circuits/.bin/semaphore.wasm', true); // @ts-ignore - const wasm = new Uint8Array(wasmBuffer); - + const wasm = new Uint8Array(wasmBuffer); + const zkey_final = { type: "mem", data: new Uint8Array(JSON.parse(await remix.call('fileManager', 'readFile', './zk/build/zk_setup.txt'))) } - const wtns = { type: "mem" }; + const wtns = { type: "mem" }; const vKey = JSON.parse(await remix.call('fileManager', 'readFile', './zk/build/verification_key.json')) - + // build list of identity commitments const secrets = [] const identityCommitments = [] - for (let k = 0; k < 2; k++) { + for (let k = 0; k < 2; k++) { const identityTrapdoor = BigInt(ethers.utils.hexlify(ethers.utils.randomBytes(32))) const identityNullifier = BigInt(ethers.utils.hexlify(ethers.utils.randomBytes(32))) - secrets.push({identityTrapdoor, identityNullifier}) - + secrets.push({ identityTrapdoor, identityNullifier }) + const secret = poseidon([identityNullifier, identityTrapdoor]) const identityCommitment = poseidon([secret]) identityCommitments.push(identityCommitment) } //console.log('incremental tree', identityCommitments.map((x) => x.toString())) - + let tree - + try { tree = new IncrementalMerkleTree(poseidon, 20, BigInt(0), 2, identityCommitments) // Binary tree. } catch (e) { @@ -66,11 +66,11 @@ function hash(message: any): bigint { const index = tree.indexOf(identityCommitments[0]) console.log(index.toString()) - + const proof1 = tree.createProof(0) console.log('prepare signals for id ', identityCommitments[0].toString(), tree.indexOf(identityCommitments[0]), proof1.siblings.map((x)=> x.toString())) - + const signals = { identityTrapdoor: secrets[0].identityTrapdoor, identityNullifier: secrets[0].identityNullifier, @@ -79,23 +79,20 @@ function hash(message: any): bigint { externalNullifier: hash(42), signalHash: hash(ethers.utils.formatBytes32String("Hello World")) } - + console.log('calculate') await snarkjs.wtns.calculate(signals, wasm, wtns); - + console.log('check') await snarkjs.wtns.check(r1cs, wtns, logger); - console.log('prove') const { proof, publicSignals } = await snarkjs.groth16.prove(zkey_final, wtns); - + const verified = await snarkjs.groth16.verify(vKey, publicSignals, proof, logger); console.log('zk proof validity', verified); proof1.root.toString() === publicSignals[0] ? console.log('merkle proof valid') : console.log('merkle proof invalid') - - } catch (e) { console.error(e.message) } diff --git a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/ethers-lib.ts index 2753f9bcd0..8e4adf95a6 100644 --- a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/ethers-lib.ts @@ -7,7 +7,7 @@ import { ethers } from 'ethers' * @param {Number} accountIndex account index from the exposed account * @return {Contract} deployed contract */ -export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { +export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { console.log(`deploying ${contractName}`) // Note that the script needs the ABI which is generated from the compilation artifact. @@ -16,12 +16,12 @@ export const deploy = async (contractName: string, args: Array, accountInde const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) // 'web3Provider' is a remix global variable object - + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) // The contract is NOT deployed yet; we must wait until it is mined await contract.deployed() diff --git a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/web3-lib.ts index c57e501039..cbd4f48489 100644 --- a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/web3-lib.ts @@ -21,7 +21,7 @@ export const deploy = async (contractName: string, args: Array, from?: stri const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) const contractSend: ContractSendMethod = contract.deploy({ data: metadata.data.bytecode.object, @@ -32,5 +32,5 @@ export const deploy = async (contractName: string, args: Array, from?: stri from: from || accounts[0], gas: gas || 1500000 }) - return newContractInstance.options + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remixd/src/bin/remixd.ts b/libs/remixd/src/bin/remixd.ts index 9ca4104325..8ced09dc23 100644 --- a/libs/remixd/src/bin/remixd.ts +++ b/libs/remixd/src/bin/remixd.ts @@ -77,7 +77,7 @@ function errorHandler (error: any, service: string) { const options = program.opts(); await warnLatestVersion() - if(options.install && !options.readOnly) { + if (options.install && !options.readOnly) { if (options.install.toLowerCase() === 'slither') require('./../scripts/installSlither') process.exit(0) } @@ -128,7 +128,7 @@ function errorHandler (error: any, service: string) { } // Run hardhat service if a hardhat project is shared as folder const hardhatConfigFilePath = absolutePath('./', options.sharedFolder) - const isHardhatProject = existsSync(hardhatConfigFilePath + '/hardhat.config.js') || existsSync(hardhatConfigFilePath + '/hardhat.config.ts') + const isHardhatProject = existsSync(hardhatConfigFilePath + '/hardhat.config.js') || existsSync(hardhatConfigFilePath + '/hardhat.config.ts') if (isHardhatProject) { startService('hardhat', (ws: WS, sharedFolderClient: servicesList.Sharedfolder, error: Error) => { if (error) { @@ -141,7 +141,7 @@ function errorHandler (error: any, service: string) { } // Run foundry service if a founndry project is shared as folder const foundryConfigFilePath = absolutePath('./', options.sharedFolder) - const isFoundryProject = existsSync(foundryConfigFilePath + '/foundry.toml') + const isFoundryProject = existsSync(foundryConfigFilePath + '/foundry.toml') if (isFoundryProject) { startService('foundry', (ws: WS, sharedFolderClient: servicesList.Sharedfolder, error: Error) => { if (error) { diff --git a/libs/remixd/src/services/foundryClient.ts b/libs/remixd/src/services/foundryClient.ts index add3378407..95b4f0a168 100644 --- a/libs/remixd/src/services/foundryClient.ts +++ b/libs/remixd/src/services/foundryClient.ts @@ -52,7 +52,7 @@ export class FoundryClient extends PluginClient { listenOnFoundryFolder() { console.log('Foundry out folder doesn\'t exist... waiting for the compilation.') try { - if(this.watcher) this.watcher.close() + if (this.watcher) this.watcher.close() this.watcher = chokidar.watch(this.currentSharedFolder, { depth: 1, ignorePermissionErrors: true, ignoreInitial: true }) // watch for new folders this.watcher.on('addDir', () => { @@ -126,7 +126,7 @@ export class FoundryClient extends PluginClient { this.logTimeout = setTimeout(() => { // @ts-ignore this.call('terminal', 'log', { type: 'log', value: `receiving compilation result from Foundry` }) - console.log('Syncing compilation result from Foundry') + console.log('Syncing compilation result from Foundry') }, 1000) } catch (e) { @@ -142,7 +142,7 @@ export class FoundryClient extends PluginClient { listenOnFoundryCompilation() { try { - if(this.watcher) this.watcher.close() + if (this.watcher) this.watcher.close() this.watcher = chokidar.watch(this.cachePath, { depth: 0, ignorePermissionErrors: true, ignoreInitial: true }) this.watcher.on('change', async () => await this.triggerProcessArtifact()) this.watcher.on('add', async () => await this.triggerProcessArtifact()) @@ -193,7 +193,6 @@ export class FoundryClient extends PluginClient { console.log('\x1b[32m%s\x1b[0m', 'sources input not found, please update Foundry to the latest version.') } - compilationResultPart.compilationTarget = contentJSON.ast.absolutePath // extract data if (!compilationResultPart.output['sources'][contentJSON.ast.absolutePath]) compilationResultPart.output['sources'][contentJSON.ast.absolutePath] = {} diff --git a/libs/remixd/src/services/hardhatClient.ts b/libs/remixd/src/services/hardhatClient.ts index 3928e9af64..a79700be36 100644 --- a/libs/remixd/src/services/hardhatClient.ts +++ b/libs/remixd/src/services/hardhatClient.ts @@ -143,13 +143,12 @@ export class HardhatClient extends PluginClient { } }, 1000) - } listenOnHardHatFolder() { console.log('Hardhat artifacts folder doesn\'t exist... waiting for the compilation.') try { - if(this.watcher) this.watcher.close() + if (this.watcher) this.watcher.close() this.watcher = chokidar.watch(this.currentSharedFolder, { depth: 2, ignorePermissionErrors: true, ignoreInitial: true }) // watch for new folders this.watcher.on('addDir', () => { @@ -171,7 +170,7 @@ export class HardhatClient extends PluginClient { listenOnHardhatCompilation() { try { console.log('listening on Hardhat compilation...') - if(this.watcher) this.watcher.close() + if (this.watcher) this.watcher.close() this.watcher = chokidar.watch(this.buildPath, { depth: 1, ignorePermissionErrors: true, ignoreInitial: true }) this.watcher.on('change', async () => await this.triggerProcessArtifact()) this.watcher.on('add', async () => await this.triggerProcessArtifact()) diff --git a/libs/remixd/src/services/remixdClient.ts b/libs/remixd/src/services/remixdClient.ts index 4718cfbcf1..9b725901e8 100644 --- a/libs/remixd/src/services/remixdClient.ts +++ b/libs/remixd/src/services/remixdClient.ts @@ -275,12 +275,12 @@ export class RemixdClient extends PluginClient { }) this.watcher.on('unlink', async (f: string) => { if (this.isLoaded) { - this.emit('removed', utils.relativePath(f, this.currentSharedFolder), false) + this.emit('removed', utils.relativePath(f, this.currentSharedFolder), false) } }) this.watcher.on('unlinkDir', async (f: string) => { if (this.isLoaded) { - this.emit('removed', utils.relativePath(f, this.currentSharedFolder), true) + this.emit('removed', utils.relativePath(f, this.currentSharedFolder), true) } }) } diff --git a/libs/remixd/src/services/truffleClient.ts b/libs/remixd/src/services/truffleClient.ts index e62fe54ba2..b05611539c 100644 --- a/libs/remixd/src/services/truffleClient.ts +++ b/libs/remixd/src/services/truffleClient.ts @@ -100,7 +100,6 @@ export class TruffleClient extends PluginClient { return true } - private async processArtifact() { if (!this.checkPath()) return const folderFiles = await fs.readdir(this.buildPath)