Improve workflow with several RPC URLs in oracle (#476)

This commit is contained in:
Kirill Fedoseev 2020-10-28 14:20:50 +03:00 committed by GitHub
parent 389cea3c39
commit 611b8c539d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
43 changed files with 750 additions and 338 deletions

@ -41,6 +41,7 @@ ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST | Filename with a list of addresses, separ
ORACLE_HOME_TO_FOREIGN_BLOCK_LIST | Filename with a list of addresses, separated by newlines. If set, determines the blocked set of accounts whose requests will not be automatically processed by the CollectedSignatures watcher. Has a lower priority than the `ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST` | string ORACLE_HOME_TO_FOREIGN_BLOCK_LIST | Filename with a list of addresses, separated by newlines. If set, determines the blocked set of accounts whose requests will not be automatically processed by the CollectedSignatures watcher. Has a lower priority than the `ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST` | string
ORACLE_HOME_TO_FOREIGN_CHECK_SENDER | If set to `true`, instructs the oracle to do an extra check for transaction origin in the block/allowance list. `false` by default. | `true` / `false` ORACLE_HOME_TO_FOREIGN_CHECK_SENDER | If set to `true`, instructs the oracle to do an extra check for transaction origin in the block/allowance list. `false` by default. | `true` / `false`
ORACLE_ALWAYS_RELAY_SIGNATURES | If set to `true`, the oracle will always relay signatures even if it was not the last who finilized the signatures collecting process. The default is `false`. | `true` / `false` ORACLE_ALWAYS_RELAY_SIGNATURES | If set to `true`, the oracle will always relay signatures even if it was not the last who finilized the signatures collecting process. The default is `false`. | `true` / `false`
ORACLE_RPC_REQUEST_TIMEOUT | Timeout in milliseconds for a single RPC request. Default value is `ORACLE_*_RPC_POLLING_INTERVAL * 2`. | integer
## UI configuration ## UI configuration

@ -29,6 +29,7 @@ ORACLE_FOREIGN_START_BLOCK=
ORACLE_LOG_LEVEL=debug ORACLE_LOG_LEVEL=debug
ORACLE_MAX_PROCESSING_TIME=20000 ORACLE_MAX_PROCESSING_TIME=20000
ORACLE_RPC_REQUEST_TIMEOUT=5000
ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST=access-lists/allowance_list.txt ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST=access-lists/allowance_list.txt
ORACLE_HOME_TO_FOREIGN_BLOCK_LIST=access-lists/block_list.txt ORACLE_HOME_TO_FOREIGN_BLOCK_LIST=access-lists/block_list.txt

@ -1,6 +1,6 @@
const baseConfig = require('./base.config') const baseConfig = require('./base.config')
const { web3Foreign } = require('../src/services/web3') const { web3Foreign, web3ForeignRedundant } = require('../src/services/web3')
module.exports = { module.exports = {
...baseConfig.bridgeConfig, ...baseConfig.bridgeConfig,
@ -8,5 +8,6 @@ module.exports = {
oldQueue: 'foreign', oldQueue: 'foreign',
id: 'foreign', id: 'foreign',
name: 'sender-foreign', name: 'sender-foreign',
web3: web3Foreign web3: web3Foreign,
web3Redundant: web3ForeignRedundant
} }

@ -1,6 +1,6 @@
const baseConfig = require('./base.config') const baseConfig = require('./base.config')
const { web3Home } = require('../src/services/web3') const { web3Home, web3HomeRedundant } = require('../src/services/web3')
module.exports = { module.exports = {
...baseConfig.bridgeConfig, ...baseConfig.bridgeConfig,
@ -8,5 +8,6 @@ module.exports = {
oldQueue: 'home', oldQueue: 'home',
id: 'home', id: 'home',
name: 'sender-home', name: 'sender-home',
web3: web3Home web3: web3Home,
web3Redundant: web3HomeRedundant
} }

@ -26,15 +26,13 @@
"amqplib": "^0.5.2", "amqplib": "^0.5.2",
"bignumber.js": "^7.2.1", "bignumber.js": "^7.2.1",
"dotenv": "^5.0.1", "dotenv": "^5.0.1",
"http-list-provider": "0.0.5",
"ioredis": "^3.2.2", "ioredis": "^3.2.2",
"node-fetch": "^2.1.2", "node-fetch": "^2.1.2",
"pino": "^4.17.3", "pino": "^4.17.3",
"pino-pretty": "^2.0.1", "pino-pretty": "^2.0.1",
"promise-limit": "^2.7.0", "promise-limit": "^2.7.0",
"promise-retry": "^1.1.1", "promise-retry": "^1.1.1",
"web3": "1.0.0-beta.34", "web3": "^1.3.0"
"web3-utils": "1.0.0-beta.34"
}, },
"devDependencies": { "devDependencies": {
"bn-chai": "^1.0.1", "bn-chai": "^1.0.1",

@ -1,8 +1,7 @@
require('../../env') require('../../env')
const Web3 = require('web3') const { toWei } = require('web3').utils
const Web3Utils = require('web3-utils') const { web3Foreign } = require('../../src/services/web3')
const rpcUrlsManager = require('../../src/services/getRpcUrlsManager') const { sendTx } = require('../../src/tx/sendTx')
const { sendTx, sendRawTx } = require('../../src/tx/sendTx')
const { ERC20_ABI } = require('../../../commons') const { ERC20_ABI } = require('../../../commons')
const { const {
@ -17,37 +16,23 @@ const NUMBER_OF_DEPOSITS_TO_SEND = process.argv[2] || process.env.NUMBER_OF_DEPO
const { FOREIGN_ERC_TO_ERC_ABI } = require('../../../commons') const { FOREIGN_ERC_TO_ERC_ABI } = require('../../../commons')
const foreignRpcUrl = rpcUrlsManager.foreignUrls[0]
const foreignProvider = new Web3.providers.HttpProvider(foreignRpcUrl)
const web3Foreign = new Web3(foreignProvider)
async function main() { async function main() {
const bridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_ERC_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) const bridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_ERC_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS)
const bridgeableTokenAddress = await bridge.methods.erc20token().call() const bridgeableTokenAddress = await bridge.methods.erc20token().call()
const poa20 = new web3Foreign.eth.Contract(ERC20_ABI, bridgeableTokenAddress) const poa20 = new web3Foreign.eth.Contract(ERC20_ABI, bridgeableTokenAddress)
try { try {
const foreignChainId = await sendRawTx({ const foreignChainId = await web3Foreign.eth.getChainId()
chain: 'foreign', let nonce = await web3Foreign.eth.getTransactionCount(USER_ADDRESS)
params: [],
method: 'net_version'
})
let nonce = await sendRawTx({
chain: 'foreign',
method: 'eth_getTransactionCount',
params: [USER_ADDRESS, 'latest']
})
nonce = Web3Utils.hexToNumber(nonce)
let actualSent = 0 let actualSent = 0
for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) { for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) {
const gasLimit = await poa20.methods const gasLimit = await poa20.methods
.transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX)) .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX))
.estimateGas({ from: USER_ADDRESS }) .estimateGas({ from: USER_ADDRESS })
const data = await poa20.methods const data = await poa20.methods
.transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX)) .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX))
.encodeABI({ from: USER_ADDRESS }) .encodeABI({ from: USER_ADDRESS })
const txHash = await sendTx({ const txHash = await sendTx({
chain: 'foreign',
privateKey: USER_ADDRESS_PRIVATE_KEY, privateKey: USER_ADDRESS_PRIVATE_KEY,
data, data,
nonce, nonce,

@ -1,8 +1,7 @@
require('../../env') require('../../env')
const Web3 = require('web3') const { toWei } = require('web3').utils
const Web3Utils = require('web3-utils') const { web3Home } = require('../../src/services/web3')
const rpcUrlsManager = require('../../src/services/getRpcUrlsManager') const { sendTx } = require('../../src/tx/sendTx')
const { sendTx, sendRawTx } = require('../../src/tx/sendTx')
const { isValidAmount } = require('../utils/utils') const { isValidAmount } = require('../utils/utils')
const { HOME_ERC_TO_ERC_ABI } = require('../../../commons') const { HOME_ERC_TO_ERC_ABI } = require('../../../commons')
@ -46,10 +45,6 @@ const BRIDGEABLE_TOKEN_ABI = [
} }
] ]
const homeRpcUrl = rpcUrlsManager.homeUrls[0]
const homeProvider = new Web3.providers.HttpProvider(homeRpcUrl)
const web3Home = new Web3(homeProvider)
async function main() { async function main() {
const bridge = new web3Home.eth.Contract(HOME_ERC_TO_ERC_ABI, COMMON_HOME_BRIDGE_ADDRESS) const bridge = new web3Home.eth.Contract(HOME_ERC_TO_ERC_ABI, COMMON_HOME_BRIDGE_ADDRESS)
const BRIDGEABLE_TOKEN_ADDRESS = await bridge.methods.erc677token().call() const BRIDGEABLE_TOKEN_ADDRESS = await bridge.methods.erc677token().call()
@ -58,27 +53,17 @@ async function main() {
try { try {
await isValidAmount(HOME_MIN_AMOUNT_PER_TX, bridge) await isValidAmount(HOME_MIN_AMOUNT_PER_TX, bridge)
const homeChainId = await sendRawTx({ const homeChainId = await web3Home.eth.getChainId()
chain: 'home', let nonce = await web3Home.eth.getTransactionCount(USER_ADDRESS)
params: [],
method: 'net_version'
})
let nonce = await sendRawTx({
chain: 'home',
method: 'eth_getTransactionCount',
params: [USER_ADDRESS, 'latest']
})
nonce = Web3Utils.hexToNumber(nonce)
let actualSent = 0 let actualSent = 0
for (let i = 0; i < Number(NUMBER_OF_WITHDRAWALS_TO_SEND); i++) { for (let i = 0; i < Number(NUMBER_OF_WITHDRAWALS_TO_SEND); i++) {
const gasLimit = await erc677.methods const gasLimit = await erc677.methods
.transferAndCall(COMMON_HOME_BRIDGE_ADDRESS, Web3Utils.toWei(HOME_MIN_AMOUNT_PER_TX), '0x') .transferAndCall(COMMON_HOME_BRIDGE_ADDRESS, toWei(HOME_MIN_AMOUNT_PER_TX), '0x')
.estimateGas({ from: USER_ADDRESS }) .estimateGas({ from: USER_ADDRESS })
const data = await erc677.methods const data = await erc677.methods
.transferAndCall(COMMON_HOME_BRIDGE_ADDRESS, Web3Utils.toWei(HOME_MIN_AMOUNT_PER_TX), '0x') .transferAndCall(COMMON_HOME_BRIDGE_ADDRESS, toWei(HOME_MIN_AMOUNT_PER_TX), '0x')
.encodeABI({ from: USER_ADDRESS }) .encodeABI({ from: USER_ADDRESS })
const txHash = await sendTx({ const txHash = await sendTx({
chain: 'home',
privateKey: USER_ADDRESS_PRIVATE_KEY, privateKey: USER_ADDRESS_PRIVATE_KEY,
data, data,
nonce, nonce,

@ -1,8 +1,7 @@
require('../../env') require('../../env')
const Web3 = require('web3') const { toWei } = require('web3').utils
const Web3Utils = require('web3-utils') const { web3Foreign } = require('../../src/services/web3')
const rpcUrlsManager = require('../../src/services/getRpcUrlsManager') const { sendTx } = require('../../src/tx/sendTx')
const { sendTx, sendRawTx } = require('../../src/tx/sendTx')
const { const {
USER_ADDRESS, USER_ADDRESS,
@ -16,37 +15,23 @@ const NUMBER_OF_DEPOSITS_TO_SEND = process.argv[2] || process.env.NUMBER_OF_DEPO
const { ERC20_ABI, FOREIGN_ERC_TO_NATIVE_ABI } = require('../../../commons') const { ERC20_ABI, FOREIGN_ERC_TO_NATIVE_ABI } = require('../../../commons')
const foreignRpcUrl = rpcUrlsManager.foreignUrls[0]
const foreignProvider = new Web3.providers.HttpProvider(foreignRpcUrl)
const web3Foreign = new Web3(foreignProvider)
async function main() { async function main() {
const bridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_NATIVE_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) const bridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_NATIVE_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS)
const bridgeableTokenAddress = await bridge.methods.erc20token().call() const bridgeableTokenAddress = await bridge.methods.erc20token().call()
const poa20 = new web3Foreign.eth.Contract(ERC20_ABI, bridgeableTokenAddress) const poa20 = new web3Foreign.eth.Contract(ERC20_ABI, bridgeableTokenAddress)
try { try {
const foreignChainId = await sendRawTx({ const foreignChainId = await web3Foreign.eth.getChainId()
chain: 'foreign', let nonce = await web3Foreign.eth.getTransactionCount(USER_ADDRESS)
params: [],
method: 'net_version'
})
let nonce = await sendRawTx({
chain: 'foreign',
method: 'eth_getTransactionCount',
params: [USER_ADDRESS, 'latest']
})
nonce = Web3Utils.hexToNumber(nonce)
let actualSent = 0 let actualSent = 0
for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) { for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) {
const gasLimit = await poa20.methods const gasLimit = await poa20.methods
.transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX)) .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX))
.estimateGas({ from: USER_ADDRESS }) .estimateGas({ from: USER_ADDRESS })
const data = await poa20.methods const data = await poa20.methods
.transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX)) .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX))
.encodeABI({ from: USER_ADDRESS }) .encodeABI({ from: USER_ADDRESS })
const txHash = await sendTx({ const txHash = await sendTx({
chain: 'foreign',
privateKey: USER_ADDRESS_PRIVATE_KEY, privateKey: USER_ADDRESS_PRIVATE_KEY,
data, data,
nonce, nonce,

@ -1,7 +1,6 @@
require('../../env') require('../../env')
const Web3Utils = require('web3-utils')
const { web3Home } = require('../../src/services/web3') const { web3Home } = require('../../src/services/web3')
const { sendTx, sendRawTx } = require('../../src/tx/sendTx') const { sendTx } = require('../../src/tx/sendTx')
const { isValidAmount } = require('../utils/utils') const { isValidAmount } = require('../utils/utils')
const { HOME_ERC_TO_NATIVE_ABI } = require('../../../commons') const { HOME_ERC_TO_NATIVE_ABI } = require('../../../commons')
@ -21,21 +20,11 @@ async function main() {
try { try {
await isValidAmount(HOME_MIN_AMOUNT_PER_TX, bridge) await isValidAmount(HOME_MIN_AMOUNT_PER_TX, bridge)
const homeChainId = await sendRawTx({ const homeChainId = await web3Home.eth.getChainId()
chain: 'home', let nonce = await web3Home.eth.getTransactionCount(USER_ADDRESS)
params: [],
method: 'net_version'
})
let nonce = await sendRawTx({
chain: 'home',
method: 'eth_getTransactionCount',
params: [USER_ADDRESS, 'latest']
})
nonce = Web3Utils.hexToNumber(nonce)
let actualSent = 0 let actualSent = 0
for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) { for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) {
const txHash = await sendTx({ const txHash = await sendTx({
chain: 'home',
privateKey: USER_ADDRESS_PRIVATE_KEY, privateKey: USER_ADDRESS_PRIVATE_KEY,
data: '0x', data: '0x',
nonce, nonce,

@ -1,23 +1,20 @@
require('../env') require('../env')
const Web3 = require('web3')
const { BRIDGE_VALIDATORS_ABI } = require('../../commons') const { BRIDGE_VALIDATORS_ABI } = require('../../commons')
const rpcUrlsManager = require('../src/services/getRpcUrlsManager') const { web3Home, web3Foreign } = require('../src/services/web3')
const { bridgeConfig } = require('../config/base.config') const { bridgeConfig } = require('../config/base.config')
const homeABI = bridgeConfig.homeBridgeAbi const homeABI = bridgeConfig.homeBridgeAbi
const foreignABI = bridgeConfig.foreignBridgeAbi const foreignABI = bridgeConfig.foreignBridgeAbi
async function getStartBlock(rpcUrl, bridgeAddress, bridgeAbi) { async function getStartBlock(web3, bridgeAddress, bridgeAbi) {
try { try {
const web3Provider = new Web3.providers.HttpProvider(rpcUrl) const bridgeContract = new web3.eth.Contract(bridgeAbi, bridgeAddress)
const web3Instance = new Web3(web3Provider)
const bridgeContract = new web3Instance.eth.Contract(bridgeAbi, bridgeAddress)
const deployedAtBlock = await bridgeContract.methods.deployedAtBlock().call() const deployedAtBlock = await bridgeContract.methods.deployedAtBlock().call()
const validatorContractAddress = await bridgeContract.methods.validatorContract().call() const validatorContractAddress = await bridgeContract.methods.validatorContract().call()
const validatorContract = new web3Instance.eth.Contract(BRIDGE_VALIDATORS_ABI, validatorContractAddress) const validatorContract = new web3.eth.Contract(BRIDGE_VALIDATORS_ABI, validatorContractAddress)
const validatorDeployedAtBlock = await validatorContract.methods.deployedAtBlock().call() const validatorDeployedAtBlock = await validatorContract.methods.deployedAtBlock().call()
@ -35,10 +32,8 @@ async function getStartBlock(rpcUrl, bridgeAddress, bridgeAbi) {
async function main() { async function main() {
const { COMMON_HOME_BRIDGE_ADDRESS, COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env const { COMMON_HOME_BRIDGE_ADDRESS, COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env
const homeRpcUrl = rpcUrlsManager.homeUrls[0] const homeStartBlock = await getStartBlock(web3Home, COMMON_HOME_BRIDGE_ADDRESS, homeABI)
const foreignRpcUrl = rpcUrlsManager.foreignUrls[0] const foreignStartBlock = await getStartBlock(web3Foreign, COMMON_FOREIGN_BRIDGE_ADDRESS, foreignABI)
const homeStartBlock = await getStartBlock(homeRpcUrl, COMMON_HOME_BRIDGE_ADDRESS, homeABI)
const foreignStartBlock = await getStartBlock(foreignRpcUrl, COMMON_FOREIGN_BRIDGE_ADDRESS, foreignABI)
const result = { const result = {
homeStartBlock, homeStartBlock,
foreignStartBlock foreignStartBlock

@ -1,5 +1,4 @@
require('../env') require('../env')
const Web3 = require('web3')
const { getTokensState } = require('../src/utils/tokenState') const { getTokensState } = require('../src/utils/tokenState')
const { const {
ERC677_BRIDGE_TOKEN_ABI, ERC677_BRIDGE_TOKEN_ABI,
@ -7,6 +6,7 @@ const {
FOREIGN_ERC_TO_NATIVE_ABI, FOREIGN_ERC_TO_NATIVE_ABI,
getTokenType getTokenType
} = require('../../commons') } = require('../../commons')
const { web3Foreign } = require('../src/services/web3')
const emptyLogger = { const emptyLogger = {
debug: () => {}, debug: () => {},
@ -14,26 +14,25 @@ const emptyLogger = {
} }
async function initialChecks() { async function initialChecks() {
const { ORACLE_BRIDGE_MODE, COMMON_FOREIGN_RPC_URL, COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env const { ORACLE_BRIDGE_MODE, COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env
let result = {} let result = {}
const foreignWeb3 = new Web3(new Web3.providers.HttpProvider(COMMON_FOREIGN_RPC_URL))
if (ORACLE_BRIDGE_MODE === 'ERC_TO_ERC') { if (ORACLE_BRIDGE_MODE === 'ERC_TO_ERC') {
const bridge = new foreignWeb3.eth.Contract(FOREIGN_ERC_TO_ERC_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) const bridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_ERC_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS)
result.bridgeableTokenAddress = await bridge.methods.erc20token().call() result.bridgeableTokenAddress = await bridge.methods.erc20token().call()
} else if (ORACLE_BRIDGE_MODE === 'ERC_TO_NATIVE') { } else if (ORACLE_BRIDGE_MODE === 'ERC_TO_NATIVE') {
const bridge = new foreignWeb3.eth.Contract(FOREIGN_ERC_TO_NATIVE_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) const bridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_NATIVE_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS)
result = await getTokensState(bridge, emptyLogger) result = await getTokensState(bridge, emptyLogger)
} }
if (ORACLE_BRIDGE_MODE === 'ERC_TO_ERC') { if (ORACLE_BRIDGE_MODE === 'ERC_TO_ERC') {
const bridgeTokenContract = new foreignWeb3.eth.Contract(ERC677_BRIDGE_TOKEN_ABI, result.bridgeableTokenAddress) const bridgeTokenContract = new web3Foreign.eth.Contract(ERC677_BRIDGE_TOKEN_ABI, result.bridgeableTokenAddress)
result.foreignERC = await getTokenType(bridgeTokenContract, COMMON_FOREIGN_BRIDGE_ADDRESS) result.foreignERC = await getTokenType(bridgeTokenContract, COMMON_FOREIGN_BRIDGE_ADDRESS)
} }
console.log(JSON.stringify(result)) console.log(JSON.stringify(result))
return result return result
} }
initialChecks() const result = initialChecks()
module.exports = initialChecks module.exports = result

@ -1,7 +1,7 @@
require('../../env') require('../../env')
const Web3Utils = require('web3-utils') const { toWei } = require('web3').utils
const { web3Foreign } = require('../../src/services/web3') const { web3Foreign } = require('../../src/services/web3')
const { sendTx, sendRawTx } = require('../../src/tx/sendTx') const { sendTx } = require('../../src/tx/sendTx')
const { isValidAmount } = require('../utils/utils') const { isValidAmount } = require('../utils/utils')
const { FOREIGN_NATIVE_TO_ERC_ABI } = require('../../../commons') const { FOREIGN_NATIVE_TO_ERC_ABI } = require('../../../commons')
@ -53,27 +53,17 @@ async function main() {
try { try {
await isValidAmount(FOREIGN_MIN_AMOUNT_PER_TX, bridge) await isValidAmount(FOREIGN_MIN_AMOUNT_PER_TX, bridge)
const foreignChainId = await sendRawTx({ const foreignChainId = await web3Foreign.eth.getChainId()
chain: 'foreign', let nonce = await web3Foreign.eth.getTransactionCount(USER_ADDRESS)
params: [],
method: 'net_version'
})
let nonce = await sendRawTx({
chain: 'foreign',
method: 'eth_getTransactionCount',
params: [USER_ADDRESS, 'latest']
})
nonce = Web3Utils.hexToNumber(nonce)
let actualSent = 0 let actualSent = 0
for (let i = 0; i < Number(NUMBER_OF_WITHDRAWALS_TO_SEND); i++) { for (let i = 0; i < Number(NUMBER_OF_WITHDRAWALS_TO_SEND); i++) {
const gasLimit = await poa20.methods const gasLimit = await poa20.methods
.transferAndCall(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX), '0x') .transferAndCall(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX), '0x')
.estimateGas({ from: USER_ADDRESS }) .estimateGas({ from: USER_ADDRESS })
const data = await poa20.methods const data = await poa20.methods
.transferAndCall(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX), '0x') .transferAndCall(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX), '0x')
.encodeABI({ from: USER_ADDRESS }) .encodeABI({ from: USER_ADDRESS })
const txHash = await sendTx({ const txHash = await sendTx({
chain: 'foreign',
privateKey: USER_ADDRESS_PRIVATE_KEY, privateKey: USER_ADDRESS_PRIVATE_KEY,
data, data,
nonce, nonce,

@ -1,7 +1,6 @@
require('../../env') require('../../env')
const Web3Utils = require('web3-utils')
const { web3Home } = require('../../src/services/web3') const { web3Home } = require('../../src/services/web3')
const { sendTx, sendRawTx } = require('../../src/tx/sendTx') const { sendTx } = require('../../src/tx/sendTx')
const { isValidAmount } = require('../utils/utils') const { isValidAmount } = require('../utils/utils')
const { HOME_NATIVE_TO_ERC_ABI } = require('../../../commons') const { HOME_NATIVE_TO_ERC_ABI } = require('../../../commons')
@ -21,21 +20,11 @@ async function main() {
try { try {
await isValidAmount(HOME_MIN_AMOUNT_PER_TX, bridge) await isValidAmount(HOME_MIN_AMOUNT_PER_TX, bridge)
const homeChainId = await sendRawTx({ const homeChainId = await web3Home.eth.getChainId()
chain: 'home', let nonce = await web3Home.eth.getTransactionCount(USER_ADDRESS)
params: [],
method: 'net_version'
})
let nonce = await sendRawTx({
chain: 'home',
method: 'eth_getTransactionCount',
params: [USER_ADDRESS, 'latest']
})
nonce = Web3Utils.hexToNumber(nonce)
let actualSent = 0 let actualSent = 0
for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) { for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) {
const txHash = await sendTx({ const txHash = await sendTx({
chain: 'home',
privateKey: USER_ADDRESS_PRIVATE_KEY, privateKey: USER_ADDRESS_PRIVATE_KEY,
data: '0x', data: '0x',
nonce, nonce,

@ -1,8 +1,8 @@
const Web3Utils = require('web3-utils') const { fromWei } = require('web3').utils
async function getMinPerTxLimit(bridge) { async function getMinPerTxLimit(bridge) {
const minPerTx = await bridge.methods.minPerTx().call() const minPerTx = await bridge.methods.minPerTx().call()
return Web3Utils.fromWei(minPerTx) return fromWei(minPerTx)
} }
async function isValidAmount(amount, bridge) { async function isValidAmount(amount, bridge) {

@ -3,7 +3,6 @@ const path = require('path')
const { isAttached, connectWatcherToQueue, connection } = require('./services/amqpClient') const { isAttached, connectWatcherToQueue, connection } = require('./services/amqpClient')
const logger = require('./services/logger') const logger = require('./services/logger')
const GasPrice = require('./services/gasPrice') const GasPrice = require('./services/gasPrice')
const rpcUrlsManager = require('./services/getRpcUrlsManager')
const { getNonce, getChainId, getEventsFromTx } = require('./tx/web3') const { getNonce, getChainId, getEventsFromTx } = require('./tx/web3')
const { sendTx } = require('./tx/sendTx') const { sendTx } = require('./tx/sendTx')
const { checkHTTPS, watchdog, syncForEach, addExtraGas } = require('./utils/utils') const { checkHTTPS, watchdog, syncForEach, addExtraGas } = require('./utils/utils')
@ -37,8 +36,7 @@ async function initialize() {
try { try {
const checkHttps = checkHTTPS(ORACLE_ALLOW_HTTP_FOR_RPC, logger) const checkHttps = checkHTTPS(ORACLE_ALLOW_HTTP_FOR_RPC, logger)
rpcUrlsManager.homeUrls.forEach(checkHttps('home')) web3Instance.currentProvider.urls.forEach(checkHttps(config.chain))
rpcUrlsManager.foreignUrls.forEach(checkHttps('foreign'))
attached = await isAttached() attached = await isAttached()
if (attached) { if (attached) {
@ -139,7 +137,7 @@ async function main({ sendJob, txHash }) {
async function sendJobTx(jobs) { async function sendJobTx(jobs) {
const gasPrice = await GasPrice.start(config.chain, true) const gasPrice = await GasPrice.start(config.chain, true)
const chainId = await getChainId(config.chain) const chainId = await getChainId(web3Instance)
let nonce = await getNonce(web3Instance, ORACLE_VALIDATOR_ADDRESS) let nonce = await getNonce(web3Instance, ORACLE_VALIDATOR_ADDRESS)
await syncForEach(jobs, async job => { await syncForEach(jobs, async job => {
@ -153,7 +151,6 @@ async function sendJobTx(jobs) {
try { try {
logger.info(`Sending transaction with nonce ${nonce}`) logger.info(`Sending transaction with nonce ${nonce}`)
const txHash = await sendTx({ const txHash = await sendTx({
chain: config.chain,
data: job.data, data: job.data,
nonce, nonce,
gasPrice: gasPrice.toString(10), gasPrice: gasPrice.toString(10),

@ -1,4 +1,4 @@
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const { AlreadyProcessedError, AlreadySignedError, InvalidValidatorError } = require('../../utils/errors') const { AlreadyProcessedError, AlreadySignedError, InvalidValidatorError } = require('../../utils/errors')
const logger = require('../../services/logger').child({ const logger = require('../../services/logger').child({
module: 'processAffirmationRequests:estimateGas' module: 'processAffirmationRequests:estimateGas'

@ -1,6 +1,6 @@
require('dotenv').config() require('dotenv').config()
const { HttpListProviderError } = require('http-list-provider')
const promiseLimit = require('promise-limit') const promiseLimit = require('promise-limit')
const { HttpListProviderError } = require('../../services/HttpListProvider')
const rootLogger = require('../../services/logger') const rootLogger = require('../../services/logger')
const { web3Home } = require('../../services/web3') const { web3Home } = require('../../services/web3')
const bridgeValidatorsABI = require('../../../../contracts/build/contracts/BridgeValidators').abi const bridgeValidatorsABI = require('../../../../contracts/build/contracts/BridgeValidators').abi

@ -1,5 +1,5 @@
const Web3 = require('web3') const Web3 = require('web3')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const { AlreadyProcessedError, IncompatibleContractError, InvalidValidatorError } = require('../../utils/errors') const { AlreadyProcessedError, IncompatibleContractError, InvalidValidatorError } = require('../../utils/errors')
const logger = require('../../services/logger').child({ const logger = require('../../services/logger').child({
module: 'processCollectedSignatures:estimateGas' module: 'processCollectedSignatures:estimateGas'

@ -1,6 +1,6 @@
require('dotenv').config() require('dotenv').config()
const promiseLimit = require('promise-limit') const promiseLimit = require('promise-limit')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const bridgeValidatorsABI = require('../../../../contracts/build/contracts/BridgeValidators').abi const bridgeValidatorsABI = require('../../../../contracts/build/contracts/BridgeValidators').abi
const rootLogger = require('../../services/logger') const rootLogger = require('../../services/logger')
const { web3Home, web3Foreign } = require('../../services/web3') const { web3Home, web3Foreign } = require('../../services/web3')

@ -1,6 +1,6 @@
require('dotenv').config() require('dotenv').config()
const promiseLimit = require('promise-limit') const promiseLimit = require('promise-limit')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const bridgeValidatorsABI = require('../../../../contracts/build/contracts/BridgeValidators').abi const bridgeValidatorsABI = require('../../../../contracts/build/contracts/BridgeValidators').abi
const rootLogger = require('../../services/logger') const rootLogger = require('../../services/logger')
const { web3Home } = require('../../services/web3') const { web3Home } = require('../../services/web3')

@ -1,4 +1,4 @@
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const { AlreadyProcessedError, AlreadySignedError, InvalidValidatorError } = require('../../utils/errors') const { AlreadyProcessedError, AlreadySignedError, InvalidValidatorError } = require('../../utils/errors')
const logger = require('../../services/logger').child({ const logger = require('../../services/logger').child({
module: 'processAffirmationRequests:estimateGas' module: 'processAffirmationRequests:estimateGas'

@ -1,6 +1,6 @@
require('../../../env') require('../../../env')
const promiseLimit = require('promise-limit') const promiseLimit = require('promise-limit')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const rootLogger = require('../../services/logger') const rootLogger = require('../../services/logger')
const { web3Home } = require('../../services/web3') const { web3Home } = require('../../services/web3')

@ -1,5 +1,5 @@
const Web3 = require('web3') const Web3 = require('web3')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const { AlreadyProcessedError, IncompatibleContractError, InvalidValidatorError } = require('../../utils/errors') const { AlreadyProcessedError, IncompatibleContractError, InvalidValidatorError } = require('../../utils/errors')
const { parseMessage } = require('../../utils/message') const { parseMessage } = require('../../utils/message')
const logger = require('../../services/logger').child({ const logger = require('../../services/logger').child({

@ -1,6 +1,6 @@
require('../../../env') require('../../../env')
const promiseLimit = require('promise-limit') const promiseLimit = require('promise-limit')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const { BRIDGE_VALIDATORS_ABI } = require('../../../../commons') const { BRIDGE_VALIDATORS_ABI } = require('../../../../commons')
const rootLogger = require('../../services/logger') const rootLogger = require('../../services/logger')
const { web3Home, web3Foreign } = require('../../services/web3') const { web3Home, web3Foreign } = require('../../services/web3')

@ -1,4 +1,4 @@
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const { AlreadyProcessedError, AlreadySignedError, InvalidValidatorError } = require('../../utils/errors') const { AlreadyProcessedError, AlreadySignedError, InvalidValidatorError } = require('../../utils/errors')
const logger = require('../../services/logger').child({ const logger = require('../../services/logger').child({
module: 'processSignatureRequests:estimateGas' module: 'processSignatureRequests:estimateGas'

@ -1,6 +1,6 @@
require('../../../env') require('../../../env')
const promiseLimit = require('promise-limit') const promiseLimit = require('promise-limit')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const { BRIDGE_VALIDATORS_ABI } = require('../../../../commons') const { BRIDGE_VALIDATORS_ABI } = require('../../../../commons')
const rootLogger = require('../../services/logger') const rootLogger = require('../../services/logger')
const { web3Home } = require('../../services/web3') const { web3Home } = require('../../services/web3')

@ -1,6 +1,6 @@
require('../../../env') require('../../../env')
const promiseLimit = require('promise-limit') const promiseLimit = require('promise-limit')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../../services/HttpListProvider')
const { BRIDGE_VALIDATORS_ABI, ZERO_ADDRESS } = require('../../../../commons') const { BRIDGE_VALIDATORS_ABI, ZERO_ADDRESS } = require('../../../../commons')
const rootLogger = require('../../services/logger') const rootLogger = require('../../services/logger')
const { web3Home, web3Foreign } = require('../../services/web3') const { web3Home, web3Foreign } = require('../../services/web3')

@ -4,7 +4,6 @@ const { connectSenderToQueue } = require('./services/amqpClient')
const { redis } = require('./services/redisClient') const { redis } = require('./services/redisClient')
const GasPrice = require('./services/gasPrice') const GasPrice = require('./services/gasPrice')
const logger = require('./services/logger') const logger = require('./services/logger')
const rpcUrlsManager = require('./services/getRpcUrlsManager')
const { sendTx } = require('./tx/sendTx') const { sendTx } = require('./tx/sendTx')
const { getNonce, getChainId } = require('./tx/web3') const { getNonce, getChainId } = require('./tx/web3')
const { const {
@ -18,7 +17,7 @@ const {
} = require('./utils/utils') } = require('./utils/utils')
const { EXIT_CODES, EXTRA_GAS_PERCENTAGE, MAX_GAS_LIMIT } = require('./utils/constants') const { EXIT_CODES, EXTRA_GAS_PERCENTAGE, MAX_GAS_LIMIT } = require('./utils/constants')
const { ORACLE_VALIDATOR_ADDRESS_PRIVATE_KEY } = process.env const { ORACLE_VALIDATOR_ADDRESS_PRIVATE_KEY, ORACLE_TX_REDUNDANCY } = process.env
const ORACLE_VALIDATOR_ADDRESS = privateKeyToAddress(ORACLE_VALIDATOR_ADDRESS_PRIVATE_KEY) const ORACLE_VALIDATOR_ADDRESS = privateKeyToAddress(ORACLE_VALIDATOR_ADDRESS_PRIVATE_KEY)
@ -30,6 +29,7 @@ if (process.argv.length < 3) {
const config = require(path.join('../config/', process.argv[2])) const config = require(path.join('../config/', process.argv[2]))
const web3Instance = config.web3 const web3Instance = config.web3
const web3Redundant = ORACLE_TX_REDUNDANCY === 'true' ? config.web3Redundant : config.web3
const nonceKey = `${config.id}:nonce` const nonceKey = `${config.id}:nonce`
let chainId = 0 let chainId = 0
@ -37,12 +37,11 @@ async function initialize() {
try { try {
const checkHttps = checkHTTPS(process.env.ORACLE_ALLOW_HTTP_FOR_RPC, logger) const checkHttps = checkHTTPS(process.env.ORACLE_ALLOW_HTTP_FOR_RPC, logger)
rpcUrlsManager.homeUrls.forEach(checkHttps('home')) web3Instance.currentProvider.urls.forEach(checkHttps(config.chain))
rpcUrlsManager.foreignUrls.forEach(checkHttps('foreign'))
GasPrice.start(config.id) GasPrice.start(config.id)
chainId = await getChainId(config.id) chainId = await getChainId(web3Instance)
connectSenderToQueue({ connectSenderToQueue({
queueName: config.queue, queueName: config.queue,
oldQueueName: config.oldQueue, oldQueueName: config.oldQueue,
@ -144,7 +143,6 @@ async function main({ msg, ackMsg, nackMsg, channel, scheduleForRetry, scheduleT
} }
logger.info(`Sending transaction with nonce ${nonce}`) logger.info(`Sending transaction with nonce ${nonce}`)
const txHash = await sendTx({ const txHash = await sendTx({
chain: config.id,
data: job.data, data: job.data,
nonce, nonce,
gasPrice, gasPrice,
@ -153,7 +151,7 @@ async function main({ msg, ackMsg, nackMsg, channel, scheduleForRetry, scheduleT
privateKey: ORACLE_VALIDATOR_ADDRESS_PRIVATE_KEY, privateKey: ORACLE_VALIDATOR_ADDRESS_PRIVATE_KEY,
to: job.to, to: job.to,
chainId, chainId,
web3: web3Instance web3: web3Redundant
}) })
const resendJob = { const resendJob = {
...job, ...job,

@ -0,0 +1,89 @@
const fetch = require('node-fetch')
const promiseRetry = require('promise-retry')
const defaultOptions = {
requestTimeout: 0,
retry: {
retries: 0
}
}
class HttpListProviderError extends Error {
constructor(message, errors) {
super(message)
this.errors = errors
}
}
function HttpListProvider(urls, options = {}) {
if (!(this instanceof HttpListProvider)) {
return new HttpListProvider(urls)
}
if (!urls || !urls.length) {
throw new TypeError(`Invalid URLs: '${urls}'`)
}
this.urls = urls
this.options = { ...defaultOptions, ...options }
this.currentIndex = 0
}
HttpListProvider.prototype.send = async function send(payload, callback) {
// save the currentIndex to avoid race condition
const { currentIndex } = this
try {
const [result, index] = await promiseRetry(retry => {
return trySend(payload, this.urls, currentIndex, this.options).catch(retry)
}, this.options.retry)
this.currentIndex = index
callback(null, result)
} catch (e) {
callback(e)
}
}
function send(url, payload, options) {
return fetch(url, {
headers: {
'Content-type': 'application/json'
},
method: 'POST',
body: JSON.stringify(payload),
timeout: options.requestTimeout
})
.then(response => {
if (response.ok) {
return response
} else {
throw new Error(response.statusText)
}
})
.then(response => response.json())
}
async function trySend(payload, urls, initialIndex, options) {
const errors = []
let index = initialIndex
for (let count = 0; count < urls.length; count++) {
const url = urls[index]
try {
const result = await send(url, payload, options)
return [result, index]
} catch (e) {
errors.push(e)
}
index = (index + 1) % urls.length
}
throw new HttpListProviderError('Request failed for all urls', errors)
}
module.exports = {
HttpListProvider,
HttpListProviderError,
defaultOptions,
send
}

@ -0,0 +1,40 @@
const promiseRetry = require('promise-retry')
const { promiseAny } = require('../utils/utils')
const { defaultOptions, HttpListProviderError, send } = require('./HttpListProvider')
function RedundantHttpListProvider(urls, options = {}) {
if (!(this instanceof RedundantHttpListProvider)) {
return new RedundantHttpListProvider(urls)
}
if (!urls || !urls.length) {
throw new TypeError(`Invalid URLs: '${urls}'`)
}
this.urls = urls
this.options = { ...defaultOptions, ...options }
this.currentIndex = 0
}
RedundantHttpListProvider.prototype.send = async function send(payload, callback) {
try {
const result = await promiseRetry(retry => {
return trySend(payload, this.urls, this.options).catch(retry)
}, this.options.retry)
callback(null, result)
} catch (e) {
callback(e)
}
}
async function trySend(payload, urls, options) {
try {
return await promiseAny(urls.map(url => send(url, payload, options)))
} catch (errors) {
throw new HttpListProviderError('Request failed for all urls', errors)
}
}
module.exports = {
RedundantHttpListProvider
}

@ -1,50 +0,0 @@
const promiseRetry = require('promise-retry')
const tryEach = require('../utils/tryEach')
const { RETRY_CONFIG } = require('../utils/constants')
const { promiseAny } = require('../utils/utils')
function RpcUrlsManager(homeUrls, foreignUrls) {
if (!homeUrls) {
throw new Error(`Invalid homeUrls: '${homeUrls}'`)
}
if (!foreignUrls) {
throw new Error(`Invalid foreignUrls: '${foreignUrls}'`)
}
this.homeUrls = homeUrls.split(' ')
this.foreignUrls = foreignUrls.split(' ')
}
RpcUrlsManager.prototype.tryEach = async function(chain, f, redundant = false) {
if (chain !== 'home' && chain !== 'foreign') {
throw new Error(`Invalid argument chain: '${chain}'`)
}
// save urls to avoid race condition
const urls = chain === 'home' ? [...this.homeUrls] : [...this.foreignUrls]
if (redundant) {
// result from first responded node will be returned immediately
// remaining nodes will continue to retry queries in separate promises
// promiseAny will throw only if all urls reached max retry number
return promiseAny(urls.map(url => promiseRetry(retry => f(url).catch(retry), RETRY_CONFIG)))
}
const [result, index] = await promiseRetry(retry => tryEach(urls, f).catch(retry), RETRY_CONFIG)
if (index > 0) {
// rotate urls
const failed = urls.splice(0, index)
urls.push(...failed)
}
if (chain === 'home') {
this.homeUrls = urls
} else {
this.foreignUrls = urls
}
return result
}
module.exports = RpcUrlsManager

@ -1,3 +0,0 @@
const RpcUrlsManager = require('./RpcUrlsManager')
module.exports = new RpcUrlsManager(process.env.COMMON_HOME_RPC_URL, process.env.COMMON_FOREIGN_RPC_URL)

@ -1,19 +1,55 @@
const HttpListProvider = require('http-list-provider')
const Web3 = require('web3') const Web3 = require('web3')
const rpcUrlsManager = require('./getRpcUrlsManager') const { HttpListProvider } = require('./HttpListProvider')
const { RedundantHttpListProvider } = require('./RedundantHttpListProvider')
const { RETRY_CONFIG } = require('../utils/constants') const { RETRY_CONFIG } = require('../utils/constants')
const homeProvider = new HttpListProvider(rpcUrlsManager.homeUrls, { const {
COMMON_HOME_RPC_URL,
COMMON_FOREIGN_RPC_URL,
ORACLE_RPC_REQUEST_TIMEOUT,
ORACLE_HOME_RPC_POLLING_INTERVAL,
ORACLE_FOREIGN_RPC_POLLING_INTERVAL
} = process.env
if (!COMMON_HOME_RPC_URL) {
throw new Error(`Invalid homeUrls: '${COMMON_HOME_RPC_URL}'`)
}
if (!COMMON_FOREIGN_RPC_URL) {
throw new Error(`Invalid foreignUrls: '${COMMON_FOREIGN_RPC_URL}'`)
}
const homeUrls = COMMON_HOME_RPC_URL.split(' ').filter(url => url.length > 0)
const foreignUrls = COMMON_FOREIGN_RPC_URL.split(' ').filter(url => url.length > 0)
const homeDefaultTimeout = parseInt(ORACLE_HOME_RPC_POLLING_INTERVAL, 10) * 2
const foreignDefaultTimeout = parseInt(ORACLE_FOREIGN_RPC_POLLING_INTERVAL, 10) * 2
const configuredTimeout = parseInt(ORACLE_RPC_REQUEST_TIMEOUT, 10)
const homeOptions = {
requestTimeout: configuredTimeout || homeDefaultTimeout,
retry: RETRY_CONFIG retry: RETRY_CONFIG
}) }
const foreignOptions = {
requestTimeout: configuredTimeout || foreignDefaultTimeout,
retry: RETRY_CONFIG
}
const homeProvider = new HttpListProvider(homeUrls, homeOptions)
const web3Home = new Web3(homeProvider) const web3Home = new Web3(homeProvider)
const foreignProvider = new HttpListProvider(rpcUrlsManager.foreignUrls, { const foreignProvider = new HttpListProvider(foreignUrls, foreignOptions)
retry: RETRY_CONFIG
})
const web3Foreign = new Web3(foreignProvider) const web3Foreign = new Web3(foreignProvider)
const redundantHomeProvider = new RedundantHttpListProvider(homeUrls, homeOptions)
const web3HomeRedundant = new Web3(redundantHomeProvider)
const redundantForeignProvider = new RedundantHttpListProvider(foreignUrls, foreignOptions)
const web3ForeignRedundant = new Web3(redundantForeignProvider)
module.exports = { module.exports = {
web3Home, web3Home,
web3Foreign web3Foreign,
web3HomeRedundant,
web3ForeignRedundant
} }

@ -1,67 +1,27 @@
const Web3Utils = require('web3-utils') const { toWei } = require('web3').utils
const fetch = require('node-fetch')
const rpcUrlsManager = require('../services/getRpcUrlsManager')
const { ORACLE_TX_REDUNDANCY } = process.env async function sendTx({ privateKey, data, nonce, gasPrice, amount, gasLimit, to, chainId, web3 }) {
// eslint-disable-next-line consistent-return
async function sendTx({ chain, privateKey, data, nonce, gasPrice, amount, gasLimit, to, chainId, web3 }) {
const serializedTx = await web3.eth.accounts.signTransaction( const serializedTx = await web3.eth.accounts.signTransaction(
{ {
nonce: Number(nonce), nonce: Number(nonce),
chainId, chainId,
to, to,
data, data,
value: Web3Utils.toWei(amount), value: toWei(amount),
gasPrice, gasPrice,
gas: gasLimit gas: gasLimit
}, },
`0x${privateKey}` `0x${privateKey}`
) )
return sendRawTx({ return new Promise((res, rej) =>
chain, web3.eth
method: 'eth_sendRawTransaction', .sendSignedTransaction(serializedTx.rawTransaction)
params: [serializedTx.rawTransaction] .once('transactionHash', res)
}) .once('error', rej)
}
// eslint-disable-next-line consistent-return
async function sendRawTx({ chain, params, method }) {
const result = await rpcUrlsManager.tryEach(
chain,
async url => {
// curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'
const response = await fetch(url, {
headers: {
'Content-type': 'application/json'
},
method: 'POST',
body: JSON.stringify({
jsonrpc: '2.0',
method,
params,
id: Math.floor(Math.random() * 100) + 1
})
})
if (!response.ok) {
throw new Error(response.statusText)
}
return response
},
ORACLE_TX_REDUNDANCY === 'true' && method === 'eth_sendRawTransaction'
) )
const json = await result.json()
if (json.error) {
throw json.error
}
return json.result
} }
module.exports = { module.exports = {
sendTx, sendTx
sendRawTx
} }

@ -1,8 +1,6 @@
const { hexToNumber } = require('web3-utils')
const logger = require('../services/logger').child({ const logger = require('../services/logger').child({
module: 'web3' module: 'web3'
}) })
const { sendRawTx } = require('./sendTx')
async function getNonce(web3, address) { async function getNonce(web3, address) {
try { try {
@ -26,15 +24,10 @@ async function getBlockNumber(web3) {
} }
} }
async function getChainId(chain) { async function getChainId(web3) {
try { try {
logger.debug('Getting chain id') logger.debug('Getting chain id')
const chainIdHex = await sendRawTx({ const chainId = await web3.eth.getChainId()
chain,
method: 'eth_chainId',
params: []
})
const chainId = hexToNumber(chainIdHex)
logger.debug({ chainId }, 'Chain id obtained') logger.debug({ chainId }, 'Chain id obtained')
return chainId return chainId
} catch (e) { } catch (e) {

@ -1,13 +1,13 @@
const assert = require('assert') const assert = require('assert')
const Web3Utils = require('web3-utils') const { toHex, numberToHex, padLeft } = require('web3').utils
const { strip0x } = require('../../../commons') const { strip0x } = require('../../../commons')
function createMessage({ recipient, value, transactionHash, bridgeAddress, expectedMessageLength }) { function createMessage({ recipient, value, transactionHash, bridgeAddress, expectedMessageLength }) {
recipient = strip0x(recipient) recipient = strip0x(recipient)
assert.strictEqual(recipient.length, 20 * 2) assert.strictEqual(recipient.length, 20 * 2)
value = Web3Utils.numberToHex(value) value = numberToHex(value)
value = Web3Utils.padLeft(value, 32 * 2) value = padLeft(value, 32 * 2)
value = strip0x(value) value = strip0x(value)
assert.strictEqual(value.length, 64) assert.strictEqual(value.length, 64)
@ -60,7 +60,7 @@ function signatureToVRS(rawSignature) {
} }
function packSignatures(array) { function packSignatures(array) {
const length = strip0x(Web3Utils.toHex(array.length)) const length = strip0x(toHex(array.length))
const msgLength = length.length === 1 ? `0${length}` : length const msgLength = length.length === 1 ? `0${length}` : length
let v = '' let v = ''
let r = '' let r = ''

@ -5,7 +5,6 @@ const { connectWatcherToQueue, connection } = require('./services/amqpClient')
const { getBlockNumber } = require('./tx/web3') const { getBlockNumber } = require('./tx/web3')
const { redis } = require('./services/redisClient') const { redis } = require('./services/redisClient')
const logger = require('./services/logger') const logger = require('./services/logger')
const rpcUrlsManager = require('./services/getRpcUrlsManager')
const { getRequiredBlockConfirmations, getEvents } = require('./tx/web3') const { getRequiredBlockConfirmations, getEvents } = require('./tx/web3')
const { checkHTTPS, watchdog } = require('./utils/utils') const { checkHTTPS, watchdog } = require('./utils/utils')
const { EXIT_CODES } = require('./utils/constants') const { EXIT_CODES } = require('./utils/constants')
@ -42,8 +41,7 @@ async function initialize() {
try { try {
const checkHttps = checkHTTPS(process.env.ORACLE_ALLOW_HTTP_FOR_RPC, logger) const checkHttps = checkHTTPS(process.env.ORACLE_ALLOW_HTTP_FOR_RPC, logger)
rpcUrlsManager.homeUrls.forEach(checkHttps('home')) web3Instance.currentProvider.urls.forEach(checkHttps(config.chain))
rpcUrlsManager.foreignUrls.forEach(checkHttps('foreign'))
await getLastProcessedBlock() await getLastProcessedBlock()
connectWatcherToQueue({ connectWatcherToQueue({

@ -1,6 +1,5 @@
const path = require('path') const path = require('path')
const logger = require('./services/logger') const logger = require('./services/logger')
const rpcUrlsManager = require('./services/getRpcUrlsManager')
const { checkHTTPS, watchdog } = require('./utils/utils') const { checkHTTPS, watchdog } = require('./utils/utils')
const { EXIT_CODES } = require('./utils/constants') const { EXIT_CODES } = require('./utils/constants')
const { connectWorkerToQueue } = require('./services/amqpClient') const { connectWorkerToQueue } = require('./services/amqpClient')
@ -9,12 +8,13 @@ const config = require(path.join('../config/', process.argv[2]))
const convertToChai = require('./workers/convertToChai')(config) const convertToChai = require('./workers/convertToChai')(config)
const web3Instance = config.web3
async function initialize() { async function initialize() {
try { try {
const checkHttps = checkHTTPS(process.env.ORACLE_ALLOW_HTTP_FOR_RPC, logger) const checkHttps = checkHTTPS(process.env.ORACLE_ALLOW_HTTP_FOR_RPC, logger)
rpcUrlsManager.homeUrls.forEach(checkHttps('home')) web3Instance.currentProvider.urls.forEach(checkHttps(config.chain))
rpcUrlsManager.foreignUrls.forEach(checkHttps('foreign'))
connectWorkerToQueue({ connectWorkerToQueue({
queueName: config.workerQueue, queueName: config.workerQueue,

@ -1,5 +1,5 @@
require('../../env') require('../../env')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../services/HttpListProvider')
const rootLogger = require('../services/logger') const rootLogger = require('../services/logger')
const { web3Foreign } = require('../services/web3') const { web3Foreign } = require('../services/web3')

@ -2,7 +2,7 @@ const chai = require('chai')
const chaiAsPromised = require('chai-as-promised') const chaiAsPromised = require('chai-as-promised')
const sinon = require('sinon') const sinon = require('sinon')
const Web3 = require('web3') const Web3 = require('web3')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../src/services/HttpListProvider')
const estimateGas = require('../src/events/processAffirmationRequests/estimateGas') const estimateGas = require('../src/events/processAffirmationRequests/estimateGas')
const errors = require('../src/utils/errors') const errors = require('../src/utils/errors')

@ -1,7 +1,7 @@
const { expect } = require('chai').use(require('chai-as-promised')) const { expect } = require('chai').use(require('chai-as-promised'))
const sinon = require('sinon') const sinon = require('sinon')
const Web3 = require('web3') const Web3 = require('web3')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../src/services/HttpListProvider')
const { createMessage, signatureToVRS } = require('../src/utils/message') const { createMessage, signatureToVRS } = require('../src/utils/message')
const estimateGas = require('../src/events/processCollectedSignatures/estimateGas') const estimateGas = require('../src/events/processCollectedSignatures/estimateGas')
const errors = require('../src/utils/errors') const errors = require('../src/utils/errors')

@ -2,7 +2,7 @@ const chai = require('chai')
const chaiAsPromised = require('chai-as-promised') const chaiAsPromised = require('chai-as-promised')
const sinon = require('sinon') const sinon = require('sinon')
const Web3 = require('web3') const Web3 = require('web3')
const { HttpListProviderError } = require('http-list-provider') const { HttpListProviderError } = require('../src/services/HttpListProvider')
const estimateGas = require('../src/events/processSignatureRequests/estimateGas') const estimateGas = require('../src/events/processSignatureRequests/estimateGas')
const errors = require('../src/utils/errors') const errors = require('../src/utils/errors')

521
yarn.lock

@ -1304,6 +1304,21 @@
"@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/properties" ">=5.0.0-beta.131"
"@ethersproject/strings" ">=5.0.0-beta.130" "@ethersproject/strings" ">=5.0.0-beta.130"
"@ethersproject/abi@5.0.0-beta.153":
version "5.0.0-beta.153"
resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee"
integrity sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg==
dependencies:
"@ethersproject/address" ">=5.0.0-beta.128"
"@ethersproject/bignumber" ">=5.0.0-beta.130"
"@ethersproject/bytes" ">=5.0.0-beta.129"
"@ethersproject/constants" ">=5.0.0-beta.128"
"@ethersproject/hash" ">=5.0.0-beta.128"
"@ethersproject/keccak256" ">=5.0.0-beta.127"
"@ethersproject/logger" ">=5.0.0-beta.129"
"@ethersproject/properties" ">=5.0.0-beta.131"
"@ethersproject/strings" ">=5.0.0-beta.130"
"@ethersproject/address@>=5.0.0-beta.128": "@ethersproject/address@>=5.0.0-beta.128":
version "5.0.0-beta.134" version "5.0.0-beta.134"
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.0-beta.134.tgz#9c1790c87b763dc547ac12e2dbc9fa78d0799a71" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.0-beta.134.tgz#9c1790c87b763dc547ac12e2dbc9fa78d0799a71"
@ -1316,22 +1331,33 @@
"@ethersproject/rlp" ">=5.0.0-beta.126" "@ethersproject/rlp" ">=5.0.0-beta.126"
bn.js "^4.4.0" bn.js "^4.4.0"
"@ethersproject/bignumber@>=5.0.0-beta.130": "@ethersproject/address@^5.0.4":
version "5.0.0-beta.136" version "5.0.5"
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.0-beta.136.tgz#5fd90ee708f3778733b02caf58453756524c758f" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.5.tgz#2caa65f6b7125015395b1b54c985ee0b27059cc7"
integrity sha512-G5fYkkMUpmQd7Qcxa7YdwavBkiSb44wI7GsZls/7eGFMYl2ySgmwOBMw3kj1lhheXbF73jfBfOBHvKYrN/p7pQ== integrity sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA==
dependencies: dependencies:
"@ethersproject/bytes" ">=5.0.0-beta.129" "@ethersproject/bignumber" "^5.0.7"
"@ethersproject/logger" ">=5.0.0-beta.129" "@ethersproject/bytes" "^5.0.4"
"@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/keccak256" "^5.0.3"
"@ethersproject/logger" "^5.0.5"
"@ethersproject/rlp" "^5.0.3"
bn.js "^4.4.0" bn.js "^4.4.0"
"@ethersproject/bytes@>=5.0.0-beta.129": "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7":
version "5.0.0-beta.137" version "5.0.8"
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.0-beta.137.tgz#a9a35e2b358886289225d28212f4071ae391c161" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.8.tgz#cee33bd8eb0266176def0d371b45274b1d2c4ec0"
integrity sha512-uBwchZzGP912Wcani6vM7RLtsnN69Uc9WTLvewsniKrpHpSx0/k33WUcQVosmkwPgUtqflKyGjcIqaea1Z9WHw== integrity sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA==
dependencies: dependencies:
"@ethersproject/logger" ">=5.0.0-beta.129" "@ethersproject/bytes" "^5.0.4"
"@ethersproject/logger" "^5.0.5"
bn.js "^4.4.0"
"@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4":
version "5.0.5"
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.5.tgz#688b70000e550de0c97a151a21f15b87d7f97d7c"
integrity sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ==
dependencies:
"@ethersproject/logger" "^5.0.5"
"@ethersproject/constants@>=5.0.0-beta.128": "@ethersproject/constants@>=5.0.0-beta.128":
version "5.0.0-beta.133" version "5.0.0-beta.133"
@ -1340,6 +1366,13 @@
dependencies: dependencies:
"@ethersproject/bignumber" ">=5.0.0-beta.130" "@ethersproject/bignumber" ">=5.0.0-beta.130"
"@ethersproject/constants@^5.0.4":
version "5.0.5"
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.5.tgz#0ed19b002e8404bdf6d135234dc86a7d9bcf9b71"
integrity sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA==
dependencies:
"@ethersproject/bignumber" "^5.0.7"
"@ethersproject/hash@>=5.0.0-beta.128": "@ethersproject/hash@>=5.0.0-beta.128":
version "5.0.0-beta.133" version "5.0.0-beta.133"
resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.0-beta.133.tgz#bda0c74454a82359642033f27c5157963495fcdf" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.0-beta.133.tgz#bda0c74454a82359642033f27c5157963495fcdf"
@ -1358,17 +1391,25 @@
"@ethersproject/bytes" ">=5.0.0-beta.129" "@ethersproject/bytes" ">=5.0.0-beta.129"
js-sha3 "0.5.7" js-sha3 "0.5.7"
"@ethersproject/logger@>=5.0.0-beta.129": "@ethersproject/keccak256@^5.0.3":
version "5.0.0-beta.136" version "5.0.4"
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.0-beta.136.tgz#a140cea77e1d820a97384fb02bfad63c130f31c1" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.4.tgz#36ca0a7d1ae2a272da5654cb886776d0c680ef3a"
integrity sha512-baWK/4ccsVcyUU20nhp7k+hoRYsiaOfURYlyvQCoUUFKD3mpSRQCH42wxCosZZSCWz4rTHgASLQDdKkBtNVz1w== integrity sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ==
"@ethersproject/properties@>=5.0.0-beta.131":
version "5.0.0-beta.138"
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.0-beta.138.tgz#e634d25b8c9f9448ef8d739bf4bd2db831dbe79d"
integrity sha512-vLVftNTxonJ0SkkcMcpXHN9pABD84clh+Cz3TV79qvh+lc0MFX3dnYL1JinBdFnqLPXU9vw2LbTrBhwQY8bzCQ==
dependencies: dependencies:
"@ethersproject/logger" ">=5.0.0-beta.129" "@ethersproject/bytes" "^5.0.4"
js-sha3 "0.5.7"
"@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5":
version "5.0.6"
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.6.tgz#faa484203e86e08be9e07fef826afeef7183fe88"
integrity sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ==
"@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.4.tgz#a67a1f5a52c30850b5062c861631e73d131f666e"
integrity sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A==
dependencies:
"@ethersproject/logger" "^5.0.5"
"@ethersproject/rlp@>=5.0.0-beta.126": "@ethersproject/rlp@>=5.0.0-beta.126":
version "5.0.0-beta.132" version "5.0.0-beta.132"
@ -1378,6 +1419,24 @@
"@ethersproject/bytes" ">=5.0.0-beta.129" "@ethersproject/bytes" ">=5.0.0-beta.129"
"@ethersproject/logger" ">=5.0.0-beta.129" "@ethersproject/logger" ">=5.0.0-beta.129"
"@ethersproject/rlp@^5.0.3":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.4.tgz#0090a0271e84ea803016a112a79f5cfd80271a77"
integrity sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ==
dependencies:
"@ethersproject/bytes" "^5.0.4"
"@ethersproject/logger" "^5.0.5"
"@ethersproject/signing-key@^5.0.4":
version "5.0.5"
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.5.tgz#acfd06fc05a14180df7e027688bbd23fc4baf782"
integrity sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g==
dependencies:
"@ethersproject/bytes" "^5.0.4"
"@ethersproject/logger" "^5.0.5"
"@ethersproject/properties" "^5.0.3"
elliptic "6.5.3"
"@ethersproject/strings@>=5.0.0-beta.130": "@ethersproject/strings@>=5.0.0-beta.130":
version "5.0.0-beta.136" version "5.0.0-beta.136"
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.0-beta.136.tgz#053cbf4f9f96a7537cbc50300597f2d707907f51" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.0-beta.136.tgz#053cbf4f9f96a7537cbc50300597f2d707907f51"
@ -1387,6 +1446,21 @@
"@ethersproject/constants" ">=5.0.0-beta.128" "@ethersproject/constants" ">=5.0.0-beta.128"
"@ethersproject/logger" ">=5.0.0-beta.129" "@ethersproject/logger" ">=5.0.0-beta.129"
"@ethersproject/transactions@^5.0.0-beta.135":
version "5.0.6"
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.6.tgz#b8b27938be6e9ed671dbdd35fe98af8b14d0df7c"
integrity sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA==
dependencies:
"@ethersproject/address" "^5.0.4"
"@ethersproject/bignumber" "^5.0.7"
"@ethersproject/bytes" "^5.0.4"
"@ethersproject/constants" "^5.0.4"
"@ethersproject/keccak256" "^5.0.3"
"@ethersproject/logger" "^5.0.5"
"@ethersproject/properties" "^5.0.3"
"@ethersproject/rlp" "^5.0.3"
"@ethersproject/signing-key" "^5.0.4"
"@evocateur/libnpmaccess@^3.1.2": "@evocateur/libnpmaccess@^3.1.2":
version "3.1.2" version "3.1.2"
resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845"
@ -2847,7 +2921,7 @@
dependencies: dependencies:
bignumber.js "*" bignumber.js "*"
"@types/bn.js@^4.11.0", "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4": "@types/bn.js@^4.11.0", "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4", "@types/bn.js@^4.11.5":
version "4.11.6" version "4.11.6"
resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c"
integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==
@ -2990,6 +3064,11 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.43.tgz#b60ce047822e526e7a9252e50844eee79d5386ff" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.43.tgz#b60ce047822e526e7a9252e50844eee79d5386ff"
integrity sha512-KUyZdkGCnVPuXfsKmDUu2XLui65LZIJ2s0M57noy5e+ixUT2oK33ep7zlvgzI8LElcWqbf8AR+o/3GqAPac2zA== integrity sha512-KUyZdkGCnVPuXfsKmDUu2XLui65LZIJ2s0M57noy5e+ixUT2oK33ep7zlvgzI8LElcWqbf8AR+o/3GqAPac2zA==
"@types/node@^12.12.6":
version "12.12.69"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.69.tgz#7cb6a3aa0d16664bf2dcd1450ccb8477464fbd79"
integrity sha512-2F2VQRSFmzqgUEXw75L51MgnnZqc6bKWVSUPfrDPzp6mzGGibeVwyQcpvZvBr5RnsoMRHmC8EcBQiobSeqeJxg==
"@types/node@^12.6.1": "@types/node@^12.6.1":
version "12.12.34" version "12.12.34"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.34.tgz#0a5d6ae5d22612f0cf5f10320e1fc5d2a745dcb8" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.34.tgz#0a5d6ae5d22612f0cf5f10320e1fc5d2a745dcb8"
@ -4932,7 +5011,7 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
base-x@^3.0.2: base-x@^3.0.2, base-x@^3.0.8:
version "3.0.8" version "3.0.8"
resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d"
integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==
@ -5108,11 +5187,16 @@ bn.js@4.11.6:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU=
bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0, bn.js@^4.8.0: bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.8.0:
version "4.11.8" version "4.11.8"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
bn.js@^4.11.9, bn.js@^4.4.0:
version "4.11.9"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
body-parser@1.19.0, body-parser@^1.16.0: body-parser@1.19.0, body-parser@^1.16.0:
version "1.19.0" version "1.19.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
@ -5417,7 +5501,7 @@ buffer@^5.0.5:
base64-js "^1.0.2" base64-js "^1.0.2"
ieee754 "^1.1.4" ieee754 "^1.1.4"
buffer@^5.2.1: buffer@^5.2.1, buffer@^5.6.0:
version "5.6.0" version "5.6.0"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
@ -5433,6 +5517,13 @@ buffer@^5.5.0:
base64-js "^1.0.2" base64-js "^1.0.2"
ieee754 "^1.1.4" ieee754 "^1.1.4"
bufferutil@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.1.tgz#3a177e8e5819a1243fe16b63a199951a7ad8d4a7"
integrity sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA==
dependencies:
node-gyp-build "~3.7.0"
builtin-status-codes@^3.0.0: builtin-status-codes@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
@ -5857,6 +5948,17 @@ ci-info@^2.0.0:
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
cids@^0.7.1:
version "0.7.5"
resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2"
integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==
dependencies:
buffer "^5.5.0"
class-is "^1.1.0"
multibase "~0.6.0"
multicodec "^1.0.0"
multihashes "~0.4.15"
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
@ -5865,6 +5967,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
inherits "^2.0.1" inherits "^2.0.1"
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
class-is@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825"
integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==
class-utils@^0.3.5: class-utils@^0.3.5:
version "0.3.6" version "0.3.6"
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
@ -6330,6 +6437,15 @@ content-disposition@0.5.3:
dependencies: dependencies:
safe-buffer "5.1.2" safe-buffer "5.1.2"
content-hash@^2.5.2:
version "2.5.2"
resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211"
integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==
dependencies:
cids "^0.7.1"
multicodec "^0.5.5"
multihashes "^0.4.15"
content-type@~1.0.4: content-type@~1.0.4:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
@ -7174,11 +7290,6 @@ deep-is@~0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
deepmerge@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==
default-compare@^1.0.0: default-compare@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f"
@ -7677,6 +7788,19 @@ elliptic@6.5.2, elliptic@^6.5.2:
minimalistic-assert "^1.0.0" minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.0" minimalistic-crypto-utils "^1.0.0"
elliptic@6.5.3:
version "6.5.3"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6"
integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==
dependencies:
bn.js "^4.4.0"
brorand "^1.0.1"
hash.js "^1.0.0"
hmac-drbg "^1.0.0"
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.0"
elliptic@^6.0.0, elliptic@^6.4.0: elliptic@^6.0.0, elliptic@^6.4.0:
version "6.4.1" version "6.4.1"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
@ -8492,7 +8616,7 @@ eth-lib@0.2.7:
elliptic "^6.4.0" elliptic "^6.4.0"
xhr-request-promise "^0.1.2" xhr-request-promise "^0.1.2"
eth-lib@^0.2.8: eth-lib@0.2.8, eth-lib@^0.2.8:
version "0.2.8" version "0.2.8"
resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8"
integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==
@ -8840,7 +8964,7 @@ eventemitter3@3.1.2, eventemitter3@^3.0.0, eventemitter3@^3.1.0:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
eventemitter3@^4.0.0: eventemitter3@4.0.4, eventemitter3@^4.0.0:
version "4.0.4" version "4.0.4"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"
integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==
@ -10752,15 +10876,6 @@ http-https@^1.0.0:
resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b"
integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=
http-list-provider@0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/http-list-provider/-/http-list-provider-0.0.5.tgz#bb901c8bd7bbcce48a697512cb920aaf9aeeb0be"
integrity sha512-s6hMhJLQmCtF3EbM5xDZW97Urk8jG2wfXDVOCANcF0DO/tXPq1iACZ7eFb9+obYVd7459w1mvCgiDUskIschmg==
dependencies:
deepmerge "^2.1.1"
node-fetch "^2.2.0"
promise-retry "^1.1.1"
http-parser-js@>=0.4.0: http-parser-js@>=0.4.0:
version "0.5.0" version "0.5.0"
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8"
@ -13936,6 +14051,22 @@ ms@^2.0.0:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
multibase@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b"
integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==
dependencies:
base-x "^3.0.8"
buffer "^5.5.0"
multibase@~0.6.0:
version "0.6.1"
resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b"
integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==
dependencies:
base-x "^3.0.8"
buffer "^5.5.0"
multicast-dns-service-types@^1.1.0: multicast-dns-service-types@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
@ -13949,6 +14080,30 @@ multicast-dns@^6.0.1:
dns-packet "^1.3.1" dns-packet "^1.3.1"
thunky "^1.0.2" thunky "^1.0.2"
multicodec@^0.5.5:
version "0.5.7"
resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd"
integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==
dependencies:
varint "^5.0.0"
multicodec@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f"
integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==
dependencies:
buffer "^5.6.0"
varint "^5.0.0"
multihashes@^0.4.15, multihashes@~0.4.15:
version "0.4.21"
resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5"
integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==
dependencies:
buffer "^5.5.0"
multibase "^0.7.0"
varint "^5.0.0"
multimatch@^3.0.0: multimatch@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b"
@ -14123,7 +14278,7 @@ node-fetch@^1.0.1, node-fetch@~1.7.1:
encoding "^0.1.11" encoding "^0.1.11"
is-stream "^1.0.1" is-stream "^1.0.1"
node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0: node-fetch@^2.1.2, node-fetch@^2.3.0, node-fetch@^2.5.0:
version "2.6.0" version "2.6.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
@ -14133,6 +14288,11 @@ node-forge@0.7.5:
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df"
integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==
node-gyp-build@~3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.7.0.tgz#daa77a4f547b9aed3e2aac779eaf151afd60ec8d"
integrity sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==
node-gyp@^3.8.0: node-gyp@^3.8.0:
version "3.8.0" version "3.8.0"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
@ -14719,6 +14879,13 @@ oboe@2.1.4:
dependencies: dependencies:
http-https "^1.0.0" http-https "^1.0.0"
oboe@2.1.5:
version "2.1.5"
resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd"
integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80=
dependencies:
http-https "^1.0.0"
obuf@^1.0.0, obuf@^1.1.2: obuf@^1.0.0, obuf@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
@ -17859,6 +18026,11 @@ scrypt-js@2.0.4:
resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16"
integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==
scrypt-js@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"
integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==
scrypt.js@0.2.0: scrypt.js@0.2.0:
version "0.2.0" version "0.2.0"
resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.2.0.tgz#af8d1465b71e9990110bedfc593b9479e03a8ada" resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.2.0.tgz#af8d1465b71e9990110bedfc593b9479e03a8ada"
@ -20189,6 +20361,13 @@ use@^3.1.0:
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
utf-8-validate@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.2.tgz#63cfbccd85dc1f2b66cf7a1d0eebc08ed056bfb3"
integrity sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==
dependencies:
node-gyp-build "~3.7.0"
utf8@2.1.1: utf8@2.1.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.1.tgz#2e01db02f7d8d0944f77104f1609eb0c304cf768" resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.1.tgz#2e01db02f7d8d0944f77104f1609eb0c304cf768"
@ -20305,6 +20484,11 @@ value-or-function@^3.0.0:
resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813"
integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=
varint@^5.0.0:
version "5.0.2"
resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4"
integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==
vary@^1, vary@~1.1.2: vary@^1, vary@~1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
@ -20541,6 +20725,16 @@ web3-bzz@1.2.7:
swarm-js "^0.1.40" swarm-js "^0.1.40"
underscore "1.9.1" underscore "1.9.1"
web3-bzz@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.0.tgz#83dfd77fa8a64bbb660462dffd0fee2a02ef1051"
integrity sha512-ibYAnKab+sgTo/UdfbrvYfWblXjjgSMgyy9/FHa6WXS14n/HVB+HfWqGz2EM3fok8Wy5XoKGMvdqvERQ/mzq1w==
dependencies:
"@types/node" "^12.12.6"
got "9.6.0"
swarm-js "^0.1.40"
underscore "1.9.1"
web3-core-helpers@1.0.0-beta.30: web3-core-helpers@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.30.tgz#a000cee3f0a09eea13d74b5730335d4635fe1f2f" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.30.tgz#a000cee3f0a09eea13d74b5730335d4635fe1f2f"
@ -20577,6 +20771,15 @@ web3-core-helpers@1.2.7:
web3-eth-iban "1.2.7" web3-eth-iban "1.2.7"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-core-helpers@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.0.tgz#697cc3246a7eaaaac64ea506828d861c981c3f31"
integrity sha512-+MFb1kZCrRctf7UYE7NCG4rGhSXaQJ/KF07di9GVK1pxy1K0+rFi61ZobuV1ky9uQp+uhhSPts4Zp55kRDB5sw==
dependencies:
underscore "1.9.1"
web3-eth-iban "1.3.0"
web3-utils "1.3.0"
web3-core-method@1.0.0-beta.30: web3-core-method@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.30.tgz#8dd6ff789e8d1563b8786d13a78c7facefae471c" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.30.tgz#8dd6ff789e8d1563b8786d13a78c7facefae471c"
@ -20621,6 +20824,18 @@ web3-core-method@1.2.7:
web3-core-subscriptions "1.2.7" web3-core-subscriptions "1.2.7"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-core-method@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.0.tgz#a71387af842aec7dbad5dbbd1130c14cc6c8beb3"
integrity sha512-h0yFDrYVzy5WkLxC/C3q+hiMnzxdWm9p1T1rslnuHgOp6nYfqzu/6mUIXrsS4h/OWiGJt+BZ0xVZmtC31HDWtg==
dependencies:
"@ethersproject/transactions" "^5.0.0-beta.135"
underscore "1.9.1"
web3-core-helpers "1.3.0"
web3-core-promievent "1.3.0"
web3-core-subscriptions "1.3.0"
web3-utils "1.3.0"
web3-core-promievent@1.0.0-beta.30: web3-core-promievent@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.30.tgz#6205192bfb097441132226a5939ec5aed3a8a291" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.30.tgz#6205192bfb097441132226a5939ec5aed3a8a291"
@ -20652,6 +20867,13 @@ web3-core-promievent@1.2.7:
dependencies: dependencies:
eventemitter3 "3.1.2" eventemitter3 "3.1.2"
web3-core-promievent@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.0.tgz#e0442dd0a8989b6bdce09293976cee6d9237a484"
integrity sha512-blv69wrXw447TP3iPvYJpllkhW6B18nfuEbrfcr3n2Y0v1Jx8VJacNZFDFsFIcgXcgUIVCtOpimU7w9v4+rtaw==
dependencies:
eventemitter3 "4.0.4"
web3-core-requestmanager@1.0.0-beta.30: web3-core-requestmanager@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.30.tgz#6ee56fb8a6cb85fd01b3080854f50d64e52240c6" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.30.tgz#6ee56fb8a6cb85fd01b3080854f50d64e52240c6"
@ -20696,6 +20918,17 @@ web3-core-requestmanager@1.2.7:
web3-providers-ipc "1.2.7" web3-providers-ipc "1.2.7"
web3-providers-ws "1.2.7" web3-providers-ws "1.2.7"
web3-core-requestmanager@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.0.tgz#c5b9a0304504c0e6cce6c90bc1a3bff82732aa1f"
integrity sha512-3yMbuGcomtzlmvTVqNRydxsx7oPlw3ioRL6ReF9PeNYDkUsZaUib+6Dp5eBt7UXh5X+SIn/xa1smhDHz5/HpAw==
dependencies:
underscore "1.9.1"
web3-core-helpers "1.3.0"
web3-providers-http "1.3.0"
web3-providers-ipc "1.3.0"
web3-providers-ws "1.3.0"
web3-core-subscriptions@1.0.0-beta.30: web3-core-subscriptions@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.30.tgz#31652c75356c3f67e5a19cd14b8d314bad4e2127" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.30.tgz#31652c75356c3f67e5a19cd14b8d314bad4e2127"
@ -20732,6 +20965,15 @@ web3-core-subscriptions@1.2.7:
underscore "1.9.1" underscore "1.9.1"
web3-core-helpers "1.2.7" web3-core-helpers "1.2.7"
web3-core-subscriptions@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.0.tgz#c2622ccd2b84f4687475398ff966b579dba0847e"
integrity sha512-MUUQUAhJDb+Nz3S97ExVWveH4utoUnsbPWP+q1HJH437hEGb4vunIb9KvN3hFHLB+aHJfPeStM/4yYTz5PeuyQ==
dependencies:
eventemitter3 "4.0.4"
underscore "1.9.1"
web3-core-helpers "1.3.0"
web3-core@1.0.0-beta.30: web3-core@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.30.tgz#f75f4d3b85be74c7674637921c3e013bc5d27679" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.30.tgz#f75f4d3b85be74c7674637921c3e013bc5d27679"
@ -20778,6 +21020,19 @@ web3-core@1.2.7:
web3-core-requestmanager "1.2.7" web3-core-requestmanager "1.2.7"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-core@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.0.tgz#b818903738461c1cca0163339e1d6d3fa51242cf"
integrity sha512-BwWvAaKJf4KFG9QsKRi3MNoNgzjI6szyUlgme1qNPxUdCkaS3Rdpa0VKYNHP7M/YTk82/59kNE66mH5vmoaXjA==
dependencies:
"@types/bn.js" "^4.11.5"
"@types/node" "^12.12.6"
bignumber.js "^9.0.0"
web3-core-helpers "1.3.0"
web3-core-method "1.3.0"
web3-core-requestmanager "1.3.0"
web3-utils "1.3.0"
web3-eth-abi@1.0.0-beta.30: web3-eth-abi@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.30.tgz#6ea52c999a8505b47c2f88ba61d2a680a1066409" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.30.tgz#6ea52c999a8505b47c2f88ba61d2a680a1066409"
@ -20816,6 +21071,15 @@ web3-eth-abi@1.2.7:
underscore "1.9.1" underscore "1.9.1"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-eth-abi@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.0.tgz#387b7ea9b38be69ad8856bc7b4e9a6a69bb4d22b"
integrity sha512-1OrZ9+KGrBeBRd3lO8upkpNua9+7cBsQAgor9wbA25UrcUYSyL8teV66JNRu9gFxaTbkpdrGqM7J/LXpraXWrg==
dependencies:
"@ethersproject/abi" "5.0.0-beta.153"
underscore "1.9.1"
web3-utils "1.3.0"
web3-eth-abi@^1.0.0-beta.24: web3-eth-abi@^1.0.0-beta.24:
version "1.2.6" version "1.2.6"
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.6.tgz#b495383cc5c0d8e2857b26e7fe25606685983b25" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.6.tgz#b495383cc5c0d8e2857b26e7fe25606685983b25"
@ -20892,6 +21156,23 @@ web3-eth-accounts@1.2.7:
web3-core-method "1.2.7" web3-core-method "1.2.7"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-eth-accounts@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.0.tgz#010acf389b2bee6d5e1aecb2fe78bfa5c8f26c7a"
integrity sha512-/Q7EVW4L2wWUbNRtOTwAIrYvJid/5UnKMw67x/JpvRMwYC+e+744P536Ja6SG4X3MnzFvd3E/jruV4qa6k+zIw==
dependencies:
crypto-browserify "3.12.0"
eth-lib "0.2.8"
ethereumjs-common "^1.3.2"
ethereumjs-tx "^2.1.1"
scrypt-js "^3.0.1"
underscore "1.9.1"
uuid "3.3.2"
web3-core "1.3.0"
web3-core-helpers "1.3.0"
web3-core-method "1.3.0"
web3-utils "1.3.0"
web3-eth-contract@1.0.0-beta.30: web3-eth-contract@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.30.tgz#d7eba2385084dff3c75aac48235af2c8d2d6a258" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.30.tgz#d7eba2385084dff3c75aac48235af2c8d2d6a258"
@ -20950,6 +21231,21 @@ web3-eth-contract@1.2.7:
web3-eth-abi "1.2.7" web3-eth-abi "1.2.7"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-eth-contract@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.0.tgz#c758340ac800788e29fa29edc8b0c0ac957b741c"
integrity sha512-3SCge4SRNCnzLxf0R+sXk6vyTOl05g80Z5+9/B5pERwtPpPWaQGw8w01vqYqsYBKC7zH+dxhMaUgVzU2Dgf7bQ==
dependencies:
"@types/bn.js" "^4.11.5"
underscore "1.9.1"
web3-core "1.3.0"
web3-core-helpers "1.3.0"
web3-core-method "1.3.0"
web3-core-promievent "1.3.0"
web3-core-subscriptions "1.3.0"
web3-eth-abi "1.3.0"
web3-utils "1.3.0"
web3-eth-ens@1.2.4: web3-eth-ens@1.2.4:
version "1.2.4" version "1.2.4"
resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.4.tgz#b95b3aa99fb1e35c802b9e02a44c3046a3fa065e" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.4.tgz#b95b3aa99fb1e35c802b9e02a44c3046a3fa065e"
@ -20978,6 +21274,21 @@ web3-eth-ens@1.2.7:
web3-eth-contract "1.2.7" web3-eth-contract "1.2.7"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-eth-ens@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.0.tgz#0887ba38473c104cf5fb8a715828b3b354fa02a2"
integrity sha512-WnOru+EcuM5dteiVYJcHXo/I7Wq+ei8RrlS2nir49M0QpYvUPGbCGgTbifcjJQTWamgORtWdljSA1s2Asdb74w==
dependencies:
content-hash "^2.5.2"
eth-ens-namehash "2.0.8"
underscore "1.9.1"
web3-core "1.3.0"
web3-core-helpers "1.3.0"
web3-core-promievent "1.3.0"
web3-eth-abi "1.3.0"
web3-eth-contract "1.3.0"
web3-utils "1.3.0"
web3-eth-iban@1.0.0-beta.30: web3-eth-iban@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.30.tgz#3b080a5c4da1fa37477b17e4c900781b92150645" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.30.tgz#3b080a5c4da1fa37477b17e4c900781b92150645"
@ -21010,6 +21321,14 @@ web3-eth-iban@1.2.7:
bn.js "4.11.8" bn.js "4.11.8"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-eth-iban@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.0.tgz#15b782dfaf273ebc4e3f389f1367f4e88ddce4a5"
integrity sha512-v9mZWhR4fPF17/KhHLiWir4YHWLe09O3B/NTdhWqw3fdAMJNztzMHGzgHxA/4fU+rhrs/FhDzc4yt32zMEXBZw==
dependencies:
bn.js "^4.11.9"
web3-utils "1.3.0"
web3-eth-personal@1.0.0-beta.30: web3-eth-personal@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.30.tgz#8bd4ef40b3b5f841dd3a8b97873d9dc791caf748" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.30.tgz#8bd4ef40b3b5f841dd3a8b97873d9dc791caf748"
@ -21056,6 +21375,18 @@ web3-eth-personal@1.2.7:
web3-net "1.2.7" web3-net "1.2.7"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-eth-personal@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.0.tgz#d376e03dc737d961ff1f8d1aca866efad8477135"
integrity sha512-2czUhElsJdLpuNfun9GeLiClo5O6Xw+bLSjl3f4bNG5X2V4wcIjX2ygep/nfstLLtkz8jSkgl/bV7esANJyeRA==
dependencies:
"@types/node" "^12.12.6"
web3-core "1.3.0"
web3-core-helpers "1.3.0"
web3-core-method "1.3.0"
web3-net "1.3.0"
web3-utils "1.3.0"
web3-eth@1.0.0-beta.30: web3-eth@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.30.tgz#029b15e14cb608b9cfe02603b504d651870f0501" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.30.tgz#029b15e14cb608b9cfe02603b504d651870f0501"
@ -21130,6 +21461,25 @@ web3-eth@1.2.7:
web3-net "1.2.7" web3-net "1.2.7"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-eth@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.0.tgz#898e5f5a8827f9bc6844e267a52eb388916a6771"
integrity sha512-/bzJcxXPM9EM18JM5kO2JjZ3nEqVo3HxqU93aWAEgJNqaP/Lltmufl2GpvIB2Hvj+FXAjAXquxUdQ2/xP7BzHQ==
dependencies:
underscore "1.9.1"
web3-core "1.3.0"
web3-core-helpers "1.3.0"
web3-core-method "1.3.0"
web3-core-subscriptions "1.3.0"
web3-eth-abi "1.3.0"
web3-eth-accounts "1.3.0"
web3-eth-contract "1.3.0"
web3-eth-ens "1.3.0"
web3-eth-iban "1.3.0"
web3-eth-personal "1.3.0"
web3-net "1.3.0"
web3-utils "1.3.0"
web3-net@1.0.0-beta.30: web3-net@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.30.tgz#0a352ede296e6d4b7f88b67aa474e49703de73bf" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.30.tgz#0a352ede296e6d4b7f88b67aa474e49703de73bf"
@ -21166,6 +21516,15 @@ web3-net@1.2.7:
web3-core-method "1.2.7" web3-core-method "1.2.7"
web3-utils "1.2.7" web3-utils "1.2.7"
web3-net@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.0.tgz#b69068cccffab58911c2f08ca4abfbefb0f948c6"
integrity sha512-Xz02KylOyrB2YZzCkysEDrY7RbKxb7LADzx3Zlovfvuby7HBwtXVexXKtoGqksa+ns1lvjQLLQGb+OeLi7Sr7w==
dependencies:
web3-core "1.3.0"
web3-core-method "1.3.0"
web3-utils "1.3.0"
web3-provider-engine@14.0.6: web3-provider-engine@14.0.6:
version "14.0.6" version "14.0.6"
resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz#cbdd66fe20c0136a3a495cbe40d18b6c4160d5f0" resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz#cbdd66fe20c0136a3a495cbe40d18b6c4160d5f0"
@ -21251,6 +21610,14 @@ web3-providers-http@1.2.7:
web3-core-helpers "1.2.7" web3-core-helpers "1.2.7"
xhr2-cookies "1.1.0" xhr2-cookies "1.1.0"
web3-providers-http@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.0.tgz#88227f64c88b32abed4359383c2663616e0dc531"
integrity sha512-cMKhUI6PqlY/EC+ZDacAxajySBu8AzW8jOjt1Pe/mbRQgS0rcZyvLePGTTuoyaA8C21F8UW+EE5jj7YsNgOuqA==
dependencies:
web3-core-helpers "1.3.0"
xhr2-cookies "1.1.0"
web3-providers-ipc@1.0.0-beta.30: web3-providers-ipc@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.30.tgz#ee2d8d18a3f120b777044a56e67e0aee20854587" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.30.tgz#ee2d8d18a3f120b777044a56e67e0aee20854587"
@ -21287,6 +21654,15 @@ web3-providers-ipc@1.2.7:
underscore "1.9.1" underscore "1.9.1"
web3-core-helpers "1.2.7" web3-core-helpers "1.2.7"
web3-providers-ipc@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.0.tgz#d7c2b203733b46f7b4e7b15633d891648cf9a293"
integrity sha512-0CrLuRofR+1J38nEj4WsId/oolwQEM6Yl1sOt41S/6bNI7htdkwgVhSloFIMJMDFHtRw229QIJ6wIaKQz0X1Og==
dependencies:
oboe "2.1.5"
underscore "1.9.1"
web3-core-helpers "1.3.0"
web3-providers-ws@1.0.0-beta.30: web3-providers-ws@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.30.tgz#9ae69a9ead8a8761f86379fa347b6db5ae44b12d" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.30.tgz#9ae69a9ead8a8761f86379fa347b6db5ae44b12d"
@ -21324,6 +21700,16 @@ web3-providers-ws@1.2.7:
underscore "1.9.1" underscore "1.9.1"
web3-core-helpers "1.2.7" web3-core-helpers "1.2.7"
web3-providers-ws@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.0.tgz#84adeff65acd4624d7f5bb43c5b2b22d8f0f63a4"
integrity sha512-Im5MthhJnJst8nSoq0TgbyOdaiFQFa5r6sHPOVllhgIgViDqzbnlAFW9sNzQ0Q8VXPNfPIQKi9cOrHlSRNPjRw==
dependencies:
eventemitter3 "4.0.4"
underscore "1.9.1"
web3-core-helpers "1.3.0"
websocket "^1.0.32"
web3-shh@1.0.0-beta.30: web3-shh@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.30.tgz#2bfe3220d958ff4ca592017790852bc57b7b0ca7" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.30.tgz#2bfe3220d958ff4ca592017790852bc57b7b0ca7"
@ -21364,6 +21750,16 @@ web3-shh@1.2.7:
web3-core-subscriptions "1.2.7" web3-core-subscriptions "1.2.7"
web3-net "1.2.7" web3-net "1.2.7"
web3-shh@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.0.tgz#62d15297da8fb5f733dd1b98f9ade300590f4d49"
integrity sha512-IZTojA4VCwVq+7eEIHuL1tJXtU+LJDhO8Y2QmuwetEWW1iBgWCGPHZasipWP+7kDpSm/5lo5GRxL72FF/Os/tA==
dependencies:
web3-core "1.3.0"
web3-core-method "1.3.0"
web3-core-subscriptions "1.3.0"
web3-net "1.3.0"
web3-utils@1.0.0-beta.30: web3-utils@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.30.tgz#eae408cc8d6d6fecc8d5097cfead51773f231ff9" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.30.tgz#eae408cc8d6d6fecc8d5097cfead51773f231ff9"
@ -21432,6 +21828,20 @@ web3-utils@1.2.7:
underscore "1.9.1" underscore "1.9.1"
utf8 "3.0.0" utf8 "3.0.0"
web3-utils@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.0.tgz#5bac16e5e0ec9fe7bdcfadb621655e8aa3cf14e1"
integrity sha512-2mS5axFCbkhicmoDRuJeuo0TVGQDgC2sPi/5dblfVC+PMtX0efrb8Xlttv/eGkq7X4E83Pds34FH98TP2WOUZA==
dependencies:
bn.js "^4.11.9"
eth-lib "0.2.8"
ethereum-bloom-filters "^1.0.6"
ethjs-unit "0.1.6"
number-to-bn "1.7.0"
randombytes "^2.1.0"
underscore "1.9.1"
utf8 "3.0.0"
web3@1.0.0-beta.30: web3@1.0.0-beta.30:
version "1.0.0-beta.30" version "1.0.0-beta.30"
resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.30.tgz#ad3e761845aeb2f40a7760cde75793773a431ecd" resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.30.tgz#ad3e761845aeb2f40a7760cde75793773a431ecd"
@ -21485,6 +21895,19 @@ web3@1.2.7:
web3-shh "1.2.7" web3-shh "1.2.7"
web3-utils "1.2.7" web3-utils "1.2.7"
web3@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.0.tgz#8fe4cd6e2a21c91904f343ba75717ee4c76bb349"
integrity sha512-4q9dna0RecnrlgD/bD1C5S+81Untbd6Z/TBD7rb+D5Bvvc0Wxjr4OP70x+LlnwuRDjDtzBwJbNUblh2grlVArw==
dependencies:
web3-bzz "1.3.0"
web3-core "1.3.0"
web3-eth "1.3.0"
web3-eth-personal "1.3.0"
web3-net "1.3.0"
web3-shh "1.3.0"
web3-utils "1.3.0"
webidl-conversions@^4.0.2: webidl-conversions@^4.0.2:
version "4.0.2" version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@ -21625,6 +22048,18 @@ websocket@^1.0.28:
typedarray-to-buffer "^3.1.5" typedarray-to-buffer "^3.1.5"
yaeti "^0.0.6" yaeti "^0.0.6"
websocket@^1.0.32:
version "1.0.32"
resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1"
integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q==
dependencies:
bufferutil "^4.0.1"
debug "^2.2.0"
es5-ext "^0.10.50"
typedarray-to-buffer "^3.1.5"
utf-8-validate "^5.0.2"
yaeti "^0.0.6"
"websocket@git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible": "websocket@git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible":
version "1.0.26" version "1.0.26"
resolved "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" resolved "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2"