Compare commits
No commits in common. "c4b5f69b72254c62e6ad6a5c66ddecfff574a687" and "8379696a921dc64da65b43ae358295c7877fadce" have entirely different histories.
c4b5f69b72
...
8379696a92
@ -1,7 +1,13 @@
|
||||
PINATA_API_KEY=
|
||||
PINATA_SECRET_API_KEY=
|
||||
|
||||
CHAINNODES_KEY=
|
||||
INFURA_KEY=
|
||||
|
||||
ALCHEMY_MAINNET_KEY=
|
||||
ALCHEMY_POLYGON_KEY=
|
||||
ALCHEMY_OPTIMISM_KEY=
|
||||
ALCHEMY_ARBITRUM_KEY=
|
||||
ALCHEMY_GOERLI_KEY=
|
||||
|
||||
WC_BRIDGE=
|
||||
|
||||
|
7
.github/workflows/nodejs.yml
vendored
7
.github/workflows/nodejs.yml
vendored
@ -32,7 +32,12 @@ jobs:
|
||||
- name: Build
|
||||
run: yarn generate
|
||||
env:
|
||||
CHAINNODES_KEY: ${{ secrets.CHAINNODES_KEY }}
|
||||
INFURA_KEY: ${{ secrets.INFURA_KEY }}
|
||||
ALCHEMY_MAINNET_KEY: ${{ secrets.ALCHEMY_MAINNET_KEY }}
|
||||
ALCHEMY_POLYGON_KEY: ${{ secrets.ALCHEMY_POLYGON_KEY }}
|
||||
ALCHEMY_OPTIMISM_KEY: ${{ secrets.ALCHEMY_OPTIMISM_KEY }}
|
||||
ALCHEMY_ARBITRUM_KEY: ${{ secrets.ALCHEMY_ARBITRUM_KEY }}
|
||||
ALCHEMY_GOERLI_KEY: ${{ secrets.ALCHEMY_GOERLI_KEY }}
|
||||
WC_BRIDGE: ${{ secrets.WC_BRIDGE }}
|
||||
OLD_STORE_NAME: ${{ secrets.OLD_STORE_NAME }}
|
||||
STORE_NAME: ${{ secrets.STORE_NAME }}
|
||||
|
@ -72,8 +72,6 @@ export async function _encryptFormatTx({ dispatch, getters, rootGetters }, { eve
|
||||
}
|
||||
}
|
||||
|
||||
dispatch('loading/disable', {}, { root: true })
|
||||
|
||||
return formattingEvents(result)
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
export const blockSyncInterval = 10000
|
||||
export const enabledChains = ['1', '5', '10', '56', '100', '137', '42161', '43114']
|
||||
export const enabledChains = ['1', '10', '56', '100', '137', '43114', '42161']
|
||||
export const chainsWithEncryptedNotes = ['1', '5', '56', '100', '137']
|
||||
export default {
|
||||
netId1: {
|
||||
rpcCallRetryAttempt: 15,
|
||||
@ -77,7 +78,9 @@ export default {
|
||||
usdc: {
|
||||
instanceAddress: {
|
||||
'100': '0xd96f2B1c14Db8458374d9Aca76E26c3D18364307',
|
||||
'1000': '0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D'
|
||||
'1000': '0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D',
|
||||
'10000': '',
|
||||
'100000': ''
|
||||
},
|
||||
tokenAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
||||
symbol: 'USDC',
|
||||
@ -87,7 +90,9 @@ export default {
|
||||
usdt: {
|
||||
instanceAddress: {
|
||||
'100': '0x169AD27A470D064DEDE56a2D3ff727986b15D52B',
|
||||
'1000': '0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f'
|
||||
'1000': '0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f',
|
||||
'10000': '',
|
||||
'100000': ''
|
||||
},
|
||||
tokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
|
||||
symbol: 'USDT',
|
||||
@ -98,7 +103,8 @@ export default {
|
||||
instanceAddress: {
|
||||
'0.1': '0x178169B423a011fff22B9e3F3abeA13414dDD0F1',
|
||||
'1': '0x610B717796ad172B316836AC95a2ffad065CeaB4',
|
||||
'10': '0xbB93e510BbCD0B7beb5A853875f9eC60275CF498'
|
||||
'10': '0xbB93e510BbCD0B7beb5A853875f9eC60275CF498',
|
||||
'100': ''
|
||||
},
|
||||
tokenAddress: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',
|
||||
symbol: 'WBTC',
|
||||
@ -401,17 +407,17 @@ export default {
|
||||
multicall: '0xe86e3989c74293Acc962156cd3F525c07b6a1B6e',
|
||||
echoContractAccount: '0xa75BF2815618872f155b7C4B0C81bF990f5245E4',
|
||||
rpcUrls: {
|
||||
publicRpc1: {
|
||||
name: 'Avalanche RPC',
|
||||
url: 'https://endpoints.omniatech.io/v1/avax/mainnet/public'
|
||||
},
|
||||
meowRPC: {
|
||||
name: 'Meow RPC',
|
||||
url: 'https://avax.meowrpc.com'
|
||||
},
|
||||
communityRPC: {
|
||||
name: 'Tornado RPC',
|
||||
url: 'https://avalanche-rpc.tornado.ws/ext/bc/C/rpc'
|
||||
},
|
||||
publicRpc1: {
|
||||
name: 'Avalanche RPC',
|
||||
url: 'https://api.avax.network/ext/bc/C/rpc'
|
||||
},
|
||||
oneRpc: {
|
||||
name: '1RPC',
|
||||
ulr: 'https://1rpc.io/avax/'
|
||||
}
|
||||
},
|
||||
tokens: {
|
||||
@ -499,7 +505,9 @@ export default {
|
||||
usdc: {
|
||||
instanceAddress: {
|
||||
'100': '0x05E0b5B40B7b66098C2161A5EE11C5740A3A7C45',
|
||||
'1000': '0x23173fE8b96A4Ad8d2E17fB83EA5dcccdCa1Ae52'
|
||||
'1000': '0x23173fE8b96A4Ad8d2E17fB83EA5dcccdCa1Ae52',
|
||||
'10000': '',
|
||||
'100000': ''
|
||||
},
|
||||
tokenAddress: '0xD87Ba7A50B2E7E660f678A895E4B72E7CB4CCd9C',
|
||||
symbol: 'USDC',
|
||||
@ -509,7 +517,9 @@ export default {
|
||||
usdt: {
|
||||
instanceAddress: {
|
||||
'100': '0x538Ab61E8A9fc1b2f93b3dd9011d662d89bE6FE6',
|
||||
'1000': '0x94Be88213a387E992Dd87DE56950a9aef34b9448'
|
||||
'1000': '0x94Be88213a387E992Dd87DE56950a9aef34b9448',
|
||||
'10000': '',
|
||||
'100000': ''
|
||||
},
|
||||
tokenAddress: '0xb7FC2023D96AEa94Ba0254AA5Aeb93141e4aad66',
|
||||
symbol: 'USDT',
|
||||
@ -520,7 +530,8 @@ export default {
|
||||
instanceAddress: {
|
||||
'0.1': '0x242654336ca2205714071898f67E254EB49ACdCe',
|
||||
'1': '0x776198CCF446DFa168347089d7338879273172cF',
|
||||
'10': '0xeDC5d01286f99A066559F60a585406f3878a033e'
|
||||
'10': '0xeDC5d01286f99A066559F60a585406f3878a033e',
|
||||
'100': ''
|
||||
},
|
||||
tokenAddress: '0xC04B0d3107736C32e19F1c62b2aF67BE61d63a05',
|
||||
symbol: 'WBTC',
|
||||
|
@ -187,7 +187,12 @@ export default {
|
||||
new webpack.IgnorePlugin(/worker_threads/),
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': JSON.stringify({
|
||||
CHAINNODES_KEY: process.env.CHAINNODES_KEY,
|
||||
INFURA_KEY: process.env.INFURA_KEY,
|
||||
ALCHEMY_MAINNET_KEY: process.env.ALCHEMY_MAINNET_KEY,
|
||||
ALCHEMY_POLYGON_KEY: process.env.ALCHEMY_POLYGON_KEY,
|
||||
ALCHEMY_OPTIMISM_KEY: process.env.ALCHEMY_OPTIMISM_KEY,
|
||||
ALCHEMY_ARBITRUM_KEY: process.env.ALCHEMY_ARBITRUM_KEY,
|
||||
ALCHEMY_GOERLI_KEY: process.env.ALCHEMY_GOERLI_KEY,
|
||||
WC_BRIDGE: process.env.WC_BRIDGE,
|
||||
OLD_STORE_NAME: process.env.OLD_STORE_NAME,
|
||||
STORE_NAME: process.env.STORE_NAME,
|
||||
@ -225,7 +230,7 @@ export default {
|
||||
},
|
||||
|
||||
provider: {
|
||||
rpcUrl: `https://mainnet.chainnodes.org/${process.env.CHAINNODES_KEY}`
|
||||
rpcUrl: `https://mainnet.infura.io/v3/${process.env.INFURA_KEY}`
|
||||
},
|
||||
|
||||
// todo make custom loading page
|
||||
|
@ -39,6 +39,10 @@ export async function getPastEvents({ type, fromBlock, netId, events, contractAt
|
||||
|
||||
let [{ url: rpcUrl }] = Object.values(networkConfig[`netId${netId}`].rpcUrls)
|
||||
|
||||
if (netId === '5') {
|
||||
rpcUrl = 'https://goerli.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'
|
||||
}
|
||||
|
||||
const provider = new Web3.providers.HttpProvider(rpcUrl)
|
||||
const web3 = new Web3(provider)
|
||||
const contract = new web3.eth.Contract(...contractAttrs)
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { uniqBy } from 'lodash'
|
||||
|
||||
import networkConfig, { enabledChains } from '../networkConfig'
|
||||
import networkConfig, { enabledChains, chainsWithEncryptedNotes } from '../networkConfig'
|
||||
|
||||
import { loadCachedEvents, save } from './helpers'
|
||||
|
||||
@ -68,7 +68,7 @@ async function main() {
|
||||
for (let i = 0; i < enabledChains.length; i++) {
|
||||
const netId = enabledChains[i]
|
||||
|
||||
updateEncrypted(netId)
|
||||
if (netId === chainsWithEncryptedNotes[i]) updateEncrypted(netId)
|
||||
|
||||
await updateCommon(netId)
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ import Web3 from 'web3'
|
||||
|
||||
import graph from '@/services/graph'
|
||||
import { download } from '@/store/snark'
|
||||
import networkConfig, { enabledChains, blockSyncInterval } from '@/networkConfig'
|
||||
import networkConfig, { enabledChains } from '@/networkConfig'
|
||||
import InstanceABI from '@/abis/Instance.abi.json'
|
||||
import { CONTRACT_INSTANCES, eventsType, httpConfig } from '@/constants'
|
||||
import { sleep, flattenNArray, formatEvents, capitalizeFirstLetter } from '@/utils'
|
||||
@ -178,7 +178,7 @@ class EventService {
|
||||
return events
|
||||
}
|
||||
|
||||
const blockRange = Math.floor(blockSyncInterval / 2) - 1
|
||||
const blockRange = 4950
|
||||
const fromBlock = deployedBlock
|
||||
const { blockDifference, currentBlockNumber } = await this.getBlocksDiff({ fromBlock })
|
||||
|
||||
@ -244,7 +244,7 @@ class EventService {
|
||||
}
|
||||
}
|
||||
|
||||
getPastEvents({ fromBlock, toBlock, type }, shouldRetry = false, retries = 0) {
|
||||
getPastEvents({ fromBlock, toBlock, type }, shouldRetry = false, i = 0) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.contract
|
||||
.getPastEvents(capitalizeFirstLetter(type), {
|
||||
@ -253,23 +253,13 @@ class EventService {
|
||||
})
|
||||
.then((events) => resolve(events))
|
||||
.catch((err) => {
|
||||
retries++
|
||||
|
||||
// If provider.getBlockNumber returned last block that isn't accepted (happened on Avalanche/Gnosis),
|
||||
// get events to last accepted block
|
||||
if (err.message.includes('after last accepted block')) {
|
||||
const acceptedBlock = parseInt(err.message.split('after last accepted block ')[1])
|
||||
toBlock = acceptedBlock
|
||||
// Retries to 0, because it is not RPC error
|
||||
retries = 0
|
||||
}
|
||||
|
||||
i = i + 1
|
||||
// maximum 5 second buffer for rate-limiting
|
||||
if (shouldRetry) {
|
||||
const shouldRetryAgain = retries < 5
|
||||
const isRetry = i !== 5
|
||||
|
||||
sleep(1000 * retries).then(() =>
|
||||
this.getPastEvents({ fromBlock, toBlock, type }, shouldRetryAgain, retries)
|
||||
sleep(1000 * i).then(() =>
|
||||
this.getPastEvents({ fromBlock, toBlock, type }, isRetry, i)
|
||||
.then((events) => resolve(events))
|
||||
.catch((_) => resolve(undefined))
|
||||
)
|
||||
@ -334,18 +324,19 @@ class EventService {
|
||||
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 / blockSyncInterval)
|
||||
const batchDigest = blockDifference === 0 ? 1 : Math.ceil(blockDifference / blockRange)
|
||||
|
||||
const blockDenom = Math.ceil(blockDifference / batchDigest)
|
||||
const batchCount = Math.ceil(batchDigest / batchSize)
|
||||
|
||||
if (fromBlock < currentBlockNumber) {
|
||||
this.updateEventProgress(0, type)
|
||||
await this.updateEventProgress(0, type)
|
||||
|
||||
for (let batchIndex = 0; batchIndex < batchCount; batchIndex++) {
|
||||
const isLastBatch = batchIndex === batchCount - 1
|
||||
@ -374,7 +365,7 @@ class EventService {
|
||||
throw new Error('Failed to batch events')
|
||||
}
|
||||
}
|
||||
this.updateEventProgress(progressIndex / batchCount, type)
|
||||
await this.updateEventProgress(progressIndex / batchCount, type)
|
||||
}
|
||||
|
||||
return {
|
||||
@ -392,10 +383,11 @@ class EventService {
|
||||
async getEventsFromRpc({ fromBlock, type }) {
|
||||
try {
|
||||
const { blockDifference } = await this.getBlocksDiff({ fromBlock })
|
||||
const blockRange = 10000
|
||||
|
||||
let events
|
||||
|
||||
if (blockDifference < blockSyncInterval) {
|
||||
if (blockDifference < blockRange) {
|
||||
const rpcEvents = await this.getEventsPartFromRpc({ fromBlock, toBlock: 'latest', type })
|
||||
events = rpcEvents?.events || []
|
||||
} else {
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,2 +0,0 @@
|
||||
xÚ}ĐËjSQŕůyŠÍwđ_öËĚÄůâ`_i0&<26>¦ HßÝA-‚bÇ‹µ|_–”~.)Ą´ŢŻë.đCÄ
|
||||
‹îH=°m]¶,ŃöčĐ'R4µăáăŔőáµ7ÇXwiEÔ@Žěoy=_Ű·ĎĎß븻<14>ŞDżłËóů|š§qűTž_ďq W±^<5E>J'<27>)-¬UíE´»ˇ)ąőaS©<53>RT\ŮU‡ľÝŢoĺňTÚýt˝üŻ
Ęv'"˛Ü‹ÍĘłeŤě•y˘™zD*MÝ:4µG”uIéĺá_3lđDŽ®yşđFĽ/[Ű:€°Ú1äPŃĘ_fLh¨ŮÉB˙c†„úZés+G#Ă<>HÓ}¤AÓ†9<14>ŽŤjs*śGŘśď˘ĺˇDx<08>MŇ>Ů@ϢӢ!dć†ÔÚ@'Ţ˝K†N„ë’ŇËňuůAČťŁ
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,2 +0,0 @@
|
||||
x<EFBFBD>ֱ1
|
||||
€0@ׁ»<D781>9C<39>$ַ)₪¬´U0המ¾<17>ht¬<74>…<EFBFBD>?C7¡ת|<7C>^4¨«5»׀Ha
<0A>;´dז“<>~
|
@ -1,2 +0,0 @@
|
||||
xÚÁK
|
||||
ƒ0…ѽ|ã;øÕ˜Ê]Ž!”:ðÑBCöî9<C3AE>ž³xã1ÄYÿ¿ÄZ¯o-?ÜXïm+n]Ü{½ÜbÀ9‰/bÂ!NbÆ!2ŽÞûsý
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user