Skip to content

Commit 3b5934a

Browse files
committed
Clean legacy Etherscan code
1 parent 8d63a86 commit 3b5934a

22 files changed

+53
-1228
lines changed
Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,3 @@
11
import React from 'react'
2-
import {PluginClient} from '@remixproject/plugin'
32

4-
import {Receipt, ThemeType} from './types'
5-
6-
export const AppContext = React.createContext({
7-
apiKey: '',
8-
setAPIKey: (value: string) => {
9-
console.log('Set API Key from Context')
10-
},
11-
clientInstance: {} as PluginClient,
12-
receipts: [] as Receipt[],
13-
setReceipts: (receipts: Receipt[]) => {
14-
console.log('Calling Set Receipts')
15-
},
16-
contracts: [] as string[],
17-
setContracts: (contracts: string[]) => {
18-
console.log('Calling Set Contract Names')
19-
},
20-
themeType: 'dark' as ThemeType,
21-
setThemeType: (themeType: ThemeType) => {
22-
console.log('Calling Set Theme Type')
23-
},
24-
networkName: ''
25-
})
3+
export const AppContext = React.createContext({})

apps/contract-verification/src/app/EtherscanPluginClient.ts

Lines changed: 0 additions & 70 deletions
This file was deleted.
Lines changed: 2 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -1,136 +1,12 @@
11
import React, {useState, useEffect, useRef} from 'react'
22

3-
import {CompilationFileSources, CompilationResult} from '@remixproject/plugin-api'
4-
5-
import { EtherscanPluginClient } from './EtherscanPluginClient'
6-
73
import {AppContext} from './AppContext'
8-
import {DisplayRoutes} from './routes'
9-
10-
import {useLocalStorage} from './hooks/useLocalStorage'
11-
12-
import {getReceiptStatus, getEtherScanApi, getNetworkName, getProxyContractReceiptStatus} from './utils'
13-
import {Receipt, ThemeType} from './types'
4+
import DisplayRoutes from './routes'
145

156
import './App.css'
167

17-
export const getNewContractNames = (compilationResult: CompilationResult) => {
18-
const compiledContracts = compilationResult.contracts
19-
let result: string[] = []
20-
21-
for (const file of Object.keys(compiledContracts)) {
22-
const newContractNames = Object.keys(compiledContracts[file])
23-
24-
result = [...result, ...newContractNames]
25-
}
26-
27-
return result
28-
}
29-
30-
const plugin = new EtherscanPluginClient()
31-
328
const App = () => {
33-
const [apiKey, setAPIKey] = useLocalStorage('apiKey', '')
34-
const [receipts, setReceipts] = useLocalStorage('receipts', [])
35-
const [contracts, setContracts] = useState<string[]>([])
36-
const [themeType, setThemeType] = useState<ThemeType>('dark')
37-
const [networkName, setNetworkName] = useState('Loading...')
38-
const timer = useRef(null)
39-
const contractsRef = useRef(contracts)
40-
41-
contractsRef.current = contracts
42-
43-
const setListeners = () => {
44-
plugin.on('solidity', 'compilationFinished', (fileName: string, source: CompilationFileSources, languageVersion: string, data: CompilationResult) => {
45-
const newContractsNames = getNewContractNames(data)
46-
47-
const newContractsToSave: string[] = [...contractsRef.current, ...newContractsNames]
48-
49-
const uniqueContracts: string[] = [...new Set(newContractsToSave)]
50-
51-
setContracts(uniqueContracts)
52-
})
53-
plugin.on('blockchain' as any, 'networkStatus', (result) => {
54-
setNetworkName(`${result.network.name} ${result.network.id !== '-' ? `(Chain id: ${result.network.id})` : '(Not supported)'}`)
55-
})
56-
// @ts-ignore
57-
plugin.call('blockchain', 'getCurrentNetworkStatus').then((result: any) => setNetworkName(`${result.network.name} ${result.network.id !== '-' ? `(Chain id: ${result.network.id})` : '(Not supported)'}`))
58-
59-
}
60-
61-
useEffect(() => {
62-
plugin.onload(() => {
63-
setListeners()
64-
})
65-
}, [])
66-
67-
useEffect(() => {
68-
let receiptsNotVerified: Receipt[] = receipts.filter((item: Receipt) => item.status === 'Pending in queue' || item.status === 'Max rate limit reached')
69-
70-
if (receiptsNotVerified.length > 0) {
71-
if (timer.current) {
72-
clearInterval(timer.current)
73-
timer.current = null
74-
}
75-
timer.current = setInterval(async () => {
76-
const {network, networkId} = await getNetworkName(plugin)
77-
78-
if (!plugin) return
79-
if (network === 'vm') return
80-
let newReceipts = receipts
81-
82-
for (const item of receiptsNotVerified) {
83-
await new Promise((r) => setTimeout(r, 500)) // avoid api rate limit exceed.
84-
let status
85-
if (item.isProxyContract) {
86-
status = await getProxyContractReceiptStatus(item.guid, apiKey, getEtherScanApi(networkId))
87-
if (status.status === '1') {
88-
status.message = status.result
89-
status.result = 'Successfully Updated'
90-
}
91-
} else status = await getReceiptStatus(item.guid, apiKey, getEtherScanApi(networkId))
92-
if (status.result === 'Pass - Verified' || status.result === 'Already Verified' || status.result === 'Successfully Updated') {
93-
newReceipts = newReceipts.map((currentReceipt: Receipt) => {
94-
if (currentReceipt.guid === item.guid) {
95-
const res = {
96-
...currentReceipt,
97-
status: status.result
98-
}
99-
if (currentReceipt.isProxyContract) res.message = status.message
100-
return res
101-
}
102-
return currentReceipt
103-
})
104-
}
105-
}
106-
receiptsNotVerified = newReceipts.filter((item: Receipt) => item.status === 'Pending in queue' || item.status === 'Max rate limit reached')
107-
if (timer.current && receiptsNotVerified.length === 0) {
108-
clearInterval(timer.current)
109-
timer.current = null
110-
}
111-
setReceipts(newReceipts)
112-
}, 10000)
113-
}
114-
}, [receipts])
115-
116-
return (
117-
<AppContext.Provider
118-
value={{
119-
apiKey,
120-
setAPIKey,
121-
clientInstance: plugin,
122-
receipts,
123-
setReceipts,
124-
contracts,
125-
setContracts,
126-
themeType,
127-
setThemeType,
128-
networkName
129-
}}
130-
>
131-
{ plugin && <DisplayRoutes /> }
132-
</AppContext.Provider>
133-
)
9+
return <DisplayRoutes />
13410
}
13511

13612
export default App

apps/contract-verification/src/app/components/HeaderWithSettings.tsx

Lines changed: 0 additions & 81 deletions
This file was deleted.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import React from 'react'
2+
3+
import {NavLink} from 'react-router-dom'
4+
5+
interface NavItemProps {
6+
to: string
7+
icon: JSX.Element
8+
title: string
9+
}
10+
11+
const NavItem = ({to, icon, title}: NavItemProps) => {
12+
return (
13+
<NavLink
14+
// data-id="home"
15+
to={to}
16+
className={({isActive}) => (isActive ? 'border border-secondary shadow-none btn p-1 m-0' : 'border-0 shadow-none btn p-1 m-0')}
17+
style={({isActive}) => (!isActive ? {width: '1.8rem', filter: 'contrast(0.5)'} : {width: '1.8rem'})}
18+
// state={from}
19+
>
20+
<div>
21+
<div>{icon}</div>
22+
<div>{title}</div>
23+
</div>
24+
</NavLink>
25+
)
26+
}
27+
28+
export const NavMenu = () => {
29+
return (
30+
<div className="d-flex justify-content-between">
31+
<div className="nav">
32+
<NavItem to="/" icon={<i className="fas fa-home"></i>} title="Verify" />
33+
<NavItem to="/receipts" icon={<i className="fas fa-home"></i>} title="Receipts" />
34+
<NavItem to="/lookup" icon={<i className="fas fa-receipt"></i>} title="Lookup" />
35+
<NavItem to="/settings" icon={<i className="fas fa-cog"></i>} title="Settings" />
36+
</div>
37+
</div>
38+
)
39+
}

apps/contract-verification/src/app/components/SubmitButton.tsx

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
export { HeaderWithSettings } from "./HeaderWithSettings"
2-
export { SubmitButton } from "./SubmitButton"
1+
export {NavMenu} from './NavMenu'

0 commit comments

Comments
 (0)