Merge remote-tracking branch 'origin/release-8.1' into release-8.6
This commit is contained in:
commit
cd9c8aaba1
31 changed files with 652 additions and 160 deletions
|
|
@ -23,10 +23,8 @@ const PLUGINS = {
|
|||
BTC: require('./bitcoin.js'),
|
||||
BCH: require('./bitcoincash.js'),
|
||||
DASH: require('./dash.js'),
|
||||
ETH: require('./ethereum.js'),
|
||||
LTC: require('./litecoin.js'),
|
||||
XMR: require('./monero.js'),
|
||||
ZEC: require('./zcash.js')
|
||||
XMR: require('./monero.js')
|
||||
}
|
||||
|
||||
const BLOCKCHAIN_DIR = process.env.BLOCKCHAIN_DIR
|
||||
|
|
@ -207,10 +205,6 @@ function isInstalled (crypto) {
|
|||
|
||||
function isDisabled (crypto) {
|
||||
switch (crypto.cryptoCode) {
|
||||
case 'ETH':
|
||||
return 'Use admin\'s Infura plugin'
|
||||
case 'ZEC':
|
||||
return 'Use admin\'s BitGo plugin'
|
||||
case 'XMR':
|
||||
return isInstalled(crypto) && 'Installed' || isInstalled(_.find(it => it.code === 'zcash', cryptos)) && 'Insufficient resources. Contact support.'
|
||||
default:
|
||||
|
|
@ -220,11 +214,10 @@ function isDisabled (crypto) {
|
|||
|
||||
function run () {
|
||||
const choices = _.flow([
|
||||
_.filter(c => c.type !== 'erc-20'),
|
||||
_.filter(c => !c.hideFromInstall),
|
||||
_.map(c => {
|
||||
const name = c.code === 'ethereum' ? 'Ethereum and/or USDT' : c.display
|
||||
return {
|
||||
name,
|
||||
name: c.display,
|
||||
value: c.code,
|
||||
checked: isInstalled(c),
|
||||
disabled: isDisabled(c)
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ const staticConfig = ({ currentConfigVersion, deviceId, deviceName, pq, settings
|
|||
'cashInFee',
|
||||
'cashOutCommission',
|
||||
'cryptoCode',
|
||||
'cryptoCodeDisplay',
|
||||
'cryptoNetwork',
|
||||
'cryptoUnits',
|
||||
'display',
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ const { gql } = require('apollo-server-express')
|
|||
module.exports = gql`
|
||||
type Coin {
|
||||
cryptoCode: String!
|
||||
cryptoCodeDisplay: String!
|
||||
display: String!
|
||||
minimumTx: String!
|
||||
cashInFee: String!
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ const _ = require('lodash/fp')
|
|||
|
||||
const { ALL } = require('../../plugins/common/ccxt')
|
||||
|
||||
const { BTC, BCH, DASH, ETH, LTC, USDT, ZEC, XMR } = COINS
|
||||
const { BTC, BCH, DASH, ETH, LTC, USDT, ZEC, XMR, TRX, USDT_TRON } = COINS
|
||||
const { bitpay, coinbase, itbit, bitstamp, kraken, binanceus, cex, binance } = ALL
|
||||
|
||||
const TICKER = 'ticker'
|
||||
|
|
@ -29,6 +29,7 @@ const ALL_ACCOUNTS = [
|
|||
{ code: 'bitcoind', display: 'bitcoind', class: WALLET, cryptos: [BTC] },
|
||||
{ code: 'no-layer2', display: 'No Layer 2', class: LAYER_2, cryptos: ALL_CRYPTOS },
|
||||
{ code: 'infura', display: 'Infura', class: WALLET, cryptos: [ETH, USDT] },
|
||||
{ code: 'trongrid', display: 'Trongrid', class: WALLET, cryptos: [TRX, USDT_TRON] },
|
||||
{ code: 'geth', display: 'geth (deprecated)', class: WALLET, cryptos: [ETH, USDT] },
|
||||
{ code: 'zcashd', display: 'zcashd', class: WALLET, cryptos: [ZEC] },
|
||||
{ code: 'litecoind', display: 'litecoind', class: WALLET, cryptos: [LTC] },
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@ const mapLanguage = lang => {
|
|||
const massageCryptos = cryptos => {
|
||||
const convert = crypto => ({
|
||||
code: crypto['cryptoCode'],
|
||||
display: crypto['display']
|
||||
display: crypto['display'],
|
||||
codeDisplay: crypto['cryptoCodeDisplay'] ?? crypto['cryptoCode']
|
||||
})
|
||||
|
||||
return _.map(convert, cryptos)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ const typeDef = gql`
|
|||
type CryptoCurrency {
|
||||
code: String!
|
||||
display: String!
|
||||
codeDisplay: String!
|
||||
}
|
||||
|
||||
type Query {
|
||||
|
|
|
|||
|
|
@ -312,6 +312,7 @@ function plugins (settings, deviceId) {
|
|||
|
||||
return {
|
||||
cryptoCode,
|
||||
cryptoCodeDisplay: cryptoRec.cryptoCodeDisplay ?? cryptoCode,
|
||||
display: cryptoRec.display,
|
||||
isCashInOnly: Boolean(cryptoRec.isCashinOnly),
|
||||
minimumTx: BN.max(minimumTx, cashInFee),
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ const bitpay = require('../ticker/bitpay')
|
|||
const binance = require('../exchange/binance')
|
||||
const logger = require('../../logger')
|
||||
|
||||
const { BTC, BCH, DASH, ETH, LTC, ZEC, USDT } = COINS
|
||||
const { BTC, BCH, DASH, ETH, LTC, ZEC, USDT, TRX, USDT_TRON } = COINS
|
||||
|
||||
const ALL = {
|
||||
cex: cex,
|
||||
|
|
@ -20,7 +20,7 @@ const ALL = {
|
|||
itbit: itbit,
|
||||
bitpay: bitpay,
|
||||
coinbase: {
|
||||
CRYPTO: [BTC, ETH, LTC, DASH, ZEC, BCH, USDT],
|
||||
CRYPTO: [BTC, ETH, LTC, DASH, ZEC, BCH, USDT, USDT_TRON, TRX],
|
||||
FIAT: 'ALL_CURRENCIES'
|
||||
},
|
||||
binance: binance
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ const _ = require('lodash/fp')
|
|||
const { ORDER_TYPES } = require('./consts')
|
||||
|
||||
const ORDER_TYPE = ORDER_TYPES.MARKET
|
||||
const { BTC, BCH, DASH, ETH, LTC, ZEC, USDT } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, DASH, ZEC, BCH, USDT]
|
||||
const { BTC, BCH, DASH, ETH, LTC, ZEC, USDT, USDT_TRON } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, DASH, ZEC, BCH, USDT, USDT_TRON]
|
||||
const FIAT = ['USD']
|
||||
const REQUIRED_CONFIG_FIELDS = ['apiKey', 'privateKey']
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const { ORDER_TYPES } = require('./consts')
|
|||
|
||||
const ORDER_TYPE = ORDER_TYPES.MARKET
|
||||
const { BTC, ETH, LTC, BCH, USDT } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, BCH, USDT]
|
||||
const CRYPTO = [BTC, ETH, LTC, BCH, USDT ]
|
||||
const FIAT = ['USD', 'EUR']
|
||||
const AMOUNT_PRECISION = 8
|
||||
const REQUIRED_CONFIG_FIELDS = ['key', 'secret', 'clientId']
|
||||
|
|
|
|||
|
|
@ -9,8 +9,9 @@ const DEFAULT_PRICE_PRECISION = 2
|
|||
const DEFAULT_AMOUNT_PRECISION = 8
|
||||
|
||||
function trade (side, account, tradeEntry, exchangeName) {
|
||||
const { cryptoAtoms, fiatCode, cryptoCode, tradeId } = tradeEntry
|
||||
const { cryptoAtoms, fiatCode, _cryptoCode, tradeId } = tradeEntry
|
||||
try {
|
||||
const cryptoCode = coinUtils.getEquivalentCode(_cryptoCode)
|
||||
const exchangeConfig = ALL[exchangeName]
|
||||
if (!exchangeConfig) throw Error('Exchange configuration not found')
|
||||
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ const _ = require('lodash/fp')
|
|||
const { ORDER_TYPES } = require('./consts')
|
||||
|
||||
const ORDER_TYPE = ORDER_TYPES.MARKET
|
||||
const { BTC, BCH, DASH, ETH, LTC, USDT } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, DASH, BCH, USDT]
|
||||
const { BTC, BCH, DASH, ETH, LTC, USDT, TRX, USDT_TRON } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, DASH, BCH, USDT, TRX, USDT_TRON]
|
||||
const FIAT = ['USD', 'EUR']
|
||||
const REQUIRED_CONFIG_FIELDS = ['apiKey', 'privateKey']
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
const { COINS } = require('@lamassu/coins')
|
||||
const _ = require('lodash/fp')
|
||||
|
||||
const { ORDER_TYPES } = require('./consts')
|
||||
|
||||
const ORDER_TYPE = ORDER_TYPES.MARKET
|
||||
const { BTC, BCH, ETH, LTC, USDT } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, BCH, USDT]
|
||||
const FIAT = ['USD']
|
||||
const REQUIRED_CONFIG_FIELDS = ['apiKey', 'privateKey']
|
||||
|
||||
const loadConfig = (account) => {
|
||||
const mapper = {
|
||||
'privateKey': 'secret'
|
||||
}
|
||||
const mapped = _.mapKeys(key => mapper[key] ? mapper[key] : key)(account)
|
||||
return { ...mapped, timeout: 3000 }
|
||||
}
|
||||
|
||||
module.exports = { loadConfig, REQUIRED_CONFIG_FIELDS, CRYPTO, FIAT, ORDER_TYPE }
|
||||
|
|
@ -4,8 +4,8 @@ const { ORDER_TYPES } = require('./consts')
|
|||
const { COINS } = require('@lamassu/coins')
|
||||
|
||||
const ORDER_TYPE = ORDER_TYPES.MARKET
|
||||
const { BTC, BCH, DASH, ETH, LTC, ZEC, XMR, USDT } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, DASH, ZEC, BCH, XMR, USDT]
|
||||
const { BTC, BCH, DASH, ETH, LTC, ZEC, XMR, USDT, TRX, USDT_TRON } = COINS
|
||||
const CRYPTO = [BTC, ETH, LTC, DASH, ZEC, BCH, XMR, USDT, TRX, USDT_TRON]
|
||||
const FIAT = ['USD', 'EUR']
|
||||
const AMOUNT_PRECISION = 6
|
||||
const REQUIRED_CONFIG_FIELDS = ['apiKey', 'privateKey']
|
||||
|
|
|
|||
|
|
@ -16,8 +16,6 @@ const BN = require('../../../bn')
|
|||
const ABI = require('../../tokens')
|
||||
const logger = require('../../../logger')
|
||||
|
||||
exports.SUPPORTED_MODULES = ['wallet']
|
||||
|
||||
const paymentPrefixPath = "m/44'/60'/0'/0'"
|
||||
const defaultPrefixPath = "m/44'/60'/1'/0'"
|
||||
let lastUsedNonces = {}
|
||||
|
|
|
|||
|
|
@ -87,10 +87,6 @@ function sweep (account, txId, cryptoCode, hdIndex, settings, operatorId) {
|
|||
throw new E.NotImplementedError()
|
||||
}
|
||||
|
||||
function isStrictAddress (cryptoCode, toAddress, settings, operatorId) {
|
||||
throw new E.NotImplementedError()
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
balance,
|
||||
sendCoins,
|
||||
|
|
@ -99,5 +95,4 @@ module.exports = {
|
|||
getStatus,
|
||||
sweep,
|
||||
supportsHd: true,
|
||||
isStrictAddress
|
||||
}
|
||||
|
|
|
|||
191
lib/plugins/wallet/tron/base.js
Normal file
191
lib/plugins/wallet/tron/base.js
Normal file
|
|
@ -0,0 +1,191 @@
|
|||
const TronWeb = require('tronweb')
|
||||
const coins = require('@lamassu/coins')
|
||||
const { default: PQueue } = require('p-queue')
|
||||
|
||||
const BN = require('../../../bn')
|
||||
|
||||
let tronWeb = null
|
||||
|
||||
const DEFAULT_PREFIX_PATH = "m/44'/195'/0'/0"
|
||||
const PAYMENT_PREFIX_PATH = "m/44'/195'/1'/0"
|
||||
|
||||
const SWEEP_QUEUE = new PQueue({
|
||||
concurrency: 3,
|
||||
interval: 250,
|
||||
})
|
||||
|
||||
function checkCryptoCode (cryptoCode) {
|
||||
if (cryptoCode === 'TRX' || coins.utils.isTrc20Token(cryptoCode)) {
|
||||
return Promise.resolve(cryptoCode)
|
||||
}
|
||||
return Promise.reject(new Error('cryptoCode must be TRX'))
|
||||
}
|
||||
|
||||
function defaultWallet (account) {
|
||||
const mnemonic = account.mnemonic
|
||||
if (!mnemonic) throw new Error('No mnemonic seed!')
|
||||
|
||||
return TronWeb.fromMnemonic(mnemonic.replace(/[\r\n]/gm, ' ').trim(), `${DEFAULT_PREFIX_PATH}/0`)
|
||||
}
|
||||
|
||||
function paymentWallet (account, index) {
|
||||
const mnemonic = account.mnemonic
|
||||
if (!mnemonic) throw new Error('No mnemonic seed!')
|
||||
|
||||
return TronWeb.fromMnemonic(mnemonic.replace(/[\r\n]/gm, ' ').trim(), `${PAYMENT_PREFIX_PATH}/${index}`)
|
||||
}
|
||||
|
||||
function newAddress (account, info, tx, settings, operatorId) {
|
||||
const wallet = paymentWallet(account, info.hdIndex)
|
||||
return Promise.resolve(wallet.address)
|
||||
}
|
||||
|
||||
function defaultAddress (account) {
|
||||
return defaultWallet(account).address
|
||||
}
|
||||
|
||||
function balance (account, cryptoCode, settings, operatorId) {
|
||||
return checkCryptoCode(cryptoCode)
|
||||
.then(code => confirmedBalance(defaultAddress(account), code))
|
||||
}
|
||||
|
||||
const confirmedBalance = (address, cryptoCode) => _balance(address, cryptoCode)
|
||||
|
||||
const _balance = async (address, cryptoCode) => {
|
||||
if (coins.utils.isTrc20Token(cryptoCode)) {
|
||||
const contractAddress = coins.utils.getTrc20Token(cryptoCode).contractAddress
|
||||
const { abi } = await tronWeb.trx.getContract(contractAddress)
|
||||
const contract = tronWeb.contract(abi.entrys, contractAddress)
|
||||
|
||||
const balance = await contract.methods.balanceOf(address).call()
|
||||
return BN(balance.toString())
|
||||
}
|
||||
|
||||
const balance = await tronWeb.trx.getBalance(address)
|
||||
return balance ? BN(balance) : BN(0)
|
||||
}
|
||||
|
||||
const sendCoins = async (account, tx) => {
|
||||
const { toAddress, cryptoAtoms, cryptoCode } = tx
|
||||
const isTrc20Token = coins.utils.isTrc20Token(cryptoCode)
|
||||
|
||||
const txFunction = isTrc20Token ? generateTrc20Tx : generateTx
|
||||
const rawTx = await txFunction(toAddress, defaultWallet(account), cryptoAtoms.toString(), cryptoCode)
|
||||
|
||||
let response = null
|
||||
|
||||
try {
|
||||
response = await tronWeb.trx.sendRawTransaction(rawTx)
|
||||
if (!response.result) throw new Error(response.code)
|
||||
} catch (err) {
|
||||
// for some reason err here is just a string
|
||||
throw new Error(err)
|
||||
}
|
||||
|
||||
const transaction = response.transaction
|
||||
const txid = transaction.txID
|
||||
const transactionInfo = tronWeb.trx.getTransactionInfo(txid)
|
||||
|
||||
if (!transactionInfo || !transactionInfo.fee) return { txid }
|
||||
|
||||
const fee = new BN(transactionInfo.fee).decimalPlaces(0)
|
||||
return { txid, fee }
|
||||
}
|
||||
|
||||
const generateTrc20Tx = async (toAddress, wallet, amount, cryptoCode) => {
|
||||
const contractAddress = coins.utils.getTrc20Token(cryptoCode).contractAddress
|
||||
const functionSelector = 'transfer(address,uint256)'
|
||||
const parameters = [
|
||||
{ type: 'address', value: tronWeb.address.toHex(toAddress) },
|
||||
{ type: 'uint256', value: amount }
|
||||
]
|
||||
|
||||
const tx = await tronWeb.transactionBuilder.triggerSmartContract(contractAddress, functionSelector, {}, parameters, wallet.address)
|
||||
|
||||
return tronWeb.trx.sign(tx.transaction, wallet.privateKey.slice(2))
|
||||
}
|
||||
|
||||
const generateTx = async (toAddress, wallet, amount) => {
|
||||
const transaction = await tronWeb.transactionBuilder.sendTrx(toAddress, amount, wallet.address)
|
||||
|
||||
const privateKey = wallet.privateKey
|
||||
|
||||
// their api return a hex string starting with 0x but expects without it
|
||||
return tronWeb.trx.sign(transaction, privateKey.slice(2))
|
||||
}
|
||||
|
||||
function newFunding (account, cryptoCode) {
|
||||
return checkCryptoCode(cryptoCode)
|
||||
.then(code => {
|
||||
const fundingAddress = defaultAddress(account)
|
||||
|
||||
return confirmedBalance(fundingAddress, code)
|
||||
.then((balance) => ({
|
||||
fundingPendingBalance: BN(0),
|
||||
fundingConfirmedBalance: balance,
|
||||
fundingAddress
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
function sweep (account, txId, cryptoCode, hdIndex) {
|
||||
const wallet = paymentWallet(account, hdIndex)
|
||||
const fromAddress = wallet.address
|
||||
const isTrc20Token = coins.utils.isTrc20Token(cryptoCode)
|
||||
|
||||
const txFunction = isTrc20Token ? generateTrc20Tx : generateTx
|
||||
|
||||
return SWEEP_QUEUE.add(async () => {
|
||||
const r = await confirmedBalance(fromAddress, cryptoCode)
|
||||
if (r.eq(0)) return
|
||||
const signedTx = await txFunction(defaultAddress(account), wallet, r.toString(), cryptoCode)
|
||||
let response = null
|
||||
try {
|
||||
response = await tronWeb.trx.sendRawTransaction(signedTx)
|
||||
if (!response.result) throw new Error(response.code)
|
||||
} catch (err) {
|
||||
// for some reason err here is just a string
|
||||
throw new Error(err)
|
||||
}
|
||||
return response
|
||||
})
|
||||
}
|
||||
|
||||
function connect(account) {
|
||||
if (tronWeb != null) return
|
||||
const endpoint = account.endpoint
|
||||
const apiKey = account.apiKey
|
||||
tronWeb = new TronWeb({
|
||||
fullHost: endpoint,
|
||||
headers: { "TRON-PRO-API-KEY": apiKey },
|
||||
privateKey: '01'
|
||||
})
|
||||
}
|
||||
|
||||
function getStatus (account, tx, requested, settings, operatorId) {
|
||||
const { toAddress, cryptoCode } = tx
|
||||
return checkCryptoCode(cryptoCode)
|
||||
.then(code => confirmedBalance(toAddress, code))
|
||||
.then((confirmed) => {
|
||||
if (confirmed.gte(requested)) return { receivedCryptoAtoms: confirmed, status: 'confirmed' }
|
||||
if (confirmed.gt(0)) return { receivedCryptoAtoms: confirmed, status: 'insufficientFunds' }
|
||||
return { receivedCryptoAtoms: 0, status: 'notSeen' }
|
||||
})
|
||||
}
|
||||
|
||||
function getTxHashesByAddress (cryptoCode, address) {
|
||||
throw new Error(`Transactions hash retrieval is not implemented for this coin!`)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
balance,
|
||||
sendCoins,
|
||||
newAddress,
|
||||
getStatus,
|
||||
sweep,
|
||||
defaultAddress,
|
||||
supportsHd: true,
|
||||
newFunding,
|
||||
connect,
|
||||
getTxHashesByAddress,
|
||||
}
|
||||
12
lib/plugins/wallet/trongrid/trongrid.js
Normal file
12
lib/plugins/wallet/trongrid/trongrid.js
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
const _ = require('lodash/fp')
|
||||
const base = require('../tron/base')
|
||||
|
||||
const NAME = 'trongrid'
|
||||
|
||||
function run (account) {
|
||||
const endpoint = 'https://api.trongrid.io'
|
||||
|
||||
base.connect({ ...account, endpoint })
|
||||
}
|
||||
|
||||
module.exports = _.merge(base, { NAME, run })
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
const { utils: coinUtils } = require('@lamassu/coins')
|
||||
const _ = require('lodash/fp')
|
||||
const mem = require('mem')
|
||||
const configManager = require('./new-config-manager')
|
||||
|
|
@ -35,10 +36,13 @@ function _getRates (settings, fiatCode, cryptoCode) {
|
|||
})
|
||||
}
|
||||
|
||||
function buildTicker (fiatCode, cryptoCode, tickerName) {
|
||||
function buildTicker (fiatCode, _cryptoCode, tickerName) {
|
||||
const fiatPeggedEquivalent = _.includes(fiatCode, _.keys(PEGGED_FIAT_CURRENCIES))
|
||||
? PEGGED_FIAT_CURRENCIES[fiatCode]
|
||||
: fiatCode
|
||||
|
||||
const cryptoCode = coinUtils.getEquivalentCode(_cryptoCode)
|
||||
|
||||
if (tickerName === 'bitpay') return bitpay.ticker(fiatPeggedEquivalent, cryptoCode)
|
||||
if (tickerName === 'mock-ticker') return mockTicker.ticker(fiatPeggedEquivalent, cryptoCode)
|
||||
return ccxt.ticker(fiatPeggedEquivalent, cryptoCode, tickerName)
|
||||
|
|
|
|||
|
|
@ -38,9 +38,10 @@ function fetchWallet (settings, cryptoCode) {
|
|||
const wallet = ph.load(ph.WALLET, plugin)
|
||||
const rawAccount = settings.accounts[plugin]
|
||||
const account = _.set('seed', computeSeed(masterSeed), rawAccount)
|
||||
if (_.isFunction(wallet.run)) wallet.run(account)
|
||||
const accountWithMnemonic = _.set('mnemonic', mnemonic, account)
|
||||
if (_.isFunction(wallet.run)) wallet.run(accountWithMnemonic)
|
||||
const operatorId = computeOperatorId(masterSeed)
|
||||
return { wallet, account, operatorId }
|
||||
return { wallet, account: accountWithMnemonic, operatorId }
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
54
new-lamassu-admin/package-lock.json
generated
54
new-lamassu-admin/package-lock.json
generated
|
|
@ -4394,15 +4394,16 @@
|
|||
}
|
||||
},
|
||||
"@lamassu/coins": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@lamassu/coins/-/coins-1.2.0.tgz",
|
||||
"integrity": "sha512-xp1R2+hd++6WfDOrHxpUdPBqnQiWDz0KttoSHu4KkQsCKCmjr2zUcf6NRKr3syqAhBKekYX+8kDL27VVG+OuUw==",
|
||||
"version": "1.3.1-trx.3",
|
||||
"resolved": "https://registry.npmjs.org/@lamassu/coins/-/coins-1.3.1-trx.3.tgz",
|
||||
"integrity": "sha512-ZYbevhcXnnErrUPlev+TeIh+DV82OjzIBTEE/cVHN6iM/+tT0GLVXzuZtNghXBLZpATNOwyFGl+mcUdZJvn2PA==",
|
||||
"requires": {
|
||||
"bech32": "2.0.0",
|
||||
"big-integer": "^1.6.48",
|
||||
"bignumber.js": "^9.0.0",
|
||||
"bitcoinjs-lib": "4.0.3",
|
||||
"bitcore-lib-cash": "^8.25.25",
|
||||
"blakejs": "^1.2.1",
|
||||
"bs58check": "^2.0.2",
|
||||
"cashaddrjs": "~0.2.8",
|
||||
"crypto-js": "^3.1.9-1",
|
||||
|
|
@ -8396,9 +8397,9 @@
|
|||
}
|
||||
},
|
||||
"bitcore-lib": {
|
||||
"version": "8.25.28",
|
||||
"resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.25.28.tgz",
|
||||
"integrity": "sha512-UrNHh0Ba8GUiHUYRmm2IKlb8eomsbvk/Z6oQdaOPQoLiamiKnu45pAMqtcHg06wMDF8at54oIdoD2WEU+TQujw==",
|
||||
"version": "8.25.47",
|
||||
"resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.25.47.tgz",
|
||||
"integrity": "sha512-qDZr42HuP4P02I8kMGZUx/vvwuDsz8X3rQxXLfM0BtKzlQBcbSM7ycDkDN99Xc5jzpd4fxNQyyFXOmc6owUsrQ==",
|
||||
"requires": {
|
||||
"bech32": "=2.0.0",
|
||||
"bip-schnorr": "=0.6.4",
|
||||
|
|
@ -8413,16 +8414,16 @@
|
|||
"inherits": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
|
||||
"integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
|
||||
"integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"bitcore-lib-cash": {
|
||||
"version": "8.25.28",
|
||||
"resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-8.25.28.tgz",
|
||||
"integrity": "sha512-Zaue7z/iDdQDTNsDoX8LkxH04/pCpHKpSgbxJe2D/2n1YLi1JtzOl9Ox4agYQtR/k9SWCg4p8qJ1W7lVWVP8+A==",
|
||||
"version": "8.25.47",
|
||||
"resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-8.25.47.tgz",
|
||||
"integrity": "sha512-Qk8L0zLJPv34vSd3pbOOvjpgIi/gU6SHSmX1lJY+lwL9S16KF8fi1Lc9/RNm2tWLGiuMxrg2vKV/9U0yCuQBlQ==",
|
||||
"requires": {
|
||||
"bitcore-lib": "^8.25.28",
|
||||
"bitcore-lib": "^8.25.47",
|
||||
"bn.js": "=4.11.8",
|
||||
"bs58": "^4.0.1",
|
||||
"buffer-compare": "=1.1.1",
|
||||
|
|
@ -8434,10 +8435,15 @@
|
|||
"inherits": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
|
||||
"integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
|
||||
"integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"blakejs": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz",
|
||||
"integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ=="
|
||||
},
|
||||
"bluebird": {
|
||||
"version": "3.5.3",
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
|
||||
|
|
@ -17311,9 +17317,9 @@
|
|||
}
|
||||
},
|
||||
"keccak": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz",
|
||||
"integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==",
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz",
|
||||
"integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==",
|
||||
"requires": {
|
||||
"node-addon-api": "^2.0.0",
|
||||
"node-gyp-build": "^4.2.0",
|
||||
|
|
@ -17331,9 +17337,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"bn.js": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
|
||||
"integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
|
||||
"integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ=="
|
||||
},
|
||||
"buffer": {
|
||||
"version": "6.0.3",
|
||||
|
|
@ -18181,7 +18187,7 @@
|
|||
"merkle-lib": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz",
|
||||
"integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY="
|
||||
"integrity": "sha512-XrNQvUbn1DL5hKNe46Ccs+Tu3/PYOlrcZILuGUhb95oKBPjc/nmIC8D462PQkipVDGKRvwhn+QFg2cCdIvmDJA=="
|
||||
},
|
||||
"methods": {
|
||||
"version": "1.1.2",
|
||||
|
|
@ -18638,9 +18644,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node-gyp-build": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz",
|
||||
"integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ=="
|
||||
"version": "4.6.1",
|
||||
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz",
|
||||
"integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ=="
|
||||
},
|
||||
"node-int64": {
|
||||
"version": "0.4.0",
|
||||
|
|
@ -21120,7 +21126,7 @@
|
|||
"pushdata-bitcoin": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz",
|
||||
"integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=",
|
||||
"integrity": "sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ==",
|
||||
"requires": {
|
||||
"bitcoin-ops": "^1.3.0"
|
||||
}
|
||||
|
|
@ -29088,7 +29094,7 @@
|
|||
"wif": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz",
|
||||
"integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=",
|
||||
"integrity": "sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==",
|
||||
"requires": {
|
||||
"bs58check": "<3.0.0"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"license": "unlicense",
|
||||
"dependencies": {
|
||||
"@apollo/react-hooks": "^3.1.3",
|
||||
"@lamassu/coins": "1.2.0",
|
||||
"@lamassu/coins": "v1.3.1-trx.3",
|
||||
"@material-ui/core": "4.11.0",
|
||||
"@material-ui/icons": "4.9.1",
|
||||
"@material-ui/lab": "^4.0.0-alpha.56",
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ const Funding = () => {
|
|||
{selected && !viewHistory && !selected.errorMsg && (
|
||||
<div className={classes.main}>
|
||||
<div className={classes.firstSide}>
|
||||
<H3>Balance ({selected.display})</H3>
|
||||
<H3>Balance</H3>
|
||||
<div className={classes.coinTotal}>
|
||||
<Info1 inline noMargin>
|
||||
{`${selected.confirmedBalance} ${selected.cryptoCode}`}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import itbit from './itbit'
|
|||
import kraken from './kraken'
|
||||
import mailgun from './mailgun'
|
||||
import telnyx from './telnyx'
|
||||
import trongrid from './trongrid'
|
||||
import twilio from './twilio'
|
||||
import vonage from './vonage'
|
||||
|
||||
|
|
@ -27,5 +28,6 @@ export default {
|
|||
[binanceus.code]: binanceus,
|
||||
[cex.code]: cex,
|
||||
[ciphertrace.code]: ciphertrace,
|
||||
[trongrid.code]: trongrid,
|
||||
[binance.code]: binance
|
||||
}
|
||||
|
|
|
|||
25
new-lamassu-admin/src/pages/Services/schemas/trongrid.js
Normal file
25
new-lamassu-admin/src/pages/Services/schemas/trongrid.js
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
import * as Yup from 'yup'
|
||||
|
||||
import TextInputFormik from 'src/components/inputs/formik/TextInput'
|
||||
|
||||
export default {
|
||||
code: 'trongrid',
|
||||
name: 'Trongrid',
|
||||
title: 'Trongrid (Wallet)',
|
||||
elements: [
|
||||
{
|
||||
code: 'apiKey',
|
||||
display: 'API Key',
|
||||
component: TextInputFormik,
|
||||
face: true,
|
||||
long: true
|
||||
}
|
||||
],
|
||||
getValidationSchema: account => {
|
||||
return Yup.object().shape({
|
||||
apiKey: Yup.string('The project ID must be a string')
|
||||
.max(100, 'The project ID is too long')
|
||||
.required('The project ID is required')
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -10,6 +10,7 @@ import { ReactComponent as EthereumLogo } from 'src/styling/logos/icon-ethereum-
|
|||
import { ReactComponent as LitecoinLogo } from 'src/styling/logos/icon-litecoin-colour.svg'
|
||||
import { ReactComponent as MoneroLogo } from 'src/styling/logos/icon-monero-colour.svg'
|
||||
import { ReactComponent as TetherLogo } from 'src/styling/logos/icon-tether-colour.svg'
|
||||
import { ReactComponent as TronLogo } from 'src/styling/logos/icon-tron-colour.svg'
|
||||
import { ReactComponent as ZCashLogo } from 'src/styling/logos/icon-zcash-colour.svg'
|
||||
|
||||
const styles = {
|
||||
|
|
@ -53,9 +54,12 @@ const getLogo = code => {
|
|||
case 'ZEC':
|
||||
return ZCashLogo
|
||||
case 'USDT':
|
||||
case 'USDT_TRON':
|
||||
return TetherLogo
|
||||
case 'XMR':
|
||||
return MoneroLogo
|
||||
case 'TRX':
|
||||
return TronLogo
|
||||
default:
|
||||
return null
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ const SAVE_ACCOUNTS = gql`
|
|||
}
|
||||
`
|
||||
|
||||
const isConfigurable = it => R.contains(it)(['infura', 'bitgo'])
|
||||
const isConfigurable = it => R.contains(it)(['infura', 'bitgo', 'trongrid'])
|
||||
|
||||
const isLocalHosted = it =>
|
||||
R.contains(it)([
|
||||
|
|
@ -152,6 +152,21 @@ const ChooseWallet = ({ data: currentData, addData }) => {
|
|||
/>
|
||||
</>
|
||||
)}
|
||||
{selected === 'trongrid' && (
|
||||
<>
|
||||
<H4 noMargin>Enter wallet information</H4>
|
||||
<FormRenderer
|
||||
value={accounts.trongrid}
|
||||
save={saveWallet(selected)}
|
||||
elements={schema.trongrid.elements}
|
||||
validationSchema={schema.trongrid.getValidationSchema(
|
||||
accounts.trongrid
|
||||
)}
|
||||
buttonLabel={'Continue'}
|
||||
buttonClass={classes.formButton}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
7
new-lamassu-admin/src/styling/logos/icon-tron-colour.svg
Normal file
7
new-lamassu-admin/src/styling/logos/icon-tron-colour.svg
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="图层_1" x="0px" y="0px" viewBox="0 0 2680.2 2915.7" style="enable-background:new 0 0 2680.2 2915.7;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
#tron{fill:#EB0029;}
|
||||
</style>
|
||||
<path id="tron" class="st0" d="M1929.1,757.7L332,463.8l840.5,2114.9l1171.1-1426.8L1929.1,757.7z M1903.4,887.2l244.3,232.2l-668.2,121 L1903.4,887.2z M1334.4,1216.2L630.1,632.1l1151.1,211.8L1334.4,1216.2z M1284.2,1319.5l-114.8,949.4L550.2,710.7L1284.2,1319.5z M1390.5,1369.9l739.9-134l-848.7,1034L1390.5,1369.9z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 698 B |
|
|
@ -1,59 +0,0 @@
|
|||
import * as R from 'ramda'
|
||||
|
||||
const CRYPTO_CURRENCIES = [
|
||||
{
|
||||
cryptoCode: 'BTC',
|
||||
display: 'Bitcoin',
|
||||
code: 'bitcoin',
|
||||
unitScale: 8
|
||||
},
|
||||
{
|
||||
cryptoCode: 'ETH',
|
||||
display: 'Ethereum',
|
||||
code: 'ethereum',
|
||||
unitScale: 18
|
||||
},
|
||||
{
|
||||
cryptoCode: 'LTC',
|
||||
display: 'Litecoin',
|
||||
code: 'litecoin',
|
||||
unitScale: 8
|
||||
},
|
||||
{
|
||||
cryptoCode: 'DASH',
|
||||
display: 'Dash',
|
||||
code: 'dash',
|
||||
unitScale: 8
|
||||
},
|
||||
{
|
||||
cryptoCode: 'ZEC',
|
||||
display: 'Zcash',
|
||||
code: 'zcash',
|
||||
unitScale: 8
|
||||
},
|
||||
{
|
||||
cryptoCode: 'BCH',
|
||||
display: 'Bitcoin Cash',
|
||||
code: 'bitcoincash',
|
||||
unitScale: 8
|
||||
}
|
||||
]
|
||||
|
||||
function getCryptoCurrency(cryptoCode) {
|
||||
const coin = R.find(R.propEq('cryptoCode', cryptoCode))(CRYPTO_CURRENCIES)
|
||||
|
||||
if (!coin) throw new Error(`Unsupported crypto: ${cryptoCode}`)
|
||||
return coin
|
||||
}
|
||||
|
||||
function toUnit(cryptoAtoms, cryptoCode) {
|
||||
const cryptoRec = getCryptoCurrency(cryptoCode)
|
||||
const unitScale = cryptoRec.unitScale
|
||||
return cryptoAtoms.shiftedBy(-unitScale)
|
||||
}
|
||||
|
||||
function formatCryptoAddress(cryptoCode = '', address = '') {
|
||||
return cryptoCode === 'BCH' ? address.replace('bitcoincash:', '') : address
|
||||
}
|
||||
|
||||
export { toUnit, formatCryptoAddress }
|
||||
352
package-lock.json
generated
352
package-lock.json
generated
|
|
@ -4,6 +4,11 @@
|
|||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@adraffy/ens-normalize": {
|
||||
"version": "1.9.2",
|
||||
"resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz",
|
||||
"integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg=="
|
||||
},
|
||||
"@ampproject/remapping": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
|
||||
|
|
@ -6489,6 +6494,14 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"@haensl/subset-sum": {
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@haensl/subset-sum/-/subset-sum-3.0.5.tgz",
|
||||
"integrity": "sha512-ySEbozvn6tzZNemM+3Sm2ZBkALuwzTQnhlIhA6Sw5Ja55QOPeEtZJMtR+TqHCvxdhfP61I9XxXpqZVlyvgvcqw==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.11.2"
|
||||
}
|
||||
},
|
||||
"@hapi/hoek": {
|
||||
"version": "9.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
|
||||
|
|
@ -6957,9 +6970,9 @@
|
|||
}
|
||||
},
|
||||
"@lamassu/coins": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@lamassu/coins/-/coins-1.3.0.tgz",
|
||||
"integrity": "sha512-3+zrXV+anG2Kj9XFKQLNWPK4q6rmtGd0LvoC0aRelayOFcIWbTzS30+JKpeS75fUtam9wHARWsVU2dJEKU//8g==",
|
||||
"version": "1.3.1-trx.3",
|
||||
"resolved": "https://registry.npmjs.org/@lamassu/coins/-/coins-1.3.1-trx.3.tgz",
|
||||
"integrity": "sha512-ZYbevhcXnnErrUPlev+TeIh+DV82OjzIBTEE/cVHN6iM/+tT0GLVXzuZtNghXBLZpATNOwyFGl+mcUdZJvn2PA==",
|
||||
"requires": {
|
||||
"bech32": "2.0.0",
|
||||
"big-integer": "^1.6.48",
|
||||
|
|
@ -7052,6 +7065,21 @@
|
|||
"bn.js": "^5.2.1"
|
||||
}
|
||||
},
|
||||
"@noble/curves": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
|
||||
"integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
|
||||
"requires": {
|
||||
"@noble/hashes": "1.3.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@noble/hashes": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
|
||||
"integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@noble/ed25519": {
|
||||
"version": "1.7.3",
|
||||
"resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz",
|
||||
|
|
@ -10482,9 +10510,9 @@
|
|||
}
|
||||
},
|
||||
"bitcore-lib": {
|
||||
"version": "8.25.46",
|
||||
"resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.25.46.tgz",
|
||||
"integrity": "sha512-t2jxpi3siup0rCbLtT9Js2Vuvsk/xgmxINkaC38YdBx3XpJJ6Gtf3vYEdFc2rIbauwIJwFZvXE1L8SGys2EpVA==",
|
||||
"version": "8.25.47",
|
||||
"resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.25.47.tgz",
|
||||
"integrity": "sha512-qDZr42HuP4P02I8kMGZUx/vvwuDsz8X3rQxXLfM0BtKzlQBcbSM7ycDkDN99Xc5jzpd4fxNQyyFXOmc6owUsrQ==",
|
||||
"requires": {
|
||||
"bech32": "=2.0.0",
|
||||
"bip-schnorr": "=0.6.4",
|
||||
|
|
@ -10509,11 +10537,11 @@
|
|||
}
|
||||
},
|
||||
"bitcore-lib-cash": {
|
||||
"version": "8.25.46",
|
||||
"resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-8.25.46.tgz",
|
||||
"integrity": "sha512-7Qa4ppSetOqZjZKpbCTma5F174OcAq805K8Ix8KSmBwXRYgwCuIMdlGG8Pw1dyCn7ijSqSPuKDjmMia1DWYoMw==",
|
||||
"version": "8.25.47",
|
||||
"resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-8.25.47.tgz",
|
||||
"integrity": "sha512-Qk8L0zLJPv34vSd3pbOOvjpgIi/gU6SHSmX1lJY+lwL9S16KF8fi1Lc9/RNm2tWLGiuMxrg2vKV/9U0yCuQBlQ==",
|
||||
"requires": {
|
||||
"bitcore-lib": "^8.25.46",
|
||||
"bitcore-lib": "^8.25.47",
|
||||
"bn.js": "=4.11.8",
|
||||
"bs58": "^4.0.1",
|
||||
"buffer-compare": "=1.1.1",
|
||||
|
|
@ -20916,6 +20944,11 @@
|
|||
"strict-uri-encode": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"querystring-es3": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
|
||||
"integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA=="
|
||||
},
|
||||
"querystringify": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
|
||||
|
|
@ -23980,23 +24013,258 @@
|
|||
"integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
|
||||
},
|
||||
"tronweb": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/tronweb/-/tronweb-5.1.0.tgz",
|
||||
"integrity": "sha512-8a+mYKVUzsUWjeTHSAKcxAp82FseFTLlNLoLQ0KIL1rIt6Dy5whcyJwYatxUktbaztl55lnImHbupkKqMdIj1w==",
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/tronweb/-/tronweb-5.3.0.tgz",
|
||||
"integrity": "sha512-i03+3UviQacqdrr3VgXHDL8h/2E24BeULak4w6+yRkJaCuEyxjWOtEn1dq87ulTkHzS/vKK0zIyvW7rSxuISOA==",
|
||||
"requires": {
|
||||
"@babel/runtime": "^7.0.0",
|
||||
"@ethersproject/abi": "^5.7.0",
|
||||
"@tronweb3/google-protobuf": "^3.21.2",
|
||||
"axios": "^0.26.1",
|
||||
"bignumber.js": "^9.0.1",
|
||||
"elliptic": "^6.5.4",
|
||||
"ethers": "^5.4.4",
|
||||
"ethereum-cryptography": "^2.0.0",
|
||||
"ethers": "^6.6.0",
|
||||
"eventemitter3": "^3.1.0",
|
||||
"injectpromise": "^1.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"querystring-es3": "^0.2.1",
|
||||
"semver": "^5.6.0",
|
||||
"validator": "^13.7.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ethersproject/abi": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz",
|
||||
"integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==",
|
||||
"requires": {
|
||||
"@ethersproject/address": "^5.7.0",
|
||||
"@ethersproject/bignumber": "^5.7.0",
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/constants": "^5.7.0",
|
||||
"@ethersproject/hash": "^5.7.0",
|
||||
"@ethersproject/keccak256": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0",
|
||||
"@ethersproject/properties": "^5.7.0",
|
||||
"@ethersproject/strings": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/abstract-provider": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz",
|
||||
"integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==",
|
||||
"requires": {
|
||||
"@ethersproject/bignumber": "^5.7.0",
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0",
|
||||
"@ethersproject/networks": "^5.7.0",
|
||||
"@ethersproject/properties": "^5.7.0",
|
||||
"@ethersproject/transactions": "^5.7.0",
|
||||
"@ethersproject/web": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/abstract-signer": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz",
|
||||
"integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==",
|
||||
"requires": {
|
||||
"@ethersproject/abstract-provider": "^5.7.0",
|
||||
"@ethersproject/bignumber": "^5.7.0",
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0",
|
||||
"@ethersproject/properties": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/address": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz",
|
||||
"integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==",
|
||||
"requires": {
|
||||
"@ethersproject/bignumber": "^5.7.0",
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/keccak256": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0",
|
||||
"@ethersproject/rlp": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/base64": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz",
|
||||
"integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==",
|
||||
"requires": {
|
||||
"@ethersproject/bytes": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/bignumber": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz",
|
||||
"integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==",
|
||||
"requires": {
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0",
|
||||
"bn.js": "^5.2.1"
|
||||
}
|
||||
},
|
||||
"@ethersproject/bytes": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz",
|
||||
"integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==",
|
||||
"requires": {
|
||||
"@ethersproject/logger": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/constants": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz",
|
||||
"integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==",
|
||||
"requires": {
|
||||
"@ethersproject/bignumber": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/hash": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz",
|
||||
"integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==",
|
||||
"requires": {
|
||||
"@ethersproject/abstract-signer": "^5.7.0",
|
||||
"@ethersproject/address": "^5.7.0",
|
||||
"@ethersproject/base64": "^5.7.0",
|
||||
"@ethersproject/bignumber": "^5.7.0",
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/keccak256": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0",
|
||||
"@ethersproject/properties": "^5.7.0",
|
||||
"@ethersproject/strings": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/keccak256": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz",
|
||||
"integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==",
|
||||
"requires": {
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"js-sha3": "0.8.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/logger": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz",
|
||||
"integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig=="
|
||||
},
|
||||
"@ethersproject/networks": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz",
|
||||
"integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==",
|
||||
"requires": {
|
||||
"@ethersproject/logger": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/properties": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz",
|
||||
"integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==",
|
||||
"requires": {
|
||||
"@ethersproject/logger": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/rlp": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz",
|
||||
"integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==",
|
||||
"requires": {
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/signing-key": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz",
|
||||
"integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==",
|
||||
"requires": {
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0",
|
||||
"@ethersproject/properties": "^5.7.0",
|
||||
"bn.js": "^5.2.1",
|
||||
"elliptic": "6.5.4",
|
||||
"hash.js": "1.1.7"
|
||||
}
|
||||
},
|
||||
"@ethersproject/strings": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz",
|
||||
"integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==",
|
||||
"requires": {
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/constants": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/transactions": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz",
|
||||
"integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==",
|
||||
"requires": {
|
||||
"@ethersproject/address": "^5.7.0",
|
||||
"@ethersproject/bignumber": "^5.7.0",
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/constants": "^5.7.0",
|
||||
"@ethersproject/keccak256": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0",
|
||||
"@ethersproject/properties": "^5.7.0",
|
||||
"@ethersproject/rlp": "^5.7.0",
|
||||
"@ethersproject/signing-key": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@ethersproject/web": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz",
|
||||
"integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==",
|
||||
"requires": {
|
||||
"@ethersproject/base64": "^5.7.0",
|
||||
"@ethersproject/bytes": "^5.7.0",
|
||||
"@ethersproject/logger": "^5.7.0",
|
||||
"@ethersproject/properties": "^5.7.0",
|
||||
"@ethersproject/strings": "^5.7.0"
|
||||
}
|
||||
},
|
||||
"@noble/hashes": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
|
||||
"integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA=="
|
||||
},
|
||||
"@noble/secp256k1": {
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz",
|
||||
"integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw=="
|
||||
},
|
||||
"@scure/bip32": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz",
|
||||
"integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==",
|
||||
"requires": {
|
||||
"@noble/curves": "~1.1.0",
|
||||
"@noble/hashes": "~1.3.1",
|
||||
"@scure/base": "~1.1.0"
|
||||
}
|
||||
},
|
||||
"@scure/bip39": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
|
||||
"integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==",
|
||||
"requires": {
|
||||
"@noble/hashes": "~1.3.0",
|
||||
"@scure/base": "~1.1.0"
|
||||
}
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "18.15.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz",
|
||||
"integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q=="
|
||||
},
|
||||
"aes-js": {
|
||||
"version": "4.0.0-beta.5",
|
||||
"resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz",
|
||||
"integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q=="
|
||||
},
|
||||
"axios": {
|
||||
"version": "0.26.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
|
||||
|
|
@ -24005,10 +24273,52 @@
|
|||
"follow-redirects": "^1.14.8"
|
||||
}
|
||||
},
|
||||
"ethereum-cryptography": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz",
|
||||
"integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==",
|
||||
"requires": {
|
||||
"@noble/curves": "1.1.0",
|
||||
"@noble/hashes": "1.3.1",
|
||||
"@scure/bip32": "1.3.1",
|
||||
"@scure/bip39": "1.2.1"
|
||||
}
|
||||
},
|
||||
"ethers": {
|
||||
"version": "6.7.1",
|
||||
"resolved": "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz",
|
||||
"integrity": "sha512-qX5kxIFMfg1i+epfgb0xF4WM7IqapIIu50pOJ17aebkxxa4BacW5jFrQRmCJpDEg2ZK2oNtR5QjrQ1WDBF29dA==",
|
||||
"requires": {
|
||||
"@adraffy/ens-normalize": "1.9.2",
|
||||
"@noble/hashes": "1.1.2",
|
||||
"@noble/secp256k1": "1.7.1",
|
||||
"@types/node": "18.15.13",
|
||||
"aes-js": "4.0.0-beta.5",
|
||||
"tslib": "2.4.0",
|
||||
"ws": "8.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@noble/hashes": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz",
|
||||
"integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
|
||||
},
|
||||
"tslib": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
|
||||
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
|
||||
},
|
||||
"ws": {
|
||||
"version": "8.5.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
|
||||
"integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -24497,9 +24807,9 @@
|
|||
}
|
||||
},
|
||||
"validator": {
|
||||
"version": "13.9.0",
|
||||
"resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz",
|
||||
"integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA=="
|
||||
"version": "13.11.0",
|
||||
"resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz",
|
||||
"integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ=="
|
||||
},
|
||||
"value-or-promise": {
|
||||
"version": "1.0.11",
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
"@ethereumjs/tx": "^3.5.1",
|
||||
"@graphql-tools/merge": "^6.2.5",
|
||||
"@haensl/subset-sum": "^3.0.5",
|
||||
"@lamassu/coins": "1.3.0",
|
||||
"@lamassu/coins": "v1.3.1-trx.3",
|
||||
"@simplewebauthn/server": "^3.0.0",
|
||||
"@vonage/auth": "^1.5.0",
|
||||
"@vonage/sms": "^1.7.0",
|
||||
|
|
@ -83,6 +83,7 @@
|
|||
"socket.io-client": "^2.0.3",
|
||||
"talisman": "^0.20.0",
|
||||
"telnyx": "^1.25.5",
|
||||
"tronweb": "^5.3.0",
|
||||
"twilio": "^3.6.1",
|
||||
"uuid": "8.3.2",
|
||||
"web3": "1.7.1",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue