Merge branch 'master' into resolve_with_package

pull/3311/head
Aniket 2 years ago committed by GitHub
commit 0e10eb2f9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 16
      apps/etherscan/.babelrc
  2. 5
      apps/etherscan/src/app/RemixPlugin.tsx
  3. 4
      apps/etherscan/src/app/app.tsx
  4. 21
      apps/etherscan/src/app/utils/utilities.ts
  5. 2
      apps/etherscan/src/app/utils/verify.ts
  6. 2
      apps/etherscan/src/app/views/ReceiptsView.tsx
  7. 104
      apps/etherscan/webpack.config.js
  8. 4
      apps/remix-ide-e2e/src/tests/etherscan_api.ts
  9. 17
      apps/remix-ide-e2e/src/tests/solidityImport.test.ts

@ -1,13 +1,9 @@
{ {
"presets": [ "presets": ["@babel/preset-env", ["@babel/preset-react",
[ {"runtime": "automatic"}
"@nrwl/react/babel", { ]],
"runtime": "automatic" "plugins": ["@babel/plugin-proposal-class-properties", "@babel/plugin-transform-runtime", "@babel/plugin-proposal-nullish-coalescing-operator"],
"ignore": [
} "**/node_modules/**"
]
],
"plugins": [
] ]
} }

@ -23,9 +23,8 @@ export class RemixClient extends PluginClient {
const etherscanApi = getEtherScanApi(network) const etherscanApi = getEtherScanApi(network)
const receiptStatus = await getReceiptStatus(receiptGuid, apiKey, etherscanApi) const receiptStatus = await getReceiptStatus(receiptGuid, apiKey, etherscanApi)
return { return {
status: receiptStatus, message: receiptStatus.result,
message: receiptStatus, succeed: receiptStatus.status === '0' ? false : true
succeed: true
} }
} catch (e: any){ } catch (e: any){
return { return {

@ -89,7 +89,7 @@ const App = () => {
}) })
if (receiptsNotVerified.length > 0) { if (receiptsNotVerified.length > 0) {
let timer1 = setInterval(() => { const timer1 = setInterval(() => {
for (const item in receiptsNotVerified) { for (const item in receiptsNotVerified) {
} }
@ -106,7 +106,7 @@ const App = () => {
apiKey, apiKey,
getEtherScanApi(network) getEtherScanApi(network)
) )
if (status === "Pass - Verified") { if (status.result === "Pass - Verified") {
const newReceipts = receipts.map((currentReceipt: Receipt) => { const newReceipts = receipts.map((currentReceipt: Receipt) => {
if (currentReceipt.guid === item.guid) { if (currentReceipt.guid === item.guid) {
return { return {

@ -2,6 +2,17 @@ import { PluginClient } from "@remixproject/plugin"
import axios from 'axios' import axios from 'axios'
type RemixClient = PluginClient type RemixClient = PluginClient
/*
status: 0=Error, 1=Pass
message: OK, NOTOK
result: explanation
*/
export type receiptStatus = {
result: string
message: string
status: string
}
export const getEtherScanApi = (network: string) => { export const getEtherScanApi = (network: string) => {
return network === "main" return network === "main"
? `https://api.etherscan.io/api` ? `https://api.etherscan.io/api`
@ -20,12 +31,16 @@ export const getReceiptStatus = async (
receiptGuid: string, receiptGuid: string,
apiKey: string, apiKey: string,
etherscanApi: string etherscanApi: string
) => { ): Promise<receiptStatus> => {
const params = `guid=${receiptGuid}&module=contract&action=checkverifystatus&apiKey=${apiKey}` const params = `guid=${receiptGuid}&module=contract&action=checkverifystatus&apiKey=${apiKey}`
try { try {
const response = await axios.get(`${etherscanApi}?${params}`) const response = await axios.get(`${etherscanApi}?${params}`)
const { result } = response.data const { result, message, status } = response.data
return result return {
result,
message,
status,
}
} catch (error) { } catch (error) {
console.error(error) console.error(error)
} }

@ -100,7 +100,7 @@ export const verify = async (
const returnValue = { const returnValue = {
guid: result, guid: result,
status: receiptStatus, status: receiptStatus.result,
message: `Verification process started correctly. Receipt GUID ${result}`, message: `Verification process started correctly. Receipt GUID ${result}`,
succeed: true succeed: true
} }

@ -30,7 +30,7 @@ export const ReceiptsView: React.FC = () => {
apiKey, apiKey,
etherscanApi etherscanApi
) )
setResults(result) setResults(result.result)
} catch (error: any) { } catch (error: any) {
setResults(error.message) setResults(error.message)
} }

@ -1,28 +1,82 @@
const nxWebpack = require('@nrwl/react/plugins/webpack') const { composePlugins, withNx } = require('@nrwl/webpack')
const webpack = require('webpack')
module.exports = config => { const TerserPlugin = require("terser-webpack-plugin")
const nxWebpackConfig = nxWebpack(config) const CssMinimizerPlugin = require("css-minimizer-webpack-plugin")
const webpackConfig = {
...nxWebpackConfig, // Nx plugins for webpack.
resolve : { module.exports = composePlugins(withNx(), (config) => {
...nxWebpackConfig.resolve, // Update the webpack config as needed here.
fallback: { // e.g. `config.plugins.push(new MyPlugin())`
...nxWebpackConfig.resolve.fallback,
"http": require.resolve("stream-http"), // add fallback for node modules
"https": require.resolve("https-browserify"), config.resolve.fallback = {
"stream": require.resolve("stream-browserify"), ...config.resolve.fallback,
"zlib": require.resolve("browserify-zlib"), "crypto": require.resolve("crypto-browserify"),
}, "stream": require.resolve("stream-browserify"),
} "path": require.resolve("path-browserify"),
"http": require.resolve("stream-http"),
"https": require.resolve("https-browserify"),
"constants": require.resolve("constants-browserify"),
"os": false, //require.resolve("os-browserify/browser"),
"timers": false, // require.resolve("timers-browserify"),
"zlib": require.resolve("browserify-zlib"),
"fs": false,
"module": false,
"tls": false,
"net": false,
"readline": false,
"child_process": false,
"buffer": require.resolve("buffer/"),
"vm": require.resolve('vm-browserify'),
} }
if (process.env.NODE_ENV === 'production') {
return { // add externals
...webpackConfig, config.externals = {
mode: 'production', ...config.externals,
devtool: 'source-map', solc: 'solc',
}
} else {
return webpackConfig
} }
}
// add public path
config.output.publicPath = '/'
// add copy & provide plugin
config.plugins.push(
new webpack.ProvidePlugin({
Buffer: ['buffer', 'Buffer'],
url: ['url', 'URL'],
process: 'process/browser',
})
)
// souce-map loader
config.module.rules.push({
test: /\.js$/,
use: ["source-map-loader"],
enforce: "pre"
})
config.ignoreWarnings = [/Failed to parse source map/] // ignore source-map-loader warnings
// set minimizer
config.optimization.minimizer = [
new TerserPlugin({
parallel: true,
terserOptions: {
ecma: 2015,
compress: false,
mangle: false,
format: {
comments: false,
},
},
extractComments: false,
}),
new CssMinimizerPlugin(),
];
return config;
});

@ -54,7 +54,7 @@ module.exports = {
.clickLaunchIcon('filePanel') .clickLaunchIcon('filePanel')
.addFile('receiptStatusScript.ts', { content: receiptStatusScript }) .addFile('receiptStatusScript.ts', { content: receiptStatusScript })
.click('*[data-id="play-editor"]') // run the script .click('*[data-id="play-editor"]') // run the script
.waitForElementContainsText('*[data-id="terminalJournal"]', 'Pass - Verified', 60000) .waitForElementContainsText('*[data-id="terminalJournal"]', 'Already Verified', 60000)
} }
} }
@ -119,7 +119,7 @@ const receiptStatusScript = `
const receiptStatus = async () => { const receiptStatus = async () => {
try { try {
const apikey = '2HKUX5ZVASZIKWJM8MIQVCRUVZ6JAWT531' const apikey = '2HKUX5ZVASZIKWJM8MIQVCRUVZ6JAWT531'
const ret = await remix.call('etherscan' as any, 'receiptStatus', 'n1qtqfn8jggwqv9uvni5zzectnztqbxqqvizznvl4vg1pndb9v', apikey) const ret = await remix.call('etherscan' as any, 'receiptStatus', 'tsrrzmayenrslvixnvhdv7fbbp6kk1xuqkg667aqlesblpkimt', apikey)
console.log(ret) console.log(ret)
} catch (e) { } catch (e) {
console.log(e.message) console.log(e.message)

@ -34,19 +34,6 @@ module.exports = {
timeout: 120000, timeout: 120000,
suppressNotFoundErrors: true suppressNotFoundErrors: true
}) })
.click('[data-id="compilerContainerCompileBtn"]')
.isVisible({
selector: "//span[contains(.,'not found Untitled11')]",
locateStrategy: 'xpath',
timeout: 120000,
suppressNotFoundErrors: true
})
.click('[data-id="compilerContainerCompileBtn"]')
.waitForElementVisible({
selector: "//span[contains(.,'not found Untitled11')]",
locateStrategy: 'xpath',
timeout: 120000,
})
}, },
@ -135,11 +122,11 @@ const sources = [
'Untitled.sol': { content: 'contract test1 {} contract test2 {}' } 'Untitled.sol': { content: 'contract test1 {} contract test2 {}' }
}, },
{ {
'Untitled1.sol': { content: 'import "./Untitled2.sol"; contract test6 {}' }, 'Untitled1.sol': { content: 'import "/Untitled2.sol"; contract test6 {}' },
'Untitled2.sol': { content: 'contract test4 {} contract test5 {}' } 'Untitled2.sol': { content: 'contract test4 {} contract test5 {}' }
}, },
{ {
'Untitled3.sol': { content: 'import "./Untitled11.sol"; contract test6 {}' } 'Untitled3.sol': { content: 'import "/Untitled11.sol"; contract test6 {}' }
}, },
{ {
'Untitled4.sol': { content: 'import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"; contract test7 {}' } 'Untitled4.sol': { content: 'import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol"; contract test7 {}' }

Loading…
Cancel
Save