init
This commit is contained in:
commit
44f31f8b9f
402 changed files with 47865 additions and 0 deletions
93
store/settings.js
Normal file
93
store/settings.js
Normal file
|
@ -0,0 +1,93 @@
|
|||
/* eslint-disable no-console */
|
||||
import Web3 from 'web3'
|
||||
|
||||
import networkConfig from '@/networkConfig'
|
||||
|
||||
const getFirstRpcs = (acc, [netId, { rpcUrls }]) => {
|
||||
const [rpc] = Object.values(rpcUrls)
|
||||
|
||||
acc[netId] = {
|
||||
rpc
|
||||
}
|
||||
|
||||
return acc
|
||||
}
|
||||
|
||||
const rpcData = Object.entries(networkConfig).reduce(getFirstRpcs, {})
|
||||
|
||||
export const state = () => {
|
||||
return {
|
||||
...rpcData,
|
||||
isActiveNotification: {
|
||||
first: true,
|
||||
second: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const getters = {
|
||||
getRpc: (state) => (netId) => {
|
||||
return state[`netId${netId}`].rpc
|
||||
},
|
||||
currentRpc: (state, getters, rootState) => {
|
||||
const netId = rootState.metamask.netId
|
||||
return state[`netId${netId}`].rpc
|
||||
}
|
||||
}
|
||||
|
||||
export const mutations = {
|
||||
SAVE_RPC(state, { netId, name, url }) {
|
||||
this._vm.$set(state[`netId${netId}`], 'rpc', { name, url })
|
||||
},
|
||||
DISABLE_NOTIFICATION(state, { key }) {
|
||||
this._vm.$set(state, 'isActiveNotification', { ...state.isActiveNotification, [key]: false })
|
||||
}
|
||||
}
|
||||
|
||||
export const actions = {
|
||||
disableNotification({ commit }, params) {
|
||||
commit('DISABLE_NOTIFICATION', params)
|
||||
},
|
||||
async checkCurrentRpc({ dispatch, getters, rootGetters }) {
|
||||
const netId = rootGetters['metamask/netId']
|
||||
await dispatch('preselectRpc', { netId })
|
||||
},
|
||||
async preselectRpc({ getters, commit, dispatch }, { netId }) {
|
||||
const savedRpc = getters.getRpc(netId)
|
||||
const { isValid } = await dispatch('checkRpc', { ...savedRpc, netId })
|
||||
|
||||
if (isValid) {
|
||||
return
|
||||
}
|
||||
|
||||
const { rpcUrls } = networkConfig[`netId${netId}`]
|
||||
|
||||
for (const [, { name, url }] of Object.entries(rpcUrls)) {
|
||||
const { isValid, error } = await dispatch('checkRpc', { url, netId })
|
||||
if (isValid) {
|
||||
commit('SAVE_RPC', { netId, name, url })
|
||||
return
|
||||
} else {
|
||||
console.error('preselectRpc', url, error)
|
||||
}
|
||||
}
|
||||
throw new Error(this.app.i18n.t('rpcSelectError'))
|
||||
},
|
||||
async checkRpc(_, { url, netId }) {
|
||||
try {
|
||||
const web3 = new Web3(url)
|
||||
|
||||
const chainId = await web3.eth.getChainId()
|
||||
|
||||
const isCurrent = Number(chainId) === Number(netId)
|
||||
if (isCurrent) {
|
||||
return { isValid: true }
|
||||
} else {
|
||||
return { isValid: false, error: this.app.i18n.t('thisRpcIsForDifferentNetwork') }
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('checkRpc', e)
|
||||
return { isValid: false, error: this.app.i18n.t('rpcIsDown') }
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue