mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Replace abi-decoder with ethers (#9290)
* replace abi-decoder with ethers * handle transaction parsing errors * update token param getter function names * add docstrings
This commit is contained in:
parent
e08a55c8bc
commit
3aaa41ef44
@ -5,7 +5,7 @@ import Transaction from 'ethereumjs-tx'
|
|||||||
import EthQuery from 'ethjs-query'
|
import EthQuery from 'ethjs-query'
|
||||||
import { ethErrors } from 'eth-json-rpc-errors'
|
import { ethErrors } from 'eth-json-rpc-errors'
|
||||||
import abi from 'human-standard-token-abi'
|
import abi from 'human-standard-token-abi'
|
||||||
import abiDecoder from 'abi-decoder'
|
import { ethers } from 'ethers'
|
||||||
import NonceTracker from 'nonce-tracker'
|
import NonceTracker from 'nonce-tracker'
|
||||||
import log from 'loglevel'
|
import log from 'loglevel'
|
||||||
import {
|
import {
|
||||||
@ -30,7 +30,7 @@ import {
|
|||||||
TRANSACTION_STATUS_APPROVED,
|
TRANSACTION_STATUS_APPROVED,
|
||||||
} from './enums'
|
} from './enums'
|
||||||
|
|
||||||
abiDecoder.addABI(abi)
|
const hstInterface = new ethers.utils.Interface(abi)
|
||||||
|
|
||||||
const SIMPLE_GAS_COST = '0x5208' // Hex for 21000, cost of a simple send.
|
const SIMPLE_GAS_COST = '0x5208' // Hex for 21000, cost of a simple send.
|
||||||
const MAX_MEMSTORE_TX_LIST_SIZE = 100 // Number of transactions (by unique nonces) to keep in memory
|
const MAX_MEMSTORE_TX_LIST_SIZE = 100 // Number of transactions (by unique nonces) to keep in memory
|
||||||
@ -698,7 +698,13 @@ export default class TransactionController extends EventEmitter {
|
|||||||
*/
|
*/
|
||||||
async _determineTransactionCategory (txParams) {
|
async _determineTransactionCategory (txParams) {
|
||||||
const { data, to } = txParams
|
const { data, to } = txParams
|
||||||
const { name } = (data && abiDecoder.decodeMethod(data)) || {}
|
let name
|
||||||
|
try {
|
||||||
|
name = data && hstInterface.parseTransaction({ data }).name
|
||||||
|
} catch (error) {
|
||||||
|
log.debug('Failed to parse transaction data.', error, data)
|
||||||
|
}
|
||||||
|
|
||||||
const tokenMethodName = [
|
const tokenMethodName = [
|
||||||
TOKEN_METHOD_APPROVE,
|
TOKEN_METHOD_APPROVE,
|
||||||
TOKEN_METHOD_TRANSFER,
|
TOKEN_METHOD_TRANSFER,
|
||||||
|
@ -78,7 +78,6 @@
|
|||||||
"@sentry/browser": "^5.11.1",
|
"@sentry/browser": "^5.11.1",
|
||||||
"@sentry/integrations": "^5.11.1",
|
"@sentry/integrations": "^5.11.1",
|
||||||
"@zxing/library": "^0.8.0",
|
"@zxing/library": "^0.8.0",
|
||||||
"abi-decoder": "^1.2.0",
|
|
||||||
"abortcontroller-polyfill": "^1.4.0",
|
"abortcontroller-polyfill": "^1.4.0",
|
||||||
"await-semaphore": "^0.1.1",
|
"await-semaphore": "^0.1.1",
|
||||||
"bignumber.js": "^4.1.0",
|
"bignumber.js": "^4.1.0",
|
||||||
@ -112,6 +111,7 @@
|
|||||||
"ethereumjs-tx": "1.3.7",
|
"ethereumjs-tx": "1.3.7",
|
||||||
"ethereumjs-util": "5.1.0",
|
"ethereumjs-util": "5.1.0",
|
||||||
"ethereumjs-wallet": "^0.6.0",
|
"ethereumjs-wallet": "^0.6.0",
|
||||||
|
"ethers": "^5.0.8",
|
||||||
"ethjs": "^0.4.0",
|
"ethjs": "^0.4.0",
|
||||||
"ethjs-contract": "^0.2.3",
|
"ethjs-contract": "^0.2.3",
|
||||||
"ethjs-ens": "^2.0.0",
|
"ethjs-ens": "^2.0.0",
|
||||||
|
@ -368,7 +368,6 @@ export function setTransactionToConfirm (transactionId) {
|
|||||||
|
|
||||||
const tokenData = getTokenData(data)
|
const tokenData = getTokenData(data)
|
||||||
dispatch(updateTokenData(tokenData))
|
dispatch(updateTokenData(tokenData))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (txParams.nonce) {
|
if (txParams.nonce) {
|
||||||
|
@ -137,14 +137,30 @@ export function calcTokenValue (value, decimals) {
|
|||||||
return new BigNumber(String(value)).times(multiplier)
|
return new BigNumber(String(value)).times(multiplier)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getTokenValue (tokenParams = []) {
|
/**
|
||||||
const valueData = tokenParams.find((param) => param.name === '_value')
|
* Attempts to get the address parameter of the given token transaction data
|
||||||
return valueData && valueData.value
|
* (i.e. function call) per the Human Standard Token ABI, in the following
|
||||||
|
* order:
|
||||||
|
* - The '_to' parameter, if present
|
||||||
|
* - The first parameter, if present
|
||||||
|
*
|
||||||
|
* @param {Object} tokenData - ethers Interface token data.
|
||||||
|
* @returns {string | undefined} A lowercase address string.
|
||||||
|
*/
|
||||||
|
export function getTokenAddressParam (tokenData = {}) {
|
||||||
|
const value = tokenData?.args?.['_to'] || tokenData?.args?.[0]
|
||||||
|
return value?.toString().toLowerCase()
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getTokenToAddress (tokenParams = []) {
|
/**
|
||||||
const toAddressData = tokenParams.find((param) => param.name === '_to')
|
* Gets the '_value' parameter of the given token transaction data
|
||||||
return toAddressData ? toAddressData.value : tokenParams[0].value
|
* (i.e function call) per the Human Standard Token ABI, if present.
|
||||||
|
*
|
||||||
|
* @param {Object} tokenData - ethers Interface token data.
|
||||||
|
* @returns {string | undefined} A decimal string value.
|
||||||
|
*/
|
||||||
|
export function getTokenValueParam (tokenData = {}) {
|
||||||
|
return tokenData?.args?.['_value']?.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import ethUtil from 'ethereumjs-util'
|
import ethUtil from 'ethereumjs-util'
|
||||||
import MethodRegistry from 'eth-method-registry'
|
import MethodRegistry from 'eth-method-registry'
|
||||||
import abi from 'human-standard-token-abi'
|
import abi from 'human-standard-token-abi'
|
||||||
import abiDecoder from 'abi-decoder'
|
import { ethers } from 'ethers'
|
||||||
import log from 'loglevel'
|
import log from 'loglevel'
|
||||||
import {
|
import {
|
||||||
TRANSACTION_TYPE_CANCEL,
|
TRANSACTION_TYPE_CANCEL,
|
||||||
@ -29,10 +29,31 @@ import fetchWithCache from './fetch-with-cache'
|
|||||||
|
|
||||||
import { addCurrencies } from './conversion-util'
|
import { addCurrencies } from './conversion-util'
|
||||||
|
|
||||||
abiDecoder.addABI(abi)
|
const hstInterface = new ethers.utils.Interface(abi)
|
||||||
|
|
||||||
export function getTokenData (data = '') {
|
/**
|
||||||
return abiDecoder.decodeMethod(data)
|
* @typedef EthersContractCall
|
||||||
|
* @type object
|
||||||
|
* @property {any[]} args - The args/params to the function call.
|
||||||
|
* An array-like object with numerical and string indices.
|
||||||
|
* @property {string} name - The name of the function.
|
||||||
|
* @property {string} signature - The function signature.
|
||||||
|
* @property {string} sighash - The function signature hash.
|
||||||
|
* @property {EthersBigNumber} value - The ETH value associated with the call.
|
||||||
|
* @property {FunctionFragment} functionFragment - The Ethers function fragment
|
||||||
|
* representation of the function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {EthersContractCall | undefined}
|
||||||
|
*/
|
||||||
|
export function getTokenData (data) {
|
||||||
|
try {
|
||||||
|
return hstInterface.parseTransaction({ data })
|
||||||
|
} catch (error) {
|
||||||
|
log.debug('Failed to parse transaction data.', error, data)
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getMethodFrom4Byte (fourBytePrefix) {
|
async function getMethodFrom4Byte (fourBytePrefix) {
|
||||||
|
@ -6,13 +6,12 @@ describe('Transactions utils', function () {
|
|||||||
it('should return token data', function () {
|
it('should return token data', function () {
|
||||||
const tokenData = utils.getTokenData('0xa9059cbb00000000000000000000000050a9d56c2b8ba9a5c7f2c08c3d26e0499f23a7060000000000000000000000000000000000000000000000000000000000004e20')
|
const tokenData = utils.getTokenData('0xa9059cbb00000000000000000000000050a9d56c2b8ba9a5c7f2c08c3d26e0499f23a7060000000000000000000000000000000000000000000000000000000000004e20')
|
||||||
assert.ok(tokenData)
|
assert.ok(tokenData)
|
||||||
const { name, params } = tokenData
|
const { name, args } = tokenData
|
||||||
assert.equal(name, 'transfer')
|
assert.equal(name, 'transfer')
|
||||||
const [to, value] = params
|
const to = args._to
|
||||||
assert.equal(to.name, '_to')
|
const value = args._value.toString()
|
||||||
assert.equal(to.type, 'address')
|
assert.equal(to, '0x50A9D56C2B8BA9A5c7f2C08C3d26E0499F23a706')
|
||||||
assert.equal(value.name, '_value')
|
assert.equal(value, '20000')
|
||||||
assert.equal(value.type, 'uint256')
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should not throw errors when called without arguments', function () {
|
it('should not throw errors when called without arguments', function () {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import assert from 'assert'
|
import assert from 'assert'
|
||||||
|
import { ethers } from 'ethers'
|
||||||
import { renderHook } from '@testing-library/react-hooks'
|
import { renderHook } from '@testing-library/react-hooks'
|
||||||
import { useTokenData } from '../useTokenData'
|
import { useTokenData } from '../useTokenData'
|
||||||
|
|
||||||
@ -7,17 +8,9 @@ const tests = [
|
|||||||
data: '0xa9059cbb000000000000000000000000ffe5bc4e8f1f969934d773fa67da095d2e491a970000000000000000000000000000000000000000000000000000000000003a98',
|
data: '0xa9059cbb000000000000000000000000ffe5bc4e8f1f969934d773fa67da095d2e491a970000000000000000000000000000000000000000000000000000000000003a98',
|
||||||
tokenData: {
|
tokenData: {
|
||||||
'name': 'transfer',
|
'name': 'transfer',
|
||||||
'params': [
|
'args': [
|
||||||
{
|
'0xffe5bc4e8f1f969934d773fa67da095d2e491a97',
|
||||||
'name': '_to',
|
ethers.BigNumber.from(15000),
|
||||||
'value': '0xffe5bc4e8f1f969934d773fa67da095d2e491a97',
|
|
||||||
'type': 'address',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': '_value',
|
|
||||||
'value': '15000',
|
|
||||||
'type': 'uint256',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -25,17 +18,9 @@ const tests = [
|
|||||||
data: '0xa9059cbb000000000000000000000000ffe5bc4e8f1f969934d773fa67da095d2e491a9700000000000000000000000000000000000000000000000000000000000061a8',
|
data: '0xa9059cbb000000000000000000000000ffe5bc4e8f1f969934d773fa67da095d2e491a9700000000000000000000000000000000000000000000000000000000000061a8',
|
||||||
tokenData: {
|
tokenData: {
|
||||||
'name': 'transfer',
|
'name': 'transfer',
|
||||||
'params': [
|
'args': [
|
||||||
{
|
'0xffe5bc4e8f1f969934d773fa67da095d2e491a97',
|
||||||
'name': '_to',
|
ethers.BigNumber.from(25000),
|
||||||
'value': '0xffe5bc4e8f1f969934d773fa67da095d2e491a97',
|
|
||||||
'type': 'address',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': '_value',
|
|
||||||
'value': '25000',
|
|
||||||
'type': 'uint256',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -43,17 +28,9 @@ const tests = [
|
|||||||
data: '0xa9059cbb000000000000000000000000ffe5bc4e8f1f969934d773fa67da095d2e491a970000000000000000000000000000000000000000000000000000000000002710',
|
data: '0xa9059cbb000000000000000000000000ffe5bc4e8f1f969934d773fa67da095d2e491a970000000000000000000000000000000000000000000000000000000000002710',
|
||||||
tokenData: {
|
tokenData: {
|
||||||
'name': 'transfer',
|
'name': 'transfer',
|
||||||
'params': [
|
'args': [
|
||||||
{
|
'0xffe5bc4e8f1f969934d773fa67da095d2e491a97',
|
||||||
'name': '_to',
|
ethers.BigNumber.from(10000),
|
||||||
'value': '0xffe5bc4e8f1f969934d773fa67da095d2e491a97',
|
|
||||||
'type': 'address',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'name': '_value',
|
|
||||||
'value': '10000',
|
|
||||||
'type': 'uint256',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -67,10 +44,16 @@ describe('useTokenData', function () {
|
|||||||
tests.forEach((test) => {
|
tests.forEach((test) => {
|
||||||
const testTitle = test.tokenData === null
|
const testTitle = test.tokenData === null
|
||||||
? `should return null when no data provided`
|
? `should return null when no data provided`
|
||||||
: `should return properly decoded data with _value ${test.tokenData.params[1].value}`
|
: `should return properly decoded data with _value ${test.tokenData.args[1].value}`
|
||||||
it(testTitle, function () {
|
it(testTitle, function () {
|
||||||
const { result } = renderHook(() => useTokenData(test.data))
|
const { result } = renderHook(() => useTokenData(test.data))
|
||||||
assert.deepEqual(result.current, test.tokenData)
|
if (test.tokenData) {
|
||||||
|
assert.equal(result.current.name, test.tokenData.name)
|
||||||
|
assert.equal(result.current.args[0].toLowerCase(), test.tokenData.args[0])
|
||||||
|
assert.ok(test.tokenData.args[1].eq(result.current.args[1]))
|
||||||
|
} else {
|
||||||
|
assert.equal(result.current, test.tokenData)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -12,7 +12,7 @@ const tests = [
|
|||||||
decimals: 18,
|
decimals: 18,
|
||||||
},
|
},
|
||||||
tokenData: {
|
tokenData: {
|
||||||
params: 'decoded-params1',
|
args: 'decoded-params1',
|
||||||
},
|
},
|
||||||
tokenValue: '1000000000000000000',
|
tokenValue: '1000000000000000000',
|
||||||
displayValue: '1',
|
displayValue: '1',
|
||||||
@ -23,7 +23,7 @@ const tests = [
|
|||||||
decimals: 18,
|
decimals: 18,
|
||||||
},
|
},
|
||||||
tokenData: {
|
tokenData: {
|
||||||
params: 'decoded-params2',
|
args: 'decoded-params2',
|
||||||
},
|
},
|
||||||
tokenValue: '10000000000000000000',
|
tokenValue: '10000000000000000000',
|
||||||
displayValue: '10',
|
displayValue: '10',
|
||||||
@ -34,7 +34,7 @@ const tests = [
|
|||||||
decimals: 18,
|
decimals: 18,
|
||||||
},
|
},
|
||||||
tokenData: {
|
tokenData: {
|
||||||
params: 'decoded-params3',
|
args: 'decoded-params3',
|
||||||
},
|
},
|
||||||
tokenValue: '1500000000000000000',
|
tokenValue: '1500000000000000000',
|
||||||
displayValue: '1.5',
|
displayValue: '1.5',
|
||||||
@ -45,7 +45,7 @@ const tests = [
|
|||||||
decimals: 18,
|
decimals: 18,
|
||||||
},
|
},
|
||||||
tokenData: {
|
tokenData: {
|
||||||
params: 'decoded-params4',
|
args: 'decoded-params4',
|
||||||
},
|
},
|
||||||
tokenValue: '1756000000000000000',
|
tokenValue: '1756000000000000000',
|
||||||
displayValue: '1.756',
|
displayValue: '1.756',
|
||||||
@ -56,7 +56,7 @@ const tests = [
|
|||||||
decimals: 18,
|
decimals: 18,
|
||||||
},
|
},
|
||||||
tokenData: {
|
tokenData: {
|
||||||
params: 'decoded-params5',
|
args: 'decoded-params5',
|
||||||
},
|
},
|
||||||
tokenValue: '25500000000000000000',
|
tokenValue: '25500000000000000000',
|
||||||
displayValue: '25.5',
|
displayValue: '25.5',
|
||||||
@ -67,7 +67,7 @@ const tests = [
|
|||||||
decimals: 6,
|
decimals: 6,
|
||||||
},
|
},
|
||||||
tokenData: {
|
tokenData: {
|
||||||
params: 'decoded-params6',
|
args: 'decoded-params6',
|
||||||
},
|
},
|
||||||
tokenValue: '1000000',
|
tokenValue: '1000000',
|
||||||
displayValue: '1',
|
displayValue: '1',
|
||||||
@ -78,7 +78,7 @@ const tests = [
|
|||||||
decimals: 6,
|
decimals: 6,
|
||||||
},
|
},
|
||||||
tokenData: {
|
tokenData: {
|
||||||
params: 'decoded-params7',
|
args: 'decoded-params7',
|
||||||
},
|
},
|
||||||
tokenValue: '10000000',
|
tokenValue: '10000000',
|
||||||
displayValue: '10',
|
displayValue: '10',
|
||||||
@ -89,7 +89,7 @@ const tests = [
|
|||||||
decimals: 6,
|
decimals: 6,
|
||||||
},
|
},
|
||||||
tokenData: {
|
tokenData: {
|
||||||
params: 'decoded-params8',
|
args: 'decoded-params8',
|
||||||
},
|
},
|
||||||
tokenValue: '1500000',
|
tokenValue: '1500000',
|
||||||
displayValue: '1.5',
|
displayValue: '1.5',
|
||||||
@ -100,7 +100,7 @@ const tests = [
|
|||||||
decimals: 6,
|
decimals: 6,
|
||||||
},
|
},
|
||||||
tokenData: {
|
tokenData: {
|
||||||
params: 'decoded-params9',
|
args: 'decoded-params9',
|
||||||
},
|
},
|
||||||
tokenValue: '1756000',
|
tokenValue: '1756000',
|
||||||
displayValue: '1.756',
|
displayValue: '1.756',
|
||||||
@ -111,7 +111,7 @@ const tests = [
|
|||||||
decimals: 6,
|
decimals: 6,
|
||||||
},
|
},
|
||||||
tokenData: {
|
tokenData: {
|
||||||
params: 'decoded-params10',
|
args: 'decoded-params10',
|
||||||
},
|
},
|
||||||
tokenValue: '25500000',
|
tokenValue: '25500000',
|
||||||
displayValue: '25.5',
|
displayValue: '25.5',
|
||||||
@ -122,7 +122,7 @@ describe('useTokenDisplayValue', function () {
|
|||||||
tests.forEach((test, idx) => {
|
tests.forEach((test, idx) => {
|
||||||
describe(`when input is decimals: ${test.token.decimals} and value: ${test.tokenValue}`, function () {
|
describe(`when input is decimals: ${test.token.decimals} and value: ${test.tokenValue}`, function () {
|
||||||
it(`should return ${test.displayValue} as displayValue`, function () {
|
it(`should return ${test.displayValue} as displayValue`, function () {
|
||||||
const getTokenValueStub = sinon.stub(tokenUtil, 'getTokenValue')
|
const getTokenValueStub = sinon.stub(tokenUtil, 'getTokenValueParam')
|
||||||
const getTokenDataStub = sinon.stub(txUtil, 'getTokenData')
|
const getTokenDataStub = sinon.stub(txUtil, 'getTokenData')
|
||||||
getTokenDataStub.callsFake(() => test.tokenData)
|
getTokenDataStub.callsFake(() => test.tokenData)
|
||||||
getTokenValueStub.callsFake(() => test.tokenValue)
|
getTokenValueStub.callsFake(() => test.tokenValue)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { useMemo } from 'react'
|
import { useMemo } from 'react'
|
||||||
import { getTokenValue, calcTokenAmount } from '../helpers/utils/token-util'
|
import { getTokenValueParam, calcTokenAmount } from '../helpers/utils/token-util'
|
||||||
import { useTokenData } from './useTokenData'
|
import { useTokenData } from './useTokenData'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,14 +34,14 @@ export function useTokenDisplayValue (transactionData, token, isTokenTransaction
|
|||||||
// and a token object has been provided
|
// and a token object has been provided
|
||||||
token &&
|
token &&
|
||||||
// and we are able to parse the token details from the raw data
|
// and we are able to parse the token details from the raw data
|
||||||
tokenData?.params?.length,
|
tokenData?.args?.length,
|
||||||
)
|
)
|
||||||
|
|
||||||
const displayValue = useMemo(() => {
|
const displayValue = useMemo(() => {
|
||||||
if (!shouldCalculateTokenValue) {
|
if (!shouldCalculateTokenValue) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
const tokenValue = getTokenValue(tokenData.params)
|
const tokenValue = getTokenValueParam(tokenData)
|
||||||
return calcTokenAmount(tokenValue, token.decimals).toString()
|
return calcTokenAmount(tokenValue, token.decimals).toString()
|
||||||
}, [shouldCalculateTokenValue, tokenData, token])
|
}, [shouldCalculateTokenValue, tokenData, token])
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import { getKnownMethodData } from '../selectors/selectors'
|
|||||||
import { getTransactionActionKey, getStatusKey } from '../helpers/utils/transactions.util'
|
import { getTransactionActionKey, getStatusKey } from '../helpers/utils/transactions.util'
|
||||||
import { camelCaseToCapitalize } from '../helpers/utils/common.util'
|
import { camelCaseToCapitalize } from '../helpers/utils/common.util'
|
||||||
import { PRIMARY, SECONDARY } from '../helpers/constants/common'
|
import { PRIMARY, SECONDARY } from '../helpers/constants/common'
|
||||||
import { getTokenToAddress } from '../helpers/utils/token-util'
|
import { getTokenAddressParam } from '../helpers/utils/token-util'
|
||||||
import { formatDateWithYearContext, shortenAddress, stripHttpSchemes } from '../helpers/utils/util'
|
import { formatDateWithYearContext, shortenAddress, stripHttpSchemes } from '../helpers/utils/util'
|
||||||
import {
|
import {
|
||||||
CONTRACT_INTERACTION_KEY,
|
CONTRACT_INTERACTION_KEY,
|
||||||
@ -122,7 +122,7 @@ export function useTransactionDisplayData (transactionGroup) {
|
|||||||
} else if (transactionCategory === TOKEN_METHOD_TRANSFER_FROM || transactionCategory === TOKEN_METHOD_TRANSFER) {
|
} else if (transactionCategory === TOKEN_METHOD_TRANSFER_FROM || transactionCategory === TOKEN_METHOD_TRANSFER) {
|
||||||
category = TRANSACTION_CATEGORY_SEND
|
category = TRANSACTION_CATEGORY_SEND
|
||||||
title = t('sendSpecifiedTokens', [token?.symbol || t('token')])
|
title = t('sendSpecifiedTokens', [token?.symbol || t('token')])
|
||||||
recipientAddress = getTokenToAddress(tokenData.params)
|
recipientAddress = getTokenAddressParam(tokenData)
|
||||||
subtitle = t('toAddress', [shortenAddress(recipientAddress)])
|
subtitle = t('toAddress', [shortenAddress(recipientAddress)])
|
||||||
} else if (transactionCategory === SEND_ETHER_ACTION_KEY) {
|
} else if (transactionCategory === SEND_ETHER_ACTION_KEY) {
|
||||||
category = TRANSACTION_CATEGORY_SEND
|
category = TRANSACTION_CATEGORY_SEND
|
||||||
|
@ -8,8 +8,8 @@ import {
|
|||||||
} from '../../helpers/utils/transactions.util'
|
} from '../../helpers/utils/transactions.util'
|
||||||
import {
|
import {
|
||||||
calcTokenAmount,
|
calcTokenAmount,
|
||||||
getTokenToAddress,
|
getTokenAddressParam,
|
||||||
getTokenValue,
|
getTokenValueParam,
|
||||||
} from '../../helpers/utils/token-util'
|
} from '../../helpers/utils/token-util'
|
||||||
import { useTokenTracker } from '../../hooks/useTokenTracker'
|
import { useTokenTracker } from '../../hooks/useTokenTracker'
|
||||||
import { getTokens } from '../../ducks/metamask/metamask'
|
import { getTokens } from '../../ducks/metamask/metamask'
|
||||||
@ -54,8 +54,8 @@ export default function ConfirmApprove () {
|
|||||||
const tokenSymbol = currentToken?.symbol
|
const tokenSymbol = currentToken?.symbol
|
||||||
const decimals = Number(currentToken?.decimals)
|
const decimals = Number(currentToken?.decimals)
|
||||||
const tokenData = getTokenData(data)
|
const tokenData = getTokenData(data)
|
||||||
const tokenValue = tokenData && getTokenValue(tokenData.params)
|
const tokenValue = getTokenValueParam(tokenData)
|
||||||
const toAddress = tokenData && getTokenToAddress(tokenData.params)
|
const toAddress = getTokenAddressParam(tokenData)
|
||||||
const tokenAmount = tokenData && calcTokenAmount(tokenValue, decimals).toString(10)
|
const tokenAmount = tokenData && calcTokenAmount(tokenValue, decimals).toString(10)
|
||||||
|
|
||||||
const [customPermissionAmount, setCustomPermissionAmount] = useState('')
|
const [customPermissionAmount, setCustomPermissionAmount] = useState('')
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { decimalToHex } from '../../helpers/utils/conversions.util'
|
import { decimalToHex } from '../../helpers/utils/conversions.util'
|
||||||
import { calcTokenValue } from '../../helpers/utils/token-util'
|
import { calcTokenValue, getTokenAddressParam } from '../../helpers/utils/token-util'
|
||||||
import { getTokenData } from '../../helpers/utils/transactions.util'
|
import { getTokenData } from '../../helpers/utils/transactions.util'
|
||||||
|
|
||||||
export function getCustomTxParamsData (data, { customPermissionAmount, decimals }) {
|
export function getCustomTxParamsData (data, { customPermissionAmount, decimals }) {
|
||||||
@ -10,7 +10,7 @@ export function getCustomTxParamsData (data, { customPermissionAmount, decimals
|
|||||||
} else if (tokenData.name !== 'approve') {
|
} else if (tokenData.name !== 'approve') {
|
||||||
throw new Error(`Invalid data; should be 'approve' method, but instead is '${tokenData.name}'`)
|
throw new Error(`Invalid data; should be 'approve' method, but instead is '${tokenData.name}'`)
|
||||||
}
|
}
|
||||||
let spender = tokenData.params[0].value
|
let spender = getTokenAddressParam(tokenData)
|
||||||
if (spender.startsWith('0x')) {
|
if (spender.startsWith('0x')) {
|
||||||
spender = spender.substring(2)
|
spender = spender.substring(2)
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import { withRouter } from 'react-router-dom'
|
|||||||
import { clearConfirmTransaction } from '../../ducks/confirm-transaction/confirm-transaction.duck'
|
import { clearConfirmTransaction } from '../../ducks/confirm-transaction/confirm-transaction.duck'
|
||||||
import { updateSend, showSendTokenPage } from '../../store/actions'
|
import { updateSend, showSendTokenPage } from '../../store/actions'
|
||||||
import { conversionUtil } from '../../helpers/utils/conversion-util'
|
import { conversionUtil } from '../../helpers/utils/conversion-util'
|
||||||
|
import { getTokenValueParam, getTokenAddressParam } from '../../helpers/utils/token-util'
|
||||||
import { sendTokenTokenAmountAndToAddressSelector } from '../../selectors'
|
import { sendTokenTokenAmountAndToAddressSelector } from '../../selectors'
|
||||||
import ConfirmSendToken from './confirm-send-token.component'
|
import ConfirmSendToken from './confirm-send-token.component'
|
||||||
|
|
||||||
@ -29,9 +30,8 @@ const mapDispatchToProps = (dispatch) => {
|
|||||||
} = {},
|
} = {},
|
||||||
} = txData
|
} = txData
|
||||||
|
|
||||||
const { params = [] } = tokenData
|
const to = getTokenValueParam(tokenData)
|
||||||
const { value: to } = params[0] || {}
|
const tokenAmountInDec = getTokenAddressParam(tokenData)
|
||||||
const { value: tokenAmountInDec } = params[1] || {}
|
|
||||||
|
|
||||||
const tokenAmountInHex = conversionUtil(tokenAmountInDec, {
|
const tokenAmountInHex = conversionUtil(tokenAmountInDec, {
|
||||||
fromNumericBase: 'dec',
|
fromNumericBase: 'dec',
|
||||||
|
@ -11,8 +11,8 @@ import {
|
|||||||
} from '../../helpers/utils/transactions.util'
|
} from '../../helpers/utils/transactions.util'
|
||||||
import {
|
import {
|
||||||
calcTokenAmount,
|
calcTokenAmount,
|
||||||
getTokenToAddress,
|
getTokenAddressParam,
|
||||||
getTokenValue,
|
getTokenValueParam,
|
||||||
} from '../../helpers/utils/token-util'
|
} from '../../helpers/utils/token-util'
|
||||||
import ConfirmTokenTransactionBase from './confirm-token-transaction-base.component'
|
import ConfirmTokenTransactionBase from './confirm-token-transaction-base.component'
|
||||||
|
|
||||||
@ -42,8 +42,8 @@ const mapStateToProps = (state, ownProps) => {
|
|||||||
const { decimals, symbol: tokenSymbol } = currentToken || {}
|
const { decimals, symbol: tokenSymbol } = currentToken || {}
|
||||||
|
|
||||||
const tokenData = getTokenData(data)
|
const tokenData = getTokenData(data)
|
||||||
const tokenValue = tokenData && getTokenValue(tokenData.params)
|
const tokenValue = getTokenValueParam(tokenData)
|
||||||
const toAddress = tokenData && getTokenToAddress(tokenData.params)
|
const toAddress = getTokenAddressParam(tokenData)
|
||||||
const tokenAmount = tokenData && calcTokenAmount(tokenValue, decimals).toNumber()
|
const tokenAmount = tokenData && calcTokenAmount(tokenValue, decimals).toNumber()
|
||||||
const contractExchangeRate = contractExchangeRateSelector(state)
|
const contractExchangeRate = contractExchangeRateSelector(state)
|
||||||
|
|
||||||
|
@ -135,9 +135,9 @@ const tokenDecimalsSelector = createSelector(
|
|||||||
(tokenProps) => tokenProps && tokenProps.tokenDecimals,
|
(tokenProps) => tokenProps && tokenProps.tokenDecimals,
|
||||||
)
|
)
|
||||||
|
|
||||||
const tokenDataParamsSelector = createSelector(
|
const tokenDataArgsSelector = createSelector(
|
||||||
tokenDataSelector,
|
tokenDataSelector,
|
||||||
(tokenData) => (tokenData && tokenData.params) || [],
|
(tokenData) => (tokenData && tokenData.args) || [],
|
||||||
)
|
)
|
||||||
|
|
||||||
const txParamsSelector = createSelector(
|
const txParamsSelector = createSelector(
|
||||||
@ -155,17 +155,17 @@ const TOKEN_PARAM_TO = '_to'
|
|||||||
const TOKEN_PARAM_VALUE = '_value'
|
const TOKEN_PARAM_VALUE = '_value'
|
||||||
|
|
||||||
export const tokenAmountAndToAddressSelector = createSelector(
|
export const tokenAmountAndToAddressSelector = createSelector(
|
||||||
tokenDataParamsSelector,
|
tokenDataArgsSelector,
|
||||||
tokenDecimalsSelector,
|
tokenDecimalsSelector,
|
||||||
(params, tokenDecimals) => {
|
(args, tokenDecimals) => {
|
||||||
let toAddress = ''
|
let toAddress = ''
|
||||||
let tokenAmount = 0
|
let tokenAmount = 0
|
||||||
|
|
||||||
if (params && params.length) {
|
if (args && args.length) {
|
||||||
const toParam = params.find((param) => param.name === TOKEN_PARAM_TO)
|
const toParam = args[TOKEN_PARAM_TO]
|
||||||
const valueParam = params.find((param) => param.name === TOKEN_PARAM_VALUE)
|
const valueParam = args[TOKEN_PARAM_VALUE]
|
||||||
toAddress = toParam ? toParam.value : params[0].value
|
toAddress = toParam || args[0]
|
||||||
const value = valueParam ? Number(valueParam.value) : Number(params[1].value)
|
const value = valueParam ? valueParam.toNumber() : args[1].toNumber()
|
||||||
|
|
||||||
if (tokenDecimals) {
|
if (tokenDecimals) {
|
||||||
tokenAmount = calcTokenAmount(value, tokenDecimals).toNumber()
|
tokenAmount = calcTokenAmount(value, tokenDecimals).toNumber()
|
||||||
@ -182,15 +182,15 @@ export const tokenAmountAndToAddressSelector = createSelector(
|
|||||||
)
|
)
|
||||||
|
|
||||||
export const approveTokenAmountAndToAddressSelector = createSelector(
|
export const approveTokenAmountAndToAddressSelector = createSelector(
|
||||||
tokenDataParamsSelector,
|
tokenDataArgsSelector,
|
||||||
tokenDecimalsSelector,
|
tokenDecimalsSelector,
|
||||||
(params, tokenDecimals) => {
|
(args, tokenDecimals) => {
|
||||||
let toAddress = ''
|
let toAddress = ''
|
||||||
let tokenAmount = 0
|
let tokenAmount = 0
|
||||||
|
|
||||||
if (params && params.length) {
|
if (args && args.length) {
|
||||||
toAddress = params.find((param) => param.name === TOKEN_PARAM_SPENDER).value
|
toAddress = args[TOKEN_PARAM_SPENDER]
|
||||||
const value = Number(params.find((param) => param.name === TOKEN_PARAM_VALUE).value)
|
const value = args[TOKEN_PARAM_VALUE].toNumber()
|
||||||
|
|
||||||
if (tokenDecimals) {
|
if (tokenDecimals) {
|
||||||
tokenAmount = calcTokenAmount(value, tokenDecimals).toNumber()
|
tokenAmount = calcTokenAmount(value, tokenDecimals).toNumber()
|
||||||
@ -207,15 +207,15 @@ export const approveTokenAmountAndToAddressSelector = createSelector(
|
|||||||
)
|
)
|
||||||
|
|
||||||
export const sendTokenTokenAmountAndToAddressSelector = createSelector(
|
export const sendTokenTokenAmountAndToAddressSelector = createSelector(
|
||||||
tokenDataParamsSelector,
|
tokenDataArgsSelector,
|
||||||
tokenDecimalsSelector,
|
tokenDecimalsSelector,
|
||||||
(params, tokenDecimals) => {
|
(args, tokenDecimals) => {
|
||||||
let toAddress = ''
|
let toAddress = ''
|
||||||
let tokenAmount = 0
|
let tokenAmount = 0
|
||||||
|
|
||||||
if (params && params.length) {
|
if (args && args.length) {
|
||||||
toAddress = params.find((param) => param.name === TOKEN_PARAM_TO).value
|
toAddress = args[TOKEN_PARAM_TO]
|
||||||
let value = Number(params.find((param) => param.name === TOKEN_PARAM_VALUE).value)
|
let value = args[TOKEN_PARAM_VALUE].toNumber()
|
||||||
|
|
||||||
if (tokenDecimals) {
|
if (tokenDecimals) {
|
||||||
value = calcTokenAmount(value, tokenDecimals).toNumber()
|
value = calcTokenAmount(value, tokenDecimals).toNumber()
|
||||||
|
@ -8,6 +8,15 @@ import {
|
|||||||
conversionRateSelector,
|
conversionRateSelector,
|
||||||
} from '../confirm-transaction'
|
} from '../confirm-transaction'
|
||||||
|
|
||||||
|
const getEthersArrayLikeFromObj = (obj) => {
|
||||||
|
const arr = []
|
||||||
|
Object.keys(obj).forEach((key) => {
|
||||||
|
arr.push([obj[key]])
|
||||||
|
arr[key] = obj[key]
|
||||||
|
})
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
describe('Confirm Transaction Selector', function () {
|
describe('Confirm Transaction Selector', function () {
|
||||||
|
|
||||||
describe('unconfirmedTransactionsCountSelector', function () {
|
describe('unconfirmedTransactionsCountSelector', function () {
|
||||||
@ -32,7 +41,6 @@ describe('Confirm Transaction Selector', function () {
|
|||||||
it('returns number of txs in unapprovedTxs state with the same network plus unapproved signing method counts', function () {
|
it('returns number of txs in unapprovedTxs state with the same network plus unapproved signing method counts', function () {
|
||||||
assert.equal(unconfirmedTransactionsCountSelector(state), 4)
|
assert.equal(unconfirmedTransactionsCountSelector(state), 4)
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('tokenAmountAndToAddressSelector', function () {
|
describe('tokenAmountAndToAddressSelector', function () {
|
||||||
@ -41,18 +49,10 @@ describe('Confirm Transaction Selector', function () {
|
|||||||
confirmTransaction: {
|
confirmTransaction: {
|
||||||
tokenData: {
|
tokenData: {
|
||||||
name: 'transfer',
|
name: 'transfer',
|
||||||
params: [
|
args: getEthersArrayLikeFromObj({
|
||||||
{
|
'_to': '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
||||||
name: '_to',
|
'_value': { toNumber: () => '1' },
|
||||||
value: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
}),
|
||||||
type: 'address',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '_value',
|
|
||||||
value: '1',
|
|
||||||
type: 'uint256',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
tokenProps: {
|
tokenProps: {
|
||||||
tokenDecimals: '2',
|
tokenDecimals: '2',
|
||||||
@ -65,7 +65,6 @@ describe('Confirm Transaction Selector', function () {
|
|||||||
assert.deepEqual(tokenAmountAndToAddressSelector(state),
|
assert.deepEqual(tokenAmountAndToAddressSelector(state),
|
||||||
{ toAddress: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', tokenAmount: 0.01 })
|
{ toAddress: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', tokenAmount: 0.01 })
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('approveTokenAmountAndToAddressSelector', function () {
|
describe('approveTokenAmountAndToAddressSelector', function () {
|
||||||
@ -74,18 +73,10 @@ describe('Confirm Transaction Selector', function () {
|
|||||||
confirmTransaction: {
|
confirmTransaction: {
|
||||||
tokenData: {
|
tokenData: {
|
||||||
name: 'approve',
|
name: 'approve',
|
||||||
params: [
|
args: getEthersArrayLikeFromObj({
|
||||||
{
|
'_spender': '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
||||||
name: '_spender',
|
'_value': { toNumber: () => '1' },
|
||||||
value: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
}),
|
||||||
type: 'address',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '_value',
|
|
||||||
value: '1',
|
|
||||||
type: 'uint256',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
tokenProps: {
|
tokenProps: {
|
||||||
tokenDecimals: '2',
|
tokenDecimals: '2',
|
||||||
@ -98,7 +89,6 @@ describe('Confirm Transaction Selector', function () {
|
|||||||
assert.deepEqual(approveTokenAmountAndToAddressSelector(state),
|
assert.deepEqual(approveTokenAmountAndToAddressSelector(state),
|
||||||
{ toAddress: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', tokenAmount: 0.01 })
|
{ toAddress: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', tokenAmount: 0.01 })
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('sendTokenTokenAmountAndToAddressSelector', function () {
|
describe('sendTokenTokenAmountAndToAddressSelector', function () {
|
||||||
@ -107,18 +97,10 @@ describe('Confirm Transaction Selector', function () {
|
|||||||
confirmTransaction: {
|
confirmTransaction: {
|
||||||
tokenData: {
|
tokenData: {
|
||||||
name: 'transfer',
|
name: 'transfer',
|
||||||
params: [
|
args: getEthersArrayLikeFromObj({
|
||||||
{
|
'_to': '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
||||||
name: '_to',
|
'_value': { toNumber: () => '1' },
|
||||||
value: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
|
}),
|
||||||
type: 'address',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '_value',
|
|
||||||
value: '1',
|
|
||||||
type: 'uint256',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
tokenProps: {
|
tokenProps: {
|
||||||
tokenDecimals: '2',
|
tokenDecimals: '2',
|
||||||
|
402
yarn.lock
402
yarn.lock
@ -1318,6 +1318,336 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
|
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
|
||||||
integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
|
integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
|
||||||
|
|
||||||
|
"@ethersproject/abi@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.2.tgz#7fe8f080aa1483fe32cd27bb5b8f2019266af1e2"
|
||||||
|
integrity sha512-Z+5f7xOgtRLu/W2l9Ry5xF7ehh9QVQ0m1vhynmTcS7DMfHgqTd1/PDFC62aw91ZPRCRZsYdZJu8ymokC5e1JSw==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/address" "^5.0.0"
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/constants" "^5.0.0"
|
||||||
|
"@ethersproject/hash" "^5.0.0"
|
||||||
|
"@ethersproject/keccak256" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
"@ethersproject/strings" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/abstract-provider@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.2.tgz#9b4e8f4870f0691463e8d5b092c95dd5275c635d"
|
||||||
|
integrity sha512-U1s60+nG02x8FKNMoVNI6MG8SguWCoG9HJtwOqWZ38LBRMsDV4c0w4izKx98kcsN3wXw4U2/YAyJ9LlH7+/hkg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/networks" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
"@ethersproject/transactions" "^5.0.0"
|
||||||
|
"@ethersproject/web" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/abstract-signer@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.2.tgz#5776f888fda816de1d08ddb0e74778ecb9590f69"
|
||||||
|
integrity sha512-CzzXbeqKlgayE4YTnvvreGBG3n+HxakGXrxaGM6LjBZnOOIVSYi6HMFG8ZXls7UspRY4hvMrtnKEJKDCOngSBw==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-provider" "^5.0.0"
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/address@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.2.tgz#80d0ddfb7d4bd0d32657747fa4bdd2defef2e00a"
|
||||||
|
integrity sha512-+rz26RKj7ujGfQynys4V9VJRbR+wpC6eL8F22q3raWMH3152Ha31GwJPWzxE/bEA+43M/zTNVwY0R53gn53L2Q==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/keccak256" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/rlp" "^5.0.0"
|
||||||
|
bn.js "^4.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/base64@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.2.tgz#48b3bb8d640a963bd8ee196cfeacd592155a0ca8"
|
||||||
|
integrity sha512-0FE5RH5cUDddOiQEDpWtyHjkSW4D5/rdJzA3KTZo8Fk5ab/Y8vdzqbamsXPyPsXU3gS+zCE5Qq4EKVOWlWLLTA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/basex@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.2.tgz#13029ce0ad63674f4d4dbebf6763181fb22f0e6d"
|
||||||
|
integrity sha512-p4m2CeQqI9vma3XipRbP2iDf6zTsbroE0MEXBAYXidsoJQSvePKrC6MVRKfTzfcHej1b9wfmjVBzqhqn3FRhIA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/bignumber@^5.0.0":
|
||||||
|
version "5.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.5.tgz#31bd7e75aad46ace345fae69b1f5bb120906af1b"
|
||||||
|
integrity sha512-24ln7PV0g8ZzjcVZiLW9Wod0i+XCmK6zKkAaxw5enraTIT1p7gVOcSXFSzNQ9WYAwtiFQPvvA+TIO2oEITZNJA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
bn.js "^4.4.0"
|
||||||
|
|
||||||
|
"@ethersproject/bytes@^5.0.0":
|
||||||
|
version "5.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.3.tgz#b3769963ae0188a35713d343890a903bda20af9c"
|
||||||
|
integrity sha512-AyPMAlY+Amaw4Zfp8OAivm1xYPI8mqiUYmEnSUk1CnS2NrQGHEMmFJFiOJdS3gDDpgSOFhWIjZwxKq2VZpqNTA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/constants@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.2.tgz#f7ac0b320e2bbec1a5950da075015f8bc4e8fed1"
|
||||||
|
integrity sha512-nNoVlNP6bgpog7pQ2EyD1xjlaXcy1Cl4kK5v1KoskHj58EtB6TK8M8AFGi3GgHTdMldfT4eN3OsoQ/CdOTVNFA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/contracts@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.2.tgz#f19ed8335ceeb6abb60f5d45641f0a2a62b6fbc5"
|
||||||
|
integrity sha512-Ud3oW8mBNIWE+WHRjvwVEwfvshn7lfYWSSKG0fPSb6baRN9mLOoNguX+VIv3W5Sne9w2utnBmxLF2ESXitw64A==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abi" "^5.0.0"
|
||||||
|
"@ethersproject/abstract-provider" "^5.0.0"
|
||||||
|
"@ethersproject/abstract-signer" "^5.0.0"
|
||||||
|
"@ethersproject/address" "^5.0.0"
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/constants" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/hash@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.2.tgz#6d69558786961836d530b8b4a8714eac5388aec7"
|
||||||
|
integrity sha512-dWGvNwmVRX2bxoQQ3ciMw46Vzl1nqfL+5R8+2ZxsRXD3Cjgw1dL2mdjJF7xMMWPvPdrlhKXWSK0gb8VLwHZ8Cw==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/keccak256" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/strings" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/hdnode@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.2.tgz#c4f2152590a64822d0c0feb90f09cc247af657e0"
|
||||||
|
integrity sha512-QAUI5tfseTFqv00Vnbwzofqse81wN9TaL+x5GufTHIHJXgVdguxU+l39E3VYDCmO+eVAA6RCn5dJgeyra+PU2g==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-signer" "^5.0.0"
|
||||||
|
"@ethersproject/basex" "^5.0.0"
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/pbkdf2" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
"@ethersproject/sha2" "^5.0.0"
|
||||||
|
"@ethersproject/signing-key" "^5.0.0"
|
||||||
|
"@ethersproject/strings" "^5.0.0"
|
||||||
|
"@ethersproject/transactions" "^5.0.0"
|
||||||
|
"@ethersproject/wordlists" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/json-wallets@^5.0.0":
|
||||||
|
version "5.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.4.tgz#e09bf2d34279c6dd2b4a4d4c44db65471bacc68b"
|
||||||
|
integrity sha512-jqtb+X3rJXWG/w+Qyr7vq1V+fdc5jiLlyc6akwI3SQIHTfcuuyF+eZRd9u2/455urNwV3nuCsnrgxs2NrtHHIw==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-signer" "^5.0.0"
|
||||||
|
"@ethersproject/address" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/hdnode" "^5.0.0"
|
||||||
|
"@ethersproject/keccak256" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/pbkdf2" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
"@ethersproject/random" "^5.0.0"
|
||||||
|
"@ethersproject/strings" "^5.0.0"
|
||||||
|
"@ethersproject/transactions" "^5.0.0"
|
||||||
|
aes-js "3.0.0"
|
||||||
|
scrypt-js "3.0.1"
|
||||||
|
|
||||||
|
"@ethersproject/keccak256@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.2.tgz#7ed4a95bb45ee502cf4532223833740a83602797"
|
||||||
|
integrity sha512-MbroXutc0gPNYIrUjS4Aw0lDuXabdzI7+l7elRWr1G6G+W0v00e/3gbikWkCReGtt2Jnt4lQSgnflhDwQGcIhA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
js-sha3 "0.5.7"
|
||||||
|
|
||||||
|
"@ethersproject/logger@^5.0.0":
|
||||||
|
version "5.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.4.tgz#09fa4765b5691233e3afb6617cb38a700f9dd2e4"
|
||||||
|
integrity sha512-alA2LiAy1LdQ/L1SA9ajUC7MvGAEQLsICEfKK4erX5qhkXE1LwLSPIzobtOWFsMHf2yrXGKBLnnpuVHprI3sAw==
|
||||||
|
|
||||||
|
"@ethersproject/networks@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.2.tgz#a49e82cf071e3618e87e3c5d69fdbcf54dc6766c"
|
||||||
|
integrity sha512-T7HVd62D4izNU2tDHf6xUDo7k4JOGX4Lk7vDmVcDKrepSWwL2OmGWrqSlkRe2a1Dnz4+1VPE6fb6+KsmSRe82g==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/pbkdf2@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.2.tgz#d12c5f434bbdf6f52401eddb7d753a713dd9e4ea"
|
||||||
|
integrity sha512-OJFxdX/VtGI5M04lAzXKEOb76XBzjCOzGyko3/bMWat3ePAw7RveBOLyhm79SBs2fh21MSYgdG6JScEMHoSImw==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/sha2" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/properties@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.2.tgz#2facb62d2f2d968c7b3d0befa5bcc884cc565d3b"
|
||||||
|
integrity sha512-FxAisPGAOACQjMJzewl9OJG6lsGCPTm5vpUMtfeoxzAlAb2lv+kHzQPUh9h4jfAILzE8AR1jgXMzRmlhwyra1Q==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/providers@^5.0.0":
|
||||||
|
version "5.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.5.tgz#fa28498ce9683d1d99f6cb11e1a7fe8d4886e0ce"
|
||||||
|
integrity sha512-ZR3yFg/m8qDl7317yXOHE7tKeGfoyZIZ/imhVC4JqAH+SX1rb6bdZcSjhJfet7rLmnJSsnYLTgIiVIT85aVLgg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-provider" "^5.0.0"
|
||||||
|
"@ethersproject/abstract-signer" "^5.0.0"
|
||||||
|
"@ethersproject/address" "^5.0.0"
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/constants" "^5.0.0"
|
||||||
|
"@ethersproject/hash" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/networks" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
"@ethersproject/random" "^5.0.0"
|
||||||
|
"@ethersproject/rlp" "^5.0.0"
|
||||||
|
"@ethersproject/strings" "^5.0.0"
|
||||||
|
"@ethersproject/transactions" "^5.0.0"
|
||||||
|
"@ethersproject/web" "^5.0.0"
|
||||||
|
ws "7.2.3"
|
||||||
|
|
||||||
|
"@ethersproject/random@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.2.tgz#bb58aca69a85e8de506686117f050d03dac69023"
|
||||||
|
integrity sha512-kLeS+6bwz37WR2zbe69gudyoGVoUzljQO0LhifnATsZ7rW0JZ9Zgt0h5aXY7tqFDo9TvdqeCwUFdp1t3T5Fkhg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/rlp@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.2.tgz#d6b550a2ac5e484f15f0f63337e522004d2e78cd"
|
||||||
|
integrity sha512-oE0M5jqQ67fi2SuMcrpoewOpEuoXaD8M9JeR9md1bXRMvDYgKXUtDHs22oevpEOdnO2DPIRabp6MVHa4aDuWmw==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/sha2@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.2.tgz#baefc78c071be8729b180759eb29267129314252"
|
||||||
|
integrity sha512-VFl4qSStjQZaygpqoAHswaCY59qBm1Sm0rf8iv0tmgVsRf0pBg2nJaNf9NXXvcuJ9AYPyXl57dN8kozdC4z5Cg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
hash.js "1.1.3"
|
||||||
|
|
||||||
|
"@ethersproject/signing-key@^5.0.0":
|
||||||
|
version "5.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.3.tgz#adb84360e147bfd336cb2fe114100120732dc10a"
|
||||||
|
integrity sha512-5QPZaBRGCLzfVMbFb3LcVjNR0UbTXnwDHASnQYfbzwUOnFYHKxHsrcbl/5ONGoppgi8yXgOocKqlPCFycJJVWQ==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
elliptic "6.5.3"
|
||||||
|
|
||||||
|
"@ethersproject/solidity@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.2.tgz#431cee341ec51e022bd897b93fef04521f414756"
|
||||||
|
integrity sha512-RygurUe1hPW1LDYAPXy4471AklGWNnxgFWc3YUE6H11gzkit26jr6AyZH4Yyjw38eBBL6j0AOfQzMWm+NhxZ9g==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/keccak256" "^5.0.0"
|
||||||
|
"@ethersproject/sha2" "^5.0.0"
|
||||||
|
"@ethersproject/strings" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/strings@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.2.tgz#1753408c3c889813fd0992abd76393e3e47a2619"
|
||||||
|
integrity sha512-oNa+xvSqsFU96ndzog0IBTtsRFGOqGpzrXJ7shXLBT7juVeSEyZA/sYs0DMZB5mJ9FEjHdZKxR/rTyBY91vuXg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/constants" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/transactions@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.2.tgz#590ede71fc87b45be7bd46002e18ae52246a2347"
|
||||||
|
integrity sha512-jZp0ZbbJlq4JLZY6qoMzNtp2HQsX6USQposi3ns0MPUdn3OdZJBDtrcO15r/2VS5t/K1e1GE5MI1HmMKlcTbbQ==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/address" "^5.0.0"
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/constants" "^5.0.0"
|
||||||
|
"@ethersproject/keccak256" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
"@ethersproject/rlp" "^5.0.0"
|
||||||
|
"@ethersproject/signing-key" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/units@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.2.tgz#de1461ff3ad2587e57bf367d056b6b72cfceda78"
|
||||||
|
integrity sha512-PSuzycBA1zmRysTtKtp+XYZ3HIJfbmfRdZchOUxdyeGo5siUi9H6mYQcxdJHv82oKp/FniMj8qS8qtLQThhOEg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/constants" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/wallet@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.2.tgz#714ca8324c1b3b66e51b9b4e0358c882e88caf1d"
|
||||||
|
integrity sha512-gg86ynLV5k5caNnYpJoYc6WyIUHKMTjOITCk5zXGyVbbkXE07y/fGql4A51W0C6mWkeb5Mzz8AKqzHZECdH30w==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abstract-provider" "^5.0.0"
|
||||||
|
"@ethersproject/abstract-signer" "^5.0.0"
|
||||||
|
"@ethersproject/address" "^5.0.0"
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/hash" "^5.0.0"
|
||||||
|
"@ethersproject/hdnode" "^5.0.0"
|
||||||
|
"@ethersproject/json-wallets" "^5.0.0"
|
||||||
|
"@ethersproject/keccak256" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
"@ethersproject/random" "^5.0.0"
|
||||||
|
"@ethersproject/signing-key" "^5.0.0"
|
||||||
|
"@ethersproject/transactions" "^5.0.0"
|
||||||
|
"@ethersproject/wordlists" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/web@^5.0.0":
|
||||||
|
version "5.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.3.tgz#f5673923009bb855302f0296ddb932da8e42f0a1"
|
||||||
|
integrity sha512-9WoIWNxbFOk+8TiWqQMQbYJUIFeC1Z7zNr7oCHpVyhxF0EY54ZVXlP/Y7VJ7KzK++A/iMGOuTIGeL5sMqa2QMg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/base64" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
"@ethersproject/strings" "^5.0.0"
|
||||||
|
|
||||||
|
"@ethersproject/wordlists@^5.0.0":
|
||||||
|
version "5.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.2.tgz#eded47314509c8608373fc2b22879ee2b71b7c7c"
|
||||||
|
integrity sha512-6vKDQcjjpnfdSCr0+jNxpFH3ieKxUPkm29tQX2US7a3zT/sJU/BGlKBR7D8oOpwdE0hpkHhJyMlypRBK+A2avA==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/hash" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
"@ethersproject/strings" "^5.0.0"
|
||||||
|
|
||||||
"@formatjs/intl-relativetimeformat@^5.2.6":
|
"@formatjs/intl-relativetimeformat@^5.2.6":
|
||||||
version "5.2.6"
|
version "5.2.6"
|
||||||
resolved "https://registry.yarnpkg.com/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-5.2.6.tgz#3d67b75a900e7b5416615beeb2d0eeff33a1e01a"
|
resolved "https://registry.yarnpkg.com/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-5.2.6.tgz#3d67b75a900e7b5416615beeb2d0eeff33a1e01a"
|
||||||
@ -3047,13 +3377,6 @@ abbrev@1:
|
|||||||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||||
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
||||||
|
|
||||||
abi-decoder@^1.2.0:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/abi-decoder/-/abi-decoder-1.2.0.tgz#c42882dbb91b444805f0cd203a87a5cc3c22f4a8"
|
|
||||||
integrity sha512-y2OKSEW4gf2838Eavc56vQY9V46zaXkf3Jl1WpTfUBbzAVrXSr4JRZAAWv55Tv9s5WNz1rVgBgz5d2aJIL1QCg==
|
|
||||||
dependencies:
|
|
||||||
web3 "^0.18.4"
|
|
||||||
|
|
||||||
abort-controller@^3.0.0:
|
abort-controller@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
|
resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
|
||||||
@ -5310,10 +5633,6 @@ bignumber.js@^8.0.1, bignumber.js@^8.0.2, bignumber.js@^8.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-8.1.1.tgz#4b072ae5aea9c20f6730e4e5d529df1271c4d885"
|
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-8.1.1.tgz#4b072ae5aea9c20f6730e4e5d529df1271c4d885"
|
||||||
integrity sha512-QD46ppGintwPGuL1KqmwhR0O+N2cZUg8JG/VzwI2e28sM9TqHjQB10lI4QAaMHVbLzwVLLAwEglpKPViWX+5NQ==
|
integrity sha512-QD46ppGintwPGuL1KqmwhR0O+N2cZUg8JG/VzwI2e28sM9TqHjQB10lI4QAaMHVbLzwVLLAwEglpKPViWX+5NQ==
|
||||||
|
|
||||||
"bignumber.js@git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2":
|
|
||||||
version "2.0.7"
|
|
||||||
resolved "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2"
|
|
||||||
|
|
||||||
"bignumber.js@git+https://github.com/frozeman/bignumber.js-nolookahead.git":
|
"bignumber.js@git+https://github.com/frozeman/bignumber.js-nolookahead.git":
|
||||||
version "2.0.7"
|
version "2.0.7"
|
||||||
resolved "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934"
|
resolved "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934"
|
||||||
@ -9181,7 +9500,7 @@ element-resize-detector@^1.2.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
batch-processor "1.0.0"
|
batch-processor "1.0.0"
|
||||||
|
|
||||||
elliptic@6.3.3, elliptic@=3.0.3, elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.4.1, elliptic@^6.5.3:
|
elliptic@6.3.3, elliptic@6.5.3, elliptic@=3.0.3, elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.4.1, elliptic@^6.5.3:
|
||||||
version "6.5.3"
|
version "6.5.3"
|
||||||
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6"
|
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6"
|
||||||
integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==
|
integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==
|
||||||
@ -10650,6 +10969,42 @@ ethers@^4.0.20, ethers@^4.0.28:
|
|||||||
uuid "2.0.1"
|
uuid "2.0.1"
|
||||||
xmlhttprequest "1.8.0"
|
xmlhttprequest "1.8.0"
|
||||||
|
|
||||||
|
ethers@^5.0.8:
|
||||||
|
version "5.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.8.tgz#c13d0fdf5e66db8085e2036d3309ed2f8a17ed89"
|
||||||
|
integrity sha512-of/rPgJ7E3yyBADUv5A7Gtkd7EB8ta/T9NS5CCG9tj9cifnXcI3KIdYQ7d8AS+9vm38pR1g6S5I+Q/mRnlQZlg==
|
||||||
|
dependencies:
|
||||||
|
"@ethersproject/abi" "^5.0.0"
|
||||||
|
"@ethersproject/abstract-provider" "^5.0.0"
|
||||||
|
"@ethersproject/abstract-signer" "^5.0.0"
|
||||||
|
"@ethersproject/address" "^5.0.0"
|
||||||
|
"@ethersproject/base64" "^5.0.0"
|
||||||
|
"@ethersproject/basex" "^5.0.0"
|
||||||
|
"@ethersproject/bignumber" "^5.0.0"
|
||||||
|
"@ethersproject/bytes" "^5.0.0"
|
||||||
|
"@ethersproject/constants" "^5.0.0"
|
||||||
|
"@ethersproject/contracts" "^5.0.0"
|
||||||
|
"@ethersproject/hash" "^5.0.0"
|
||||||
|
"@ethersproject/hdnode" "^5.0.0"
|
||||||
|
"@ethersproject/json-wallets" "^5.0.0"
|
||||||
|
"@ethersproject/keccak256" "^5.0.0"
|
||||||
|
"@ethersproject/logger" "^5.0.0"
|
||||||
|
"@ethersproject/networks" "^5.0.0"
|
||||||
|
"@ethersproject/pbkdf2" "^5.0.0"
|
||||||
|
"@ethersproject/properties" "^5.0.0"
|
||||||
|
"@ethersproject/providers" "^5.0.0"
|
||||||
|
"@ethersproject/random" "^5.0.0"
|
||||||
|
"@ethersproject/rlp" "^5.0.0"
|
||||||
|
"@ethersproject/sha2" "^5.0.0"
|
||||||
|
"@ethersproject/signing-key" "^5.0.0"
|
||||||
|
"@ethersproject/solidity" "^5.0.0"
|
||||||
|
"@ethersproject/strings" "^5.0.0"
|
||||||
|
"@ethersproject/transactions" "^5.0.0"
|
||||||
|
"@ethersproject/units" "^5.0.0"
|
||||||
|
"@ethersproject/wallet" "^5.0.0"
|
||||||
|
"@ethersproject/web" "^5.0.0"
|
||||||
|
"@ethersproject/wordlists" "^5.0.0"
|
||||||
|
|
||||||
ethjs-abi@0.2.0:
|
ethjs-abi@0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.2.0.tgz#d3e2c221011520fc499b71682036c14fcc2f5b25"
|
resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.2.0.tgz#d3e2c221011520fc499b71682036c14fcc2f5b25"
|
||||||
@ -23810,6 +24165,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.1"
|
version "0.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.2.1.tgz#cc3f751933d6bac7a4bedf5301d7596e8146cdcd"
|
resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.2.1.tgz#cc3f751933d6bac7a4bedf5301d7596e8146cdcd"
|
||||||
@ -27651,17 +28011,6 @@ web3@1.2.4:
|
|||||||
web3-shh "1.2.4"
|
web3-shh "1.2.4"
|
||||||
web3-utils "1.2.4"
|
web3-utils "1.2.4"
|
||||||
|
|
||||||
web3@^0.18.4:
|
|
||||||
version "0.18.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3/-/web3-0.18.4.tgz#81ec1784145491f2eaa8955b31c06049e07c5e7d"
|
|
||||||
integrity sha1-gewXhBRUkfLqqJVbMcBgSeB8Xn0=
|
|
||||||
dependencies:
|
|
||||||
bignumber.js "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2"
|
|
||||||
crypto-js "^3.1.4"
|
|
||||||
utf8 "^2.1.1"
|
|
||||||
xhr2 "*"
|
|
||||||
xmlhttprequest "*"
|
|
||||||
|
|
||||||
web3@^0.20.7:
|
web3@^0.20.7:
|
||||||
version "0.20.7"
|
version "0.20.7"
|
||||||
resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.7.tgz#1605e6d81399ed6f85a471a4f3da0c8be57df2f7"
|
resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.7.tgz#1605e6d81399ed6f85a471a4f3da0c8be57df2f7"
|
||||||
@ -28048,6 +28397,11 @@ ws@6.1.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
async-limiter "~1.0.0"
|
async-limiter "~1.0.0"
|
||||||
|
|
||||||
|
ws@7.2.3:
|
||||||
|
version "7.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46"
|
||||||
|
integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==
|
||||||
|
|
||||||
ws@^1.1.0:
|
ws@^1.1.0:
|
||||||
version "1.1.5"
|
version "1.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
|
||||||
@ -28123,7 +28477,7 @@ xhr2-cookies@1.1.0, xhr2-cookies@^1.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
cookiejar "^2.1.1"
|
cookiejar "^2.1.1"
|
||||||
|
|
||||||
xhr2@*, xhr2@0.1.3:
|
xhr2@0.1.3:
|
||||||
version "0.1.3"
|
version "0.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.3.tgz#cbfc4759a69b4a888e78cf4f20b051038757bd11"
|
resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.3.tgz#cbfc4759a69b4a888e78cf4f20b051038757bd11"
|
||||||
integrity sha1-y/xHWaabSoiOeM9PILBRA4dXvRE=
|
integrity sha1-y/xHWaabSoiOeM9PILBRA4dXvRE=
|
||||||
|
Loading…
x
Reference in New Issue
Block a user