diff --git a/.eslintrc.js b/.eslintrc.js index 9c0bc07e9b..d6fe5b4b6a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -74,6 +74,8 @@ module.exports = { ], 'import/no-unassigned-import': 'off', + 'import/no-extraneous-dependencies': 'off', + 'node/no-extraneous-import': 'off', 'no-invalid-this': 'off', '@babel/no-invalid-this': 'error', diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 7fb8285907..0ad518bac1 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -3792,5 +3792,12 @@ }, "zeroGasPriceOnSpeedUpError": { "message": "Zero gas price on speed up" + }, + + "aptos": { + "message": "Aptos" + }, + "pontem": { + "message": "Pontem" } } diff --git a/app/images/aptos_logo.svg b/app/images/aptos_logo.svg new file mode 100644 index 0000000000..a83e87cfff --- /dev/null +++ b/app/images/aptos_logo.svg @@ -0,0 +1 @@ + diff --git a/app/scripts/controllers/network/createAptosRestClient.js b/app/scripts/controllers/network/createAptosRestClient.js new file mode 100644 index 0000000000..55863b2e08 --- /dev/null +++ b/app/scripts/controllers/network/createAptosRestClient.js @@ -0,0 +1,39 @@ +import { createScaffoldMiddleware, mergeMiddleware } from 'json-rpc-engine'; +import { + createBlockRefMiddleware, + createRetryOnEmptyMiddleware, + createBlockCacheMiddleware, + createInflightCacheMiddleware, + createBlockTrackerInspectorMiddleware, + providerFromMiddleware, +} from 'eth-json-rpc-middleware'; + +import { createFetchMiddleware } from '@pontem/pontem-aptos-middleware'; +import { PollingBlockTracker } from '@pontem/pontem-block-tracker'; + +export default function createAptosRestClient({ rpcUrl, chainId, network }) { + const aptosMiddleware = createFetchMiddleware({ + rpcUrl, + maxAttempts: 5, + }); + const provider = providerFromMiddleware(aptosMiddleware); + const blockTracker = new PollingBlockTracker({ provider }); + + const networkMiddleware = mergeMiddleware([ + createChainIdAndNetworkMiddleware(chainId, network), + createBlockCacheMiddleware({ blockTracker }), + createInflightCacheMiddleware(), + createBlockRefMiddleware({ blockTracker, provider }), + createRetryOnEmptyMiddleware({ blockTracker, provider }), + createBlockTrackerInspectorMiddleware({ blockTracker }), + aptosMiddleware, + ]); + return { networkMiddleware, blockTracker }; +} + +function createChainIdAndNetworkMiddleware(chainId, network) { + return createScaffoldMiddleware({ + eth_chainId: chainId, + net_version: network, + }); +} diff --git a/app/scripts/controllers/network/createInfuraClient.js b/app/scripts/controllers/network/createInfuraClient.js index ff143bff8c..239aa01d8f 100644 --- a/app/scripts/controllers/network/createInfuraClient.js +++ b/app/scripts/controllers/network/createInfuraClient.js @@ -24,6 +24,7 @@ export default function createInfuraClient({ network, projectId }) { const blockTracker = new PollingBlockTracker({ provider: infuraProvider }); const networkMiddleware = mergeMiddleware([ + createCustomMiddleware(), createNetworkAndChainIdMiddleware({ network }), createBlockCacheMiddleware({ blockTracker }), createInflightCacheMiddleware(), @@ -35,6 +36,14 @@ export default function createInfuraClient({ network, projectId }) { return { networkMiddleware, blockTracker }; } +function createCustomMiddleware() { + return (req, res, next) => { + console.log('[Pontem] middleware', req, res); + + return next(); + }; +} + function createNetworkAndChainIdMiddleware({ network }) { if (!NETWORK_TYPE_TO_ID_MAP[network]) { throw new Error(`createInfuraClient - unknown network "${network}"`); diff --git a/app/scripts/controllers/network/createJsonRpcClient.js b/app/scripts/controllers/network/createJsonRpcClient.js index d4e412b8f7..12ca4907b8 100644 --- a/app/scripts/controllers/network/createJsonRpcClient.js +++ b/app/scripts/controllers/network/createJsonRpcClient.js @@ -39,6 +39,7 @@ export default function createJsonRpcClient({ rpcUrl, chainId }) { function createChainIdMiddleware(chainId) { return (req, res, next, end) => { + console.log('[Pontem] middleware', req, res); if (req.method === 'eth_chainId') { res.result = chainId; return end(); diff --git a/app/scripts/controllers/network/network.js b/app/scripts/controllers/network/network.js index 8194742179..446fbf7e24 100644 --- a/app/scripts/controllers/network/network.js +++ b/app/scripts/controllers/network/network.js @@ -8,16 +8,15 @@ import { createSwappableProxy, createEventEmitterProxy, } from 'swappable-obj-proxy'; -import EthQuery from 'eth-query'; import { RINKEBY, MAINNET, - INFURA_PROVIDER_TYPES, + DEFAULT_PROVIDER_TYPES, NETWORK_TYPE_RPC, NETWORK_TYPE_TO_ID_MAP, MAINNET_CHAIN_ID, RINKEBY_CHAIN_ID, - INFURA_BLOCKED_KEY, + INFURA_BLOCKED_KEY, CHAIN_ID_TO_RPC_URL_MAP, CHAIN_ID_TO_TYPE_MAP, } from '../../../../shared/constants/network'; import { SECOND } from '../../../../shared/constants/time'; import { @@ -28,6 +27,8 @@ import getFetchWithTimeout from '../../../../shared/modules/fetch-with-timeout'; import createMetamaskMiddleware from './createMetamaskMiddleware'; import createInfuraClient from './createInfuraClient'; import createJsonRpcClient from './createJsonRpcClient'; +import createAptosRestClient from './createAptosRestClient'; +import PontemQuery from '@pontem/pontem-query'; const env = process.env.METAMASK_ENV; const fetchWithTimeout = getFetchWithTimeout(SECOND * 30); @@ -47,7 +48,7 @@ if (process.env.IN_TEST) { } const defaultProviderConfig = { - ticker: 'ETH', + ticker: 'APTOS', ...defaultProviderConfigOpts, }; @@ -142,8 +143,9 @@ export default class NetworkController extends EventEmitter { getLatestBlock() { return new Promise((resolve, reject) => { const { provider } = this.getProviderAndBlockTracker(); - const ethQuery = new EthQuery(provider); - ethQuery.sendAsync( + const pontemQuery = new PontemQuery(provider); + console.log('[Pontem] get block by number'); + pontemQuery.sendAsync( { method: 'eth_getBlockByNumber', params: ['latest', false] }, (err, block) => { if (err) { @@ -234,18 +236,20 @@ export default class NetworkController extends EventEmitter { } // Ping the RPC endpoint so we can confirm that it works - const ethQuery = new EthQuery(this._provider); + const pontemQuery = new PontemQuery(this._provider); const initialNetwork = this.getNetworkState(); - const { type } = this.getProviderConfig(); - const isInfura = INFURA_PROVIDER_TYPES.includes(type); + // const { type } = this.getProviderConfig(); + // const isInfura = INFURA_PROVIDER_TYPES.includes(type); - if (isInfura) { - this._checkInfuraAvailability(type); - } else { - this.emit(NETWORK_EVENTS.INFURA_IS_UNBLOCKED); - } + // if (isInfura) { + // this._checkInfuraAvailability(type); + // } else { + // this.emit(NETWORK_EVENTS.INFURA_IS_UNBLOCKED); + // } + + this.emit(NETWORK_EVENTS.INFURA_IS_UNBLOCKED); - ethQuery.sendAsync({ method: 'net_version' }, (err, networkVersion) => { + pontemQuery.sendAsync({ method: 'net_version' }, (err, networkVersion) => { const currentNetwork = this.getNetworkState(); if (initialNetwork === currentNetwork) { if (err) { @@ -257,7 +261,7 @@ export default class NetworkController extends EventEmitter { this.setNetworkState(networkVersion); // look up EIP-1559 support - this.getEIP1559Compatibility(); + // this.getEIP1559Compatibility(); } }); } @@ -267,7 +271,7 @@ export default class NetworkController extends EventEmitter { return NETWORK_TYPE_TO_ID_MAP[type]?.chainId || configChainId; } - setRpcTarget(rpcUrl, chainId, ticker = 'ETH', nickname = '', rpcPrefs) { + setRpcTarget(rpcUrl, chainId, ticker = 'APTOS', nickname = '', rpcPrefs) { assert.ok( isPrefixedFormattedHexString(chainId), `Invalid chain ID "${chainId}": invalid hex string.`, @@ -293,7 +297,7 @@ export default class NetworkController extends EventEmitter { `NetworkController - cannot call "setProviderType" with type "${NETWORK_TYPE_RPC}". Use "setRpcTarget"`, ); assert.ok( - INFURA_PROVIDER_TYPES.includes(type), + DEFAULT_PROVIDER_TYPES.includes(type), `Unknown Infura provider type "${type}".`, ); const { chainId } = NETWORK_TYPE_TO_ID_MAP[type]; @@ -301,7 +305,7 @@ export default class NetworkController extends EventEmitter { type, rpcUrl: '', chainId, - ticker: 'ETH', + ticker: 'APTOS', nickname: '', }); } @@ -393,18 +397,34 @@ export default class NetworkController extends EventEmitter { } _configureProvider({ type, rpcUrl, chainId }) { - // infura type-based endpoints - const isInfura = INFURA_PROVIDER_TYPES.includes(type); - if (isInfura) { - this._configureInfuraProvider(type, this._infuraProjectId); - // url-based rpc endpoints - } else if (type === NETWORK_TYPE_RPC) { - this._configureStandardProvider(rpcUrl, chainId); - } else { + const predefinedRpcUrl = rpcUrl || CHAIN_ID_TO_RPC_URL_MAP[chainId]; + const network = CHAIN_ID_TO_TYPE_MAP[chainId] + + if(!predefinedRpcUrl) { throw new Error( - `NetworkController - _configureProvider - unknown type "${type}"`, + `NetworkController - _configureProvider - rpc url is undefined. Network: "${type}". Chain ID: "${chainId}"`, ); } + + if(!network) { + throw new Error( + `NetworkController - _configureProvider - network is undefined. Network: "${type}". Chain ID: "${chainId}"`, + ); + } + + console.log('[Pontem.NetworkController._configureProvider]', { rpcUrl: predefinedRpcUrl, type, chainId, network }) + this._configureStandardProvider(predefinedRpcUrl, chainId, network); + + // if (isInfura) { + // this._configureInfuraProvider(type, this._infuraProjectId); + // // url-based rpc endpoints + // } else if (type === NETWORK_TYPE_RPC) { + // this._configureStandardProvider(rpcUrl, chainId); + // } else { + // throw new Error( + // `NetworkController - _configureProvider - unknown type "${type}"`, + // ); + // } } _configureInfuraProvider(type, projectId) { @@ -416,9 +436,9 @@ export default class NetworkController extends EventEmitter { this._setNetworkClient(networkClient); } - _configureStandardProvider(rpcUrl, chainId) { + _configureStandardProvider(rpcUrl, chainId, network) { log.info('NetworkController - configureStandardProvider', rpcUrl); - const networkClient = createJsonRpcClient({ rpcUrl, chainId }); + const networkClient = createAptosRestClient({ rpcUrl, chainId, network }); this._setNetworkClient(networkClient); } diff --git a/app/scripts/controllers/transactions/index.js b/app/scripts/controllers/transactions/index.js index 04eae26f8c..f66f550378 100644 --- a/app/scripts/controllers/transactions/index.js +++ b/app/scripts/controllers/transactions/index.js @@ -7,7 +7,8 @@ import abi from 'human-standard-token-abi'; import Common from '@ethereumjs/common'; import { TransactionFactory } from '@ethereumjs/tx'; import { ethers } from 'ethers'; -import NonceTracker from 'nonce-tracker'; +import NonceTracker from '@pontem/nonce-tracker'; + import log from 'loglevel'; import BigNumber from 'bignumber.js'; import cleanErrorStack from '../../lib/cleanErrorStack'; @@ -53,6 +54,7 @@ import TransactionStateManager from './tx-state-manager'; import TxGasUtil from './tx-gas-utils'; import PendingTransactionTracker from './pending-tx-tracker'; import * as txUtils from './lib/util'; +import PontemQuery from '@pontem/pontem-query'; const hstInterface = new ethers.utils.Interface(abi); @@ -133,6 +135,7 @@ export default class TransactionController extends EventEmitter { this.memStore = new ObservableStore({}); this.query = new EthQuery(this.provider); + this.pontemQuery = new PontemQuery(this.provider); this.txGasUtil = new TxGasUtil(this.provider); this._mapMethods(); @@ -165,7 +168,19 @@ export default class TransactionController extends EventEmitter { this.pendingTxTracker = new PendingTransactionTracker({ provider: this.provider, nonceTracker: this.nonceTracker, - publishTransaction: (rawTx) => this.query.sendRawTransaction(rawTx), + publishTransaction: (rawTx) => { + return (new Promise((resolve, reject) => { + this.pontemQuery.submitTransaction(rawTx, (err, response) => { + if(err) { + reject(err); + return; + } + + resolve(response.hash); + }) + }) + ); + }, getPendingTransactions: () => { const pending = this.txStateManager.getPendingTransactions(); const approved = this.txStateManager.getApprovedTransactions(); @@ -1054,15 +1069,54 @@ export default class TransactionController extends EventEmitter { }; // sign tx const fromAddress = txParams.from; - const common = await this.getCommonConfiguration(txParams.from); - const unsignedEthTx = TransactionFactory.fromTxData(txParams, { common }); - const signedEthTx = await this.signEthTx(unsignedEthTx, fromAddress); + console.log('[Pontem][TransactionController] txParams', { txParams, amount: new BigNumber(txParams.value, 16).toString(10) }); + + // TODO move into create tx step + const payload = { + sender: fromAddress, + sequence_number: parseInt(txParams.nonce, 16).toString(), + max_gas_amount: "1000", + gas_unit_price: "1", + gas_currency_code: "XUS", + expiration_timestamp_secs: (Math.floor(Date.now() / 1000) + 600).toString(), + payload: { + type: "script_function_payload", + function: "0x1::TestCoin::transfer", + type_arguments: [], + arguments: [ + txParams.to, + new BigNumber(txParams.value, 16).div(new BigNumber(10, 10).pow(18)).toString(10) + ] + }, + } + + const msgForSign = await (new Promise((resolve, reject) => { + this.pontemQuery.createSignMessage(payload, (err, response) => { + if(err) { + reject(err); + return + } + + resolve(response) + }) + })).then(response => response.message) + + console.log('[Pontem][TransactionController] msgForSign', { msgForSign }); + + // const common = await this.getCommonConfiguration(txParams.from); + // console.log('[Pontem][TransactionController] getCommonConfiguration', { common }); + // const unsignedEthTx = TransactionFactory.fromTxData(txParams, { common }); + // console.log('[Pontem][TransactionController] unsignedEthTx', { unsignedEthTx }); + const signature = await this.signEthTx(msgForSign, fromAddress); + payload.signature = signature + + console.log('[Pontem][TransactionController] signed tx', payload); // add r,s,v values for provider request purposes see createMetamaskMiddleware // and JSON rpc standard for further explanation - txMeta.r = bufferToHex(signedEthTx.r); - txMeta.s = bufferToHex(signedEthTx.s); - txMeta.v = bufferToHex(signedEthTx.v); + // txMeta.r = bufferToHex(signedEthTx.r); + // txMeta.s = bufferToHex(signedEthTx.s); + // txMeta.v = bufferToHex(signedEthTx.v); this.txStateManager.updateTransaction( txMeta, @@ -1071,8 +1125,9 @@ export default class TransactionController extends EventEmitter { // set state to signed this.txStateManager.setTxStatusSigned(txMeta.id); - const rawTx = bufferToHex(signedEthTx.serialize()); - return rawTx; + // const rawTx = bufferToHex(signedEthTx.serialize()); + // return rawTx; + return payload } /** @@ -1083,6 +1138,9 @@ export default class TransactionController extends EventEmitter { * @returns {Promise} */ async publishTransaction(txId, rawTx) { + console.log('[Pontem][TransactionController] publishTransaction', { + txId, rawTx + }); const txMeta = this.txStateManager.getTransaction(txId); txMeta.rawTx = rawTx; if (txMeta.type === TRANSACTION_TYPES.SWAP) { @@ -1095,7 +1153,21 @@ export default class TransactionController extends EventEmitter { ); let txHash; try { - txHash = await this.query.sendRawTransaction(rawTx); + txHash = await (new Promise((resolve, reject) => { + this.pontemQuery.submitTransaction(rawTx, (err, response) => { + if(err) { + reject(err); + return; + } + + resolve(response.hash); + }) + }) + ); + + console.log('[Pontem][TransactionController] publishTransaction txHash', { + txHash + }); } catch (error) { if (error.message.toLowerCase().includes('known transaction')) { txHash = keccak(toBuffer(addHexPrefix(rawTx), 'hex')).toString('hex'); @@ -1122,6 +1194,9 @@ export default class TransactionController extends EventEmitter { * @returns {Promise} */ async confirmTransaction(txId, txReceipt, baseFeePerGas, blockTimestamp) { + console.log('[Pontem][TransactionController] confirmTransaction', { + txId, txReceipt, baseFeePerGas, blockTimestamp + }); // get the txReceipt before marking the transaction confirmed // to ensure the receipt is gotten before the ui revives the tx const txMeta = this.txStateManager.getTransaction(txId); @@ -1131,7 +1206,8 @@ export default class TransactionController extends EventEmitter { } try { - const gasUsed = txUtils.normalizeTxReceiptGasUsed(txReceipt.gasUsed); + // const gasUsed = txUtils.normalizeTxReceiptGasUsed(txReceipt.gasUsed); + const gasUsed = txReceipt.gas_used; txMeta.txReceipt = { ...txReceipt, @@ -1157,8 +1233,10 @@ export default class TransactionController extends EventEmitter { ); } - if (txReceipt.status === '0x0') { + if (txReceipt.success === false) { + console.log('[Pontem][TransactionController] confirmTransaction tx not success'); metricsParams.status = METRICS_STATUS_FAILED; + metricsParams.error = txReceipt.vm_status; // metricsParams.error = TODO: figure out a way to get the on-chain failure reason } diff --git a/app/scripts/controllers/transactions/lib/util.js b/app/scripts/controllers/transactions/lib/util.js index 9a19ca573c..8bee478f22 100644 --- a/app/scripts/controllers/transactions/lib/util.js +++ b/app/scripts/controllers/transactions/lib/util.js @@ -131,6 +131,7 @@ function ensureProperTransactionEnvelopeTypeProvided(txParams, field) { * @throws {Error} if the tx params contains invalid fields */ export function validateTxParams(txParams, eip1559Compatibility = true) { + console.log('[Pontem] called validateTxParams', { txParams }); if (!txParams || typeof txParams !== 'object' || Array.isArray(txParams)) { throw ethErrors.rpc.invalidParams( 'Invalid transaction params: must be an object.', @@ -148,6 +149,7 @@ export function validateTxParams(txParams, eip1559Compatibility = true) { } Object.entries(txParams).forEach(([key, value]) => { + // validate types switch (key) { case 'from': diff --git a/app/scripts/controllers/transactions/pending-tx-tracker.js b/app/scripts/controllers/transactions/pending-tx-tracker.js index 02b4cbeb4f..71463d8288 100644 --- a/app/scripts/controllers/transactions/pending-tx-tracker.js +++ b/app/scripts/controllers/transactions/pending-tx-tracker.js @@ -1,7 +1,7 @@ import EventEmitter from 'safe-event-emitter'; import log from 'loglevel'; -import EthQuery from 'ethjs-query'; import { TRANSACTION_STATUSES } from '../../../../shared/constants/transaction'; +import PontemQuery from '@pontem/pontem-query'; /** * Event emitter utility class for tracking the transactions as they @@ -40,7 +40,7 @@ export default class PendingTransactionTracker extends EventEmitter { */ constructor(config) { super(); - this.query = config.query || new EthQuery(config.provider); + this.query = config.query || new PontemQuery(config.provider); this.nonceTracker = config.nonceTracker; this.getPendingTransactions = config.getPendingTransactions; this.getCompletedTransactions = config.getCompletedTransactions; @@ -195,15 +195,31 @@ export default class PendingTransactionTracker extends EventEmitter { } try { - const transactionReceipt = await this.query.getTransactionReceipt(txHash); - if (transactionReceipt?.blockNumber) { + const transactionReceipt = await (new Promise((resolve, reject) => { + this.query.getTransaction(txHash, (err, response) => { + if(err) { + return reject(err); + } + + return resolve(response) + }) + })); + + if(transactionReceipt.success === false) { + const noTxHashErr = new Error( + `We had an error while submitting this transaction, please check transaction details and try again. (${transactionReceipt.vm_status})`, + ); + noTxHashErr.name = 'VMExecuteError'; + this.emit('tx:failed', txId, noTxHashErr); + + return; + } + + if (transactionReceipt?.version) { const { - baseFeePerGas, + gas_used: baseFeePerGas, timestamp: blockTimestamp, - } = await this.query.getBlockByHash( - transactionReceipt?.blockHash, - false, - ); + } = transactionReceipt; this.emit( 'tx:confirmed', @@ -236,29 +252,30 @@ export default class PendingTransactionTracker extends EventEmitter { * @private */ async _checkIfTxWasDropped(txMeta) { - const { - hash: txHash, - txParams: { nonce, from }, - } = txMeta; - const networkNextNonce = await this.query.getTransactionCount(from); - - if (parseInt(nonce, 16) >= networkNextNonce.toNumber()) { - return false; - } - - if (!this.droppedBlocksBufferByHash.has(txHash)) { - this.droppedBlocksBufferByHash.set(txHash, 0); - } - - const currentBlockBuffer = this.droppedBlocksBufferByHash.get(txHash); - - if (currentBlockBuffer < this.DROPPED_BUFFER_COUNT) { - this.droppedBlocksBufferByHash.set(txHash, currentBlockBuffer + 1); - return false; - } + return false; + // const { + // hash: txHash, + // txParams: { nonce, from }, + // } = txMeta; + // const networkNextNonce = await this.query.getTransactionCount(from); - this.droppedBlocksBufferByHash.delete(txHash); - return true; + // if (parseInt(nonce, 16) >= networkNextNonce.toNumber()) { + // return false; + // } + // + // if (!this.droppedBlocksBufferByHash.has(txHash)) { + // this.droppedBlocksBufferByHash.set(txHash, 0); + // } + // + // const currentBlockBuffer = this.droppedBlocksBufferByHash.get(txHash); + // + // if (currentBlockBuffer < this.DROPPED_BUFFER_COUNT) { + // this.droppedBlocksBufferByHash.set(txHash, currentBlockBuffer + 1); + // return false; + // } + // + // this.droppedBlocksBufferByHash.delete(txHash); + // return true; } /** diff --git a/app/scripts/first-time-state.js b/app/scripts/first-time-state.js index 8579218896..dea9c54619 100644 --- a/app/scripts/first-time-state.js +++ b/app/scripts/first-time-state.js @@ -13,8 +13,8 @@ const initialState = { frequentRpcListDetail: [ { rpcUrl: 'http://localhost:8545', - chainId: '0x539', - ticker: 'ETH', + chainId: '0x61', + ticker: 'APTOS', nickname: 'Localhost 8545', rpcPrefs: {}, }, diff --git a/app/scripts/lib/account-tracker.js b/app/scripts/lib/account-tracker.js index 7abe349a35..61942daec9 100644 --- a/app/scripts/lib/account-tracker.js +++ b/app/scripts/lib/account-tracker.js @@ -7,27 +7,27 @@ * on each new block. */ -import EthQuery from 'eth-query'; - import { ObservableStore } from '@metamask/obs-store'; import log from 'loglevel'; import pify from 'pify'; import Web3 from 'web3'; import SINGLE_CALL_BALANCES_ABI from 'single-call-balance-checker-abi'; -import { - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, - KOVAN_CHAIN_ID, -} from '../../../shared/constants/network'; - -import { - SINGLE_CALL_BALANCES_ADDRESS, - SINGLE_CALL_BALANCES_ADDRESS_RINKEBY, - SINGLE_CALL_BALANCES_ADDRESS_ROPSTEN, - SINGLE_CALL_BALANCES_ADDRESS_KOVAN, -} from '../constants/contracts'; +// import { +// MAINNET_CHAIN_ID, +// RINKEBY_CHAIN_ID, +// ROPSTEN_CHAIN_ID, +// KOVAN_CHAIN_ID, +// } from '../../../shared/constants/network'; +// +// import { +// SINGLE_CALL_BALANCES_ADDRESS, +// SINGLE_CALL_BALANCES_ADDRESS_RINKEBY, +// SINGLE_CALL_BALANCES_ADDRESS_ROPSTEN, +// SINGLE_CALL_BALANCES_ADDRESS_KOVAN, +// } from '../constants/contracts'; import { bnToHex } from './util'; +import PontemQuery from '@pontem/pontem-query'; +import BigNumber from 'bignumber.js'; /** * This module is responsible for tracking any number of accounts and caching their current balances & transaction @@ -60,7 +60,7 @@ export default class AccountTracker { this.store = new ObservableStore(initState); this._provider = opts.provider; - this._query = pify(new EthQuery(this._provider)); + this._query = pify(new PontemQuery(this._provider)); this._blockTracker = opts.blockTracker; // blockTracker.currentBlock may be null this._currentBlockNumber = this._blockTracker.getCurrentBlock(); @@ -176,12 +176,12 @@ export default class AccountTracker { this._currentBlockNumber = blockNumber; // block gasLimit polling shouldn't be in account-tracker shouldn't be here... - const currentBlock = await this._query.getBlockByNumber(blockNumber, false); - if (!currentBlock) { - return; - } - const currentBlockGasLimit = currentBlock.gasLimit; - this.store.updateState({ currentBlockGasLimit }); + // const currentBlock = await this._query.getBlockByNumber(blockNumber, false); + // if (!currentBlock) { + // return; + // } + // const currentBlockGasLimit = currentBlock.gasLimit; + // this.store.updateState({ currentBlockGasLimit }); try { await this._updateAccounts(); @@ -199,40 +199,42 @@ export default class AccountTracker { async _updateAccounts() { const { accounts } = this.store.getState(); const addresses = Object.keys(accounts); - const chainId = this.getCurrentChainId(); - - switch (chainId) { - case MAINNET_CHAIN_ID: - await this._updateAccountsViaBalanceChecker( - addresses, - SINGLE_CALL_BALANCES_ADDRESS, - ); - break; - - case RINKEBY_CHAIN_ID: - await this._updateAccountsViaBalanceChecker( - addresses, - SINGLE_CALL_BALANCES_ADDRESS_RINKEBY, - ); - break; + // const chainId = this.getCurrentChainId(); + // + // switch (chainId) { + // case MAINNET_CHAIN_ID: + // await this._updateAccountsViaBalanceChecker( + // addresses, + // SINGLE_CALL_BALANCES_ADDRESS, + // ); + // break; + // + // case RINKEBY_CHAIN_ID: + // await this._updateAccountsViaBalanceChecker( + // addresses, + // SINGLE_CALL_BALANCES_ADDRESS_RINKEBY, + // ); + // break; + // + // case ROPSTEN_CHAIN_ID: + // await this._updateAccountsViaBalanceChecker( + // addresses, + // SINGLE_CALL_BALANCES_ADDRESS_ROPSTEN, + // ); + // break; + // + // case KOVAN_CHAIN_ID: + // await this._updateAccountsViaBalanceChecker( + // addresses, + // SINGLE_CALL_BALANCES_ADDRESS_KOVAN, + // ); + // break; + // + // default: + // await Promise.all(addresses.map(this._updateAccount.bind(this))); + // } - case ROPSTEN_CHAIN_ID: - await this._updateAccountsViaBalanceChecker( - addresses, - SINGLE_CALL_BALANCES_ADDRESS_ROPSTEN, - ); - break; - - case KOVAN_CHAIN_ID: - await this._updateAccountsViaBalanceChecker( - addresses, - SINGLE_CALL_BALANCES_ADDRESS_KOVAN, - ); - break; - - default: - await Promise.all(addresses.map(this._updateAccount.bind(this))); - } + await Promise.all(addresses.map(this._updateAccount.bind(this))); } /** @@ -244,7 +246,15 @@ export default class AccountTracker { */ async _updateAccount(address) { // query balance - const balance = await this._query.getBalance(address); + const resources = await this._query.getAccountResources(address); + + let balance = '0x0'; + (resources || []).forEach(resource => { + if(resource.type === '0x1::TestCoin::Balance') { + balance = bnToHex(new BigNumber(resource.data.coin.value, 10).times(new BigNumber(10, 10).pow(18))) + } + }) + const result = { address, balance }; // update accounts state const { accounts } = this.store.getState(); diff --git a/app/scripts/lib/seed-phrase-verifier.js b/app/scripts/lib/seed-phrase-verifier.js index e1c18c1eba..8b42d54307 100644 --- a/app/scripts/lib/seed-phrase-verifier.js +++ b/app/scripts/lib/seed-phrase-verifier.js @@ -1,4 +1,4 @@ -import KeyringController from 'eth-keyring-controller'; +import KeyringController from '@pontem/pontem-keyring-controller'; import log from 'loglevel'; const seedPhraseVerifier = { diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 2de2dd25e0..9e11263168 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -8,7 +8,7 @@ import createEngineStream from 'json-rpc-middleware-stream/engineStream'; import createFilterMiddleware from 'eth-json-rpc-filters'; import createSubscriptionManager from 'eth-json-rpc-filters/subscriptionManager'; import { providerAsMiddleware } from 'eth-json-rpc-middleware'; -import KeyringController from 'eth-keyring-controller'; +import KeyringController from '@pontem/pontem-keyring-controller'; import { errorCodes as rpcErrorCodes, ethErrors } from 'eth-rpc-errors'; import { Mutex } from 'await-semaphore'; import { stripHexPrefix } from 'ethereumjs-util'; @@ -17,9 +17,13 @@ import TrezorKeyring from 'eth-trezor-keyring'; import LedgerBridgeKeyring from '@metamask/eth-ledger-bridge-keyring'; import LatticeKeyring from 'eth-lattice-keyring'; import { MetaMaskKeyring as QRHardwareKeyring } from '@keystonehq/metamask-airgapped-keyring'; -import EthQuery from 'eth-query'; +// import EthQuery from 'eth-query'; +import PontemQuery from '@pontem/pontem-query'; import nanoid from 'nanoid'; import { captureException } from '@sentry/browser'; + +// import OneKeyKeyring from '@starcoin/stc-onekey-keyring'; + import { AddressBookController, ApprovalController, @@ -27,7 +31,7 @@ import { CurrencyRateController, PhishingController, NotificationController, - GasFeeController, + // GasFeeController, TokenListController, TokensController, TokenRatesController, @@ -37,6 +41,8 @@ import { PermissionController, SubjectMetadataController, } from '@metamask/controllers'; +import GasFeeController from '@pontem/pontem-controllers/dist/gas/GasFeeController'; + import SmartTransactionsController from '@metamask/smart-transactions-controller'; ///: BEGIN:ONLY_INCLUDE_IN(flask) import { SnapController } from '@metamask/snap-controllers'; @@ -144,6 +150,7 @@ export default class MetamaskController extends EventEmitter { */ constructor(opts) { super(); + console.log('[Pontem] MetamaskController', opts); this.defaultMaxListeners = 20; @@ -498,6 +505,7 @@ export default class MetamaskController extends EventEmitter { LatticeKeyring, QRHardwareKeyring, ]; + // const additionalKeyrings = [OneKeyKeyring]; this.keyringController = new KeyringController({ keyringTypes: additionalKeyrings, initState: initState.KeyringController, @@ -598,6 +606,7 @@ export default class MetamaskController extends EventEmitter { `${this.permissionController.name}:getEndowments`, `${this.permissionController.name}:getPermissions`, `${this.permissionController.name}:hasPermission`, + `${this.permissionController.name}:hasPermissions`, `${this.permissionController.name}:requestPermissions`, `${this.permissionController.name}:revokeAllPermissions`, ], @@ -1502,6 +1511,7 @@ export default class MetamaskController extends EventEmitter { setLocked: this.setLocked.bind(this), createNewVaultAndKeychain: this.createNewVaultAndKeychain.bind(this), createNewVaultAndRestore: this.createNewVaultAndRestore.bind(this), + getPublicKeyFor: this.keyringController.getPublicKeyFor.bind(keyringController), exportAccount: keyringController.exportAccount.bind(keyringController), // txController @@ -1748,6 +1758,9 @@ export default class MetamaskController extends EventEmitter { collectibleDetectionController, ) : null, + + // Faucet + requestTokensFor: this.requestTokensFor.bind(this), }; } @@ -1827,11 +1840,11 @@ export default class MetamaskController extends EventEmitter { seedPhraseAsBuffer, ); - const ethQuery = new EthQuery(this.provider); + const pontemQuery = new PontemQuery(this.provider); accounts = await keyringController.getAccounts(); lastBalance = await this.getBalance( accounts[accounts.length - 1], - ethQuery, + pontemQuery, ); const primaryKeyring = keyringController.getKeyringsByType( @@ -1847,7 +1860,7 @@ export default class MetamaskController extends EventEmitter { accounts = await keyringController.getAccounts(); lastBalance = await this.getBalance( accounts[accounts.length - 1], - ethQuery, + pontemQuery, ); } @@ -1877,16 +1890,19 @@ export default class MetamaskController extends EventEmitter { * Get an account balance from the AccountTracker or request it directly from the network. * * @param {string} address - The account address - * @param {EthQuery} ethQuery - The EthQuery instance to use when asking the network + * @param {PontemQuery} pontemQuery - The PontemQuery instance to use when asking the network */ - getBalance(address, ethQuery) { + getBalance(address, pontemQuery) { return new Promise((resolve, reject) => { + console.log('[Pontem] getBalance'); const cached = this.accountTracker.store.getState().accounts[address]; if (cached && cached.balance) { + console.log('[Pontem] getBalance cached', cached); resolve(cached.balance); } else { - ethQuery.getBalance(address, (error, balance) => { + pontemQuery.getBalance(address, (error, balance) => { + console.log('[Pontem] getBalance response', balance); if (error) { reject(error); log.error(error); @@ -2037,7 +2053,7 @@ export default class MetamaskController extends EventEmitter { this.setLedgerTransportPreference(transportPreference); - return this.keyringController.fullUpdate(); + return await this.keyringController.fullUpdate(); } /** @@ -2253,6 +2269,7 @@ export default class MetamaskController extends EventEmitter { * @returns {} keyState */ async addNewAccount() { + console.log('[Pontem] addNewAccount'); const primaryKeyring = this.keyringController.getKeyringsByType( 'HD Key Tree', )[0]; @@ -2274,6 +2291,18 @@ export default class MetamaskController extends EventEmitter { }); const { identities } = this.preferencesController.store.getState(); + console.log('[Pontem] addNewAccount', { ...keyState, identities }); + + for (const [address] of Object.entries(identities)) { + const ppk = await this.keyringController.exportAccount(address); + + console.log('[Pontem] Account info', { + ppk, + pub: await this.keyringController.getPublicKeyFor(address), + address + }); + } + return { ...keyState, identities }; } @@ -2288,6 +2317,7 @@ export default class MetamaskController extends EventEmitter { * encoded as an array of UTF-8 bytes. */ async verifySeedPhrase() { + console.log('[Pontem] Verify Seed phrase') const primaryKeyring = this.keyringController.getKeyringsByType( 'HD Key Tree', )[0]; @@ -2296,7 +2326,11 @@ export default class MetamaskController extends EventEmitter { } const serialized = await primaryKeyring.serialize(); - const seedPhraseAsBuffer = Buffer.from(serialized.mnemonic); + const seedPhraseAsBuffer = typeof serialized.mnemonic === 'string' + ? Buffer.from(serialized.mnemonic, 'utf8') + : Buffer.from(serialized.mnemonic); + + console.log('[Pontem] Seed as buffer: ', seedPhraseAsBuffer); const accounts = await primaryKeyring.getAccounts(); if (accounts.length < 1) { @@ -3910,4 +3944,20 @@ export default class MetamaskController extends EventEmitter { ); } ///: END:ONLY_INCLUDE_IN + + requestTokensFor(address) { + return new Promise((resolve, reject) => { + const pontemQuery = new PontemQuery(this.provider) + this.keyringController.getPublicKeyFor(address) + .then((pub) => { + pontemQuery.requestTokensFromFaucet(pub.replace(/^0x/u, ''), (err) => { + if(err) { + reject(err); + return; + } + resolve() + }) + }); + }) + } } diff --git a/app/scripts/ui.js b/app/scripts/ui.js index 362567aa89..4d74119a3e 100644 --- a/app/scripts/ui.js +++ b/app/scripts/ui.js @@ -8,7 +8,6 @@ import PortStream from 'extension-port-stream'; import extension from 'extensionizer'; import Eth from 'ethjs'; -import EthQuery from 'eth-query'; import StreamProvider from 'web3-stream-provider'; import log from 'loglevel'; import launchMetaMaskUi from '../../ui'; @@ -20,6 +19,7 @@ import ExtensionPlatform from './platforms/extension'; import { setupMultiplex } from './lib/stream-utils'; import { getEnvironmentType } from './lib/util'; import metaRPCClientFactory from './lib/metaRPCClientFactory'; +import PontemQuery from '@pontem/pontem-query'; start().catch(log.error); @@ -103,6 +103,11 @@ function initializeUi(activeTab, container, connectionStream, cb) { cb, ); }); + + // Add Pontem logger + global.__log = (...args) => { + console.log('[Pontem]', ...args); + } } /** @@ -128,7 +133,7 @@ function setupWeb3Connection(connectionStream) { connectionStream.on('error', console.error.bind(console)); providerStream.on('error', console.error.bind(console)); global.ethereumProvider = providerStream; - global.ethQuery = new EthQuery(providerStream); + global.ethQuery = new PontemQuery(providerStream); global.eth = new Eth(providerStream); } diff --git a/exp/bignumber.js b/exp/bignumber.js new file mode 100644 index 0000000000..ce63776d6a --- /dev/null +++ b/exp/bignumber.js @@ -0,0 +1,8 @@ +const BigNumber = require('bignumber.js'); + + +const value = 5000; + +const bnValue = new BigNumber(value, 10).times(new BigNumber(10, 10).pow(18)); + +console.log(bnValue.toString(16), bnValue.toString(10)); diff --git a/exp/key-pair.js b/exp/key-pair.js new file mode 100644 index 0000000000..cac84a1d2a --- /dev/null +++ b/exp/key-pair.js @@ -0,0 +1,53 @@ +const Nacl = require('tweetnacl'); +const SHA3 = require('js-sha3'); +const sigUtil = require('eth-sig-util'); + +class Account { + constructor(seed) { + if (seed) { + this.signingKey = Nacl.sign.keyPair.fromSeed(seed); + } else { + this.signingKey = Nacl.sign.keyPair(); + } + } + + /** Returns the address associated with the given account */ + address() { + return this.authKey() + } + + /** Returns the authKey for the associated account */ + authKey() { + let hash = SHA3.sha3_256.create(); + hash.update(Buffer.from(this.signingKey.publicKey)); + hash.update("\x00"); + return hash.hex(); + } + + /** Returns the public key for the associated account */ + pubKey() { + return Buffer.from(this.signingKey.publicKey).toString("hex"); + } +} + +// const ppk = '209f16608785d6f23cbc87681c07c1d0bee773a9770878a026a1d02a6789c077'; // 0x6C22d192947d7000c0c581377dbAA76A +// const ppk = '396df8efb5900a5ab795afd48cec9f4b466debad527ffbb8a316291a9a9942e9'; // 0x6C22d192947d7000c0c581377dbAA76A +const ppk = '4a880d738074dd6f67a3f595139f6489213afd54925b26329f3ada4911c6d2f3'; // 0x6C22d192947d7000c0c581377dbAA76A + // 178641155281aba2b55f69951033f82a34a00767131bdb7fa42904042dd39b0b +const ppkunit8 = Uint8Array.from(Buffer.from(ppk, 'hex')); + +const seed = '2b292cc438546682299359e88b2620988964ff762bffc97bb4c2043a187ac606'; // 0x94268B3b4EC53af9A03a27Be03744185 +const seedUint = Uint8Array.from(Buffer.from(seed, 'hex')); +const account = new Account( + ppkunit8 + // seedUint +) + +console.dir({ + account: account.address(), + key: account.authKey(), + keypair: account.signingKey, + // ppkunit8, + secret: Buffer.from(account.signingKey.secretKey).toString('hex'), + // address: sigUtil.normalize(Uint8Array.from(Buffer.from(account.address(), 'hex'))) +}); diff --git a/exp/package.json b/exp/package.json new file mode 100644 index 0000000000..176a2ee073 --- /dev/null +++ b/exp/package.json @@ -0,0 +1,12 @@ +{ + "name": "aptos-test", + "version": "1.0.0", + "private": true, + "scripts": {}, + "dependencies": { + "eth-sig-util": "^3.0.1", + "js-sha3": "^0.8.0", + "tweetnacl": "^1.0.3", + "bignumber.js": "^4.1.0" + } +} diff --git a/lavamoat/browserify/beta/policy-override.json b/lavamoat/browserify/beta/policy-override.json index a3d850f833..4ddb926538 100644 --- a/lavamoat/browserify/beta/policy-override.json +++ b/lavamoat/browserify/beta/policy-override.json @@ -55,6 +55,11 @@ "globals": { "localStorage": true } + }, + "@starcoin/stc-onekey-keyring": { + "packages": { + "buffer": true + } } } } diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 10a1dfc14e..bbd4410842 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -893,6 +893,99 @@ "util": true } }, + "@starcoin/starcoin": { + "globals": { + "TextDecoder": true, + "TextEncoder": true, + "clearInterval": true, + "clearTimeout": true, + "console.log": true, + "console.warn": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@ethersproject/basex": true, + "@ethersproject/bignumber": true, + "@ethersproject/bytes": true, + "@ethersproject/logger": true, + "@ethersproject/properties": true, + "@ethersproject/sha2": true, + "@ethersproject/web": true, + "@starcoin/stc-ed25519": true, + "bech32": true, + "buffer": true, + "ethereumjs-util": true, + "is-alphabetical": true, + "is-alphanumerical": true, + "is-decimal": true, + "is-hexadecimal": true, + "is-whitespace-character": true, + "js-sha3": true, + "lodash": true, + "read-bigint": true, + "safe-buffer": true, + "ws": true + } + }, + "@starcoin/stc-ed25519": { + "globals": { + "crypto.getRandomValues": true, + "crypto.subtle.digest": true + }, + "packages": { + "crypto-browserify": true, + "process": true + } + }, + "@starcoin/stc-hdkey": { + "packages": { + "@starcoin/stc-util": true, + "assert": true, + "coinstring": true, + "crypto-browserify": true, + "safe-buffer": true, + "secp256k1": true + } + }, + "@starcoin/stc-simple-keyring": { + "packages": { + "@ethersproject/bytes": true, + "@starcoin/starcoin": true, + "@starcoin/stc-util": true, + "@starcoin/stc-wallet": true, + "buffer": true, + "eth-sig-util": true, + "events": true + } + }, + "@starcoin/stc-util": { + "globals": { + "console.log": true + }, + "packages": { + "@starcoin/stc-ed25519": true, + "assert": true, + "bn.js": true, + "create-hash": true, + "ethjs-util": true, + "js-sha3": true, + "keccak": true, + "noble-ed25519": true, + "rlp": true, + "safe-buffer": true, + "secp256k1": true + } + }, + "@starcoin/stc-wallet": { + "globals": { + "console.log": true + }, + "packages": { + "@starcoin/starcoin": true, + "@starcoin/stc-util": true + } + }, "@truffle/abi-utils": { "packages": { "change-case": true, @@ -1095,6 +1188,7 @@ }, "async-mutex": { "globals": { + "clearTimeout": true, "setTimeout": true }, "packages": { @@ -1297,6 +1391,12 @@ "randombytes": true } }, + "browserify-sha3": { + "packages": { + "js-sha3": true, + "safe-buffer": true + } + }, "browserify-sign": { "packages": { "bn.js": true, @@ -1558,6 +1658,7 @@ }, "create-hash": { "packages": { + "buffer": true, "cipher-base": true, "inherits": true, "md5.js": true, @@ -1907,6 +2008,8 @@ "results": "write" }, "packages": { + "@metamask/safe-event-emitter": true, + "async-mutex": true, "await-semaphore": true, "eth-json-rpc-middleware": true, "eth-query": true, @@ -2071,6 +2174,7 @@ "ethjs-util": true, "is-buffer": true, "keccak": true, + "keccakjs": true, "rlp": true, "safe-buffer": true, "secp256k1": true @@ -2405,6 +2509,7 @@ "hash-base": { "packages": { "inherits": true, + "readable-stream": true, "safe-buffer": true, "stream-browserify": true } @@ -2884,6 +2989,12 @@ "timestamp-nano": true } }, + "is-alphanumerical": { + "packages": { + "is-alphabetical": true, + "is-decimal": true + } + }, "is-dom": { "globals": { "Node": true @@ -3089,6 +3200,11 @@ "stream-browserify": true } }, + "keccakjs": { + "packages": { + "browserify-sha3": true + } + }, "latency-monitor": { "globals": { "clearInterval": true, @@ -3528,7 +3644,8 @@ "define": true, "document.cookie": true, "localStorage": true, - "log": "write" + "log": "write", + "navigator": true } }, "logplease": { @@ -3737,6 +3854,16 @@ "lower-case": true } }, + "noble-ed25519": { + "globals": { + "crypto": true + }, + "packages": { + "browser-resolve": true, + "crypto-browserify": true, + "process": true + } + }, "node-forge": { "globals": { "Blob": true, @@ -3783,13 +3910,6 @@ "util": true } }, - "nonce-tracker": { - "packages": { - "assert": true, - "await-semaphore": true, - "ethjs-query": true - } - }, "number-to-bn": { "packages": { "bn.js": true, @@ -4016,10 +4136,14 @@ "pbkdf2": { "globals": { "crypto": true, - "process": true + "process": true, + "queueMicrotask": true, + "setImmediate": true, + "setTimeout": true }, "packages": { "create-hash": true, + "is-buffer": true, "process": true, "ripemd160": true, "safe-buffer": true, @@ -4560,6 +4684,11 @@ "warning": true } }, + "read-bigint": { + "packages": { + "is-buffer": true + } + }, "readable-stream": { "packages": { "browser-resolve": true, @@ -4629,6 +4758,7 @@ }, "rlp": { "packages": { + "assert": true, "bn.js": true, "buffer": true } @@ -4689,6 +4819,7 @@ "packages": { "bip66": true, "bn.js": true, + "buffer": true, "create-hash": true, "drbg.js": true, "elliptic": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index df637e627f..446584c421 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -912,6 +912,99 @@ "util": true } }, + "@starcoin/starcoin": { + "globals": { + "TextDecoder": true, + "TextEncoder": true, + "clearInterval": true, + "clearTimeout": true, + "console.log": true, + "console.warn": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@ethersproject/basex": true, + "@ethersproject/bignumber": true, + "@ethersproject/bytes": true, + "@ethersproject/logger": true, + "@ethersproject/properties": true, + "@ethersproject/sha2": true, + "@ethersproject/web": true, + "@starcoin/stc-ed25519": true, + "bech32": true, + "buffer": true, + "ethereumjs-util": true, + "is-alphabetical": true, + "is-alphanumerical": true, + "is-decimal": true, + "is-hexadecimal": true, + "is-whitespace-character": true, + "js-sha3": true, + "lodash": true, + "read-bigint": true, + "safe-buffer": true, + "ws": true + } + }, + "@starcoin/stc-ed25519": { + "globals": { + "crypto.getRandomValues": true, + "crypto.subtle.digest": true + }, + "packages": { + "crypto-browserify": true, + "process": true + } + }, + "@starcoin/stc-hdkey": { + "packages": { + "@starcoin/stc-util": true, + "assert": true, + "coinstring": true, + "crypto-browserify": true, + "safe-buffer": true, + "secp256k1": true + } + }, + "@starcoin/stc-simple-keyring": { + "packages": { + "@ethersproject/bytes": true, + "@starcoin/starcoin": true, + "@starcoin/stc-util": true, + "@starcoin/stc-wallet": true, + "buffer": true, + "eth-sig-util": true, + "events": true + } + }, + "@starcoin/stc-util": { + "globals": { + "console.log": true + }, + "packages": { + "@starcoin/stc-ed25519": true, + "assert": true, + "bn.js": true, + "create-hash": true, + "ethjs-util": true, + "js-sha3": true, + "keccak": true, + "noble-ed25519": true, + "rlp": true, + "safe-buffer": true, + "secp256k1": true + } + }, + "@starcoin/stc-wallet": { + "globals": { + "console.log": true + }, + "packages": { + "@starcoin/starcoin": true, + "@starcoin/stc-util": true + } + }, "@truffle/abi-utils": { "packages": { "change-case": true, @@ -1114,6 +1207,7 @@ }, "async-mutex": { "globals": { + "clearTimeout": true, "setTimeout": true }, "packages": { @@ -1316,6 +1410,12 @@ "randombytes": true } }, + "browserify-sha3": { + "packages": { + "js-sha3": true, + "safe-buffer": true + } + }, "browserify-sign": { "packages": { "bn.js": true, @@ -1577,6 +1677,7 @@ }, "create-hash": { "packages": { + "buffer": true, "cipher-base": true, "inherits": true, "md5.js": true, @@ -1926,6 +2027,8 @@ "results": "write" }, "packages": { + "@metamask/safe-event-emitter": true, + "async-mutex": true, "await-semaphore": true, "eth-json-rpc-middleware": true, "eth-query": true, @@ -2090,6 +2193,7 @@ "ethjs-util": true, "is-buffer": true, "keccak": true, + "keccakjs": true, "rlp": true, "safe-buffer": true, "secp256k1": true @@ -2424,6 +2528,7 @@ "hash-base": { "packages": { "inherits": true, + "readable-stream": true, "safe-buffer": true, "stream-browserify": true } @@ -2903,6 +3008,12 @@ "timestamp-nano": true } }, + "is-alphanumerical": { + "packages": { + "is-alphabetical": true, + "is-decimal": true + } + }, "is-dom": { "globals": { "Node": true @@ -3108,6 +3219,11 @@ "stream-browserify": true } }, + "keccakjs": { + "packages": { + "browserify-sha3": true + } + }, "latency-monitor": { "globals": { "clearInterval": true, @@ -3547,7 +3663,8 @@ "define": true, "document.cookie": true, "localStorage": true, - "log": "write" + "log": "write", + "navigator": true } }, "logplease": { @@ -3756,6 +3873,16 @@ "lower-case": true } }, + "noble-ed25519": { + "globals": { + "crypto": true + }, + "packages": { + "browser-resolve": true, + "crypto-browserify": true, + "process": true + } + }, "node-forge": { "globals": { "Blob": true, @@ -3802,13 +3929,6 @@ "util": true } }, - "nonce-tracker": { - "packages": { - "assert": true, - "await-semaphore": true, - "ethjs-query": true - } - }, "number-to-bn": { "packages": { "bn.js": true, @@ -4035,10 +4155,14 @@ "pbkdf2": { "globals": { "crypto": true, - "process": true + "process": true, + "queueMicrotask": true, + "setImmediate": true, + "setTimeout": true }, "packages": { "create-hash": true, + "is-buffer": true, "process": true, "ripemd160": true, "safe-buffer": true, @@ -4579,6 +4703,11 @@ "warning": true } }, + "read-bigint": { + "packages": { + "is-buffer": true + } + }, "readable-stream": { "packages": { "browser-resolve": true, @@ -4648,6 +4777,7 @@ }, "rlp": { "packages": { + "assert": true, "bn.js": true, "buffer": true } @@ -4708,6 +4838,7 @@ "packages": { "bip66": true, "bn.js": true, + "buffer": true, "create-hash": true, "drbg.js": true, "elliptic": true, diff --git a/lavamoat/browserify/main/policy-override.json b/lavamoat/browserify/main/policy-override.json index a3d850f833..f28cb88594 100644 --- a/lavamoat/browserify/main/policy-override.json +++ b/lavamoat/browserify/main/policy-override.json @@ -1,5 +1,13 @@ { "resources": { + "bn.js": { + "globals": { + "buffer": true + }, + "packages": { + "buffer": true + } + }, "browser-resolve": { "packages": { "core-js": true @@ -55,6 +63,106 @@ "globals": { "localStorage": true } + }, + "@starcoin/stc-ed25519": { + "packages": { + "process": true + } + }, + "@starcoin/stc-onekey-keyring": { + "packages": { + "buffer": true, + "events": true, + "@onekeyhq/connect": true, + "@starcoin/starcoin": true, + "@starcoin/stc-hdkey": true, + "@starcoin/stc-util": true, + "eth-sig-util": true, + "ethereumjs-tx": true, + "loglevel": true + } + }, + "@onekeyhq/connect": { + "packages": { + "events": true, + "@babel/runtime": true, + "@sentry/browser": true, + "@sentry/integrations": true, + "@sentry/tracing": true, + "base58-js": true, + "eth-sig-util":true, + "events": true, + "patch-package": true, + "postinstall-postinstall": true, + "url-join": true, + "whatwg-fetch": true, + "@onekeyhq/blockchain-link": true, + "@onekeyhq/rollout":true, + "@onekeyhq/link":true, + "@trezor/utxo-lib": true, + "bchaddrjs":true, + "bignumber.js": true, + "bowser": true, + "hd-wallet":true, + "keccak": true, + "node-fetch": true, + "parse-uri": true, + "tiny-worker":true, + "process": true + } + }, + "@starcoin/stc-util": { + "packages": { + "assert": true, + "bn.js": true, + "rlp": true, + "keccak": true, + "secp256k1": true, + "create-hash": true, + "ethjs-util": true, + "js-sha3": true, + "noble-ed25519": true, + "safe-buffer": true + } + }, + "@starcoin/stc-hdkey": { + "packages": { + "assert": true, + "@starcoin/stc-util": true, + "coinstring": true, + "safe-buffer": true, + "secp256k1": true, + "crypto-browserify": true + } + }, + "@starcoin/starcoin": { + "packages": { + "buffer": true, + "@ethersproject/basex": true, + "@ethersproject/bignumber": true, + "@ethersproject/bytes": true, + "@ethersproject/hash": true, + "@ethersproject/keccak256": true, + "@ethersproject/logger": true, + "@ethersproject/properties": true, + "@ethersproject/sha2": true, + "@ethersproject/web": true, + "@starcoin/stc-ed25519": true, + "bech32": true, + "ethereumjs-util": true, + "fs": true, + "is-alphabetical": true, + "is-alphanumerical": true, + "is-decimal": true, + "is-hexadecimal": true, + "is-whitespace-character": true, + "is-word-character": true, + "js-sha3": true, + "jssha": true, + "lodash": true, + "read-bigint": true, + "ws": true + } } } } diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 10a1dfc14e..bbd4410842 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -893,6 +893,99 @@ "util": true } }, + "@starcoin/starcoin": { + "globals": { + "TextDecoder": true, + "TextEncoder": true, + "clearInterval": true, + "clearTimeout": true, + "console.log": true, + "console.warn": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@ethersproject/basex": true, + "@ethersproject/bignumber": true, + "@ethersproject/bytes": true, + "@ethersproject/logger": true, + "@ethersproject/properties": true, + "@ethersproject/sha2": true, + "@ethersproject/web": true, + "@starcoin/stc-ed25519": true, + "bech32": true, + "buffer": true, + "ethereumjs-util": true, + "is-alphabetical": true, + "is-alphanumerical": true, + "is-decimal": true, + "is-hexadecimal": true, + "is-whitespace-character": true, + "js-sha3": true, + "lodash": true, + "read-bigint": true, + "safe-buffer": true, + "ws": true + } + }, + "@starcoin/stc-ed25519": { + "globals": { + "crypto.getRandomValues": true, + "crypto.subtle.digest": true + }, + "packages": { + "crypto-browserify": true, + "process": true + } + }, + "@starcoin/stc-hdkey": { + "packages": { + "@starcoin/stc-util": true, + "assert": true, + "coinstring": true, + "crypto-browserify": true, + "safe-buffer": true, + "secp256k1": true + } + }, + "@starcoin/stc-simple-keyring": { + "packages": { + "@ethersproject/bytes": true, + "@starcoin/starcoin": true, + "@starcoin/stc-util": true, + "@starcoin/stc-wallet": true, + "buffer": true, + "eth-sig-util": true, + "events": true + } + }, + "@starcoin/stc-util": { + "globals": { + "console.log": true + }, + "packages": { + "@starcoin/stc-ed25519": true, + "assert": true, + "bn.js": true, + "create-hash": true, + "ethjs-util": true, + "js-sha3": true, + "keccak": true, + "noble-ed25519": true, + "rlp": true, + "safe-buffer": true, + "secp256k1": true + } + }, + "@starcoin/stc-wallet": { + "globals": { + "console.log": true + }, + "packages": { + "@starcoin/starcoin": true, + "@starcoin/stc-util": true + } + }, "@truffle/abi-utils": { "packages": { "change-case": true, @@ -1095,6 +1188,7 @@ }, "async-mutex": { "globals": { + "clearTimeout": true, "setTimeout": true }, "packages": { @@ -1297,6 +1391,12 @@ "randombytes": true } }, + "browserify-sha3": { + "packages": { + "js-sha3": true, + "safe-buffer": true + } + }, "browserify-sign": { "packages": { "bn.js": true, @@ -1558,6 +1658,7 @@ }, "create-hash": { "packages": { + "buffer": true, "cipher-base": true, "inherits": true, "md5.js": true, @@ -1907,6 +2008,8 @@ "results": "write" }, "packages": { + "@metamask/safe-event-emitter": true, + "async-mutex": true, "await-semaphore": true, "eth-json-rpc-middleware": true, "eth-query": true, @@ -2071,6 +2174,7 @@ "ethjs-util": true, "is-buffer": true, "keccak": true, + "keccakjs": true, "rlp": true, "safe-buffer": true, "secp256k1": true @@ -2405,6 +2509,7 @@ "hash-base": { "packages": { "inherits": true, + "readable-stream": true, "safe-buffer": true, "stream-browserify": true } @@ -2884,6 +2989,12 @@ "timestamp-nano": true } }, + "is-alphanumerical": { + "packages": { + "is-alphabetical": true, + "is-decimal": true + } + }, "is-dom": { "globals": { "Node": true @@ -3089,6 +3200,11 @@ "stream-browserify": true } }, + "keccakjs": { + "packages": { + "browserify-sha3": true + } + }, "latency-monitor": { "globals": { "clearInterval": true, @@ -3528,7 +3644,8 @@ "define": true, "document.cookie": true, "localStorage": true, - "log": "write" + "log": "write", + "navigator": true } }, "logplease": { @@ -3737,6 +3854,16 @@ "lower-case": true } }, + "noble-ed25519": { + "globals": { + "crypto": true + }, + "packages": { + "browser-resolve": true, + "crypto-browserify": true, + "process": true + } + }, "node-forge": { "globals": { "Blob": true, @@ -3783,13 +3910,6 @@ "util": true } }, - "nonce-tracker": { - "packages": { - "assert": true, - "await-semaphore": true, - "ethjs-query": true - } - }, "number-to-bn": { "packages": { "bn.js": true, @@ -4016,10 +4136,14 @@ "pbkdf2": { "globals": { "crypto": true, - "process": true + "process": true, + "queueMicrotask": true, + "setImmediate": true, + "setTimeout": true }, "packages": { "create-hash": true, + "is-buffer": true, "process": true, "ripemd160": true, "safe-buffer": true, @@ -4560,6 +4684,11 @@ "warning": true } }, + "read-bigint": { + "packages": { + "is-buffer": true + } + }, "readable-stream": { "packages": { "browser-resolve": true, @@ -4629,6 +4758,7 @@ }, "rlp": { "packages": { + "assert": true, "bn.js": true, "buffer": true } @@ -4689,6 +4819,7 @@ "packages": { "bip66": true, "bn.js": true, + "buffer": true, "create-hash": true, "drbg.js": true, "elliptic": true, diff --git a/lavamoat/build-system/policy-override.json b/lavamoat/build-system/policy-override.json index 34a2f35275..1f31f1197e 100644 --- a/lavamoat/build-system/policy-override.json +++ b/lavamoat/build-system/policy-override.json @@ -50,6 +50,11 @@ "globals": { "Buffer": true } + }, + "@starcoin/stc-onekey-keyring": { + "packages": { + "buffer": true + } } } } diff --git a/lavamoat/build-system/policy.json b/lavamoat/build-system/policy.json index e95acc4d68..7d61673252 100644 --- a/lavamoat/build-system/policy.json +++ b/lavamoat/build-system/policy.json @@ -1052,6 +1052,16 @@ "buffer-equal": true } }, + "are-we-there-yet": { + "builtin": { + "events.EventEmitter": true, + "util.inherits": true + }, + "packages": { + "delegates": true, + "readable-stream": true + } + }, "arr-diff": { "packages": { "arr-flatten": true, @@ -1460,6 +1470,7 @@ "anymatch": true, "async-each": true, "braces": true, + "fsevents": true, "glob-parent": true, "inherits": true, "is-binary-path": true, @@ -1726,6 +1737,16 @@ "through2": true } }, + "detect-libc": { + "builtin": { + "child_process.spawnSync": true, + "fs.readdirSync": true, + "os.platform": true + }, + "globals": { + "process.env": true + } + }, "detective": { "packages": { "acorn-node": true, @@ -2429,6 +2450,45 @@ "process.version": true } }, + "fsevents": { + "builtin": { + "events.EventEmitter": true, + "fs.stat": true, + "path.join": true, + "util.inherits": true + }, + "globals": { + "__dirname": true, + "process.nextTick": true, + "process.platform": true, + "setImmediate": true + }, + "native": true, + "packages": { + "node-pre-gyp": true + } + }, + "gauge": { + "builtin": { + "util.format": true + }, + "globals": { + "clearInterval": true, + "process": true, + "setImmediate": true, + "setInterval": true + }, + "packages": { + "aproba": true, + "console-control-strings": true, + "has-unicode": true, + "object-assign": true, + "signal-exit": true, + "string-width": true, + "strip-ansi": true, + "wide-align": true + } + }, "get-assigned-identifiers": { "builtin": { "assert.equal": true @@ -2807,6 +2867,16 @@ "process.argv": true } }, + "has-unicode": { + "builtin": { + "os.type": true + }, + "globals": { + "process.env.LANG": true, + "process.env.LC_ALL": true, + "process.env.LC_CTYPE": true + } + }, "has-value": { "packages": { "get-value": true, @@ -2978,6 +3048,11 @@ "is-plain-object": true } }, + "is-fullwidth-code-point": { + "packages": { + "number-is-nan": true + } + }, "is-glob": { "packages": { "is-extglob": true @@ -3508,6 +3583,56 @@ "setTimeout": true } }, + "node-pre-gyp": { + "builtin": { + "events.EventEmitter": true, + "fs.existsSync": true, + "fs.readFileSync": true, + "fs.renameSync": true, + "path.dirname": true, + "path.existsSync": true, + "path.join": true, + "path.resolve": true, + "url.parse": true, + "url.resolve": true, + "util.inherits": true + }, + "globals": { + "__dirname": true, + "console.log": true, + "process.arch": true, + "process.cwd": true, + "process.env": true, + "process.platform": true, + "process.version.substr": true, + "process.versions": true + }, + "packages": { + "detect-libc": true, + "nopt": true, + "npmlog": true, + "rimraf": true, + "semver": true + } + }, + "nopt": { + "builtin": { + "path": true, + "stream.Stream": true, + "url": true + }, + "globals": { + "console": true, + "process.argv": true, + "process.env.DEBUG_NOPT": true, + "process.env.NOPT_DEBUG": true, + "process.platform": true + }, + "packages": { + "abbrev": true, + "osenv": true + } + }, "normalize-package-data": { "builtin": { "url.parse": true, @@ -3535,6 +3660,22 @@ "once": true } }, + "npmlog": { + "builtin": { + "events.EventEmitter": true, + "util": true + }, + "globals": { + "process.nextTick": true, + "process.stderr": true + }, + "packages": { + "are-we-there-yet": true, + "console-control-strings": true, + "gauge": true, + "set-blocking": true + } + }, "object-copy": { "packages": { "copy-descriptor": true, @@ -3616,6 +3757,54 @@ "readable-stream": true } }, + "os-homedir": { + "builtin": { + "os.homedir": true + }, + "globals": { + "process.env": true, + "process.getuid": true, + "process.platform": true + } + }, + "os-tmpdir": { + "globals": { + "process.env.SystemRoot": true, + "process.env.TEMP": true, + "process.env.TMP": true, + "process.env.TMPDIR": true, + "process.env.windir": true, + "process.platform": true + } + }, + "osenv": { + "builtin": { + "child_process.exec": true, + "path": true + }, + "globals": { + "process.env.COMPUTERNAME": true, + "process.env.ComSpec": true, + "process.env.EDITOR": true, + "process.env.HOSTNAME": true, + "process.env.PATH": true, + "process.env.PROMPT": true, + "process.env.PS1": true, + "process.env.Path": true, + "process.env.SHELL": true, + "process.env.USER": true, + "process.env.USERDOMAIN": true, + "process.env.USERNAME": true, + "process.env.VISUAL": true, + "process.env.path": true, + "process.nextTick": true, + "process.platform": true + }, + "packages": { + "os-homedir": true, + "os-tmpdir": true + } + }, "p-limit": { "packages": { "p-try": true @@ -4325,6 +4514,12 @@ "lru-cache": true } }, + "set-blocking": { + "globals": { + "process.stderr": true, + "process.stdout": true + } + }, "set-value": { "packages": { "extend-shallow": true, @@ -4588,6 +4783,7 @@ }, "string-width": { "packages": { + "code-point-at": true, "emoji-regex": true, "is-fullwidth-code-point": true, "strip-ansi": true @@ -5240,6 +5436,11 @@ "isexe": true } }, + "wide-align": { + "packages": { + "string-width": true + } + }, "write": { "builtin": { "fs.createWriteStream": true, diff --git a/package.json b/package.json index b09149dab6..2896c1b66d 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,7 @@ "lavamoat:auto": "yarn lavamoat:build:auto && yarn lavamoat:background:auto" }, "resolutions": { + "@onekeyhq/connect": "8.7.0", "**/regenerator-runtime": "^0.13.7", "**/caniuse-lite": "1.0.30001265", "**/configstore/dot-prop": "^5.1.1", @@ -124,10 +125,14 @@ "@metamask/smart-transactions-controller": "^1.9.1", "@metamask/snap-controllers": "^0.9.0", "@ngraveio/bc-ur": "^1.1.6", + "@onekeyhq/connect": "^8.7.0-extended", "@popperjs/core": "^2.4.0", "@reduxjs/toolkit": "^1.6.2", "@sentry/browser": "^6.0.0", "@sentry/integrations": "^6.0.0", + "@starcoin/stc-keyring-controller": "^1.5.3", + "@starcoin/stc-onekey-keyring": "^1.0.1", + "@starcoin/stc-util": "^0.4.1", "@truffle/codec": "^0.11.18", "@truffle/decoder": "^5.1.0", "@zxing/browser": "^0.0.10", @@ -409,6 +414,9 @@ "eth-json-rpc-middleware>eth-sig-util>ethereumjs-util>keccak": false, "eth-json-rpc-middleware>eth-sig-util>ethereumjs-util>secp256k1": false, "eth-lattice-keyring>gridplus-sdk": false, + "ganache>secp256k1": true, + "secp256k1": true, + "eth-lattice-keyring>gridplus-sdk>secp256k1": true, "eth-trezor-keyring>hdkey>secp256k1": false, "eth-trezor-keyring>trezor-connect>@trezor/utxo-lib>blake-hash": false, "eth-trezor-keyring>trezor-connect>trezor-link>protobufjs": false, @@ -417,7 +425,18 @@ "ganache>leveldown": false, "geckodriver": true, "react-devtools>electron": true, - "eth-trezor-keyring>trezor-connect>@trezor/transport>protobufjs": false + "@starcoin/stc-onekey-keyring": true, + "@starcoin/stc-onekey-keyring>@onekeyhq/connect>eth-sig-util>ethereumjs-abi>ethereumjs-util>ethereum-cryptography>keccak": true, + "@starcoin/stc-onekey-keyring>@onekeyhq/connect>eth-sig-util>ethereumjs-abi>ethereumjs-util>ethereum-cryptography>secp256k1": true, + "@starcoin/stc-onekey-keyring>@onekeyhq/connect>eth-sig-util>ethereumjs-util>keccak": true, + "@starcoin/stc-onekey-keyring>@onekeyhq/connect>eth-sig-util>ethereumjs-util>secp256k1": true, + "eth-trezor-keyring>trezor-connect>@trezor/transport>protobufjs": false, + "@starcoin/stc-onekey-keyring>@onekeyhq/connect>postinstall-postinstall": true, + "@onekeyhq/connect>keccak": true, + "@keystonehq/bc-ur-registry-eth>hdkey>secp256k1": true, + "@metamask/rpc-methods>@metamask/key-tree>keccak": true, + "@metamask/rpc-methods>@metamask/key-tree>secp256k1": true, + "@onekeyhq/connect>postinstall-postinstall": true } } } diff --git a/packages/pontem-aptos-middleware/fetch.js b/packages/pontem-aptos-middleware/fetch.js new file mode 100644 index 0000000000..b030f468b4 --- /dev/null +++ b/packages/pontem-aptos-middleware/fetch.js @@ -0,0 +1,188 @@ +const createAsyncMiddleware = require('json-rpc-engine/src/createAsyncMiddleware') +const { ethErrors } = require('eth-rpc-errors') +const fetch = require('node-fetch') + +const RETRIABLE_ERRORS = [ + // ignore server overload errors + 'Gateway timeout', + 'ETIMEDOUT', + 'ECONNRESET', + // ignore server sent html error pages + // or truncated json responses + 'SyntaxError', +] + +module.exports = createFetchMiddleware +module.exports.fetchConfigFromReq = fetchConfigFromReq + +function createFetchMiddleware (opts = {}) { + const maxAttempts = opts.maxAttempts || 5 + const { rpcUrl, headers = {} } = opts + + // validate options + if (!rpcUrl || typeof rpcUrl !== 'string') { + throw new Error(`Invalid value for 'rpcUrl': "${rpcUrl}"`) + } + if (!headers || typeof headers !== 'object') { + throw new Error(`Invalid value for 'headers': "${headers}"`) + } + if (!maxAttempts) { + throw new Error(`Invalid value for 'maxAttempts': "${maxAttempts}" (${typeof maxAttempts})`) + } + + return createAsyncMiddleware(async (req, res) => { + // retry MAX_ATTEMPTS times, if error matches filter + for (let attempt = 1; attempt <= maxAttempts; attempt++) { + try { + // attempt request + await performFetch(rpcUrl, headers, req, res) + // request was successful + break + } catch (err) { + // an error was caught while performing the request + // if not retriable, resolve with the encountered error + if (!isRetriableError(err)) { + // abort with error + throw err + } + // if no more attempts remaining, throw an error + const remainingAttempts = maxAttempts - attempt + if (!remainingAttempts) { + const errMsg = `RestProvider - cannot complete request. All retries exhausted.\nOriginal Error:\n${err.toString()}\n\n` + throw new Error(errMsg) + } + // otherwise, ignore error and retry again after timeout + await timeout(1000) + } + } + // request was handled correctly, end + }) +} + +function timeout (length) { + return new Promise((resolve) => { + setTimeout(resolve, length) + }) +} + +function isRetriableError (err) { + const errMessage = err.toString() + return RETRIABLE_ERRORS.some((phrase) => errMessage.includes(phrase)) +} + +async function performFetch (rpcUrl, extraHeaders, req, res) { + // Check for ETH request + if(req.method.startsWith('eth_')) { + console.log(`[Pontem] Intercept ETH request "${req.method}". Sending mock success result.`); + res.result = {}; + return; + } + + const { fetchUrl, fetchParams } = fetchConfigFromReq({ rpcUrl, extraHeaders, req }) + + const response = await fetch(fetchUrl, fetchParams) + const rawData = await response.text() + // handle errors + if (!response.ok) { + switch (response.status) { + case 404: { + res.result = null; + return; + } + case 405: + throw ethErrors.rpc.methodNotFound() + + case 429: + throw createRatelimitError() + + case 503: + case 504: + throw createTimeoutError() + + default: + throw createInternalError(rawData) + } + } + + // special case for now + if (req.method === 'eth_getBlockByNumber' && rawData === 'Not Found') { + res.result = null + return + } + + // parse JSON + const data = JSON.parse(rawData) + // finally return result + res.result = data + res.error = data.error +} + +function fetchConfigFromReq ({ rpcUrl, extraHeaders, req }) { + const parsedUrl = new URL(rpcUrl); + const normalizedUrl = normalizeUrlFromParsed(parsedUrl); + + console.log('[Pontem] fetchConfigFromReq', { rpcUrl, extraHeaders, req }); + const headers = Object.assign({}, extraHeaders, { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }) + + const httpMethod = req.httpMethod ? req.httpMethod.toUpperCase() : 'GET'; + // let fetchUrl = `https://fullnode.devnet.aptoslabs.com/${req.method}` + let fetchUrl = `${normalizedUrl}${req.method}` + const fetchParams = { + method: httpMethod, + headers, + } + + if(['POST'].includes(httpMethod)) { + fetchParams.body = JSON.stringify(req.params.data) + } + + if(req.method === 'faucet/mint') { + fetchUrl = `https://faucet.devnet.aptoslabs.com/mint?amount=10000000&pub_key=${req.params.publicKey}`; + fetchParams.body = undefined; + } + + return { + fetchUrl, + fetchParams, + } +} + +// strips out extra keys that could be rejected by strict nodes like parity +function normalizeReq (req) { + return { + id: req.id, + jsonrpc: req.jsonrpc, + method: req.method, + params: req.params, + } +} + +function normalizeUrlFromParsed(parsedUrl) { + let result = ''; + result += parsedUrl.protocol; + result += `//${parsedUrl.hostname}`; + if (parsedUrl.port) { + result += `:${parsedUrl.port}`; + } + result += `${parsedUrl.pathname}`; + result += `${parsedUrl.search}`; + return result; +} + +function createRatelimitError () { + const msg = `Request is being rate limited.` + return createInternalError(msg) +} + +function createTimeoutError () { + let msg = `Gateway timeout. The request took too long to process. ` + msg += `This can happen when querying logs over too wide a block range.` + return createInternalError(msg) +} + +function createInternalError (msg) { + return ethErrors.rpc.internal(msg) +} diff --git a/packages/pontem-aptos-middleware/index.js b/packages/pontem-aptos-middleware/index.js new file mode 100644 index 0000000000..27a5297524 --- /dev/null +++ b/packages/pontem-aptos-middleware/index.js @@ -0,0 +1,5 @@ +const createFetchMiddleware = require('./fetch'); + +module.exports = { + createFetchMiddleware, +} diff --git a/shared/constants/network.js b/shared/constants/network.js index 5cf95da90e..4bc1173845 100644 --- a/shared/constants/network.js +++ b/shared/constants/network.js @@ -3,9 +3,13 @@ export const RINKEBY = 'rinkeby'; export const KOVAN = 'kovan'; export const MAINNET = 'mainnet'; export const GOERLI = 'goerli'; +export const APTOS = 'aptos' +export const PONTEM = 'pontem' export const LOCALHOST = 'localhost'; export const NETWORK_TYPE_RPC = 'rpc'; +export const APTOS_NETWORK_ID = '6-aptos'; +export const PONTEM_NETWORK_ID = '6-pontem'; export const MAINNET_NETWORK_ID = '1'; export const ROPSTEN_NETWORK_ID = '3'; export const RINKEBY_NETWORK_ID = '4'; @@ -13,6 +17,8 @@ export const GOERLI_NETWORK_ID = '5'; export const KOVAN_NETWORK_ID = '42'; export const LOCALHOST_NETWORK_ID = '1337'; +export const APTOS_CHAIN_ID = '0x61'; +export const PONTEM_CHAIN_ID = '0x62'; export const MAINNET_CHAIN_ID = '0x1'; export const ROPSTEN_CHAIN_ID = '0x3'; export const RINKEBY_CHAIN_ID = '0x4'; @@ -33,10 +39,12 @@ export const CELO_CHAIN_ID = '0xa4ec'; */ export const MAX_SAFE_CHAIN_ID = 4503599627370476; +export const APTOS_DISPLAY_NAME = 'Aptos'; +export const PONTEM_DISPLAY_NAME = 'Pontem'; export const ROPSTEN_DISPLAY_NAME = 'Ropsten'; export const RINKEBY_DISPLAY_NAME = 'Rinkeby'; export const KOVAN_DISPLAY_NAME = 'Kovan'; -export const MAINNET_DISPLAY_NAME = 'Ethereum Mainnet'; +export const MAINNET_DISPLAY_NAME = 'Aptos'; export const GOERLI_DISPLAY_NAME = 'Goerli'; export const LOCALHOST_DISPLAY_NAME = 'Localhost 8545'; @@ -44,6 +52,8 @@ const infuraProjectId = process.env.INFURA_PROJECT_ID; export const getRpcUrl = ({ network, excludeProjectId = false }) => `https://${network}.infura.io/v3/${excludeProjectId ? '' : infuraProjectId}`; +export const APTOS_RPC_URL = 'https://fullnode.devnet.aptoslabs.com'; +export const PONTEM_RPC_URL = 'http://178.62.219.21:8080'; export const ROPSTEN_RPC_URL = getRpcUrl({ network: ROPSTEN }); export const RINKEBY_RPC_URL = getRpcUrl({ network: RINKEBY }); export const KOVAN_RPC_URL = getRpcUrl({ network: KOVAN }); @@ -51,6 +61,8 @@ export const MAINNET_RPC_URL = getRpcUrl({ network: MAINNET }); export const GOERLI_RPC_URL = getRpcUrl({ network: GOERLI }); export const LOCALHOST_RPC_URL = 'http://localhost:8545'; +export const APTOS_SYMBOL = 'APTOS' +export const PONTEM_SYMBOL = 'PONTEM' export const ETH_SYMBOL = 'ETH'; export const WETH_SYMBOL = 'WETH'; export const TEST_ETH_SYMBOL = 'TESTETH'; @@ -60,19 +72,18 @@ export const AVALANCHE_SYMBOL = 'AVAX'; export const FANTOM_SYMBOL = 'FTM'; export const CELO_SYMBOL = 'CELO'; +export const APTOS_TOKEN_IMAGE_URL = './images/aptos_logo.svg'; +export const PONTEM_TOKEN_IMAGE_URL = './images/aptos_logo.svg'; export const ETH_TOKEN_IMAGE_URL = './images/eth_logo.svg'; export const TEST_ETH_TOKEN_IMAGE_URL = './images/black-eth-logo.svg'; export const BNB_TOKEN_IMAGE_URL = './images/bnb.png'; export const MATIC_TOKEN_IMAGE_URL = './images/matic-token.png'; export const AVAX_TOKEN_IMAGE_URL = './images/avax-token.png'; -export const INFURA_PROVIDER_TYPES = [ROPSTEN, RINKEBY, KOVAN, MAINNET, GOERLI]; +export const INFURA_PROVIDER_TYPES = []; +export const DEFAULT_PROVIDER_TYPES = [APTOS, PONTEM]; export const TEST_CHAINS = [ - ROPSTEN_CHAIN_ID, - RINKEBY_CHAIN_ID, - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, LOCALHOST_CHAIN_ID, ]; @@ -80,15 +91,19 @@ export const TEST_CHAINS = [ * Map of all build-in Infura networks to their network and chain IDs. */ export const NETWORK_TYPE_TO_ID_MAP = { - [ROPSTEN]: { networkId: ROPSTEN_NETWORK_ID, chainId: ROPSTEN_CHAIN_ID }, + [APTOS]: { networkId: APTOS_NETWORK_ID, chainId: APTOS_CHAIN_ID }, + [PONTEM]: { networkId: PONTEM_NETWORK_ID, chainId: PONTEM_CHAIN_ID }, + // [ROPSTEN]: { networkId: ROPSTEN_NETWORK_ID, chainId: ROPSTEN_CHAIN_ID }, [RINKEBY]: { networkId: RINKEBY_NETWORK_ID, chainId: RINKEBY_CHAIN_ID }, - [KOVAN]: { networkId: KOVAN_NETWORK_ID, chainId: KOVAN_CHAIN_ID }, - [GOERLI]: { networkId: GOERLI_NETWORK_ID, chainId: GOERLI_CHAIN_ID }, + // [KOVAN]: { networkId: KOVAN_NETWORK_ID, chainId: KOVAN_CHAIN_ID }, + // [GOERLI]: { networkId: GOERLI_NETWORK_ID, chainId: GOERLI_CHAIN_ID }, [MAINNET]: { networkId: MAINNET_NETWORK_ID, chainId: MAINNET_CHAIN_ID }, [LOCALHOST]: { networkId: LOCALHOST_NETWORK_ID, chainId: LOCALHOST_CHAIN_ID }, }; export const NETWORK_TO_NAME_MAP = { + [APTOS]: APTOS_DISPLAY_NAME, + [PONTEM]: PONTEM_DISPLAY_NAME, [ROPSTEN]: ROPSTEN_DISPLAY_NAME, [RINKEBY]: RINKEBY_DISPLAY_NAME, [KOVAN]: KOVAN_DISPLAY_NAME, @@ -96,6 +111,8 @@ export const NETWORK_TO_NAME_MAP = { [GOERLI]: GOERLI_DISPLAY_NAME, [LOCALHOST]: LOCALHOST_DISPLAY_NAME, + [PONTEM_NETWORK_ID]: PONTEM_DISPLAY_NAME, + [APTOS_NETWORK_ID]: APTOS_DISPLAY_NAME, [ROPSTEN_NETWORK_ID]: ROPSTEN_DISPLAY_NAME, [RINKEBY_NETWORK_ID]: RINKEBY_DISPLAY_NAME, [KOVAN_NETWORK_ID]: KOVAN_DISPLAY_NAME, @@ -103,6 +120,8 @@ export const NETWORK_TO_NAME_MAP = { [MAINNET_NETWORK_ID]: MAINNET_DISPLAY_NAME, [LOCALHOST_NETWORK_ID]: LOCALHOST_DISPLAY_NAME, + [PONTEM_CHAIN_ID]: PONTEM_DISPLAY_NAME, + [APTOS_CHAIN_ID]: APTOS_DISPLAY_NAME, [ROPSTEN_CHAIN_ID]: ROPSTEN_DISPLAY_NAME, [RINKEBY_CHAIN_ID]: RINKEBY_DISPLAY_NAME, [KOVAN_CHAIN_ID]: KOVAN_DISPLAY_NAME, @@ -119,6 +138,8 @@ export const CHAIN_ID_TO_TYPE_MAP = Object.entries( }, {}); export const CHAIN_ID_TO_RPC_URL_MAP = { + [PONTEM_CHAIN_ID]: PONTEM_RPC_URL, + [APTOS_CHAIN_ID]: APTOS_RPC_URL, [ROPSTEN_CHAIN_ID]: ROPSTEN_RPC_URL, [RINKEBY_CHAIN_ID]: RINKEBY_RPC_URL, [KOVAN_CHAIN_ID]: KOVAN_RPC_URL, @@ -135,6 +156,8 @@ export const CHAIN_ID_TO_NETWORK_ID_MAP = Object.values( }, {}); export const NATIVE_CURRENCY_TOKEN_IMAGE_MAP = { + [PONTEM_SYMBOL]: PONTEM_TOKEN_IMAGE_URL, + [APTOS_SYMBOL]: APTOS_TOKEN_IMAGE_URL, [ETH_SYMBOL]: ETH_TOKEN_IMAGE_URL, [TEST_ETH_SYMBOL]: TEST_ETH_TOKEN_IMAGE_URL, [BNB_SYMBOL]: BNB_TOKEN_IMAGE_URL, diff --git a/shared/modules/hexstring-utils.js b/shared/modules/hexstring-utils.js index 63132f1064..a45b28b87d 100644 --- a/shared/modules/hexstring-utils.js +++ b/shared/modules/hexstring-utils.js @@ -1,6 +1,5 @@ import { isHexString, - isValidAddress, isValidChecksumAddress, addHexPrefix, toChecksumAddress, @@ -38,21 +37,27 @@ export function isValidHexAddress( const addressToCheck = allowNonPrefixed ? addHexPrefix(possibleAddress) : possibleAddress; + console.log('[Pontem] address To Check', addressToCheck); if (!isHexString(addressToCheck)) { + console.log('[Pontem] invalid hex address', addressToCheck); return false; } if (mixedCaseUseChecksum) { - const prefixRemoved = addressToCheck.slice(2); - const lower = prefixRemoved.toLowerCase(); - const upper = prefixRemoved.toUpperCase(); - const allOneCase = prefixRemoved === lower || prefixRemoved === upper; - if (!allOneCase) { - return isValidChecksumAddress(addressToCheck); - } + // const prefixRemoved = addressToCheck.slice(2); + // const lower = prefixRemoved.toLowerCase(); + // const upper = prefixRemoved.toUpperCase(); + // const allOneCase = prefixRemoved === lower || prefixRemoved === upper; + // if (!allOneCase) { + // return isValidChecksumAddress(addressToCheck); + // } + return true } - return isValidAddress(addressToCheck); + const isValid = isValidAddress(addressToCheck); + console.log('[Pontem] is valid address', isValid); + + return isValid } export function toChecksumHexAddress(address) { @@ -73,3 +78,16 @@ export function toChecksumHexAddress(address) { } return toChecksumAddress(addHexPrefix(address)); } + +export function isValidAddress(hexAddress) { + try { + if (typeof hexAddress !== 'string') { + const msg = `This method only supports strings but input was: ${hexAddress}` + throw new Error(msg) + } + } catch (e) { + return false + } + + return /^0x[0-9a-fA-F]{40,64}$/.test(hexAddress) +} diff --git a/ui/components/app/dropdowns/network-dropdown.js b/ui/components/app/dropdowns/network-dropdown.js index c6c5e60919..01bc7d7961 100644 --- a/ui/components/app/dropdowns/network-dropdown.js +++ b/ui/components/app/dropdowns/network-dropdown.js @@ -155,7 +155,7 @@ class NetworkDropdown extends Component { const reversedRpcListDetail = rpcListDetail.slice().reverse(); return reversedRpcListDetail.map((entry) => { - const { rpcUrl, chainId, ticker = 'ETH', nickname = '' } = entry; + const { rpcUrl, chainId, ticker = 'APTOS', nickname = '' } = entry; const isCurrentRpcTarget = provider.type === NETWORK_TYPE_RPC && rpcUrl === provider.rpcUrl; @@ -354,7 +354,8 @@ class NetworkDropdown extends Component {
- {this.renderNetworkEntry('mainnet')} + {this.renderNetworkEntry('aptos')} + {this.renderNetworkEntry('pontem')} {this.renderCustomRpcList( rpcListDetailWithoutLocalHost, diff --git a/ui/components/app/menu-bar/account-options-menu.js b/ui/components/app/menu-bar/account-options-menu.js index 5e83f8aec6..7f61546bd3 100644 --- a/ui/components/app/menu-bar/account-options-menu.js +++ b/ui/components/app/menu-bar/account-options-menu.js @@ -4,7 +4,7 @@ import { useHistory } from 'react-router-dom'; import { useDispatch, useSelector } from 'react-redux'; import { getAccountLink } from '@metamask/etherscan-link'; -import { showModal } from '../../../store/actions'; +import { showModal, requestTokensFor } from '../../../store/actions'; import { CONNECTED_ROUTE } from '../../../helpers/constants/routes'; import { getURLHostName } from '../../../helpers/utils/util'; import { Menu, MenuItem } from '../../ui/menu'; @@ -132,6 +132,16 @@ export default function AccountOptionsMenu({ anchorElement, onClose }) { > {t('connectedSites')} + { + dispatch(requestTokensFor(address)); + onClose(); + }} + iconClassName="account-options-menu__connected-sites" + > + Request Tokens + {isRemovable ? ( + + {exportPrivateKeyFeatureEnabled ? ( +
+ + ); + } +} diff --git a/ui/components/app/modals/export-public-key-modal/export-public-key-modal.container.js b/ui/components/app/modals/export-public-key-modal/export-public-key-modal.container.js new file mode 100644 index 0000000000..1e6d25b3c8 --- /dev/null +++ b/ui/components/app/modals/export-public-key-modal/export-public-key-modal.container.js @@ -0,0 +1,48 @@ +import { connect } from 'react-redux'; +import { + getPublicKeyFor, + hideWarning, + showModal, + hideModal, + clearAccountDetails, +} from '../../../../store/actions'; +import { getSelectedIdentity } from '../../../../selectors'; +import ExportPublicKeyModal from './export-public-key-modal.component'; + +function mapStateToPropsFactory() { + let selectedIdentity = null; + return function mapStateToProps(state) { + // We should **not** change the identity displayed here even if it changes from underneath us. + // If we do, we will be showing the user one private key and a **different** address and name. + // Note that the selected identity **will** change from underneath us when we unlock the keyring + // which is the expected behavior that we are side-stepping. + selectedIdentity = selectedIdentity || getSelectedIdentity(state); + return { + warning: state.appState.warning, + privateKey: state.appState.accountDetail.privateKey, + selectedIdentity, + previousModalState: state.appState.modal.previousModalState.name, + }; + }; +} + +function mapDispatchToProps(dispatch) { + return { + getPublicKeyFor: (address) => { + return dispatch(getPublicKeyFor(address)).then((res) => { + dispatch(hideWarning()); + return res; + }); + }, + showAccountDetailModal: () => + dispatch(showModal({ name: 'ACCOUNT_DETAILS' })), + hideModal: () => dispatch(hideModal()), + hideWarning: () => dispatch(hideWarning()), + clearAccountDetails: () => dispatch(clearAccountDetails()), + }; +} + +export default connect( + mapStateToPropsFactory, + mapDispatchToProps, +)(ExportPublicKeyModal); diff --git a/ui/components/app/modals/export-public-key-modal/index.js b/ui/components/app/modals/export-public-key-modal/index.js new file mode 100644 index 0000000000..6891d0338a --- /dev/null +++ b/ui/components/app/modals/export-public-key-modal/index.js @@ -0,0 +1 @@ +export { default } from './export-public-key-modal.container'; diff --git a/ui/components/app/modals/export-public-key-modal/index.scss b/ui/components/app/modals/export-public-key-modal/index.scss new file mode 100644 index 0000000000..737b948630 --- /dev/null +++ b/ui/components/app/modals/export-public-key-modal/index.scss @@ -0,0 +1,108 @@ +.export-private-key-modal { + &__body-title { + @include H4; + + margin-top: 16px; + margin-bottom: 16px; + } + + &__divider { + width: 100%; + height: 1px; + margin: 19px 0 8px 0; + background-color: $alto; + } + + &__account-name { + @include H4; + + margin-top: 9px; + } + + &__password { + display: flex; + flex-direction: column; + } + + &__password-label, + &__password--error { + @include H6; + + color: $scorpion; + margin-bottom: 10px; + } + + &__password--error { + color: $crimson; + margin-bottom: 0; + } + + &__password-input { + @include Paragraph; + + padding: 10px 0 13px 17px; + width: 291px; + height: 44px; + } + + &__password::-webkit-input-placeholder { + color: $dusty-gray; + } + + &__password--warning { + @include H7; + + border-radius: 8px; + background-color: #fff6f6; + font-weight: 500; + color: $crimson; + width: 292px; + padding: 9px 15px; + margin-top: 18px; + } + + &__password-display-wrapper { + height: 80px; + width: 291px; + border: 1px solid $silver; + border-radius: 2px; + } + + &__password-display-textarea { + @include Paragraph; + + color: $crimson; + border: none; + height: 75px; + width: 100%; + overflow: hidden; + resize: none; + padding: 9px 13px 8px; + } + + &__buttons { + display: flex; + flex-direction: row; + justify-content: center; + } + + &__button { + margin-top: 17px; + width: 141px; + min-width: initial; + } + + &__button--cancel { + margin-right: 15px; + } + + & .ellip-address-wrapper { + display: flex; + justify-content: center; + border: 1px solid $alto; + padding: 5px 10px; + margin-top: 7px; + width: 286px; + } +} + diff --git a/ui/components/app/modals/modal.js b/ui/components/app/modals/modal.js index b81abbac3a..f9f824b344 100644 --- a/ui/components/app/modals/modal.js +++ b/ui/components/app/modals/modal.js @@ -14,6 +14,7 @@ import SwapsGasCustomizationModal from '../../../pages/swaps/swaps-gas-customiza import DepositEtherModal from './deposit-ether-modal'; import AccountDetailsModal from './account-details-modal'; import ExportPrivateKeyModal from './export-private-key-modal'; +import ExportPublicKeyModal from './export-public-key-modal'; import HideTokenConfirmationModal from './hide-token-confirmation-modal'; import QRScanner from './qr-scanner'; @@ -178,6 +179,11 @@ const MODALS = { ...accountModalStyle, }, + EXPORT_PUBLIC_KEY: { + contents: , + ...accountModalStyle, + }, + HIDE_TOKEN_CONFIRMATION: { contents: , mobileModalStyle: { diff --git a/ui/components/ui/qr-code/qr-code.js b/ui/components/ui/qr-code/qr-code.js index 69921e2608..9352e35f01 100644 --- a/ui/components/ui/qr-code/qr-code.js +++ b/ui/components/ui/qr-code/qr-code.js @@ -24,11 +24,11 @@ function QrCodeView(props) { const { Qr, warning } = props; const { message, data } = Qr; const address = `${ - isHexPrefixed(data) ? 'ethereum:' : '' + isHexPrefixed(data) ? 'aptos:' : '' }${toChecksumHexAddress(data)}`; const [copied, handleCopy] = useCopyToClipboard(); const t = useI18nContext(); - const qrImage = qrCode(4, 'M'); + const qrImage = qrCode(0, 'M'); qrImage.addData(address); qrImage.make(); diff --git a/ui/css/design-system/colors.scss b/ui/css/design-system/colors.scss index ac21d9cc93..bdfa11951c 100644 --- a/ui/css/design-system/colors.scss +++ b/ui/css/design-system/colors.scss @@ -23,6 +23,8 @@ $color-map: ( 'success-1': --success-1, 'success-2': --success-2, 'success-3': --success-3, + 'aptos': --mainnet, + 'pontem': --pontem, 'mainnet': --mainnet, 'ropsten': --ropsten, 'kovan': --kovan, diff --git a/ui/ducks/send/send.js b/ui/ducks/send/send.js index abd74a4dcf..8f04a8d4d3 100644 --- a/ui/ducks/send/send.js +++ b/ui/ducks/send/send.js @@ -673,6 +673,10 @@ const slice = createSlice({ * @param action */ updateSendAmount: (state, action) => { + console.log('[Pontem][Ducks][Slice] updateSendAmount ', { + state + }); + state.amount.value = addHexPrefix(action.payload); // Once amount has changed, validate the field slice.caseReducers.validateAmountField(state); @@ -1114,6 +1118,11 @@ const slice = createSlice({ }, resetSendState: () => initialState, validateAmountField: (state) => { + console.log('[Pontem][Ducks] validateAmountField -- state', { + asset: JSON.parse(JSON.stringify(state.asset)), + amount: state.amount, + gas: state.gas + }); switch (true) { // set error to INSUFFICIENT_FUNDS_ERROR if the account balance is lower // than the total price of the transaction inclusive of gas fees. @@ -1403,6 +1412,7 @@ export function resetSendState() { */ export function updateSendAmount(amount) { return async (dispatch, getState) => { + console.log('[Pontem][Ducks] updateSendAmount ', amount); await dispatch(actions.updateSendAmount(amount)); const state = getState(); if (state.send.amount.mode === AMOUNT_MODES.MAX) { @@ -1674,6 +1684,9 @@ export function signTransaction() { account: { address: selectedAddress }, eip1559support, } = state[name]; + + console.log('[Pontem][Ducks][signTransaction] state', state[name]); + if (stage === SEND_STAGES.EDIT) { // When dealing with the edit flow there is already a transaction in // state that we must update, this branch is responsible for that logic. @@ -1749,6 +1762,9 @@ export function signTransaction() { dispatch(displayWarning(error.message)); } } else { + global.__log('[Ducks] signTransaction', { + txParams, + }) // When sending a native asset we use the ethQuery.sendTransaction method // which will result in the transaction being added to background state // and a subsequent confirmation will be queued. diff --git a/ui/helpers/constants/design-system.js b/ui/helpers/constants/design-system.js index 89b0a38016..aaa7e09984 100644 --- a/ui/helpers/constants/design-system.js +++ b/ui/helpers/constants/design-system.js @@ -28,6 +28,8 @@ export const COLORS = { ALERT1: 'alert-1', ALERT2: 'alert-2', ALERT3: 'alert-3', + APTOS: 'aptos', + PONTEM: 'pontem', MAINNET: 'mainnet', ROPSTEN: 'ropsten', KOVAN: 'kovan', diff --git a/ui/helpers/utils/util.js b/ui/helpers/utils/util.js index 9cb8a6ed3b..e31bcfadf2 100644 --- a/ui/helpers/utils/util.js +++ b/ui/helpers/utils/util.js @@ -5,14 +5,12 @@ import * as ethUtil from 'ethereumjs-util'; import { DateTime } from 'luxon'; import { util } from '@metamask/controllers'; import slip44 from '@metamask/slip44'; +import * as stcUtil from '@starcoin/stc-util'; import { addHexPrefix } from '../../../app/scripts/lib/util'; import { - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, LOCALHOST_CHAIN_ID, MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, + PONTEM_CHAIN_ID } from '../../../shared/constants/network'; import { toChecksumHexAddress } from '../../../shared/modules/hexstring-utils'; import { @@ -53,10 +51,7 @@ export function isDefaultMetaMaskChain(chainId) { if ( !chainId || chainId === MAINNET_CHAIN_ID || - chainId === ROPSTEN_CHAIN_ID || - chainId === RINKEBY_CHAIN_ID || - chainId === KOVAN_CHAIN_ID || - chainId === GOERLI_CHAIN_ID || + chainId === PONTEM_CHAIN_ID || chainId === LOCALHOST_CHAIN_ID ) { return true; @@ -596,3 +591,15 @@ export function coinTypeToProtocolName(coinType) { } return slip44[coinType]?.name || undefined; } + +/** + * Safely checksumms a potentially-null address + * + * @param {string} [address] - address to checksum + * @returns {string} checksummed address + * + */ +export function checksumAddress(address) { + const checksummed = address ? stcUtil.toChecksumAddress(address) : ''; + return checksummed; +} diff --git a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js index ef35c4c72f..9c44aa2409 100644 --- a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js +++ b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js @@ -327,7 +327,8 @@ export default class ConfirmTransactionBase extends Component { const { t } = this.context; const { userAcknowledgedGasMissing } = this.state; - const { valid } = this.getErrorKey(); + // const { valid } = this.getErrorKey(); + const valid = true; const isDisabled = () => { return userAcknowledgedGasMissing ? false : !valid; }; @@ -999,7 +1000,7 @@ export default class ConfirmTransactionBase extends Component { hideSenderToRecipient, showAccountInHeader, txData, - gasIsLoading, + // gasIsLoading, gasFeeIsCustom, nativeCurrency, hardwareWalletRequiresConnection, @@ -1014,8 +1015,14 @@ export default class ConfirmTransactionBase extends Component { userAcknowledgedGasMissing, } = this.state; + // TODO change it + const gasIsLoading = false; + const { name } = methodData; - const { valid, errorKey } = this.getErrorKey(); + // TODO change it + const { errorKey } = this.getErrorKey(); + // const { valid, errorKey } = this.getErrorKey(); + const valid = true; const hasSimulationError = Boolean(txData.simulationFails); const renderSimulationFailureWarning = hasSimulationError && !userAcknowledgedGasMissing; @@ -1044,6 +1051,15 @@ export default class ConfirmTransactionBase extends Component { } } + console.log('[Pontem] confirm transaction base', { + renderSimulationFailureWarning, + valid, + submitting, + hardwareWalletRequiresConnection, + gasIsLoading, + gasFeeIsCustom + }); + return ( {selectedName !== selectedAddress && (
+ {/* TODO cut the address */} {selectedAddress}
)} diff --git a/ui/pages/send/send-content/send-content.component.js b/ui/pages/send/send-content/send-content.component.js index dca6d4a914..dbc2988cd1 100644 --- a/ui/pages/send/send-content/send-content.component.js +++ b/ui/pages/send/send-content/send-content.component.js @@ -53,6 +53,12 @@ export default class SendContent extends Component { assetError, } = this.props; + console.log('[Pontem][SendContent] gas', { + gasIsExcessive, + noGasPrice, + getIsBalanceInsufficient, + }); + let gasError; if (gasIsExcessive) { gasError = GAS_PRICE_EXCESSIVE_ERROR_KEY; diff --git a/ui/store/actions.js b/ui/store/actions.js index 71e0bf7502..d9d1fb616d 100644 --- a/ui/store/actions.js +++ b/ui/store/actions.js @@ -60,6 +60,7 @@ export function tryUnlockMetamask(password) { return new Promise((resolve, reject) => { background.submitPassword(password, (error) => { if (error) { + console.log(error); reject(error); return; } @@ -71,6 +72,20 @@ export function tryUnlockMetamask(password) { dispatch(unlockSucceeded()); return forceUpdateMetamaskState(dispatch); }) + .then(() => { + return new Promise((resolve, reject) => { + log.debug(`background.verifySeedPhrase`); + background.verifySeedPhrase((err) => { + if (err) { + dispatch(displayWarning(err.message)); + reject(err); + return; + } + + resolve(); + }); + }); + }) .then(() => { dispatch(hideLoadingIndication()); }) @@ -1669,7 +1684,7 @@ export function updateProviderType(type) { export function updateAndSetCustomRpc( newRpc, chainId, - ticker = 'ETH', + ticker = 'APTOS', nickname, rpcPrefs, ) { @@ -3437,3 +3452,47 @@ export function cancelQRHardwareSignRequest() { await promisifiedBackground.cancelQRHardwareSignRequest(); }; } + +export function getPublicKeyFor(address) { + return function (dispatch) { + dispatch(showLoadingIndication()); + + return new Promise((resolve, reject) => { + log.debug(`background.getPublicKeyFor`); + background.getPublicKeyFor(address, function (err, result) { + dispatch(hideLoadingIndication()); + + if (err) { + log.error(err); + dispatch(displayWarning('Had a problem exporting PublicKey.')); + reject(err); + return; + } + + resolve(result); + }); + }); + }; +} + +export function requestTokensFor(address) { + return function (dispatch) { + dispatch(showLoadingIndication()); + + return new Promise((resolve, reject) => { + log.debug(`background.requestTokensFor`); + background.requestTokensFor(address, function (err, result) { + dispatch(hideLoadingIndication()); + + if (err) { + log.error(err); + dispatch(displayWarning('Faucet temporarily unavailable')); + reject(err); + return; + } + + resolve(result); + }); + }); + }; +} diff --git a/yarn.lock b/yarn.lock index d7ea8cf2c5..7aa01fcd6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1475,6 +1475,19 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/web" "^5.5.0" +"@ethersproject/abstract-provider@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz#0c4ac7054650dbd9c476cf5907f588bbb6ef3061" + integrity sha512-oPMFlKLN+g+y7a79cLK3WiLcjWFnZQtXWgnLAbHZcN3s7L4v90UHpTOrLk+m3yr0gt+/h9STTM6zrr7PM8uoRw== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/web" "^5.6.0" + "@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.4.1", "@ethersproject/abstract-signer@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" @@ -1486,6 +1499,17 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/properties" "^5.5.0" +"@ethersproject/abstract-signer@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.0.tgz#9cd7ae9211c2b123a3b29bf47aab17d4d016e3e7" + integrity sha512-WOqnG0NJKtI8n0wWZPReHtaLkDByPL67tn4nBaDAhmVq8sjHTPbCdz4DRhVu/cfTOvfy9w3iq5QZ7BX7zw56BQ== + dependencies: + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/address@5.5.0", "@ethersproject/address@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" @@ -1497,6 +1521,17 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/rlp" "^5.5.0" +"@ethersproject/address@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.0.tgz#13c49836d73e7885fc148ad633afad729da25012" + integrity sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + "@ethersproject/base64@5.5.0", "@ethersproject/base64@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" @@ -1504,6 +1539,13 @@ dependencies: "@ethersproject/bytes" "^5.5.0" +"@ethersproject/base64@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.0.tgz#a12c4da2a6fb86d88563216b0282308fc15907c9" + integrity sha512-2Neq8wxJ9xHxCF9TUgmKeSh9BXJ6OAxWfeGWvbauPh8FuHEjamgHilllx8KkSd5ErxyHIX7Xv3Fkcud2kY9ezw== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/basex@5.5.0", "@ethersproject/basex@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3" @@ -1512,6 +1554,14 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/properties" "^5.5.0" +"@ethersproject/basex@^5.0.4": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.0.tgz#9ea7209bf0a1c3ddc2a90f180c3a7f0d7d2e8a69" + integrity sha512-qN4T+hQd/Md32MoJpc69rOwLYRUXwjTlhHDIeUkUmiN/JyWkkLLMoG0TqvSQKNqZOMgN5stbUYN6ILC+eD7MEQ== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" @@ -1521,6 +1571,15 @@ "@ethersproject/logger" "^5.5.0" bn.js "^4.11.9" +"@ethersproject/bignumber@^5.0", "@ethersproject/bignumber@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.0.tgz#116c81b075c57fa765a8f3822648cf718a8a0e26" + integrity sha512-VziMaXIUHQlHJmkv1dlcd6GY2PmT0khtAqaMctCIDogxkrarMzA9L94KN1NeXqqOfFD6r0sJT3vCTOFSmZ07DA== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + bn.js "^4.11.9" + "@ethersproject/bytes@5.5.0", "@ethersproject/bytes@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" @@ -1528,6 +1587,13 @@ dependencies: "@ethersproject/logger" "^5.5.0" +"@ethersproject/bytes@^5.0.6", "@ethersproject/bytes@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" + integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== + dependencies: + "@ethersproject/logger" "^5.6.0" + "@ethersproject/constants@5.5.0", "@ethersproject/constants@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" @@ -1535,6 +1601,13 @@ dependencies: "@ethersproject/bignumber" "^5.5.0" +"@ethersproject/constants@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.0.tgz#55e3eb0918584d3acc0688e9958b0cedef297088" + integrity sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/contracts@5.5.0", "@ethersproject/contracts@^5.4.1": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" @@ -1577,6 +1650,20 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" +"@ethersproject/hash@^5.0.6": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.0.tgz#d24446a5263e02492f9808baa99b6e2b4c3429a2" + integrity sha512-fFd+k9gtczqlr0/BruWLAu7UAOas1uRRJvOR84uDf4lNZ+bTkGl366qvniUZHKtlqxBRU65MkOobkmvmpHU+jA== + dependencies: + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/hdnode@5.5.0", "@ethersproject/hdnode@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" @@ -1622,11 +1709,24 @@ "@ethersproject/bytes" "^5.5.0" js-sha3 "0.8.0" +"@ethersproject/keccak256@^5.0.5", "@ethersproject/keccak256@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.0.tgz#fea4bb47dbf8f131c2e1774a1cecbfeb9d606459" + integrity sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w== + dependencies: + "@ethersproject/bytes" "^5.6.0" + js-sha3 "0.8.0" + "@ethersproject/logger@5.5.0", "@ethersproject/logger@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== +"@ethersproject/logger@^5.0.6", "@ethersproject/logger@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" + integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== + "@ethersproject/networks@5.5.2", "@ethersproject/networks@^5.5.0": version "5.5.2" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.2.tgz#784c8b1283cd2a931114ab428dae1bd00c07630b" @@ -1634,6 +1734,13 @@ dependencies: "@ethersproject/logger" "^5.5.0" +"@ethersproject/networks@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.1.tgz#7a21ed1f83e86121737b16841961ec99ccf5c9c7" + integrity sha512-b2rrupf3kCTcc3jr9xOWBuHylSFtbpJf79Ga7QR98ienU2UqGimPGEsYMgbI29KHJfA5Us89XwGVmxrlxmSrMg== + dependencies: + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2@5.5.0", "@ethersproject/pbkdf2@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" @@ -1649,6 +1756,13 @@ dependencies: "@ethersproject/logger" "^5.5.0" +"@ethersproject/properties@^5.0.4", "@ethersproject/properties@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" + integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== + dependencies: + "@ethersproject/logger" "^5.6.0" + "@ethersproject/providers@5.5.3", "@ethersproject/providers@^5.4.5": version "5.5.3" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.3.tgz#56c2b070542ac44eb5de2ed3cf6784acd60a3130" @@ -1690,6 +1804,14 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/logger" "^5.5.0" +"@ethersproject/rlp@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.0.tgz#55a7be01c6f5e64d6e6e7edb6061aa120962a717" + integrity sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/sha2@5.5.0", "@ethersproject/sha2@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" @@ -1699,6 +1821,15 @@ "@ethersproject/logger" "^5.5.0" hash.js "1.1.7" +"@ethersproject/sha2@^5.0.4": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.0.tgz#364c4c11cc753bda36f31f001628706ebadb64d9" + integrity sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + hash.js "1.1.7" + "@ethersproject/signing-key@5.5.0", "@ethersproject/signing-key@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" @@ -1711,6 +1842,18 @@ elliptic "6.5.4" hash.js "1.1.7" +"@ethersproject/signing-key@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.0.tgz#4f02e3fb09e22b71e2e1d6dc4bcb5dafa69ce042" + integrity sha512-S+njkhowmLeUu/r7ir8n78OUKx63kBdMCPssePS89So1TH4hZqnWFsThEd/GiXYp9qMxVrydf7KdM9MTGPFukA== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/solidity@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" @@ -1732,6 +1875,15 @@ "@ethersproject/constants" "^5.5.0" "@ethersproject/logger" "^5.5.0" +"@ethersproject/strings@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.0.tgz#9891b26709153d996bf1303d39a7f4bc047878fd" + integrity sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" @@ -1747,6 +1899,21 @@ "@ethersproject/rlp" "^5.5.0" "@ethersproject/signing-key" "^5.5.0" +"@ethersproject/transactions@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.0.tgz#4b594d73a868ef6e1529a2f8f94a785e6791ae4e" + integrity sha512-4HX+VOhNjXHZyGzER6E/LVI2i6lf9ejYeWD6l4g50AdmimyuStKc39kvKf1bXWQMg7QNVh+uC7dYwtaZ02IXeg== + dependencies: + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + "@ethersproject/signing-key" "^5.6.0" + "@ethersproject/units@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e" @@ -1788,6 +1955,17 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" +"@ethersproject/web@^5.0.9", "@ethersproject/web@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.0.tgz#4bf8b3cbc17055027e1a5dd3c357e37474eaaeb8" + integrity sha512-G/XHj0hV1FxI2teHRfCGvfBUHFmU+YOSbCxlAMqJklxSa7QMiHFQfAxvwY2PFqgvdkxEKwRNr/eCjfAPEm2Ctg== + dependencies: + "@ethersproject/base64" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/wordlists@5.5.0", "@ethersproject/wordlists@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" @@ -3079,6 +3257,86 @@ puka "^1.0.1" read-package-json-fast "^1.1.3" +"@onekeyhq/blockchain-link@1.0.19": + version "1.0.19" + resolved "https://registry.yarnpkg.com/@onekeyhq/blockchain-link/-/blockchain-link-1.0.19.tgz#a251c608bd1740865d4f45c8f48948dd9458699d" + integrity sha512-KGYhPKd3PX/tnw5uVgWKQRDDWfKGh15A0TYTX7Z52nuWMhZ0AxgWmPGVtSQR7mTS7XIo4fmK9TNF1CNDkDD+ng== + dependencies: + bignumber.js "^9.0.1" + es6-promise "^4.2.8" + events "^3.2.0" + ripple-lib "1.8.2" + tiny-worker "^2.3.0" + ws "^7.4.0" + +"@onekeyhq/connect@8.6.1", "@onekeyhq/connect@8.7.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@onekeyhq/connect/-/connect-8.7.0.tgz#cc65f86fcbc88518148b85bb8161103bc15875e3" + integrity sha512-zUUSxHvqHB04r3k0M14CvizS2IBfDuHG9JqOhAKuO14F9MYRtXzLc1UJ43BzY/Snj81Oq+/1IEAf3jVFpFX8zQ== + dependencies: + "@babel/runtime" "^7.12.5" + "@sentry/browser" "^6.4.0" + "@sentry/integrations" "^6.4.0" + "@sentry/tracing" "^6.4.0" + base58-js "^1.0.0" + eth-sig-util "3.0.1" + events "^3.2.0" + patch-package "^6.2.2" + postinstall-postinstall "^2.1.0" + url-join "^4.0.1" + whatwg-fetch "^3.5.0" + +"@onekeyhq/connect@^8.7.0-extended": + version "8.7.0-extended" + resolved "https://registry.yarnpkg.com/@onekeyhq/connect/-/connect-8.7.0-extended.tgz#9254fe5f5e6663d742db7a4e4f98d6cba2536de6" + integrity sha512-6ZpAWt29KIHrMYZQ+tYn9eX0NReJaLHmI64KKzL8E8JtEM8ZTB7/Gs6xASTKDj7NJql/HgjWmcyuSkrd19e1oQ== + dependencies: + "@babel/runtime" "^7.12.5" + "@onekeyhq/blockchain-link" "1.0.19" + "@onekeyhq/link" "1.7.5" + "@onekeyhq/rollout" "1.0.6" + "@sentry/browser" "^6.4.0" + "@sentry/integrations" "^6.4.0" + "@sentry/tracing" "^6.4.0" + "@trezor/utxo-lib" "^0.1.2" + base58-js "^1.0.0" + bchaddrjs "0.4.9" + bignumber.js "^9.0.1" + bowser "^2.11.0" + eth-sig-util "3.0.1" + events "^3.2.0" + hd-wallet "9.1.0" + keccak "^3.0.1" + node-fetch "^2.6.1" + parse-uri "^1.0.3" + patch-package "^6.2.2" + postinstall-postinstall "^2.1.0" + tiny-worker "^2.3.0" + url-join "^4.0.1" + whatwg-fetch "^3.5.0" + +"@onekeyhq/link@1.7.5": + version "1.7.5" + resolved "https://registry.yarnpkg.com/@onekeyhq/link/-/link-1.7.5.tgz#e54edbdeafb93c1f72fb2f3ffceb2d9327bc8e1f" + integrity sha512-KpjAt5Ex4WYyYJYfkIU+3NKdUMoYdnMreLbjtUg+o4l/VIteVSAlFoi5N/KPxmA8hR+AZPmqjHO2h6mbF4c6HQ== + dependencies: + bigi "^1.4.1" + ecurve "^1.0.3" + json-stable-stringify "^1.0.1" + node-fetch "^2.6.1" + object.values "^1.1.2" + protobufjs-old-fixed-webpack "3.8.5" + semver-compare "^1.0.0" + whatwg-fetch "^3.5.0" + +"@onekeyhq/rollout@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@onekeyhq/rollout/-/rollout-1.0.6.tgz#963febab33f015294d4f2002b972ae5d2c328ed3" + integrity sha512-wsR27EMOArkKDVy/F8NyRCuT2PsfDOOR7hMGTUXxfnlbzfz/K4rxROR6mtBicu0PwgFeDXch8fKUnndON2Moeg== + dependencies: + cross-fetch "^3.0.6" + runtypes "^5.0.1" + "@pmmmwh/react-refresh-webpack-plugin@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" @@ -3187,6 +3445,16 @@ "@sentry/utils" "6.13.3" tslib "^1.9.3" +"@sentry/browser@^6.4.0": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.19.3.tgz#b4cfc6eba48d10a5fdf096c05ca11303354edb8b" + integrity sha512-E8UA6IN8z9hL6aGzOHUzqgNZiBwARkA89i8ncKB9QU1/+jl7598ZLziN4+uyPeZiRquEz8Ub7Ve1eacs1u+fbw== + dependencies: + "@sentry/core" "6.19.3" + "@sentry/types" "6.19.3" + "@sentry/utils" "6.19.3" + tslib "^1.9.3" + "@sentry/cli@^1.58.0": version "1.58.0" resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.58.0.tgz#b1609f10e71539951499866502b13bf3a270fe79" @@ -3209,6 +3477,17 @@ "@sentry/utils" "6.13.3" tslib "^1.9.3" +"@sentry/core@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.3.tgz#88268afc8c42716c455ad77bb4bed2bbf96abd83" + integrity sha512-RcGmYdkrE3VYBMl9Hgv4GKsC8FEVUdWYsfGIcT/btwP2YpBeUaTZl+1vV9r3Ncdl125LqzP5CKSj5otVxiEg6g== + dependencies: + "@sentry/hub" "6.19.3" + "@sentry/minimal" "6.19.3" + "@sentry/types" "6.19.3" + "@sentry/utils" "6.19.3" + tslib "^1.9.3" + "@sentry/hub@6.13.3": version "6.13.3" resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.13.3.tgz#cc09623a69b5343315fdb61c7fdd0be74b72299f" @@ -3218,6 +3497,15 @@ "@sentry/utils" "6.13.3" tslib "^1.9.3" +"@sentry/hub@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.3.tgz#d555c83404f19ac9b68f336b051b8e7a9d75feb0" + integrity sha512-iYbkrxEZt6CrHP3U3r54MARVZSs3YHjAMUMOTlC16s/Amz1McwV95XtI3NJaqMhwzl7R5vbGrs3xOtLg1V1Uyw== + dependencies: + "@sentry/types" "6.19.3" + "@sentry/utils" "6.19.3" + tslib "^1.9.3" + "@sentry/integrations@^6.0.0": version "6.13.3" resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-6.13.3.tgz#9d80229de6e815c53fa52ca2422a0d13820b8d4e" @@ -3228,6 +3516,16 @@ localforage "^1.8.1" tslib "^1.9.3" +"@sentry/integrations@^6.4.0": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-6.19.3.tgz#b5ac64591a9c7ae60f54c7d5ebd0d9152215c377" + integrity sha512-hOyX0UoH1ZyFtOjIazL2M9HfQMIjwukv0AtTX2W7sVfV1qxvISaV5lYZrAw1xB1lRoUwOJr/C0odddHWtBgdsA== + dependencies: + "@sentry/types" "6.19.3" + "@sentry/utils" "6.19.3" + localforage "^1.8.1" + tslib "^1.9.3" + "@sentry/minimal@6.13.3": version "6.13.3" resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.13.3.tgz#a675a79bcc830142e4f95e6198a2efde2cd3901e" @@ -3237,11 +3535,36 @@ "@sentry/types" "6.13.3" tslib "^1.9.3" +"@sentry/minimal@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.3.tgz#b9b7f0d7f0cd2341b243318668ac01458f9d7889" + integrity sha512-xy/6ThHK8B2NJT98nWrx6V9eVgUbzq2N/8lv5/QqrKsICjxx22TRC8Q6zPg/o7BYcrY5vpugSEbIeErTnyxHDA== + dependencies: + "@sentry/hub" "6.19.3" + "@sentry/types" "6.19.3" + tslib "^1.9.3" + +"@sentry/tracing@^6.4.0": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.19.3.tgz#dfdbd5019486c899bdf352b1152d5d253544ef70" + integrity sha512-3lyb4yCFH/ltEQSyKM96g2c74vvKIwByx8fLDS4FHYQQDXY+xPcs+zyK8L1Fs5PRFAUciEOK5TS9qwELom5K4w== + dependencies: + "@sentry/hub" "6.19.3" + "@sentry/minimal" "6.19.3" + "@sentry/types" "6.19.3" + "@sentry/utils" "6.19.3" + tslib "^1.9.3" + "@sentry/types@6.13.3": version "6.13.3" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.13.3.tgz#63ad5b6735b0dfd90b3a256a9f8e77b93f0f66b2" integrity sha512-Vrz5CdhaTRSvCQjSyIFIaV9PodjAVFkzJkTRxyY7P77RcegMsRSsG1yzlvCtA99zG9+e6MfoJOgbOCwuZids5A== +"@sentry/types@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.3.tgz#94b19da68d4d23561efb1014f72968bcea85cd0c" + integrity sha512-jHhqxp8MIWSfOc3krorirTGKTEaSFO6XrAvi+2AZhr6gvOChwOgzgrN2ZqesJcZmgCsqWV21u3usSwYeRrjOJA== + "@sentry/utils@6.13.3": version "6.13.3" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.13.3.tgz#188754d40afe693c3fcae410f9322531588a9926" @@ -3250,6 +3573,14 @@ "@sentry/types" "6.13.3" tslib "^1.9.3" +"@sentry/utils@6.19.3": + version "6.19.3" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.3.tgz#0c3a3f0b86c12e3b079e56e37a44e62a1226043d" + integrity sha512-GdC9B/FK7qd0zItY43135bYbhuVSawE18bIrQDNuno8gTpDJ5OgShpTN9zR53AmMh16/lwKNnV3ZZjlpKcxuNw== + dependencies: + "@sentry/types" "6.19.3" + tslib "^1.9.3" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -3302,6 +3633,165 @@ resolved "https://registry.yarnpkg.com/@stablelib/utf8/-/utf8-0.10.1.tgz#eecf54884da7b2bee235e3c70efb8cd5c07ba5bd" integrity sha512-+uM1YZ4MhBC82vt99prF7DXNGqhYmJ9cQ3p5qNowMNkkzn9OWEkqBvguBW3ChAt7JvqZ3SD5HJOfc6YgnfMTHw== +"@starcoin/starcoin@^1.2.1", "@starcoin/starcoin@^1.6.2": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@starcoin/starcoin/-/starcoin-1.9.0.tgz#3196b84ee0132522fc45f6ef627e81f90e899937" + integrity sha512-ePtrpgnLHiwSHAv0NWQgmYFhzx+wOwcaqEXoIMOWFlQS1YY0JATdU1Nw4j+fvZBAP4zZxmHq4Vm8u3Ju7gPDoA== + dependencies: + "@ethersproject/basex" "^5.0.4" + "@ethersproject/bignumber" "^5.0" + "@ethersproject/bytes" "^5.0.6" + "@ethersproject/hash" "^5.0.6" + "@ethersproject/keccak256" "^5.0.5" + "@ethersproject/logger" "^5.0.6" + "@ethersproject/properties" "^5.0.4" + "@ethersproject/sha2" "^5.0.4" + "@ethersproject/web" "^5.0.9" + "@starcoin/stc-ed25519" "^0.1.0" + bech32 "^2.0.0" + ethereumjs-util "5.1.0" + fs "^0.0.1-security" + is-alphabetical "^1.0.4" + is-alphanumerical "^1.0.4" + is-decimal "^1.0.4" + is-hexadecimal "^1.0.4" + is-whitespace-character "^1.0.4" + is-word-character "^1.0.4" + js-sha3 "^0.8.0" + jssha "^3.2.0" + lodash "^4.17.21" + read-bigint "^0.1.6" + ws "7.2.3" + +"@starcoin/stc-ed25519@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@starcoin/stc-ed25519/-/stc-ed25519-0.1.0.tgz#56e65b388889a5953e01806cc3deaa20ddaf8174" + integrity sha512-H3oz8fNQD604Ak0cSNTDcbfzLxsB9XAKw1aJO7iBPuZWcHF8bgn7xxOzsinx5V5LGaPeleWc/Qw4vCKnK6cxHQ== + +"@starcoin/stc-hd-keyring@^1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@starcoin/stc-hd-keyring/-/stc-hd-keyring-1.5.3.tgz#861e3375758076bf5c683063dda4e46705afc6b4" + integrity sha512-aLYt978b1jenuwPEoEvREMJXeXt/Pp+NWSHGyHXVNXdtZ2BwvKIKQxOSZ4kwvYo5qtDcoFhlXhrBJlUMEJz45Q== + dependencies: + "@ethersproject/bytes" "^5.0.6" + "@starcoin/starcoin" "^1.6.2" + "@starcoin/stc-simple-keyring" "^1.5.3" + "@starcoin/stc-util" "^0.3.0" + "@starcoin/stc-wallet" "^1.2.2" + bip39 "^2.2.0" + eth-sig-util "^3.0.1" + ethereumjs-util "^7.0.9" + loglevel "^1.7.1" + +"@starcoin/stc-hdkey@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@starcoin/stc-hdkey/-/stc-hdkey-0.2.0.tgz#03f39fd2308df9811789ee57ad2c0bdc911663ca" + integrity sha512-PTs8WSDn9bdcicFW962pcc/fYc51IOLogpFaN57tqvE+Socpfpnt5l56yiQaGmpR8Th6aoeOb8XYdGWhDc59zw== + dependencies: + "@starcoin/stc-util" "^0.3.0" + coinstring "^2.0.0" + safe-buffer "^5.1.1" + secp256k1 "^3.0.1" + +"@starcoin/stc-hdkey@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@starcoin/stc-hdkey/-/stc-hdkey-0.3.0.tgz#58a9bc254357f9827d46d0d166afda216edcc4df" + integrity sha512-y8z4GUvttmph/0tJ3PCio2Q7F0kE/6ZuE2jssWcZd85Tvf/F6ztHfGDrj/6/t4QY5L/P7YhjLrrUCKWZtdNGZA== + dependencies: + coinstring "^2.0.0" + safe-buffer "^5.1.1" + secp256k1 "^3.0.1" + +"@starcoin/stc-keyring-controller@^1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@starcoin/stc-keyring-controller/-/stc-keyring-controller-1.5.3.tgz#c2d4034177ae3ea4bae585c8ce3187fb253863ba" + integrity sha512-mvImYCWPmXq/y1O6W3x5T7PczdTlgBWHeEzIyUp4FrZyNg6egeD2MMJ0Xq0w/9n1y+3m4ak3sUVx4C8fJVJEfw== + dependencies: + "@starcoin/stc-hd-keyring" "^1.5.3" + "@starcoin/stc-simple-keyring" "^1.5.3" + "@starcoin/stc-util" "^0.3.0" + bip39 "^2.4.0" + bluebird "^3.5.0" + browser-passworder "^2.0.3" + eth-sig-util "^1.4.0" + loglevel "^1.5.0" + obs-store "^4.0.3" + +"@starcoin/stc-onekey-keyring@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@starcoin/stc-onekey-keyring/-/stc-onekey-keyring-1.0.1.tgz#a6db84d277c08e3cca3961852c842647a05f49be" + integrity sha512-nVo4598O09KUrsH6foQ3Pxuv/tCOGxFQpI3YYOelZFSHZsJb6cQKFWMOzbi6GwdTNdXouj52hFqHVzGQwdlzVw== + dependencies: + "@onekeyhq/connect" "8.6.1" + "@starcoin/starcoin" "^1.6.2" + "@starcoin/stc-hdkey" "^0.2.0" + "@starcoin/stc-util" "^0.3.0" + eth-sig-util "^1.4.2" + ethereumjs-tx "^1.3.4" + loglevel "^1.7.1" + +"@starcoin/stc-simple-keyring@^1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@starcoin/stc-simple-keyring/-/stc-simple-keyring-1.5.3.tgz#dc440693122caea938ed44020ed8c9a9becfa032" + integrity sha512-T4QGJ5DoQSoCQ9CJwT+ov1UyEsZc5Y4l+1Pxk/GVzR8mfFX/FOwmli68SQ8NXELFDa6/h741rso1L4URtaTcsg== + dependencies: + "@ethersproject/bytes" "^5.0.6" + "@starcoin/starcoin" "^1.6.2" + "@starcoin/stc-util" "^0.3.0" + "@starcoin/stc-wallet" "^1.2.2" + eth-sig-util "^2.5.0" + ethereumjs-abi "^0.6.5" + events "^1.1.1" + xtend "^4.0.1" + +"@starcoin/stc-util@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@starcoin/stc-util/-/stc-util-0.3.0.tgz#c98ed5879c066e815b40c1f408204945acde9b4c" + integrity sha512-FUF50Di094I45llxs6/qnJaQub0+Dr/rFrM3HbictIN7SmHtikD+ZyOsF+EV/8BOjmOK5sm99ImKaj49PmMjhw== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + ethjs-util "0.1.6" + js-sha3 "^0.8.0" + keccak "^1.0.2" + noble-ed25519 "^1.0.4" + rlp "^2.0.0" + safe-buffer "^5.1.1" + secp256k1 "^3.0.1" + +"@starcoin/stc-util@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@starcoin/stc-util/-/stc-util-0.4.1.tgz#3ad13dc5dfca76a9f71544261e544a440650c4a7" + integrity sha512-KaNVfmiBH+y6AGgbV0iqEkLbfXjMBw27xYAoS+JC9fEthUvo3ff5vzVBLJEjWiXuOxaJ4V0DkCBbQ4q7jEoPuQ== + dependencies: + "@starcoin/stc-ed25519" "^0.1.0" + bn.js "^4.11.0" + create-hash "^1.1.2" + ethjs-util "0.1.6" + js-sha3 "^0.8.0" + keccak "^1.0.2" + rlp "^2.0.0" + safe-buffer "^5.1.1" + secp256k1 "^3.0.1" + +"@starcoin/stc-wallet@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@starcoin/stc-wallet/-/stc-wallet-1.2.2.tgz#7d13e615460a947cb86e8cb0b8f3e2e1aca41c22" + integrity sha512-Y6LjkZxMnUAu2UvFUsyoZqKw8KwvNBc60+CkMJ9pKbRxPZffD1DYRCaBVIrWZz319/+0XteJrW62bZa0G5+lpQ== + dependencies: + "@starcoin/starcoin" "^1.2.1" + "@starcoin/stc-hdkey" "^0.3.0" + "@starcoin/stc-util" "^0.3.0" + aes-js "^3.1.1" + bs58check "^2.1.2" + ethereumjs-util "^6.0.0" + hdkey "^1.1.0" + randombytes "^2.0.6" + safe-buffer "^5.1.2" + scrypt.js "^0.3.0" + utf8 "^3.0.0" + uuid "^3.3.2" + "@storybook/addon-a11y@^6.3.12": version "6.3.12" resolved "https://registry.yarnpkg.com/@storybook/addon-a11y/-/addon-a11y-6.3.12.tgz#2f930fc84fc275a4ed43a716fc09cc12caf4e110" @@ -4183,6 +4673,31 @@ long "^4.0.0" protobufjs "^6.11.2" +"@trezor/utxo-lib@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@trezor/utxo-lib/-/utxo-lib-0.1.1.tgz#63cb4b3accc90352a42a1c866fce8bfbb1c94b26" + integrity sha512-Wonj9ldKCeoajCV6lSE6+hJ2hdPxmVaysWRO9GxhnKyiOdRhiOIQcdKOiXYqpcxwkIbbL9eLGDg73tfn3MUa6w== + dependencies: + bech32 "0.0.3" + bigi "^1.4.0" + bip66 "^1.1.0" + bitcoin-ops "^1.3.0" + blake2b "https://github.com/BitGo/blake2b#6268e6dd678661e0acc4359e9171b97eb1ebf8ac" + bs58check "^2.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.3" + debug "~3.1.0" + ecurve "^1.0.0" + merkle-lib "^2.0.10" + pushdata-bitcoin "^1.0.1" + randombytes "^2.0.1" + safe-buffer "^5.0.1" + typeforce "^1.11.3" + varuint-bitcoin "^1.0.4" + wif "^2.0.1" + optionalDependencies: + secp256k1 "^3.5.2" + "@trezor/utxo-lib@1.0.0-beta.10": version "1.0.0-beta.10" resolved "https://registry.yarnpkg.com/@trezor/utxo-lib/-/utxo-lib-1.0.0-beta.10.tgz#93f16ce607d94e50f8338a75ca8a3710f106c20e" @@ -4205,6 +4720,32 @@ varuint-bitcoin "^1.1.2" wif "^2.0.6" +"@trezor/utxo-lib@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@trezor/utxo-lib/-/utxo-lib-0.1.2.tgz#19319a424b0d0c648b0df456f1849eb08697fb44" + integrity sha512-ONAsg8LAyZY9g6X/qgqloUHwWsqtRmrx2Wt3wkz+7LO2VdE69HktAHWUjJLK9drskNwly3Fp0GKK6ZbbtX+Ghw== + dependencies: + bech32 "0.0.3" + bigi "^1.4.0" + bip66 "^1.1.0" + bitcoin-ops "^1.3.0" + blake2b "https://github.com/BitGo/blake2b#6268e6dd678661e0acc4359e9171b97eb1ebf8ac" + bs58check "^2.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.3" + debug "~3.1.0" + ecurve "^1.0.0" + int64-buffer "0.99.1007" + merkle-lib "^2.0.10" + pushdata-bitcoin "^1.0.1" + randombytes "^2.0.1" + safe-buffer "^5.0.1" + typeforce "^1.11.3" + varuint-bitcoin "^1.0.4" + wif "^2.0.1" + optionalDependencies: + secp256k1 "^3.5.2" + "@truffle/abi-utils@^0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@truffle/abi-utils/-/abi-utils-0.2.4.tgz#9fc8bfc95bbe29a33cca3ab9028865b078e2f051" @@ -5923,6 +6464,14 @@ asap@^2.0.0, asap@^2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +ascli@~0.3: + version "0.3.0" + resolved "https://registry.yarnpkg.com/ascli/-/ascli-0.3.0.tgz#5e66230e5219fe3e8952a4efb4f20fae596a813a" + integrity sha1-XmYjDlIZ/j6JUqTvtPIPrllqgTo= + dependencies: + colour latest + optjs latest + asmcrypto.js@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/asmcrypto.js/-/asmcrypto.js-2.3.2.tgz#b9f84bd0a1fb82f21f8c29cc284a707ad17bba2e" @@ -6486,6 +7035,11 @@ base32.js@~0.1.0: resolved "https://registry.yarnpkg.com/base32.js/-/base32.js-0.1.0.tgz#b582dec693c2f11e893cf064ee6ac5b6131a2202" integrity sha1-tYLexpPC8R6JPPBk7mrFthMaIgI= +base58-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base58-js/-/base58-js-1.0.0.tgz#08b6d745d811103114cc150f7da517b3c02a24ec" + integrity sha512-izVZ4M54gJYRk7VGsiRatRyUVCUaUDF15earKs3u9sUXlawvTwttC9xitGk8Xzlgib5rDL71WPOe4JsyJu9Scg== + base58check@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base58check/-/base58check-2.0.0.tgz#8046652d14bc87f063bd16be94a39134d3b61173" @@ -6536,6 +7090,22 @@ batch-processor@1.0.0: resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= +bchaddrjs@0.4.9: + version "0.4.9" + resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.4.9.tgz#c17036bf5bab31bfbb9f3cec432c7c578f0faf46" + integrity sha512-Mf5Uf+P452ltYg1b/NncX/eAEKW+iAfUs8rO1mcgro8S+/WG6gRh8OqgBtyCK1jBHViajovWoAG+ZCkKbhZbNg== + dependencies: + bs58check "^2.1.2" + cashaddrjs "^0.3.12" + +bchaddrjs@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.3.2.tgz#62d4915f8f69012b7a16ae9fd0c99eca3a8ccf91" + integrity sha512-jpoq2GX6PphcCpuvvrQG4oQmEzn4nGQSm5dT208W72r9GDdbmNPi0hG9TY/dFF3r9sNtdl0qKwNsh8dNL3Q62g== + dependencies: + bs58check "^2.1.2" + cashaddrjs "^0.3.3" + bchaddrjs@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.5.2.tgz#1f52b5077329774e7c82d4882964628106bb11a0" @@ -6553,6 +7123,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +bech32@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-0.0.3.tgz#736747c4a6531c5d8937d0400498de30e93b2f9c" + integrity sha512-O+K1w8P/aAOLcYwwQ4sbiPYZ51ZIW95lnS4/6nE8Aib/z+OOddQIIPdu2qi94qGDp4HhYy/wJotttXKkak1lXg== + bech32@1.1.4, bech32@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" @@ -6603,6 +7178,11 @@ big.js@^5.1.2, big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bigi@^1.1.0, bigi@^1.4.0, bigi@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/bigi/-/bigi-1.4.2.tgz#9c665a95f88b8b08fc05cfd731f561859d725825" + integrity sha1-nGZalfiLiwj8Bc/XMfVhhZ1yWCU= + bignumber.js@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.1.0.tgz#db6f14067c140bd46624815a7916c92d9b6c24b1" @@ -6765,6 +7345,19 @@ blake-hash@^2.0.0: node-gyp-build "^4.2.2" readable-stream "^3.6.0" +"blake2b-wasm@https://github.com/BitGo/blake2b-wasm#193cdb71656c1a6c7f89b05d0327bb9b758d071b": + version "2.0.0" + resolved "https://github.com/BitGo/blake2b-wasm#193cdb71656c1a6c7f89b05d0327bb9b758d071b" + dependencies: + nanoassert "^1.0.0" + +"blake2b@https://github.com/BitGo/blake2b#6268e6dd678661e0acc4359e9171b97eb1ebf8ac": + version "2.1.3" + resolved "https://github.com/BitGo/blake2b#6268e6dd678661e0acc4359e9171b97eb1ebf8ac" + dependencies: + blake2b-wasm "https://github.com/BitGo/blake2b-wasm#193cdb71656c1a6c7f89b05d0327bb9b758d071b" + nanoassert "^1.0.0" + blakejs@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" @@ -6805,6 +7398,11 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== +bn.js@^4.8.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + bo-selector@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/bo-selector/-/bo-selector-0.0.10.tgz#9816dcb00adf374ea87941a863b2acfc026afa3e" @@ -7403,11 +8001,24 @@ bufferutil@4.0.5: dependencies: node-gyp-build "^4.3.0" +bufferview@~1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bufferview/-/bufferview-1.0.1.tgz#7afd74a45f937fa422a1d338c08bbfdc76cd725d" + integrity sha1-ev10pF+Tf6QiodM4wIu/3HbNcl0= + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +bytebuffer-old-fixed-webpack@3.5.6: + version "3.5.6" + resolved "https://registry.yarnpkg.com/bytebuffer-old-fixed-webpack/-/bytebuffer-old-fixed-webpack-3.5.6.tgz#5adc419c6a9b4692f217206703ec7431c759aa3f" + integrity sha1-WtxBnGqbRpLyFyBnA+x0McdZqj8= + dependencies: + bufferview "~1" + long "~2 >=2.2.3" + bytebuffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" @@ -7664,6 +8275,13 @@ cashaddrjs@0.4.4: dependencies: big-integer "1.6.36" +cashaddrjs@^0.3.12, cashaddrjs@^0.3.3: + version "0.3.12" + resolved "https://registry.yarnpkg.com/cashaddrjs/-/cashaddrjs-0.3.12.tgz#73089588113459741e854aa842db1f7816d8428d" + integrity sha512-GdjCYMVwd86HXcFcxyEZQLPLFv8a/u0ccYPsO0PpnUW26LhZzHX9l9QA+DjaeUah7tnebwPs33NWDbbUy8iVYQ== + dependencies: + big-integer "1.6.36" + catering@^2.0.0, catering@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.0.tgz#1354f5e8e231a5b80309302bb23b40624d3212c5" @@ -8306,6 +8924,11 @@ colors@^1.1.2, colors@^1.4.0: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +colour@latest: + version "0.7.1" + resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778" + integrity sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g= + columnify@1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -8842,6 +9465,13 @@ cross-fetch@^2.1.0: node-fetch "2.1.2" whatwg-fetch "2.0.4" +cross-fetch@^3.0.6: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + cross-fetch@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39" @@ -10115,6 +10745,14 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecurve@^1.0.0, ecurve@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/ecurve/-/ecurve-1.0.6.tgz#dfdabbb7149f8d8b78816be5a7d5b83fcf6de797" + integrity sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w== + dependencies: + bigi "^1.1.0" + safe-buffer "^5.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -10466,6 +11104,32 @@ es-abstract@^1.13.0, es-abstract@^1.17.0-next.1, es-abstract@^1.18.0-next.1, es- string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" +es-abstract@^1.19.1: + version "1.19.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" + integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -11204,7 +11868,17 @@ eth-rpc-errors@^4.0.0, eth-rpc-errors@^4.0.2, eth-rpc-errors@^4.0.3: dependencies: fast-safe-stringify "^2.0.6" -eth-sig-util@^1.4.2: +eth-sig-util@3.0.1, eth-sig-util@^3.0.0, eth-sig-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.1.tgz#8753297c83a3f58346bd13547b59c4b2cd110c96" + integrity sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.0" + +eth-sig-util@^1.4.0, eth-sig-util@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" integrity sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA= @@ -11212,7 +11886,7 @@ eth-sig-util@^1.4.2: ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" ethereumjs-util "^5.1.1" -eth-sig-util@^2.0.0: +eth-sig-util@^2.0.0, eth-sig-util@^2.5.0: version "2.5.4" resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.5.4.tgz#577b01fe491b6bf59b0464be09633e20c1677bc5" integrity sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A== @@ -11222,16 +11896,6 @@ eth-sig-util@^2.0.0: tweetnacl "^1.0.3" tweetnacl-util "^0.15.0" -eth-sig-util@^3.0.0, eth-sig-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.1.tgz#8753297c83a3f58346bd13547b59c4b2cd110c96" - integrity sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^5.1.1" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.0" - eth-simple-keyring@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/eth-simple-keyring/-/eth-simple-keyring-4.2.0.tgz#c197a4bd4cce7d701b5f3607d0b843112ddb17e3" @@ -11296,7 +11960,7 @@ ethereum-ens-network-map@^1.0.0, ethereum-ens-network-map@^1.0.2: resolved "https://registry.yarnpkg.com/ethereum-ens-network-map/-/ethereum-ens-network-map-1.0.2.tgz#4e27bad18dae7bd95d84edbcac2c9e739fc959b9" integrity sha512-5qwJ5n3YhjSpE6O/WEBXCAb2nagUgyagJ6C0lGUBWC4LjKp/rRzD+pwtDJ6KCiITFEAoX4eIrWOjRy0Sylq5Hg== -ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.4, ethereumjs-abi@^0.6.8: +ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.4, ethereumjs-abi@^0.6.5, ethereumjs-abi@^0.6.8: version "0.6.8" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== @@ -11347,7 +12011,7 @@ ethereumjs-common@^1.1.0, ethereumjs-common@^1.5.0: resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.1.tgz#4e75042473a64daec0ed9fe84323dd9576aa5dba" integrity sha512-aVUPRLgmXORGXXEVkFYgPhr9TGtpBY2tGhZ9Uh0A3lIUzUDr1x6kQx33SbjPUkLkX3eniPQnIL/2psjkjrOfcQ== -ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3: +ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3, ethereumjs-tx@^1.3.4: version "1.3.7" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== @@ -11363,6 +12027,17 @@ ethereumjs-tx@^2.1.1: ethereumjs-common "^1.5.0" ethereumjs-util "^6.0.0" +ethereumjs-util@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.1.0.tgz#8e9646c13322e75a9c593cf705d27d4a51c991c0" + integrity sha1-jpZGwTMi51qcWTz3BdJ9SlHJkcA= + dependencies: + bn.js "^4.8.0" + create-hash "^1.1.2" + keccak "^1.0.2" + rlp "^2.0.0" + secp256k1 "^3.0.1" + ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.5, ethereumjs-util@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz#3e0c0d1741471acf1036052d048623dee54ad642" @@ -12826,6 +13501,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fs@^0.0.1-security: + version "0.0.1-security" + resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4" + integrity sha1-invTcYa23d84E/I4WLV+yq9eQdQ= + fsevents@2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.0.7.tgz#382c9b443c6cbac4c57187cdda23aa3bf1ccfc2a" @@ -13073,6 +13753,14 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + get-uri@3: version "3.0.2" resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" @@ -13776,7 +14464,7 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-bigints@^1.0.0: +has-bigints@^1.0.0, has-bigints@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== @@ -13825,6 +14513,18 @@ has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -13983,6 +14683,17 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" +hd-wallet@9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/hd-wallet/-/hd-wallet-9.1.0.tgz#0cfdae4e0d7147438c7802fedce29b7d049c0f5f" + integrity sha512-Oto94Q1e9C9wPsrxErky8TFoOqERiL6EZEo3jZ3BSPu36hpz1KfsB3MqPorvoOWQt6AjC5FoIy/lIPLx3aDMew== + dependencies: + "@trezor/utxo-lib" "0.1.1" + bchaddrjs "^0.3.2" + bignumber.js "^9.0.1" + queue "^6.0.1" + socket.io-client "^2.2.0" + hdkey@0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-0.8.0.tgz#08c9a9fcb6a42d9724d669f81c53a3c507f87bf1" @@ -13992,6 +14703,15 @@ hdkey@0.8.0: safe-buffer "^5.1.1" secp256k1 "^3.0.1" +hdkey@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-1.1.2.tgz#c60f9cf6f90fbf24a8a52ea06893f36a0108cd3e" + integrity sha512-PTQ4VKu0oRnCrYfLp04iQZ7T2Cxz0UsEXYauk2j8eh6PJXCpbXuCFhOmtIFtbET0i3PMWmHN9J11gU8LEgUljQ== + dependencies: + bs58check "^2.1.2" + safe-buffer "^5.1.1" + secp256k1 "^3.0.1" + hdkey@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-2.0.1.tgz#0a211d0c510bfc44fa3ec9d44b13b634641cad74" @@ -14588,6 +15308,11 @@ insert-module-globals@^7.0.0, insert-module-globals@^7.2.1: undeclared-identifiers "^1.1.2" xtend "^4.0.0" +int64-buffer@0.99.1007: + version "0.99.1007" + resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-0.99.1007.tgz#211ea089a2fdb960070a2e77cd6d17dc456a5220" + integrity sha512-XDBEu44oSTqlvCSiOZ/0FoUkpWu/vwjJLGSKDabNISPQNZ5wub1FodGHBljRsrR0IXRPq7SslshZYMuA55CgTQ== + int64-buffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-1.0.1.tgz#c78d841b444cadf036cd04f8683696c740f15dca" @@ -15231,7 +15956,7 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-alphabetical@1.0.4, is-alphabetical@^1.0.0: +is-alphabetical@1.0.4, is-alphabetical@^1.0.0, is-alphabetical@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== @@ -15249,6 +15974,14 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" +is-alphanumerical@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" @@ -15300,6 +16033,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" @@ -15345,7 +16083,7 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= -is-decimal@^1.0.0, is-decimal@^1.0.2: +is-decimal@^1.0.0, is-decimal@^1.0.2, is-decimal@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== @@ -15498,6 +16236,11 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" integrity sha1-bghLvJIGH7sJcexYts5tQE4k2mk= +is-hexadecimal@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" @@ -15586,6 +16329,11 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -15751,6 +16499,14 @@ is-regex@^1.0.4, is-regex@^1.1.2: call-bind "^1.0.2" has-symbols "^1.0.1" +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -15788,6 +16544,11 @@ is-root@2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + is-ssh@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" @@ -15810,6 +16571,13 @@ is-string@^1.0.4, is-string@^1.0.5: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" @@ -15867,11 +16635,23 @@ is-valid-glob@^1.0.0: resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + is-whitespace-character@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac" integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ== +is-whitespace-character@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + is-window@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" @@ -15887,6 +16667,11 @@ is-word-character@^1.0.0: resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa" integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A== +is-word-character@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -16882,6 +17667,11 @@ jss@^10.0.3, jss@^10.3.0: is-in-browser "^1.1.3" tiny-warning "^1.0.2" +jssha@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jssha/-/jssha-3.2.0.tgz#88ec50b866dd1411deaddbe6b3e3692e4c710f16" + integrity sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q== + "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.2.0" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" @@ -16965,7 +17755,7 @@ keccak@^1.0.2: nan "^2.2.1" safe-buffer "^5.1.0" -keccak@^3.0.0, keccak@^3.0.2: +keccak@^3.0.0, keccak@^3.0.1, keccak@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== @@ -18269,6 +19059,11 @@ loglevel@^1.4.1, loglevel@^1.5.0: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.0.tgz#ae0caa561111498c5ba13723d6fb631d24003934" integrity sha1-rgyqVhERSYxboTcj1vtjHSQAOTQ= +loglevel@^1.7.1: + version "1.8.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" + integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== + logplease@^1.2.14, logplease@~1.2.14, logplease@~1.2.15: version "1.2.15" resolved "https://registry.yarnpkg.com/logplease/-/logplease-1.2.15.tgz#3da442e93751a5992cc19010a826b08d0293c48a" @@ -18279,6 +19074,11 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +"long@~2 >=2.2.3": + version "2.4.0" + resolved "https://registry.yarnpkg.com/long/-/long-2.4.0.tgz#9fa180bb1d9500cdc29c4156766a1995e1f4524f" + integrity sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8= + long@~3: version "3.2.0" resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" @@ -19496,11 +20296,21 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +nan@^2.0.8: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + nan@^2.11.1, nan@^2.12.1, nan@^2.13.2, nan@^2.14.0, nan@^2.2.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +nanoassert@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-1.1.0.tgz#4f3152e09540fde28c76f44b19bbcd1d5a42478d" + integrity sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40= + nanoid@^2.0.0, nanoid@^2.1.6: version "2.1.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" @@ -19657,6 +20467,11 @@ no-case@^3.0.3, no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +noble-ed25519@^1.0.4: + version "1.2.6" + resolved "https://registry.yarnpkg.com/noble-ed25519/-/noble-ed25519-1.2.6.tgz#a55b75c61da000498abb43ffd81caaa370bfed22" + integrity sha512-zfnWqg9FVMp8CnzUpAjbt1nDXpDjCvxYiCXdnW1mY8zQHw/6twUlkFm14VPdojVzc0kcd+i9zT79+26GcNbsuQ== + nock@^9.0.14: version "9.1.5" resolved "https://registry.yarnpkg.com/nock/-/nock-9.1.5.tgz#9e4878e0e1c050bdd93ae1e326e89461ea15618b" @@ -19719,7 +20534,7 @@ node-fetch@2.6.1: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-fetch@^2.3.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@~2.6.1: +node-fetch@2.6.7, node-fetch@^2.3.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@~2.6.1: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -20164,6 +20979,11 @@ object-hash@^2.0.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== +object-inspect@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== + object-inspect@^1.6.0, object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" @@ -20290,6 +21110,15 @@ object.values@^1.0.4, object.values@^1.1.0, object.values@^1.1.1, object.values@ es-abstract "^1.18.0-next.2" has "^1.0.3" +object.values@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + objectorarray@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.4.tgz#d69b2f0ff7dc2701903d308bb85882f4ddb49483" @@ -20409,6 +21238,11 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +optjs@latest: + version "3.2.2" + resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee" + integrity sha1-aabOicRCpEQDFBrS+bNwvVu29O4= + orbit-db-access-controllers@^0.2.0, orbit-db-access-controllers@~0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/orbit-db-access-controllers/-/orbit-db-access-controllers-0.2.2.tgz#4412b01a198208712d2a0a4065709eeea86b39d6" @@ -21059,7 +21893,7 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -patch-package@^6.4.7: +patch-package@^6.2.2, patch-package@^6.4.7: version "6.4.7" resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148" integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== @@ -21778,6 +22612,11 @@ postcss@^8.1.10, postcss@^8.1.7: nanoid "^3.1.23" source-map-js "^0.6.2" +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + postmsg-rpc@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/postmsg-rpc/-/postmsg-rpc-2.4.0.tgz#4e2daf6851852364696debd5d6bf6936d1424cdf" @@ -22129,6 +22968,14 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= +protobufjs-old-fixed-webpack@3.8.5: + version "3.8.5" + resolved "https://registry.yarnpkg.com/protobufjs-old-fixed-webpack/-/protobufjs-old-fixed-webpack-3.8.5.tgz#5813c1af9f1d136bbf39f4f9f2e6f3e43c389d06" + integrity sha1-WBPBr58dE2u/OfT58ubz5Dw4nQY= + dependencies: + ascli "~0.3" + bytebuffer-old-fixed-webpack "3.5.6" + protobufjs@^6.11.2: version "6.11.2" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.2.tgz#de39fabd4ed32beaa08e9bb1e30d08544c1edf8b" @@ -22565,6 +23412,13 @@ queue-tick@^1.0.0: resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.0.tgz#011104793a3309ae86bfeddd54e251dc94a36725" integrity sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ== +queue@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + quick-format-unescaped@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-3.0.2.tgz#0137e94d8fb37ffeb70040535111c378e75396fb" @@ -23102,6 +23956,11 @@ read-all-stream@^3.0.0: pinkie-promise "^2.0.0" readable-stream "^2.0.0" +read-bigint@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/read-bigint/-/read-bigint-0.1.7.tgz#54a1b55fd6984ea0a84fbdc4af86d5e0b1058b23" + integrity sha512-AW7NH0PK6KwAh/OZEoUlaQXB1rv4HZYu0k8JyodNEBjlwHO+JaG18zi2Qpj9if5yvPwxICR24qOC/2cp5iIIeA== + read-installed@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" @@ -24004,7 +24863,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -ripple-address-codec@^4.1.1, ripple-address-codec@^4.2.3: +ripple-address-codec@^4.1.0, ripple-address-codec@^4.1.1, ripple-address-codec@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/ripple-address-codec/-/ripple-address-codec-4.2.3.tgz#516675715cd43b71d2fd76c59bd92d0f623c152d" integrity sha512-9Nd0hQmKoJEhSTzYR9kYjKmSWlH6HaVosNVAM7mIIVlzcNlQCPfKXj7CfvXcRiHl3C6XUZj7RFLqzVaPjq2ufA== @@ -24012,6 +24871,19 @@ ripple-address-codec@^4.1.1, ripple-address-codec@^4.2.3: base-x "3.0.9" create-hash "^1.1.2" +ripple-binary-codec@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/ripple-binary-codec/-/ripple-binary-codec-0.2.7.tgz#c5390e97e4072747a3ff386ee99558b496c6e5ab" + integrity sha512-VD+sHgZK76q3kmO765klFHPDCEveS5SUeg/bUNVpNrj7w2alyDNkbF17XNbAjFv+kSYhfsUudQanoaSs2Y6uzw== + dependencies: + babel-runtime "^6.26.0" + bn.js "^5.1.1" + create-hash "^1.2.0" + decimal.js "^10.2.0" + inherits "^2.0.4" + lodash "^4.17.15" + ripple-address-codec "^4.1.0" + ripple-binary-codec@^1.1.3: version "1.3.0" resolved "https://registry.yarnpkg.com/ripple-binary-codec/-/ripple-binary-codec-1.3.0.tgz#0c6cf503fb0e12948d538abd198a740bd9d2143a" @@ -24024,7 +24896,7 @@ ripple-binary-codec@^1.1.3: decimal.js "^10.2.0" ripple-address-codec "^4.2.3" -ripple-keypairs@^1.0.3: +ripple-keypairs@^1.0.0, ripple-keypairs@^1.0.3: version "1.1.3" resolved "https://registry.yarnpkg.com/ripple-keypairs/-/ripple-keypairs-1.1.3.tgz#3af825ffe85c1777b0aa78d832e9fc5750d4529d" integrity sha512-y74Y3c0g652BgpDhWsf0x98GnUyY2D9eO2ay2exienUfbIe00TeIiFhYXQhCGVnliGsxeV9WTpU+YuEWuIxuhw== @@ -24060,6 +24932,24 @@ ripple-lib@1.10.0: ripple-lib-transactionparser "0.8.2" ws "^7.2.0" +ripple-lib@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/ripple-lib/-/ripple-lib-1.8.2.tgz#d36dafcb64a913a5dab8a2f66a3b0727baaa9347" + integrity sha512-7fLQtiXb8LfyedkXQtDSNQPy7omNu7rGUO8M8bK2qiE+DuX4FPl8B8tVJbxBwOusAuYzdoVQfZtfdXt4WmBpmw== + dependencies: + "@types/lodash" "^4.14.136" + "@types/ws" "^7.2.0" + bignumber.js "^9.0.0" + https-proxy-agent "^5.0.0" + jsonschema "1.2.2" + lodash "^4.17.4" + lodash.isequal "^4.5.0" + ripple-address-codec "^4.1.1" + ripple-binary-codec "^0.2.7" + ripple-keypairs "^1.0.0" + ripple-lib-transactionparser "0.8.2" + ws "^7.2.0" + rlp-browser@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rlp-browser/-/rlp-browser-1.0.1.tgz#d1ea37f289359200d33dfa006d46008a288761eb" @@ -24368,6 +25258,22 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== +scrypt.js@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.3.0.tgz#6c62d61728ad533c8c376a2e5e3e86d41a95c4c0" + integrity sha512-42LTc1nyFsyv/o0gcHtDztrn+aqpkaCNt5Qh7ATBZfhEZU7IC/0oT/qbBH+uRNoAPvs2fwiOId68FDEoSRA8/A== + dependencies: + scryptsy "^1.2.1" + optionalDependencies: + scrypt "^6.0.2" + +scrypt@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/scrypt/-/scrypt-6.0.3.tgz#04e014a5682b53fa50c2d5cce167d719c06d870d" + integrity sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0= + dependencies: + nan "^2.0.8" + scryptsy@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163" @@ -24391,7 +25297,7 @@ secp256k1@4.0.2, secp256k1@^4.0.0, secp256k1@^4.0.1, secp256k1@^4.0.2: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -secp256k1@^3.0.1, secp256k1@^3.6.1, secp256k1@^3.6.2: +secp256k1@^3.0.1, secp256k1@^3.5.2, secp256k1@^3.6.1, secp256k1@^3.6.2: version "3.8.0" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d" integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw== @@ -24872,7 +25778,7 @@ socket.io-adapter@~1.1.0: resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== -socket.io-client@2.4.0, socket.io-client@^2.1.1: +socket.io-client@2.4.0, socket.io-client@^2.1.1, socket.io-client@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.4.0.tgz#aafb5d594a3c55a34355562fc8aea22ed9119a35" integrity sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ== @@ -26777,6 +27683,16 @@ unbox-primitive@^1.0.0: has-symbols "^1.0.0" which-boxed-primitive "^1.0.1" +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -27110,6 +28026,11 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-join@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + url-loader@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" @@ -27816,7 +28737,7 @@ whatwg-fetch@2.0.4: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== -whatwg-fetch@^3.4.1: +whatwg-fetch@^3.4.1, whatwg-fetch@^3.5.0: version "3.6.2" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== @@ -27861,7 +28782,7 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0: tr46 "^2.0.2" webidl-conversions "^6.1.0" -which-boxed-primitive@^1.0.1: +which-boxed-primitive@^1.0.1, which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== @@ -28044,7 +28965,7 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@*, ws@7.1.0, ws@7.4.6, ws@>=7.4.6, ws@^1.1.0, ws@^5.1.1, ws@^7, ws@^7.2.0, ws@^7.3.1, ws@^7.4.0, ws@^7.4.6, ws@~7.4.2: +ws@*, ws@7.1.0, ws@7.2.3, ws@7.4.6, ws@>=7.4.6, ws@^1.1.0, ws@^5.1.1, ws@^7, ws@^7.2.0, ws@^7.3.1, ws@^7.4.0, ws@^7.4.6, ws@~7.4.2: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==