Compare commits

..

1 commit

Author SHA1 Message Date
gozzy
197d60430e worker thread rpc batching 2022-11-09 02:55:13 +00:00
93 changed files with 831 additions and 588 deletions

3
.gitignore vendored
View file

@ -87,6 +87,3 @@ sw.*
# Mac OSX
.DS_Store
static/*/*.json

View file

@ -1,7 +0,0 @@
# ASSETS
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your un-compiled assets such as LESS, SASS, or JavaScript.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#webpacked).

57
assets/events.worker.js Normal file
View file

@ -0,0 +1,57 @@
const Web3 = require('web3-eth')
const InstanceABI = require('../abis/Instance.abi.json')
const networkConfig = require('../networkConfig').default
const getContract = (rpcUrl, netId, currency, amount) => {
const provider = new Web3(rpcUrl)
const config = networkConfig[`netId${netId}`]
const address = config.tokens[currency].instanceAddress[amount]
const contract = new provider.Contract(InstanceABI, address)
return contract
}
const getBatchEvents = async ({ netId, rpcUrl, currency, amount, type, payload }, [port]) => {
try {
const { chunkSize, blocks } = payload
const contract = getContract(rpcUrl, netId, currency, amount)
let batchEvents = []
console.log('Fetching block ranges', blocks)
for (let x in blocks) {
const toBlock = blocks[x]
const fromBlock = toBlock - chunkSize
try {
const events = await contract.getPastEvents(type, {
fromBlock,
toBlock
})
batchEvents = batchEvents.concat(events)
} catch (e) {
console.log(`Failed to fetch ${toBlock}: ${e}`)
x = x - 1
}
}
port.postMessage({ result: batchEvents })
} catch (e) {
port.postMessage({ errorMessage: e })
}
}
const handlePayload = ({ data, ports }) => {
switch (data.eventName) {
case 'batch_events':
getBatchEvents(data, ports)
break
default:
break
}
}
self.addEventListener('message', handlePayload, false)

View file

@ -293,10 +293,6 @@
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M297.216 243.2c0 15.616-11.52 28.416-26.112 28.416-14.336 0-26.112-12.8-26.112-28.416s11.52-28.416 26.112-28.416c14.592 0 26.112 12.8 26.112 28.416zm-119.552-28.416c-14.592 0-26.112 12.8-26.112 28.416s11.776 28.416 26.112 28.416c14.592 0 26.112-12.8 26.112-28.416.256-15.616-11.52-28.416-26.112-28.416zM448 52.736V512c-64.494-56.994-43.868-38.128-118.784-107.776l13.568 47.36H52.48C23.552 451.584 0 428.032 0 398.848V52.736C0 23.552 23.552 0 52.48 0h343.04C424.448 0 448 23.552 448 52.736zm-72.96 242.688c0-82.432-36.864-149.248-36.864-149.248-36.864-27.648-71.936-26.88-71.936-26.88l-3.584 4.096c43.52 13.312 63.744 32.512 63.744 32.512-60.811-33.329-132.244-33.335-191.232-7.424-9.472 4.352-15.104 7.424-15.104 7.424s21.248-20.224 67.328-33.536l-2.56-3.072s-35.072-.768-71.936 26.88c0 0-36.864 66.816-36.864 149.248 0 0 21.504 37.12 78.08 38.912 0 0 9.472-11.52 17.152-21.248-32.512-9.728-44.8-30.208-44.8-30.208 3.766 2.636 9.976 6.053 10.496 6.4 43.21 24.198 104.588 32.126 159.744 8.96 8.96-3.328 18.944-8.192 29.44-15.104 0 0-12.8 20.992-46.336 30.464 7.68 9.728 16.896 20.736 16.896 20.736 56.576-1.792 78.336-38.912 78.336-38.912z'%3E%3C/path%3E%3C/svg%3E");
}
&-git {
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='92pt' height='92pt' viewBox='0 0 92 92'%3E%3Cpath style='stroke:none;fill-rule:nonzero;fill:%6b6b6b;fill-opacity:1' d='M90.156 41.965 50.036 1.848a5.918 5.918 0 0 0-8.372 0l-8.328 8.332 10.566 10.566a7.03 7.03 0 0 1 7.23 1.684 7.034 7.034 0 0 1 1.669 7.277l10.187 10.184a7.028 7.028 0 0 1 7.278 1.672 7.04 7.04 0 0 1 0 9.957 7.05 7.05 0 0 1-9.965 0 7.044 7.044 0 0 1-1.528-7.66l-9.5-9.497V59.36a7.04 7.04 0 0 1 1.86 11.29 7.04 7.04 0 0 1-9.957 0 7.04 7.04 0 0 1 0-9.958 7.06 7.06 0 0 1 2.304-1.539V33.926a7.049 7.049 0 0 1-3.82-9.234L29.242 14.272 1.73 41.777a5.925 5.925 0 0 0 0 8.371L41.852 90.27a5.925 5.925 0 0 0 8.37 0l39.934-39.934a5.925 5.925 0 0 0 0-8.371'/%3E%3C/svg%3E");
}
&-discourse {
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath d='M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z'%3E%3C/path%3E%3C/svg%3E");
}

View file

@ -37,15 +37,47 @@
<b-button
tag="a"
type="is-icon"
href="https://development.tornadocash.community/tornadocash/classic-ui"
href="https://forums.tornadocash.community"
target="_blank"
rel="noopener noreferrer"
icon-right="git"
icon-right="discourse"
></b-button>
<b-button
tag="a"
type="is-icon"
href="https://github.com/tornadocash"
href="https://matrix.tornadocash.community"
target="_blank"
rel="noopener noreferrer"
icon-right="matrix"
></b-button>
<b-button
tag="a"
type="is-icon"
href="https://tornado-cash.medium.com"
target="_blank"
rel="noopener noreferrer"
icon-right="medium"
></b-button>
<b-button
tag="a"
type="is-icon"
href="https://twitter.com/TornadoCashOrg"
target="_blank"
rel="noopener noreferrer"
icon-right="twitter"
></b-button>
<b-button
tag="a"
type="is-icon"
href="https://t.me/TornadoCashOrg"
target="_blank"
rel="noopener noreferrer"
icon-right="telegram"
></b-button>
<b-button
tag="a"
type="is-icon"
href="https://development.tornadocash.community"
target="_blank"
rel="noopener noreferrer"
icon-right="github"

View file

@ -47,51 +47,6 @@
{{ hasErrorRpc.msg }}
</p>
</div>
<template v-if="!isEthereumNetwork">
<div class="field">
<b-field label="Ethereum RPC provider" class="has-custom-field" data-test="rpc_endpoint_eth_dropdown">
<b-dropdown v-model="selectedEthRpc" expanded aria-role="list">
<div slot="trigger" class="control" :class="{ 'is-loading': checkingRpc && !isCustomEthRpc }">
<div class="input">
<span>{{ isCustomEthRpc ? $t('customRpc') : selectedEthRpc }}</span>
</div>
</div>
<b-dropdown-item
v-for="{ name, url } in Object.values(ethNetworkConfig.rpcUrls)"
:key="name"
:value="name"
aria-role="listitem"
:data-test="`rpc_endpoint_eth_${name}`"
@click="checkEthRpc({ name, url })"
>
{{ name }}
</b-dropdown-item>
<b-dropdown-item
value="custom"
aria-role="listitem"
data-test="rpc_endpoint_eth_custom"
@click="checkEthRpc({ name: 'custom' })"
>
{{ $t('customRpc') }}
</b-dropdown-item>
</b-dropdown>
</b-field>
<div v-if="isCustomEthRpc" class="field has-custom-field">
<b-input
ref="customInputTwo"
v-model="customEthRpcUrl"
type="url"
:placeholder="$t('customRpcPlaceholder')"
:custom-class="hasErrorEthRpc.type"
:use-html5-validation="false"
@input="checkCustomEthRpc"
></b-input>
</div>
<p v-if="hasErrorEthRpc.msg" class="help" :class="hasErrorEthRpc.type">
{{ hasErrorEthRpc.msg }}
</p>
</div>
</template>
<div class="buttons buttons__halfwidth">
<b-button type="is-primary" outlined data-test="button_reset_rpc" @mousedown.prevent @click="onReset">
{{ $t('reset') }}
@ -120,13 +75,9 @@ export default {
return {
checkingRpc: false,
hasErrorRpc: { type: '', msg: '' },
hasErrorEthRpc: { type: '', msg: '' },
customRpcUrl: '',
customEthUrl: '',
selectedRpc: 'custom',
selectedEthRpc: 'custom',
rpc: { name: 'custom', url: '' },
ethRpc: { name: 'custom', url: '' }
rpc: { name: 'custom', url: '' }
}
},
computed: {
@ -134,18 +85,9 @@ export default {
networkConfig() {
return networkConfig[`netId${this.netId}`]
},
ethNetworkConfig() {
return networkConfig.netId1
},
isEthereumNetwork() {
return this.netId === 1
},
isCustomRpc() {
return this.selectedRpc === 'custom'
},
isCustomEthRpc() {
return this.selectedEthRpc === 'custom'
},
isDisabledSave() {
return (
this.hasErrorRpc.type === 'is-warning' || this.checkingRpc || (this.isCustomRpc && !this.customRpcUrl)
@ -153,24 +95,16 @@ export default {
}
},
created() {
this.ethRpc = this.getRpc(1)
this.rpc = this.getRpc(this.netId)
this.selectedRpc = this.rpc.name
this.selectedEthRpc = this.ethRpc.name
if (this.selectedRpc === 'custom') {
this.$nextTick(() => {
this.customRpcUrl = this.rpc.url
})
}
if (this.selectedEthRpc === 'custom') {
this.$nextTick(() => {
this.customEthRpcUrl = this.ethRpc.url
})
}
this.checkRpc(this.rpc)
this.checkEthRpc(this.ethRpc)
},
methods: {
...mapMutations('settings', ['SAVE_RPC']),
@ -179,40 +113,25 @@ export default {
this.hasErrorRpc = { type: '', msg: '' }
this.rpc = Object.entries(this.networkConfig.rpcUrls)[0][1]
this.ethRpc = Object.entries(this.ethNetworkConfig.rpcUrls)[0][1]
this.selectedRpc = this.rpc.name
this.selectedEthRpc = this.ethRpc.name
this.checkEthRpc(this.ethRpc)
this.checkRpc(this.rpc)
},
onSave() {
this.SAVE_RPC({ ...this.rpc, netId: this.netId })
if (this.netId !== 1) {
this.SAVE_RPC({ ...this.ethRpc, netId: 1 })
}
this.$emit('close')
},
onCancel() {
this.$emit('cancel')
},
checkRpc({ name, url = '' }) {
this.checkingRpc = true
if (name === 'custom') {
this.customRpcUrl = ''
this.hasErrorRpc = { type: '', msg: '' }
}
this._checkRpc({ name, url })
},
checkEthRpc({ name, url = '' }) {
this.checkingRpc = true
if (name === 'custom') {
this.customEthRpcUrl = ''
this.hasErrorEthRpc = { type: '', msg: '' }
this.checkingRpc = true
return
}
this._checkEthRpc({ name, url })
this._checkRpc({ name, url })
},
checkCustomRpc(url) {
const trimmedUrl = url.trim()
@ -222,14 +141,6 @@ export default {
}
debounce(this._checkRpc, { name: 'custom', url: trimmedUrl })
},
checkCustomEthRpc(url) {
const trimmedUrl = url.trim()
if (!trimmedUrl) {
this.hasErrorEthRpc = { type: '', msg: '' }
return
}
debounce(this._checkEthRpc, { name: 'custom', url: trimmedUrl })
},
async _checkRpc({ name, url }) {
this.checkingRpc = true
this.hasErrorRpc = { type: '', msg: '' }
@ -248,27 +159,6 @@ export default {
this.hasErrorRpc.msg = error
}
this.checkingRpc = false
},
async _checkEthRpc({ name, url }) {
this.checkingRpc = true
this.hasErrorEthRpc = { type: '', msg: '' }
const { isValid, error } = await this.$store.dispatch('settings/checkRpc', {
url,
netId: 1,
isEthRpc: true
})
if (isValid) {
this.hasErrorEthRpc.type = 'is-primary'
this.hasErrorEthRpc.msg = this.$t('rpcStatusOk')
this.ethRpc = { name, url }
} else {
this.hasErrorEthRpc.type = 'is-warning'
this.hasErrorEthRpc.msg = error
}
this.checkingRpc = false
}
}

View file

@ -93,7 +93,9 @@ export default {
}
},
mounted() {
this.updateEvents()
if (!this.timer) {
this.updateEvents()
}
},
beforeDestroy() {
clearTimeout(this.timer)
@ -101,6 +103,10 @@ export default {
methods: {
updateEvents() {
this.$store.dispatch('application/updateSelectEvents')
this.timer = setTimeout(() => {
this.updateEvents()
}, 60 * 1000)
}
}
}

View file

@ -59,13 +59,8 @@ export default {
}
},
computed: {
...mapState('governance/gov', ['proposals']),
...mapGetters('governance/gov', [
'isFetchingProposals',
'constants',
'isFetchingBalances',
'votingPower'
]),
...mapState('governance/gov', ['lockedBalance', 'proposals']),
...mapGetters('governance/gov', ['isFetchingProposals', 'constants', 'isFetchingBalances']),
...mapGetters('token', ['toDecimals']),
filteredProposals() {
return this.proposals
@ -79,7 +74,7 @@ export default {
},
hasProposalThreshold() {
const PROPOSAL_THRESHOLD = toBN(this.constants.PROPOSAL_THRESHOLD)
return toBN(this.votingPower).gte(PROPOSAL_THRESHOLD)
return toBN(this.lockedBalance).gte(PROPOSAL_THRESHOLD)
},
proposalThreshold() {
return this.toDecimals(this.constants.PROPOSAL_THRESHOLD, 18)

View file

@ -60,12 +60,6 @@ export const cachedEventsLength = {
}
}
export const httpConfig = {
// buffer for tor connections
timeout: 30000,
keepAlive: true
}
export const PROVIDERS = {
walletConnect: {
name: 'WalletConnect',

View file

@ -19,7 +19,7 @@ export default {
networkName: 'Ethereum Mainnet',
deployedBlock: 9116966,
rpcUrls: {
secureRPC: {
SecureRPC: {
name: 'SecureRPC',
url: 'https://api.securerpc.com/v1'
}
@ -135,17 +135,9 @@ export default {
multicall: '0x41263cba59eb80dc200f3e2544eda4ed6a90e76c',
echoContractAccount: '0xa75BF2815618872f155b7C4B0C81bF990f5245E4',
rpcUrls: {
oneRPC: {
name: '1RPC',
url: 'https://1rpc.io/bnb'
},
blockPi: {
name: 'BlockPi',
url: 'https://bsc.blockpi.network/v1/rpc/public'
},
nodeReal: {
name: 'NodeReal',
url: 'https://bsc-mainnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3'
bscRpc: {
name: 'BSC RPC',
url: 'https://bscrpc.com/'
}
},
tokens: {
@ -190,13 +182,9 @@ export default {
multicall: '0x11ce4B23bD875D7F5C6a31084f55fDe1e9A87507',
echoContractAccount: '0xa75BF2815618872f155b7C4B0C81bF990f5245E4',
rpcUrls: {
polygonRpc: {
polygonRPC: {
name: 'Polygon RPC',
url: 'https://polygon-rpc.com'
},
oneRpc: {
name: '1RPC',
url: 'https://1rpc.io/matic'
url: `https://polygon-rpc.com`
}
},
tokens: {
@ -242,17 +230,9 @@ export default {
echoContractAccount: '0xa75BF2815618872f155b7C4B0C81bF990f5245E4',
ovmGasPriceOracleContract: '0x420000000000000000000000000000000000000F',
rpcUrls: {
blockPi: {
name: 'BlockPi',
url: 'https://optimism.blockpi.network/v1/rpc/public'
},
oneRpc: {
name: '1RPC',
url: 'https://1rpc.io/op'
},
Optimism: {
name: 'Optimism',
url: 'https://mainnet.optimism.io'
url: `https://mainnet.optimism.io`
}
},
tokens: {
@ -297,12 +277,8 @@ export default {
multicall: '0x842eC2c7D803033Edf55E478F461FC547Bc54EB2',
echoContractAccount: '0xa75BF2815618872f155b7C4B0C81bF990f5245E4',
rpcUrls: {
blockPi: {
name: 'BlockPi',
url: 'https://arbitrum.blockpi.network/v1/rpc/public'
},
Arbitrum: {
name: 'Arbitrum RPC',
name: 'Arbitrum Public RPC',
url: 'https://arb1.arbitrum.io/rpc'
}
},
@ -348,13 +324,9 @@ export default {
multicall: '0xb5b692a88bdfc81ca69dcb1d924f59f0413a602a',
echoContractAccount: '0xa75BF2815618872f155b7C4B0C81bF990f5245E4',
rpcUrls: {
communityResolver: {
name: 'Community RPC Resolver',
publicRpc: {
name: 'Community RPC',
url: 'https://development.tornadocash.community/rpc/v1'
},
blockPi: {
name: 'BlockPi',
url: 'https://gnosis.blockpi.network/v1/rpc/public'
}
},
tokens: {
@ -399,21 +371,9 @@ export default {
multicall: '0xe86e3989c74293Acc962156cd3F525c07b6a1B6e',
echoContractAccount: '0xa75BF2815618872f155b7C4B0C81bF990f5245E4',
rpcUrls: {
publicRpc1: {
publicRpc: {
name: 'Avalanche RPC',
url: 'https://api.avax.network/ext/bc/C/rpc'
},
blockPi: {
name: 'BlockPi',
url: 'https://avalanche.blockpi.network/v1/rpc/public'
},
publicRpc2: {
name: 'Avalanche Public PRC',
url: 'https://avalanche-evm.publicnode.com'
},
oneRpc: {
name: '1RPC',
ulr: 'https://1rpc.io/avax/'
}
},
tokens: {

View file

@ -50,7 +50,7 @@ export default {
{
'http-equiv': 'Content-Security-Policy',
content:
"img-src 'self' data:;font-src data:;style-src 'self' 'unsafe-inline';connect-src *;script-src 'self' 'unsafe-eval' 'unsafe-inline';default-src 'self';object-src 'none';base-uri 'none';upgrade-insecure-requests;child-src blob:;worker-src blob:;"
"img-src 'self' data:;font-src data:;style-src 'self' 'unsafe-inline';connect-src *;script-src 'self' 'unsafe-eval' 'unsafe-inline';default-src 'self';object-src 'none';base-uri 'none';upgrade-insecure-requests; "
},
{
name: 'Referer-Policy',
@ -178,10 +178,23 @@ export default {
if (ctx.isClient) {
config.devtool = hasSourceMaps
}
config.output.globalObject = 'this'
config.module.rules.push({
test: /\.bin$/,
use: 'arraybuffer-loader'
})
if(ctx.isClient) {
config.module.rules.push({
test: /\.worker\.js$/,
loader: 'worker-loader',
exclude: /(node_modules)/,
options: {
filename: './workers/[name].js',
}
})
}
},
plugins: [
new webpack.IgnorePlugin(/worker_threads/),

View file

@ -16,6 +16,7 @@
"update:tree": "node -r esm scripts/updateTree.js --network",
"generate": "NODE_OPTIONS='--max-old-space-size=8192' nuxt generate && cp dist/404.html dist/ipfs-404.html",
"check:sync": "node -r esm scripts/checkEventsSync.js",
"worker:compile": "babel dist/_nuxt/workers/events.worker.js --out-file static/events.worker.js",
"ipfsUpload": "node scripts/ipfsUpload.js",
"deploy:ipfs": "yarn generate && yarn ipfsUpload"
},
@ -55,6 +56,7 @@
"vue-i18n": "^8.15.4",
"vuex-persistedstate": "^2.7.0",
"web3": "1.5.2",
"web3-eth": "1.8.1-rc.0",
"websnark": "git+https://development.tornadocash.community/tornadocash/websnark.git#671762fab73f01771d0e7ebcf6b6a3123e193fb4"
},
"devDependencies": {
@ -85,6 +87,7 @@
"raw-loader": "^3.1.0",
"sass": "^1.49.9",
"sass-loader": "^8.0.0",
"vue-jest": "^3.0.5"
"vue-jest": "^3.0.5",
"worker-loader": "^3.0.8"
}
}

View file

@ -83,6 +83,31 @@
</i18n>
</b-notification>
<b-notification
v-if="isEthLink"
:active="isActiveNotification.ethLink"
class="main-notification"
type="is-warning"
icon-pack="icon"
has-icon
:aria-close-label="$t('closeNotification')"
@close="disableNotification({ key: 'ethLink' })"
>
<i18n path="ethLinkBanner.notification">
<template v-slot:issue>
<a
href="https://discuss.ens.domains/t/eth-link-expiry/13899"
target="_blank"
rel="noopener noreferrer"
>{{ $t('ethLinkBanner.issue') }}</a
>
</template>
<template v-slot:alternative>
<a href="https://tornado.cash/">{{ $t('ethLinkBanner.alternative') }}</a>
</template>
</i18n>
</b-notification>
<div class="columns">
<div class="column is-half">
<b-tabs v-model="activeTab" class="is-tornado" :animated="false" @input="tabChanged">
@ -115,7 +140,8 @@ export default {
data() {
return {
activeTab: 0,
isActive: false
isActive: false,
isEthLink: window.location.host === 'tornadocash.eth.link'
}
},
computed: {
@ -158,19 +184,8 @@ export default {
}
}
} else {
const userSelection = this.selectedInstance
const stateSelection = this.selectedStatistic
if (
!stateSelection ||
userSelection.amount !== stateSelection.amount ||
userSelection.currency !== stateSelection.currency
) {
this.$store.dispatch('application/setAndUpdateStatistic', {
currency: userSelection.currency,
amount: userSelection.amount
})
}
const { currency, amount } = this.selectedInstance
this.$store.dispatch('application/setAndUpdateStatistic', { currency, amount })
}
}
}

View file

@ -3,28 +3,13 @@ export default ({ store, isHMR, app }, inject) => {
inject('isLoadedFromIPFS', main)
}
function main() {
const whiteListedDomains = [
'tornadocash.3th.li',
'tornadocash.3th.ws',
'tornadocash.eth.link',
'tornadocash.eth.limo',
'tornadocashcommunity.3th.li',
'tornadocashcommunity.3th.ws',
'tornadocashcommunity.eth.link',
'tornadocashcommunity.eth.limo'
]
const whiteListedDomains = ['localhost:3000', 'tornadocash.eth.link', 'tornadocash.eth.limo']
const IPFS_GATEWAY_REGEXP = /.ipfs./
const IPFS_LOCAL_REGEXP = /.ipfs.localhost:/
const IPFS_SOP_GATEWAY_REGEXP = /\/ipfs\//
const NETLIFY_REGEXP = /deploy-preview-(\d+)--tornadocash\.netlify\.app/
if (IPFS_LOCAL_REGEXP.test(window.location.host)) {
if (NETLIFY_REGEXP.test(window.location.host)) {
return false
} else if (
IPFS_GATEWAY_REGEXP.test(window.location.host) ||
IPFS_SOP_GATEWAY_REGEXP.test(window.location.host) ||
whiteListedDomains.includes(window.location.host)
) {
} else if (!whiteListedDomains.includes(window.location.host)) {
console.warn('The page has been loaded from ipfs.io. LocalStorage is disabled')
return true
}

View file

@ -9,7 +9,7 @@ import { loadCachedEvents, getPastEvents } from './helpers'
const EVENTS_PATH = './static/events/'
const EVENTS = ['Deposit', 'Withdrawal']
const enabledChains = ['1', '56', '100', '137']
const enabledChains = ['1', '56', '5', '100', '137' ]
async function main(type, netId) {
const { tokens, nativeCurrency, deployedBlock } = networkConfig[`netId${netId}`]
@ -22,7 +22,6 @@ async function main(type, netId) {
deployedBlock
})
console.log('Update events for', instance, nativeCurrency.toUpperCase(), `${type.toLowerCase()}s`)
console.log('cachedEvents count - ', cachedEvents.events.length)
console.log('lastBlock - ', cachedEvents.lastBlock)

View file

@ -1,21 +1,22 @@
import Web3 from 'web3'
import EWorker from '@/assets/events.worker.js'
import graph from '@/services/graph'
import { download } from '@/store/snark'
import networkConfig from '@/networkConfig'
import InstanceABI from '@/abis/Instance.abi.json'
import { CONTRACT_INSTANCES, eventsType, httpConfig } from '@/constants'
import { sleep, flattenNArray, formatEvents, capitalizeFirstLetter } from '@/utils'
import { CONTRACT_INSTANCES, eventsType } from '@/constants'
import { sleep, formatEvents, capitalizeFirstLetter, flattenNArray } from '@/utils'
const MIN_CORES = 2
const WORKERS_ALLOC = 2
const HARDWARE_CORES = window.navigator.hardwareConcurrency
const AVAILABLE_CORES = HARDWARE_CORES / WORKERS_ALLOC || MIN_CORES
const CORES = Math.max(AVAILABLE_CORES, MIN_CORES)
const supportedCaches = ['1', '56', '100', '137']
let store
if (process.browser) {
window.onNuxtReady(({ $store }) => {
store = $store
})
}
class EventService {
constructor({ netId, amount, currency, factoryMethods }) {
this.idb = window.$nuxt.$indexedDB(netId)
@ -28,6 +29,7 @@ class EventService {
this.currency = currency
this.factoryMethods = factoryMethods
this.rpcUrl = this.factoryMethods.getProviderUrl()
this.contract = this.getContract({ netId, amount, currency })
this.isNative = nativeCurrency === this.currency
@ -38,12 +40,14 @@ class EventService {
return `${type}s_${this.currency}_${this.amount}`
}
updateEventProgress(percentage, type) {
if (store) {
store.dispatch('loading/updateProgress', {
message: `Fetching past ${type} events`,
progress: Math.ceil(percentage * 100)
})
getMessageParams(eventName, type) {
return {
type: capitalizeFirstLetter(type),
currency: this.currency,
rpcUrl: this.rpcUrl,
amount: this.amount,
netId: this.netId,
eventName
}
}
@ -80,6 +84,7 @@ class EventService {
}
return a.blockNumber - b.blockNumber
})
const lastBlock = allEvents[allEvents.length - 1].blockNumber
this.saveEvents({ events: allEvents, lastBlock, type })
@ -246,150 +251,107 @@ class EventService {
}
}
getPastEvents({ fromBlock, toBlock, type }, shouldRetry = false, i = 0) {
return new Promise((resolve, reject) => {
this.contract
.getPastEvents(capitalizeFirstLetter(type), {
fromBlock,
toBlock
})
.then((events) => resolve(events))
.catch((err) => {
i = i + 1
// maximum 5 second buffer for rate-limiting
if (shouldRetry) {
const isRetry = i !== 5
sleep(1000 * i).then(() =>
this.getPastEvents({ fromBlock, toBlock, type }, isRetry, i)
.then((events) => resolve(events))
.catch((_) => resolve(undefined))
)
} else {
reject(new Error(err))
}
})
})
}
async getEventsPartFromRpc(parameters, shouldRetry = false) {
async getEventsPartFromRpc({ fromBlock, toBlock, type }) {
try {
const { fromBlock, type } = parameters
const { currentBlockNumber } = await this.getBlocksDiff({ fromBlock })
if (fromBlock < currentBlockNumber) {
const eventsPart = await this.getPastEvents(parameters, shouldRetry)
if (eventsPart) {
if (eventsPart.length > 0) {
return {
events: formatEvents(eventsPart, type),
lastBlock: eventsPart[eventsPart.length - 1].blockNumber
}
} else {
return {
events: [],
lastBlock: fromBlock
}
}
} else {
return undefined
}
} else {
if (fromBlock > currentBlockNumber) {
return {
events: [],
lastBlock: fromBlock
}
}
} catch (err) {
return undefined
}
}
createBatchRequest(batchArray) {
return batchArray.map(
(e, i) =>
new Promise((resolve) =>
sleep(20 * i).then(() =>
this.getEventsPartFromRpc({ ...e }, true).then((batch) => {
if (!batch) {
resolve([{ isFailedBatch: true, ...e }])
} else {
resolve(batch.events)
}
})
)
)
)
}
async getBatchEventsFromRpc({ fromBlock, type }) {
try {
const batchSize = 10
const blockRange = 10000
let [events, failed] = [[], []]
let lastBlock = fromBlock
const { blockDifference, currentBlockNumber } = await this.getBlocksDiff({ fromBlock })
const batchDigest = blockDifference === 0 ? 1 : Math.ceil(blockDifference / blockRange)
const blockDenom = Math.ceil(blockDifference / batchDigest)
const batchCount = Math.ceil(batchDigest / batchSize)
if (fromBlock < currentBlockNumber) {
await this.updateEventProgress(0, type)
for (let batchIndex = 0; batchIndex < batchCount; batchIndex++) {
const isLastBatch = batchIndex === batchCount - 1
const params = new Array(batchSize).fill('').map((_, i) => {
const toBlock = (i + 1) * blockDenom + lastBlock
const fromBlock = toBlock - blockDenom
return { fromBlock, toBlock, type }
})
const batch = await Promise.all(this.createBatchRequest(params))
const requests = flattenNArray(batch)
events = events.concat(requests.filter((e) => !e.isFailedBatch))
failed = failed.concat(requests.filter((e) => e.isFailedBatch))
lastBlock = params[batchSize - 1].toBlock
const progressIndex = batchIndex - failed.length / batchSize
if (isLastBatch && failed.length !== 0) {
const failedBatch = await Promise.all(this.createBatchRequest(failed))
const failedReqs = flattenNArray(failedBatch)
const failedRept = failedReqs.filter((e) => e.isFailedBatch)
if (failedRept.length === 0) {
events = events.concat(failedReqs)
} else {
throw new Error('Failed to batch events')
}
}
await this.updateEventProgress(progressIndex / batchCount, type)
}
const events = await this.contract.getPastEvents(capitalizeFirstLetter(type), {
fromBlock,
toBlock
})
if (!events?.length) {
return {
lastBlock: events[events.length - 1].blockNumber,
events
events: [],
lastBlock: fromBlock
}
} else {
return undefined
}
return {
events: formatEvents(events, type),
lastBlock: events[events.length - 1].blockNumber
}
} catch (err) {
return undefined
}
}
async getBatchEventsFromRpc({ fromBlock, type }) {
try {
const blockRange = 10000
const { blockDifference, currentBlockNumber } = await this.getBlocksDiff({ fromBlock })
const chunks = blockDifference === 0 ? 1 : Math.ceil(blockDifference / blockRange)
const chunkSize = Math.ceil(blockDifference / chunks)
if (fromBlock < currentBlockNumber) {
const chunk = Math.ceil(chunks / CORES)
const digest = new Array(chunks).fill('')
const workers = new Array(CORES).fill('')
const blocks = digest.map((e, i) => chunkSize * (i + 1) + fromBlock)
const workerBatches = workers.map((e, i) => {
const endIndex = (i + 1) * chunk
const startIndex = endIndex - chunk
return this.openEventThreadPool({
...this.getMessageParams('batch_events', type),
payload: {
blocks: blocks.slice(startIndex, endIndex),
chunkSize
}
})
})
const results = flattenNArray(await Promise.all(workerBatches))
const events = results.map((e) => ({ ...e.returnValues, ...e }))
return {
lastBlock: events[events.length - 1].blockNumber,
events
}
}
return undefined
} catch (err) {
return undefined
}
}
openEventThreadPool(message) {
return new Promise((resolve, reject) => {
// const ipfsPathPrefix = getIPFSPrefix()
// const basePath = `${window.location.origin}${ipfsPathPrefix}`
// const worker = new Worker(basePath + '/assets/events.workers.js')
const worker = new EWorker()
const channel = new MessageChannel()
worker.postMessage(message, [channel.port2])
channel.port1.onmessage = ({ data }) => {
const { result, errorMessage } = data
channel.port1.close()
if (result) {
resolve(result)
} else {
reject(errorMessage)
}
}
})
}
async getEventsFromRpc({ fromBlock, type }) {
try {
const { blockDifference } = await this.getBlocksDiff({ fromBlock })
const blockRange = 10000
let events
if (blockDifference < blockRange) {
if (blockDifference < 10000) {
const rpcEvents = await this.getEventsPartFromRpc({ fromBlock, toBlock: 'latest', type })
events = rpcEvents?.events || []
} else {
@ -452,9 +414,7 @@ class EventsFactory {
instances = new Map()
constructor(rpcUrl) {
const httpProvider = new Web3.providers.HttpProvider(rpcUrl, httpConfig)
this.provider = new Web3(httpProvider).eth
this.provider = new Web3(rpcUrl).eth
}
getBlockNumber = () => {
@ -465,6 +425,10 @@ class EventsFactory {
return new this.provider.Contract(InstanceABI, address)
}
getProviderUrl = () => {
return this.provider.currentProvider.host
}
getService = (payload) => {
const instanceName = `${payload.currency}_${payload.amount}`
@ -476,7 +440,8 @@ class EventsFactory {
...payload,
factoryMethods: {
getContract: this.getContract,
getBlockNumber: this.getBlockNumber
getBlockNumber: this.getBlockNumber,
getProviderUrl: this.getProviderUrl
}
})
this.instances.set(instanceName, instance)

View file

@ -39,7 +39,6 @@ const defaultOptions = {
const client = new ApolloClient({
uri: link,
credentials: 'omit',
cache: new InMemoryCache(),
defaultOptions
})
@ -47,7 +46,6 @@ const client = new ApolloClient({
const registryClient = new ApolloClient({
uri: 'https://api.thegraph.com/subgraphs/name/tornadocash/tornado-relayer-registry',
cache: new InMemoryCache(),
credentials: 'omit',
defaultOptions
})

View file

@ -5,7 +5,7 @@ import { download } from '@/store/snark'
import networkConfig from '@/networkConfig'
import { mimc, bloomService } from '@/services'
const supportedCaches = ['1', '56', '100', '137']
const supportedCaches = ['1', '56', '100', '137', '5']
class MerkleTreeService {
constructor({ netId, amount, currency, commitment, instanceName }) {
@ -22,12 +22,12 @@ class MerkleTreeService {
commitment,
instanceName,
fileFolder: 'trees',
fileName: `deposits_${currency}_${amount}_bloom.json.gz`
fileName: `deposits_${currency}_${amount}_bloom.json.zip`
})
}
getFileName(partNumber = trees.PARTS_COUNT) {
return `trees/deposits_${this.currency}_${this.amount}_slice${partNumber}.json.gz`
return `trees/deposits_${this.currency}_${this.amount}_slice${partNumber}.json.zip`
}
createTree({ events }) {

View file

@ -1,16 +1,15 @@
import Web3 from 'web3'
import namehash from 'eth-ens-namehash'
import { BigNumber as BN } from 'bignumber.js'
import { toChecksumAddress, isAddress } from 'web3-utils'
import { toChecksumAddress } from 'web3-utils'
import { graph } from '@/services'
import networkConfig from '@/networkConfig'
import { REGISTRY_DEPLOYED_BLOCK } from '@/constants'
import { sleep, flattenNArray } from '@/utils'
import AggregatorABI from '@/abis/Aggregator.abi.json'
import RelayerRegistryABI from '@/abis/RelayerRegistry.abi.json'
const MIN_STAKE_BALANCE = '0X1B1AE4D6E2EF500000' // 500 TORN
const MIN_STAKE_BALANCE = '0x22B1C8C1227A00000' // 40 TORN
const subdomains = Object.values(networkConfig).map(({ ensSubdomainKey }) => ensSubdomainKey)
@ -25,88 +24,28 @@ class RelayerRegister {
this.relayerRegistry = new this.provider.Contract(RelayerRegistryABI, registryContract)
}
fetchEvents = ({ fromBlock, toBlock }, shouldRetry = false) => {
return new Promise((resolve, reject) => {
if (fromBlock <= toBlock) {
this.relayerRegistry
.getPastEvents('RelayerRegistered', { fromBlock, toBlock })
.then((events) => resolve(events))
.catch((_) => {
if (shouldRetry) {
sleep(500).then(() =>
this.fetchEvents({ fromBlock, toBlock })
.then((events) => resolve(events))
.catch((_) => resolve(undefined))
)
} else {
resolve(undefined)
}
})
} else {
resolve(undefined)
}
})
}
batchFetchEvents = async ({ fromBlock, toBlock }) => {
const batchSize = 10
const blockRange = 10000
const blockDifference = toBlock - fromBlock
const chunkCount = Math.ceil(blockDifference / blockRange)
const blockDenom = Math.ceil(blockDifference / chunkCount)
const chunkSize = Math.ceil(chunkCount / batchSize)
let failed = []
let events = []
let lastBlock = fromBlock
for (let batchIndex = 0; batchIndex < chunkSize; batchIndex++) {
const params = new Array(batchSize).fill('').map((_, i) => {
const toBlock = (i + 1) * blockDenom + lastBlock
const fromBlock = toBlock - blockDenom
return { fromBlock, toBlock }
})
const promises = new Array(batchSize).fill('').map(
(_, i) =>
new Promise((resolve) =>
sleep(i * 20).then(() => {
this.fetchEvents(params[i], true).then((batch) => {
if (!batch) {
resolve([{ isFailedBatch: true, fromBlock, toBlock }])
} else {
resolve(batch)
}
})
})
)
)
const requests = flattenNArray(await Promise.all(promises))
const failedIndexes = requests
.filter((e) => e.isFailedBatch)
.map((e) => {
const reqIndex = requests.indexOf(e)
return params[reqIndex]
fetchEvents = async (fromBlock, toBlock) => {
if (fromBlock <= toBlock) {
try {
const registeredEventsPart = await this.relayerRegistry.getPastEvents('RelayerRegistered', {
fromBlock,
toBlock
})
failed = failed.concat(failedIndexes || [])
events = events.concat(requests.filter((e) => !e.isFailedBatch))
lastBlock = params[batchSize - 1].toBlock
return registeredEventsPart
} catch (error) {
const midBlock = (fromBlock + toBlock) >> 1
if (midBlock - fromBlock < 2) {
throw new Error(`error fetching events: ${error.message}`)
}
const arr1 = await this.fetchEvents(fromBlock, midBlock)
const arr2 = await this.fetchEvents(midBlock + 1, toBlock)
return [...arr1, ...arr2]
}
}
if (failed.length !== 0) {
const failedReqs = failed.map((e) => this.fetchEvents(e))
const failedBatch = flattenNArray(await Promise.all(failedReqs))
events = events.concat(failedBatch || [])
}
events = events.map((e) => ({ ...e.returnValues }))
if (events.length === 0) {
throw new Error('Failed to fetch registry events')
}
return events
return []
}
saveEvents = async ({ events, lastSyncBlock, storeName }) => {
@ -157,70 +96,51 @@ class RelayerRegister {
}
}
getENSAddress = async (ensName) => {
const { url } = Object.values(networkConfig.netId1.rpcUrls)[0]
const provider = new Web3(url)
const ensAddress = await provider.eth.ens.getAddress(ensName)
return ensAddress
}
fetchRelayers = async () => {
const blockRange = 10000
// eslint-disable-next-line prefer-const
let { blockTo, cachedEvents } = await this.getCachedData()
let { blockFrom, blockTo, cachedEvents } = await this.getCachedData()
let allRelayers = cachedEvents
const currentBlockNumber = await this.provider.getBlockNumber()
const fromBlock = cachedEvents.length === 0 ? REGISTRY_DEPLOYED_BLOCK[1] : blockTo
const blockDifference = currentBlockNumber - fromBlock
if (blockFrom !== blockTo) {
const registeredRelayersEvents = await graph.getAllRegisters(blockFrom)
try {
let toBlock
let registerRelayerEvents
let lastSyncBlock = blockTo
if (cachedEvents.length > 0 || blockDifference === 0) {
return cachedEvents
} else if (blockDifference >= blockRange) {
toBlock = currentBlockNumber
registerRelayerEvents = await this.batchFetchEvents({ fromBlock, toBlock })
lastSyncBlock = toBlock
} else {
toBlock = fromBlock + blockRange
registerRelayerEvents = await this.fetchEvents({ fromBlock, toBlock }, true)
lastSyncBlock = toBlock
let relayers = {
lastSyncBlock: registeredRelayersEvents.lastSyncBlock,
events: registeredRelayersEvents.events.map((el) => ({
ensName: el.ensName,
relayerAddress: toChecksumAddress(el.address)
}))
}
const relayerEvents = cachedEvents.concat(registerRelayerEvents || [])
const events = []
const isGraphLate = relayers.lastSyncBlock && blockTo > Number(relayers.lastSyncBlock)
for (let x = 0; x < relayerEvents.length; x++) {
const { ensName, relayerAddress } = relayerEvents[x]
let ensAddress
if (isGraphLate) {
blockFrom = relayers.lastSyncBlock
}
if (!isAddress(relayerAddress)) {
ensAddress = await this.getENSAddress(ensName)
ensAddress = toChecksumAddress(ensAddress)
} else {
ensAddress = relayerAddress
if (!relayers.events.length || isGraphLate) {
const multicallEvents = await this.fetchEvents(blockFrom, blockTo)
const eventsRelayers = multicallEvents.map(({ returnValues }) => ({
ensName: returnValues.ensName,
relayerAddress: returnValues.relayerAddress
}))
relayers = {
lastSyncBlock: blockTo,
events: relayers.events.concat(eventsRelayers)
}
events.push({ ensName, relayerAddress: ensAddress })
}
await this.saveEvents({ storeName: 'register_events', lastSyncBlock, events })
allRelayers = allRelayers.concat(events)
} catch (err) {
console.log(err)
await this.saveEvents({ storeName: 'register_events', ...relayers })
allRelayers = allRelayers.concat(relayers.events)
}
return allRelayers
}
filterRelayer = (acc, curr, ensSubdomainKey, relayer) => {
const subdomainIndex = subdomains.indexOf(ensSubdomainKey)
const mainnetSubdomain = curr.records[0]
const hostname = curr.records[subdomainIndex]
const isHostWithProtocol = hostname.includes('http')
@ -271,6 +191,7 @@ class RelayerRegister {
getRelayers = async (ensSubdomainKey) => {
const relayers = await this.fetchRelayers()
const validRelayers = await this.getValidRelayers(relayers, ensSubdomainKey)
return validRelayers

Binary file not shown.

Binary file not shown.

View file

@ -3,7 +3,7 @@
import Web3 from 'web3'
import networkConfig from '@/networkConfig'
import { cachedEventsLength, eventsType, httpConfig } from '@/constants'
import { cachedEventsLength, eventsType } from '@/constants'
import MulticallABI from '@/abis/Multicall.json'
import InstanceABI from '@/abis/Instance.abi.json'
@ -117,8 +117,7 @@ const getters = {
const config = networkConfig[`netId${netId}`]
const { url } = rootState.settings[`netId${netId}`].rpc
const address = config.tokens[currency].instanceAddress[amount]
const httpProvider = new Web3.providers.HttpProvider(url, httpConfig)
const web3 = new Web3(httpProvider)
const web3 = new Web3(url)
return new web3.eth.Contract(InstanceABI, address)
},
multicallContract: (state, getters, rootState) => ({ netId }) => {
@ -259,7 +258,6 @@ const getters = {
const actions = {
setAndUpdateStatistic({ dispatch, commit }, { currency, amount }) {
commit('SET_SELECTED_STATISTIC', { currency, amount })
dispatch('updateSelectEvents')
},
async updateSelectEvents({ dispatch, commit, state, rootGetters, getters }) {
@ -267,14 +265,15 @@ const actions = {
const { currency, amount } = state.selectedStatistic
const eventService = getters.eventsInterface.getService({ netId, amount, currency })
const graphEvents = await eventService.getEventsFromGraph({ methodName: 'getStatistic' })
let statistic = graphEvents?.events
const latestDeposits = []
if (!statistic || !statistic.length) {
statistic = []
const fresh = await eventService.getStatisticsRpc({ eventsCount: 10 })
statistic = fresh || []
}
const { nextDepositIndex, anonymitySet } = await dispatch('getLastDepositIndex', {
@ -285,6 +284,8 @@ const actions = {
statistic = statistic.sort((a, b) => a.leafIndex - b.leafIndex)
const latestDeposits = []
for (const event of statistic.slice(-10)) {
latestDeposits.unshift({
index: event.leafIndex,
@ -357,7 +358,7 @@ const actions = {
try {
const module = await download({
contentType: 'string',
name: `events/encrypted_notes_${netId}.json.gz`
name: `events/encrypted_notes_${netId}.json.zip`
})
if (module) {

View file

@ -32,7 +32,6 @@ export const getters = {
const address = config.ovmGasPriceOracleContract
if (address) {
const web3 = new Web3(url)
return new web3.eth.Contract(OvmGasPriceOracleABI, address)
}
@ -76,7 +75,7 @@ export const actions = {
} catch (e) {
console.error('fetchGasPrice', e)
} finally {
setTimeout(() => dispatch('fetchGasPrice'), 2000 * pollInterval)
setTimeout(() => dispatch('fetchGasPrice'), 1000 * pollInterval)
}
},
setDefault({ commit, rootGetters }) {

View file

@ -10,8 +10,6 @@ import networkConfig from '@/networkConfig'
import GovernanceABI from '@/abis/Governance.abi.json'
import AggregatorABI from '@/abis/Aggregator.abi.json'
import { httpConfig } from '@/constants'
const { numberToHex, toWei, fromWei, toBN, hexToNumber, hexToNumberString } = require('web3-utils')
const state = () => {
@ -49,9 +47,7 @@ const getters = {
},
getWeb3: (state, getters, rootState) => ({ netId }) => {
const { url } = rootState.settings[`netId${netId}`].rpc
const httpProvider = new Web3.providers.HttpProvider(url, httpConfig)
return new Web3(httpProvider)
return new Web3(url)
},
govContract: (state, getters, rootState) => ({ netId }) => {
const config = getters.getConfig({ netId })
@ -179,35 +175,15 @@ const actions = {
) {
try {
const { ethAccount } = rootState.metamask
const { lockedBalance, constants, delegators } = state
const netId = rootGetters['metamask/netId']
const proposalThreshold = toBN(constants.PROPOSAL_THRESHOLD)
const proposeIndependently = toBN(lockedBalance).gte(proposalThreshold)
const govInstance = getters.govContract({ netId })
const json = JSON.stringify({ title, description })
const delegatorAddress = delegators[delegators.length - 1]
const data = await govInstance.methods.propose(proposalAddress, json).encodeABI()
let data, gas
if (proposeIndependently) {
data = await govInstance.methods.propose(proposalAddress, json).encodeABI()
gas = await govInstance.methods.propose(proposalAddress, json).estimateGas({
from: ethAccount,
value: 0
})
} else {
data = await govInstance.methods
.proposeByDelegate(delegatorAddress, proposalAddress, json)
.encodeABI()
gas = await govInstance.methods
.proposeByDelegate(delegatorAddress, proposalAddress, json)
.estimateGas({
from: ethAccount,
value: 0
})
}
const gas = await govInstance.methods
.propose(proposalAddress, json)
.estimateGas({ from: ethAccount, value: 0 })
const callParams = {
method: 'eth_sendTransaction',
@ -708,13 +684,6 @@ const actions = {
}
}
if (text.includes(`'`)) {
text = text.replaceAll(`'`, `"`)
}
if (text.includes(`" "`)) {
text = text.replace(`" "`, `", "`)
}
let title, description, rest
try {
;({ title, description } = JSON.parse(text))

View file

@ -3,7 +3,6 @@ import Web3 from 'web3'
import BN from 'bignumber.js'
import namehash from 'eth-ens-namehash'
import { httpConfig } from '@/constants'
import { schema, relayerRegisterService } from '@/services'
import { createChainIdState, parseNote, parseSemanticVersion } from '@/utils'
@ -86,9 +85,8 @@ export const state = () => {
export const getters = {
ethProvider: (state, getters, rootState) => {
const { url } = rootState.settings.netId1.rpc
const httpProvider = new Web3.providers.HttpProvider(url, httpConfig)
return new Web3(httpProvider)
return new Web3(url)
},
jobs: (state, getters, rootState, rootGetters) => (type) => {
const netId = rootGetters['metamask/netId']
@ -206,13 +204,7 @@ export const actions = {
}
const url = `${window.location.protocol}//${hostname}`
const reqConfig = {
headers: {
'Content-Type': 'application/json, application/x-www-form-urlencoded'
},
timeout: 10000
}
const response = await axios.get(`${url}status`, reqConfig).catch(() => {
const response = await axios.get(`${url}status`, { timeout: 5000 }).catch(() => {
throw new Error(this.app.i18n.t('canNotFetchStatusFromTheRelayer'))
})
@ -330,18 +322,8 @@ export const actions = {
})
} catch {
console.error('Method pickRandomRelayer has not picked relayer')
dispatch(
'notice/addNotice',
{
notice: {
untranslatedTitle: 'Failed to fetch relayers',
type: 'warning'
},
interval: 1500
},
{ root: true }
)
}
commit('SET_IS_LOADING_RELAYERS', false)
},
async getKnownRelayerData({ rootGetters, getters }, { relayerAddress, name }) {

View file

@ -51,14 +51,11 @@ export const actions = {
},
async checkCurrentRpc({ dispatch, getters, rootGetters }) {
const netId = rootGetters['metamask/netId']
if (netId !== 1) {
await dispatch('preselectRpc', { netId: 1, isEthRpc: true })
}
await dispatch('preselectRpc', { netId })
},
async preselectRpc({ getters, commit, dispatch }, { netId, isEthRpc = false }) {
async preselectRpc({ getters, commit, dispatch }, { netId }) {
const savedRpc = getters.getRpc(netId)
const { isValid } = await dispatch('checkRpc', { ...savedRpc, netId, isEthRpc })
const { isValid } = await dispatch('checkRpc', { ...savedRpc, netId })
if (isValid) {
return
@ -67,7 +64,7 @@ export const actions = {
const { rpcUrls } = networkConfig[`netId${netId}`]
for (const [, { name, url }] of Object.entries(rpcUrls)) {
const { isValid, error } = await dispatch('checkRpc', { url, netId, isEthRpc })
const { isValid, error } = await dispatch('checkRpc', { url, netId })
if (isValid) {
commit('SAVE_RPC', { netId, name, url })
return
@ -77,13 +74,14 @@ export const actions = {
}
throw new Error(this.app.i18n.t('rpcSelectError'))
},
async checkRpc(_, { url, netId, isEthRpc = false }) {
async checkRpc(_, { url, netId }) {
try {
const web3 = new Web3(url)
const chainId = await web3.eth.getChainId()
const isCurrent = Number(chainId) === Number(netId)
if (isEthRpc || isCurrent) {
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') }

View file

@ -18,7 +18,7 @@ function buildGroth16() {
function getEns() {
const { url } = Object.values(networkConfig.netId1.rpcUrls)[0]
const provider = new Web3(url)
const provider = new Web3(new Web3.providers.HttpProvider(url))
return provider.eth.ens
}

View file

@ -8,12 +8,19 @@ export * from './stringUtils'
export * from './numberUtils'
export * from './instanceUtils'
const PREFIX_INDEX = 1
export function flattenNArray(arr) {
return arr.reduce((flat, toFlatten) => {
return flat.concat(Array.isArray(toFlatten) ? flattenNArray(toFlatten) : toFlatten)
}, [])
}
export const getIPFSPrefix = () => {
const ipfsPathRegExp = /^(\/(?:ipfs|ipns)\/[^/]+)/
return (window.location.pathname.match(ipfsPathRegExp) ?? [])[PREFIX_INDEX] || ''
}
export function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms))
}

472
yarn.lock
View file

@ -1184,7 +1184,23 @@
resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.1":
"@ethereumjs/common@2.5.0":
version "2.5.0"
resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268"
integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==
dependencies:
crc-32 "^1.2.0"
ethereumjs-util "^7.1.1"
"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.6.4":
version "2.6.5"
resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30"
integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==
dependencies:
crc-32 "^1.2.0"
ethereumjs-util "^7.1.5"
"@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.1":
version "2.6.2"
resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.2.tgz#eb006c9329c75c80f634f340dc1719a5258244df"
integrity sha512-vDwye5v0SVeuDky4MtKsu+ogkH2oFUV8pBKzH/eNBzT8oI91pKa8WyzDuYuxOQsgNgv5R34LfFDh2aaw3H4HbQ==
@ -1192,7 +1208,23 @@
crc-32 "^1.2.0"
ethereumjs-util "^7.1.4"
"@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.2":
"@ethereumjs/tx@3.3.2":
version "3.3.2"
resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00"
integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==
dependencies:
"@ethereumjs/common" "^2.5.0"
ethereumjs-util "^7.1.2"
"@ethereumjs/tx@^3.2.1":
version "3.5.2"
resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c"
integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==
dependencies:
"@ethereumjs/common" "^2.6.4"
ethereumjs-util "^7.1.5"
"@ethereumjs/tx@^3.3.2":
version "3.5.0"
resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.0.tgz#783b0aeb08518b9991b23f5155763bbaf930a037"
integrity sha512-/+ZNbnJhQhXC83Xuvy6I9k4jT5sXiV0tMR9C+AzSSpcCV64+NB8dTE1m3x98RYMqb8+TLYWA+HML4F5lfXTlJw==
@ -1230,6 +1262,21 @@
"@ethersproject/properties" "^5.6.0"
"@ethersproject/strings" "^5.6.0"
"@ethersproject/abi@^5.6.3":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449"
integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==
dependencies:
"@ethersproject/address" "^5.7.0"
"@ethersproject/bignumber" "^5.7.0"
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/constants" "^5.7.0"
"@ethersproject/hash" "^5.7.0"
"@ethersproject/keccak256" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
"@ethersproject/properties" "^5.7.0"
"@ethersproject/strings" "^5.7.0"
"@ethersproject/abstract-provider@5.6.0", "@ethersproject/abstract-provider@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz#0c4ac7054650dbd9c476cf5907f588bbb6ef3061"
@ -1243,6 +1290,19 @@
"@ethersproject/transactions" "^5.6.0"
"@ethersproject/web" "^5.6.0"
"@ethersproject/abstract-provider@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef"
integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==
dependencies:
"@ethersproject/bignumber" "^5.7.0"
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
"@ethersproject/networks" "^5.7.0"
"@ethersproject/properties" "^5.7.0"
"@ethersproject/transactions" "^5.7.0"
"@ethersproject/web" "^5.7.0"
"@ethersproject/abstract-signer@5.6.0", "@ethersproject/abstract-signer@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.0.tgz#9cd7ae9211c2b123a3b29bf47aab17d4d016e3e7"
@ -1254,6 +1314,17 @@
"@ethersproject/logger" "^5.6.0"
"@ethersproject/properties" "^5.6.0"
"@ethersproject/abstract-signer@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2"
integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==
dependencies:
"@ethersproject/abstract-provider" "^5.7.0"
"@ethersproject/bignumber" "^5.7.0"
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
"@ethersproject/properties" "^5.7.0"
"@ethersproject/address@5.6.0", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.0.tgz#13c49836d73e7885fc148ad633afad729da25012"
@ -1265,6 +1336,17 @@
"@ethersproject/logger" "^5.6.0"
"@ethersproject/rlp" "^5.6.0"
"@ethersproject/address@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37"
integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==
dependencies:
"@ethersproject/bignumber" "^5.7.0"
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/keccak256" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
"@ethersproject/rlp" "^5.7.0"
"@ethersproject/base64@5.6.0", "@ethersproject/base64@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.0.tgz#a12c4da2a6fb86d88563216b0282308fc15907c9"
@ -1272,6 +1354,13 @@
dependencies:
"@ethersproject/bytes" "^5.6.0"
"@ethersproject/base64@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c"
integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==
dependencies:
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/basex@5.6.0", "@ethersproject/basex@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.0.tgz#9ea7209bf0a1c3ddc2a90f180c3a7f0d7d2e8a69"
@ -1289,6 +1378,15 @@
"@ethersproject/logger" "^5.6.0"
bn.js "^4.11.9"
"@ethersproject/bignumber@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2"
integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==
dependencies:
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
bn.js "^5.2.1"
"@ethersproject/bytes@5.6.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.0.tgz#81652f2a0e04533575befadce555213c11d8aa20"
@ -1296,6 +1394,13 @@
dependencies:
"@ethersproject/logger" "^5.6.0"
"@ethersproject/bytes@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d"
integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==
dependencies:
"@ethersproject/logger" "^5.7.0"
"@ethersproject/constants@5.6.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.0.tgz#55e3eb0918584d3acc0688e9958b0cedef297088"
@ -1303,6 +1408,13 @@
dependencies:
"@ethersproject/bignumber" "^5.6.0"
"@ethersproject/constants@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e"
integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==
dependencies:
"@ethersproject/bignumber" "^5.7.0"
"@ethersproject/contracts@5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.0.tgz#60f2cfc7addd99a865c6c8cfbbcec76297386067"
@ -1333,6 +1445,21 @@
"@ethersproject/properties" "^5.6.0"
"@ethersproject/strings" "^5.6.0"
"@ethersproject/hash@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7"
integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==
dependencies:
"@ethersproject/abstract-signer" "^5.7.0"
"@ethersproject/address" "^5.7.0"
"@ethersproject/base64" "^5.7.0"
"@ethersproject/bignumber" "^5.7.0"
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/keccak256" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
"@ethersproject/properties" "^5.7.0"
"@ethersproject/strings" "^5.7.0"
"@ethersproject/hdnode@5.6.0", "@ethersproject/hdnode@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.0.tgz#9dcbe8d629bbbcf144f2cae476337fe92d320998"
@ -1378,11 +1505,24 @@
"@ethersproject/bytes" "^5.6.0"
js-sha3 "0.8.0"
"@ethersproject/keccak256@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a"
integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==
dependencies:
"@ethersproject/bytes" "^5.7.0"
js-sha3 "0.8.0"
"@ethersproject/logger@5.6.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a"
integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==
"@ethersproject/logger@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892"
integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==
"@ethersproject/networks@5.6.0", "@ethersproject/networks@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.0.tgz#486d03fff29b4b6b5414d47a232ded09fe10de5e"
@ -1390,6 +1530,13 @@
dependencies:
"@ethersproject/logger" "^5.6.0"
"@ethersproject/networks@^5.7.0":
version "5.7.1"
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6"
integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==
dependencies:
"@ethersproject/logger" "^5.7.0"
"@ethersproject/pbkdf2@5.6.0", "@ethersproject/pbkdf2@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz#04fcc2d7c6bff88393f5b4237d906a192426685a"
@ -1405,6 +1552,13 @@
dependencies:
"@ethersproject/logger" "^5.6.0"
"@ethersproject/properties@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30"
integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==
dependencies:
"@ethersproject/logger" "^5.7.0"
"@ethersproject/providers@5.6.1":
version "5.6.1"
resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.1.tgz#9a05f00ecbac59565bf6907c8d2af8ac33303b48"
@ -1446,6 +1600,14 @@
"@ethersproject/bytes" "^5.6.0"
"@ethersproject/logger" "^5.6.0"
"@ethersproject/rlp@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304"
integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==
dependencies:
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
"@ethersproject/sha2@5.6.0", "@ethersproject/sha2@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.0.tgz#364c4c11cc753bda36f31f001628706ebadb64d9"
@ -1467,6 +1629,18 @@
elliptic "6.5.4"
hash.js "1.1.7"
"@ethersproject/signing-key@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3"
integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==
dependencies:
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
"@ethersproject/properties" "^5.7.0"
bn.js "^5.2.1"
elliptic "6.5.4"
hash.js "1.1.7"
"@ethersproject/solidity@5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.0.tgz#64657362a596bf7f5630bdc921c07dd78df06dc3"
@ -1488,6 +1662,15 @@
"@ethersproject/constants" "^5.6.0"
"@ethersproject/logger" "^5.6.0"
"@ethersproject/strings@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2"
integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==
dependencies:
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/constants" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
"@ethersproject/transactions@5.6.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.0.tgz#4b594d73a868ef6e1529a2f8f94a785e6791ae4e"
@ -1503,6 +1686,21 @@
"@ethersproject/rlp" "^5.6.0"
"@ethersproject/signing-key" "^5.6.0"
"@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b"
integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==
dependencies:
"@ethersproject/address" "^5.7.0"
"@ethersproject/bignumber" "^5.7.0"
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/constants" "^5.7.0"
"@ethersproject/keccak256" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
"@ethersproject/properties" "^5.7.0"
"@ethersproject/rlp" "^5.7.0"
"@ethersproject/signing-key" "^5.7.0"
"@ethersproject/units@5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.0.tgz#e5cbb1906988f5740254a21b9ded6bd51e826d9c"
@ -1544,6 +1742,17 @@
"@ethersproject/properties" "^5.6.0"
"@ethersproject/strings" "^5.6.0"
"@ethersproject/web@^5.7.0":
version "5.7.1"
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae"
integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==
dependencies:
"@ethersproject/base64" "^5.7.0"
"@ethersproject/bytes" "^5.7.0"
"@ethersproject/logger" "^5.7.0"
"@ethersproject/properties" "^5.7.0"
"@ethersproject/strings" "^5.7.0"
"@ethersproject/wordlists@5.6.0", "@ethersproject/wordlists@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.0.tgz#79e62c5276e091d8575f6930ba01a29218ded032"
@ -2804,6 +3013,11 @@ abbrev@1:
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
abortcontroller-polyfill@^1.7.3:
version "1.7.5"
resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed"
integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==
abstract-leveldown@~2.6.0:
version "2.6.3"
resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8"
@ -4062,6 +4276,11 @@ bn.js@^5.1.2, bn.js@^5.2.0:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
bn.js@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
body-parser@1.19.0:
version "1.19.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
@ -5365,6 +5584,13 @@ cross-fetch@^2.1.0:
node-fetch "2.6.1"
whatwg-fetch "2.0.4"
cross-fetch@^3.1.4:
version "3.1.5"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
dependencies:
node-fetch "2.6.7"
cross-spawn@^5.0.1:
version "5.1.0"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@ -6272,6 +6498,11 @@ es6-iterator@^2.0.3:
es5-ext "^0.10.35"
es6-symbol "^3.1.1"
es6-promise@^4.2.8:
version "4.2.8"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
es6-symbol@^3.1.1, es6-symbol@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
@ -6944,6 +7175,17 @@ ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.4:
ethereum-cryptography "^0.1.3"
rlp "^2.2.4"
ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5:
version "7.1.5"
resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181"
integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==
dependencies:
"@types/bn.js" "^5.1.0"
bn.js "^5.1.2"
create-hash "^1.1.2"
ethereum-cryptography "^0.1.3"
rlp "^2.2.4"
ethereumjs-vm@^2.3.4:
version "2.6.0"
resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6"
@ -11007,6 +11249,13 @@ node-fetch@2.6.1, node-fetch@^2.6.1:
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
node-fetch@2.6.7:
version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
dependencies:
whatwg-url "^5.0.0"
node-fetch@^2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
@ -15359,6 +15608,11 @@ uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
uuid@^9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
v-idle@^0.2.0:
version "0.2.0"
resolved "https://registry.npmjs.org/v-idle/-/v-idle-0.2.0.tgz#340e67f44f4e3d1edf7804b9e71b2e65cb88f85e"
@ -15654,6 +15908,14 @@ web3-core-helpers@1.7.1:
web3-eth-iban "1.7.1"
web3-utils "1.7.1"
web3-core-helpers@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.8.1-rc.0.tgz#374d0fa0d2070657a69bf666d8f31e0f438cfa16"
integrity sha512-f5Cph5YQ2EuFkNHnid4q94R5xlC/3I/W6tTy7hkmrtoR+709F8bWn87VQqjao97lGK3NZd0DlX4cxF7kO/9lsA==
dependencies:
web3-eth-iban "1.8.1-rc.0"
web3-utils "1.8.1-rc.0"
web3-core-method@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.5.2.tgz#d1d602657be1000a29d11e3ca3bf7bc778dea9a5"
@ -15677,6 +15939,17 @@ web3-core-method@1.7.1:
web3-core-subscriptions "1.7.1"
web3-utils "1.7.1"
web3-core-method@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.8.1-rc.0.tgz#a2f8ce805f230f99de3413a56a72ee292a42a932"
integrity sha512-b5mA6sgsFIa1z7Gp/uKA7fX4x4ptbYGz+jE9vWQHyL7qyWc0HULSxPl1+K8RBMJ9vzpzJqptjdJCtu7DYT/ZYQ==
dependencies:
"@ethersproject/transactions" "^5.6.2"
web3-core-helpers "1.8.1-rc.0"
web3-core-promievent "1.8.1-rc.0"
web3-core-subscriptions "1.8.1-rc.0"
web3-utils "1.8.1-rc.0"
web3-core-promievent@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.5.2.tgz#2dc9fe0e5bbeb7c360fc1aac5f12b32d9949a59b"
@ -15691,6 +15964,13 @@ web3-core-promievent@1.7.1:
dependencies:
eventemitter3 "4.0.4"
web3-core-promievent@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.8.1-rc.0.tgz#222e33ab0b31725f5f1a35ea810b97aa7acd46cd"
integrity sha512-kHE1Pvl4kz86KvCOanyTW8K4CvMwxQ+PC66zPuhMigwpFM9Uwa0Kyp/DjH7TQEVN2cllpH/0l8nUNIRTzWnR4A==
dependencies:
eventemitter3 "4.0.4"
web3-core-requestmanager@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.5.2.tgz#43ccc00779394c941b28e6e07e217350fd1ded71"
@ -15713,6 +15993,17 @@ web3-core-requestmanager@1.7.1:
web3-providers-ipc "1.7.1"
web3-providers-ws "1.7.1"
web3-core-requestmanager@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.8.1-rc.0.tgz#37bcc754289e5b91bb5e2bb75a53b33730f50b61"
integrity sha512-kwnq77XyRXsRh980OxH5DPSsMT0GT3jfz9ghbY0c3aHAt34njZMHIuiHVePqxjvjjqBd1wFEwSMR08sXXlrzWQ==
dependencies:
util "^0.12.0"
web3-core-helpers "1.8.1-rc.0"
web3-providers-http "1.8.1-rc.0"
web3-providers-ipc "1.8.1-rc.0"
web3-providers-ws "1.8.1-rc.0"
web3-core-subscriptions@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.5.2.tgz#8eaebde44f81fc13c45b555c4422fe79393da9cf"
@ -15729,6 +16020,14 @@ web3-core-subscriptions@1.7.1:
eventemitter3 "4.0.4"
web3-core-helpers "1.7.1"
web3-core-subscriptions@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.8.1-rc.0.tgz#218161818bb87a27c8903cebcd76b5ee5f098cb5"
integrity sha512-utOV38ZyJCQIKW5ZlR3dYqj1DnZ1+FiN1YMWKmZV9Bebu1HBcYLwqXoI7JkpV4mvvaSdxaADlhC2d8b4JzIVcw==
dependencies:
eventemitter3 "4.0.4"
web3-core-helpers "1.8.1-rc.0"
web3-core@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.5.2.tgz#ca2b9b1ed3cf84d48b31c9bb91f7628f97cfdcd5"
@ -15755,6 +16054,19 @@ web3-core@1.7.1:
web3-core-requestmanager "1.7.1"
web3-utils "1.7.1"
web3-core@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.8.1-rc.0.tgz#6982b9de026693fb378fc55276b647a2a97540ac"
integrity sha512-lZdqdamYsgRFlAofiV84sRjTgcmpfMz/P2yuB+cBW7nO88gUtIxgEqKEwoFhAtf85DzYUxW7CIyP2VBLqtMZmQ==
dependencies:
"@types/bn.js" "^5.1.0"
"@types/node" "^12.12.6"
bignumber.js "^9.0.0"
web3-core-helpers "1.8.1-rc.0"
web3-core-method "1.8.1-rc.0"
web3-core-requestmanager "1.8.1-rc.0"
web3-utils "1.8.1-rc.0"
web3-eth-abi@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.5.2.tgz#b627eada967f39ae4657ddd61b693cb00d55cb29"
@ -15771,6 +16083,14 @@ web3-eth-abi@1.7.1:
"@ethersproject/abi" "5.0.7"
web3-utils "1.7.1"
web3-eth-abi@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.8.1-rc.0.tgz#b16374e5ec71d16afa3ab08c2298f09deff3ff0c"
integrity sha512-QkHPtc02e9pmCmG9ZsBYZ3LYa/WJYW0u6M8k7gcpgYsChvB6Phy5zLSQGzc2+kg8FPVFNycppNIQhPv6yfmqPg==
dependencies:
"@ethersproject/abi" "^5.6.3"
web3-utils "1.8.1-rc.0"
web3-eth-accounts@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.5.2.tgz#cf506c21037fa497fe42f1f055980ce4acf83731"
@ -15805,6 +16125,23 @@ web3-eth-accounts@1.7.1:
web3-core-method "1.7.1"
web3-utils "1.7.1"
web3-eth-accounts@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.8.1-rc.0.tgz#af4d7899b5575d09b0d7dbf3b12fef4924cf9414"
integrity sha512-HWVVtqgWTWFfP9oSix4LmdbBfby98oXncSmFGCHnptg3BzDSFg88tP0yurYxiVu/i2uej3gyHGoSl9ufgOy5YA==
dependencies:
"@ethereumjs/common" "2.5.0"
"@ethereumjs/tx" "3.3.2"
crypto-browserify "3.12.0"
eth-lib "0.2.8"
ethereumjs-util "^7.0.10"
scrypt-js "^3.0.1"
uuid "^9.0.0"
web3-core "1.8.1-rc.0"
web3-core-helpers "1.8.1-rc.0"
web3-core-method "1.8.1-rc.0"
web3-utils "1.8.1-rc.0"
web3-eth-contract@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.5.2.tgz#ffbd799fd01e36596aaadefba323e24a98a23c2f"
@ -15833,6 +16170,20 @@ web3-eth-contract@1.7.1:
web3-eth-abi "1.7.1"
web3-utils "1.7.1"
web3-eth-contract@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.8.1-rc.0.tgz#7c21ea1fc5ae9d378bd22e3e68f6694603927d1d"
integrity sha512-HQU8C1MHozX2RTs6Q0sXrFiW9YwiT6JJxzInrqP2KygePKWsk44iPICKuDwL0AZByfJP2HdGuKix57mo5XvwMw==
dependencies:
"@types/bn.js" "^5.1.0"
web3-core "1.8.1-rc.0"
web3-core-helpers "1.8.1-rc.0"
web3-core-method "1.8.1-rc.0"
web3-core-promievent "1.8.1-rc.0"
web3-core-subscriptions "1.8.1-rc.0"
web3-eth-abi "1.8.1-rc.0"
web3-utils "1.8.1-rc.0"
web3-eth-ens@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.5.2.tgz#ecb3708f0e8e2e847e9d89e8428da12c30bba6a4"
@ -15861,6 +16212,20 @@ web3-eth-ens@1.7.1:
web3-eth-contract "1.7.1"
web3-utils "1.7.1"
web3-eth-ens@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.8.1-rc.0.tgz#2ecce5b66453eae670f25699247cb3f2aead35db"
integrity sha512-lQodmBPn1ANN/TuQcywXJHUwJwH0SwNP1N1eodLfYRtmGzJrR11b2OyHM3LDFfAkxX0pVJ/rdz6Hyi8SkbOvNg==
dependencies:
content-hash "^2.5.2"
eth-ens-namehash "2.0.8"
web3-core "1.8.1-rc.0"
web3-core-helpers "1.8.1-rc.0"
web3-core-promievent "1.8.1-rc.0"
web3-eth-abi "1.8.1-rc.0"
web3-eth-contract "1.8.1-rc.0"
web3-utils "1.8.1-rc.0"
web3-eth-iban@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.5.2.tgz#f390ad244ef8a6c94de7c58736b0b80a484abc8e"
@ -15877,6 +16242,14 @@ web3-eth-iban@1.7.1:
bn.js "^4.11.9"
web3-utils "1.7.1"
web3-eth-iban@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.8.1-rc.0.tgz#a13da287f202171bd3fe2c6c84744d095c5e1bb5"
integrity sha512-YpPYiO16TR5HGvD0Yz4fRUk1L3gpnZsZS6BZJwx/veN1s29k/pO43AOZwvIQi2RcQ5ht931kVX+CmeWwWR5Z2w==
dependencies:
bn.js "^5.2.1"
web3-utils "1.8.1-rc.0"
web3-eth-personal@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.5.2.tgz#043335a19ab59e119ba61e3bd6c3b8cde8120490"
@ -15901,6 +16274,18 @@ web3-eth-personal@1.7.1:
web3-net "1.7.1"
web3-utils "1.7.1"
web3-eth-personal@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.8.1-rc.0.tgz#9d908217754f721b4a099f98bfc07a5d6fa7832e"
integrity sha512-oxZaFVStDNZa7oRW3bMWD/5fFSGkT4KkTdPFycbw/P+/oQFAUhdFhLAQVIglwzN8vw4xIGAW9cHMQvsz0luwPA==
dependencies:
"@types/node" "^12.12.6"
web3-core "1.8.1-rc.0"
web3-core-helpers "1.8.1-rc.0"
web3-core-method "1.8.1-rc.0"
web3-net "1.8.1-rc.0"
web3-utils "1.8.1-rc.0"
web3-eth@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.5.2.tgz#0f6470df60a2a7d04df4423ca7721db8ed5ad72b"
@ -15937,6 +16322,24 @@ web3-eth@1.7.1:
web3-net "1.7.1"
web3-utils "1.7.1"
web3-eth@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.8.1-rc.0.tgz#4af5b66f0c2f4e528711e7334c54f6d477c3e867"
integrity sha512-XMv89hFws1ySPdNfLj2I4X/zD4k7J9BnoxYXGutwbxWf5eJeBfnvvVYtN71/v+i7QPCtvmRd4ds7WEhyeMM+mg==
dependencies:
web3-core "1.8.1-rc.0"
web3-core-helpers "1.8.1-rc.0"
web3-core-method "1.8.1-rc.0"
web3-core-subscriptions "1.8.1-rc.0"
web3-eth-abi "1.8.1-rc.0"
web3-eth-accounts "1.8.1-rc.0"
web3-eth-contract "1.8.1-rc.0"
web3-eth-ens "1.8.1-rc.0"
web3-eth-iban "1.8.1-rc.0"
web3-eth-personal "1.8.1-rc.0"
web3-net "1.8.1-rc.0"
web3-utils "1.8.1-rc.0"
web3-net@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.5.2.tgz#58915d7e2dad025d2a08f02c865f3abe61c48eff"
@ -15955,6 +16358,15 @@ web3-net@1.7.1:
web3-core-method "1.7.1"
web3-utils "1.7.1"
web3-net@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.8.1-rc.0.tgz#f280fcfb25de35a18539eef2338cb1eeeda1239d"
integrity sha512-7P2pvsLf5jXq8y20caTXhknN4452758aD5ZoNvtnsVledigvXzYQFaLklDsjT6kWwceCxWj3An5I9eK0Y7NdbA==
dependencies:
web3-core "1.8.1-rc.0"
web3-core-method "1.8.1-rc.0"
web3-utils "1.8.1-rc.0"
web3-provider-engine@16.0.1:
version "16.0.1"
resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-16.0.1.tgz#2600a39ede364cdc0a1fc773bf40a94f2177e605"
@ -15999,6 +16411,16 @@ web3-providers-http@1.7.1:
web3-core-helpers "1.7.1"
xhr2-cookies "1.1.0"
web3-providers-http@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.8.1-rc.0.tgz#d0d9cffeeebe5e0392d83e3c4bec9c5c94a6df97"
integrity sha512-0HB3gokbazwX66OOyQAdfVRhRfY9wc7it7+zM8o4V5yPx59D1hrWftv7/NGDU55r6f/8EMz/zAUWse0S42ek6A==
dependencies:
abortcontroller-polyfill "^1.7.3"
cross-fetch "^3.1.4"
es6-promise "^4.2.8"
web3-core-helpers "1.8.1-rc.0"
web3-providers-ipc@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.5.2.tgz#68a516883c998eeddf60df4cead77baca4fb4aaa"
@ -16015,6 +16437,14 @@ web3-providers-ipc@1.7.1:
oboe "2.1.5"
web3-core-helpers "1.7.1"
web3-providers-ipc@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.8.1-rc.0.tgz#6169cbcb200b2ca6425460ab46b123336bbb2f09"
integrity sha512-FO4eqYbB/5WTFxi+jk4YdR2DkQYBcOgBmc7MQHgZrkt/xg3yvyY84RA315U6XO3qJNnKhC4KXdPA4awPqV7bXA==
dependencies:
oboe "2.1.5"
web3-core-helpers "1.8.1-rc.0"
web3-providers-ws@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.5.2.tgz#d336a93ed608b40cdcadfadd1f1bc8d32ea046e0"
@ -16033,6 +16463,15 @@ web3-providers-ws@1.7.1:
web3-core-helpers "1.7.1"
websocket "^1.0.32"
web3-providers-ws@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.8.1-rc.0.tgz#9c6b7faf3d8245c8a2b8e7993d72f1ba331c3a33"
integrity sha512-runzmGqfYf6INulmmXncIjYSqS+8t6z8Bibt1hNXNN6BNGo8ipUxHo/HLHxmwH+sNS5gJtN0QahI+ZDOjc9MRA==
dependencies:
eventemitter3 "4.0.4"
web3-core-helpers "1.8.1-rc.0"
websocket "^1.0.32"
web3-shh@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.5.2.tgz#a72a3d903c0708a004db94a72d934a302d880aea"
@ -16079,6 +16518,19 @@ web3-utils@1.7.1, web3-utils@^1.3.0:
randombytes "^2.1.0"
utf8 "3.0.0"
web3-utils@1.8.1-rc.0:
version "1.8.1-rc.0"
resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.8.1-rc.0.tgz#5d741154a4d7499b98b1319a7ed944268ea7a0be"
integrity sha512-Mp4tHaJfflQc00N925W2Q+JP975zQmCj82n2ylQHdDP5Kcg1RyySLZ9ugeVefB049frPtrGJ2h9i6uuKLkhzzQ==
dependencies:
bn.js "^5.2.1"
ethereum-bloom-filters "^1.0.6"
ethereumjs-util "^7.1.0"
ethjs-unit "0.1.6"
number-to-bn "1.7.0"
randombytes "^2.1.0"
utf8 "3.0.0"
web3@1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/web3/-/web3-1.5.2.tgz#736ca2f39048c63964203dd811f519400973e78d"
@ -16262,6 +16714,14 @@ whatwg-url@^2.0.1:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
whatwg-url@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
dependencies:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
whatwg-url@^6.4.1:
version "6.5.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
@ -16360,6 +16820,14 @@ worker-farm@^1.7.0:
dependencies:
errno "~0.1.7"
worker-loader@^3.0.8:
version "3.0.8"
resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-3.0.8.tgz#5fc5cda4a3d3163d9c274a4e3a811ce8b60dbb37"
integrity sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==
dependencies:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
wrap-ansi@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"