Use @tornado/tornado-oracles lib instead of many custom functions to calculate fees
This commit is contained in:
parent
58a3e9b7c6
commit
fadd50e801
263
cli.js
263
cli.js
@ -18,7 +18,7 @@ const { toWei, fromWei, toBN, BN } = require('web3-utils');
|
|||||||
const BigNumber = require('bignumber.js');
|
const BigNumber = require('bignumber.js');
|
||||||
const config = require('./config');
|
const config = require('./config');
|
||||||
const program = require('commander');
|
const program = require('commander');
|
||||||
const { GasPriceOracle } = require('@tornado/gas-price-oracle');
|
const { TornadoFeeOracleV4, TornadoFeeOracleV5, TokenPriceOracle } = require('@tornado/tornado-oracles');
|
||||||
const { SocksProxyAgent } = require('socks-proxy-agent');
|
const { SocksProxyAgent } = require('socks-proxy-agent');
|
||||||
const is_ip_private = require('private-ip');
|
const is_ip_private = require('private-ip');
|
||||||
const readline = require('readline');
|
const readline = require('readline');
|
||||||
@ -42,7 +42,8 @@ let web3,
|
|||||||
netSymbol,
|
netSymbol,
|
||||||
multiCall,
|
multiCall,
|
||||||
userAction,
|
userAction,
|
||||||
subgraph;
|
subgraph,
|
||||||
|
feeOracle;
|
||||||
let MERKLE_TREE_HEIGHT, ETH_AMOUNT, TOKEN_AMOUNT, PRIVATE_KEY;
|
let MERKLE_TREE_HEIGHT, ETH_AMOUNT, TOKEN_AMOUNT, PRIVATE_KEY;
|
||||||
|
|
||||||
/** Command state parameters */
|
/** Command state parameters */
|
||||||
@ -157,86 +158,27 @@ async function submitTransaction(signedTX) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
async function generateTransaction(to, encodedData, value = 0, txType = 'other') {
|
||||||
* Estimate gas for created transaction
|
|
||||||
* @typedef {string} EthAddress Wallet (account) address
|
|
||||||
* @param {EthAddress} from Transaction sender
|
|
||||||
* @param {EthAddress} to Transaction recipient
|
|
||||||
* @param {Number} nonce Account nonce (transactions count on sender account)
|
|
||||||
* @param {string} encodedData Encoded ABI of transaction
|
|
||||||
* @param {Number} value Amount of funds to send in this transaction
|
|
||||||
* @returns {Promise<Number>} current acceptable gas limit to send this transaction
|
|
||||||
*/
|
|
||||||
async function estimateGas(from, to, nonce, encodedData, value = 0) {
|
|
||||||
const fetchedGas = await web3.eth.estimateGas({
|
|
||||||
from,
|
|
||||||
to,
|
|
||||||
value,
|
|
||||||
nonce,
|
|
||||||
data: encodedData
|
|
||||||
});
|
|
||||||
const bumped = Math.floor(fetchedGas * 1.3);
|
|
||||||
return bumped;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchL1Fee({ gasPrice, gasLimit }) {
|
|
||||||
const DUMMY_NONCE = '0x1111111111111111111111111111111111111111111111111111111111111111';
|
|
||||||
|
|
||||||
const DUMMY_WITHDRAW_DATA =
|
|
||||||
'0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111';
|
|
||||||
|
|
||||||
if (netId === 10) {
|
|
||||||
const ovmGasPriceOracleContractAddress = '0x420000000000000000000000000000000000000F';
|
|
||||||
const optimismL1GasPriceOracleABI = require('./build/contracts/OptimismL1GasPriceOracle.json');
|
|
||||||
const oracleInstance = new web3.eth.Contract(optimismL1GasPriceOracleABI, ovmGasPriceOracleContractAddress);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const tx = serialize({
|
|
||||||
type: 0,
|
|
||||||
gasLimit,
|
|
||||||
chainId: netId,
|
|
||||||
nonce: DUMMY_NONCE,
|
|
||||||
data: DUMMY_WITHDRAW_DATA,
|
|
||||||
gasPrice,
|
|
||||||
to: tornadoProxyAddress
|
|
||||||
});
|
|
||||||
|
|
||||||
const l1Fee = await oracleInstance.methods.getL1Fee(tx).call();
|
|
||||||
|
|
||||||
return l1Fee;
|
|
||||||
} catch (err) {
|
|
||||||
throw new Error('Error while fetching optimism L1 fee: ' + err.message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function generateTransaction(to, encodedData, value = 0) {
|
|
||||||
const nonce = await web3.eth.getTransactionCount(senderAccount);
|
const nonce = await web3.eth.getTransactionCount(senderAccount);
|
||||||
let gasPrice = await fetchGasPrice();
|
|
||||||
|
|
||||||
let gasLimit;
|
|
||||||
|
|
||||||
if (encodedData) {
|
|
||||||
gasLimit = await estimateGas(senderAccount, to, nonce, encodedData, value);
|
|
||||||
} else {
|
|
||||||
gasLimit = 23000;
|
|
||||||
}
|
|
||||||
gasLimit = web3.utils.toHex(gasLimit);
|
|
||||||
|
|
||||||
const isNumRString = typeof value == 'string' || typeof value == 'number';
|
const isNumRString = typeof value == 'string' || typeof value == 'number';
|
||||||
const valueCost = isNumRString ? toBN(value) : value;
|
const valueCost = isNumRString ? toBN(value) : value;
|
||||||
|
|
||||||
const additionalFees = userAction === 'withdrawal' ? await fetchL1Fee({ gasPrice, gasLimit }) : 0;
|
const incompletedTx = {
|
||||||
const gasCosts = toBN(gasPrice).mul(toBN(gasLimit)).add(toBN(additionalFees));
|
to,
|
||||||
|
value: valueCost.toString(),
|
||||||
|
data: encodedData
|
||||||
|
};
|
||||||
|
|
||||||
|
const { gasPrice, gasLimit, l1Fee } = await feeOracle.getGasParams(incompletedTx, txType);
|
||||||
|
const gasCosts = toBN(gasPrice).mul(toBN(gasLimit)).add(toBN(l1Fee));
|
||||||
const totalCosts = valueCost.add(gasCosts);
|
const totalCosts = valueCost.add(gasCosts);
|
||||||
|
|
||||||
/** Transaction details */
|
/** Transaction details */
|
||||||
console.log('Gas price: ', web3.utils.hexToNumber(gasPrice));
|
console.log('Gas price: ', web3.utils.hexToNumber(gasPrice));
|
||||||
console.log('Gas limit: ', web3.utils.hexToNumber(gasLimit));
|
console.log('Gas limit: ', gasLimit);
|
||||||
if (additionalFees != 0)
|
if (!toBN(l1Fee).eq(toBN(0)))
|
||||||
console.log('Additional gas fees (like L1 data fee): ', rmDecimalBN(fromWei(additionalFees), 12), `${netSymbol}`);
|
console.log('Additional gas fees (like L1 data fee): ', rmDecimalBN(fromWei(l1Fee), 12), `${netSymbol}`);
|
||||||
console.log('Transaction fee: ', rmDecimalBN(fromWei(gasCosts), 12), `${netSymbol}`);
|
console.log('Transaction fee: ', rmDecimalBN(fromWei(gasCosts), 12), `${netSymbol}`);
|
||||||
console.log('Transaction cost: ', rmDecimalBN(fromWei(totalCosts), 12), `${netSymbol}`);
|
console.log('Transaction cost: ', rmDecimalBN(fromWei(totalCosts), 12), `${netSymbol}`);
|
||||||
/** ----------------------------------------- **/
|
/** ----------------------------------------- **/
|
||||||
@ -431,7 +373,7 @@ async function deposit({ currency, amount, commitmentNote }) {
|
|||||||
* @param {Object} deposit Deposit object
|
* @param {Object} deposit Deposit object
|
||||||
* @param {string} currency Currency ticker, like 'ETH' or 'BNB'
|
* @param {string} currency Currency ticker, like 'ETH' or 'BNB'
|
||||||
* @param {number} amount Tornado instance amount, like 0.1 (ETH or BNB) or 10
|
* @param {number} amount Tornado instance amount, like 0.1 (ETH or BNB) or 10
|
||||||
* @return {MerkleProof} Calculated valid merkle tree (proof)
|
* @return {Promise<MerkleProof>} Calculated valid merkle tree (proof)
|
||||||
*/
|
*/
|
||||||
async function generateMerkleProof(deposit, currency, amount) {
|
async function generateMerkleProof(deposit, currency, amount) {
|
||||||
// Get all deposit events from smart contract and assemble merkle tree from them
|
// Get all deposit events from smart contract and assemble merkle tree from them
|
||||||
@ -552,50 +494,49 @@ async function withdraw({ deposit, currency, amount, recipient, relayerURL, refu
|
|||||||
assert(netId === (await web3.eth.net.getId()) || netId === '*', 'This relay is for different network');
|
assert(netId === (await web3.eth.net.getId()) || netId === '*', 'This relay is for different network');
|
||||||
console.log('Relay address:', rewardAccount);
|
console.log('Relay address:', rewardAccount);
|
||||||
|
|
||||||
const gasPrice = await fetchGasPrice();
|
|
||||||
|
|
||||||
const decimals = isTestRPC ? 18 : config.deployments[`netId${netId}`]['tokens'][currency].decimals;
|
const decimals = isTestRPC ? 18 : config.deployments[`netId${netId}`]['tokens'][currency].decimals;
|
||||||
|
|
||||||
const merkleWithdrawalProof = await generateMerkleProof(deposit, currency, amount);
|
const merkleWithdrawalProof = await generateMerkleProof(deposit, currency, amount);
|
||||||
|
|
||||||
async function calculateDataForRelayer(gasLimit) {
|
async function calculateDataForRelayer(totalRelayerFee = 0) {
|
||||||
const { desiredFee: totalFee, feePercent: relayerFee } = await calculateRelayerWithdrawFee({
|
|
||||||
currency,
|
|
||||||
gasPrice,
|
|
||||||
amount,
|
|
||||||
refund,
|
|
||||||
ethPrices,
|
|
||||||
relayerServiceFee: tornadoServiceFee,
|
|
||||||
decimals,
|
|
||||||
gasLimit
|
|
||||||
});
|
|
||||||
|
|
||||||
const { proof, args } = await generateProof({
|
const { proof, args } = await generateProof({
|
||||||
deposit,
|
deposit,
|
||||||
currency,
|
currency,
|
||||||
amount,
|
amount,
|
||||||
recipient,
|
recipient,
|
||||||
relayerAddress: rewardAccount,
|
relayerAddress: rewardAccount,
|
||||||
fee: totalFee,
|
fee: toBN(totalRelayerFee),
|
||||||
refund,
|
refund,
|
||||||
merkleProof: merkleWithdrawalProof
|
merkleProof: merkleWithdrawalProof
|
||||||
});
|
});
|
||||||
|
return { proof, args };
|
||||||
return { proof, args, totalFee, relayerFee };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const { proof: dummyProof, args: dummyArgs } = await calculateDataForRelayer();
|
const { proof: dummyProof, args: dummyArgs } = await calculateDataForRelayer();
|
||||||
const realGasLimit = await estimateWithdrawGasLimit({ relayer: rewardAccount, proof: dummyProof, callArgs: dummyArgs });
|
|
||||||
const { proof, args, totalFee, relayerFee } = await calculateDataForRelayer(realGasLimit);
|
const withdrawalTxCalldata = tornado.methods.withdraw(tornadoProxyAddress, dummyProof, ...dummyArgs);
|
||||||
|
const incompleteWithdrawalTx = {
|
||||||
|
to: tornadoProxyAddress,
|
||||||
|
data: withdrawalTxCalldata,
|
||||||
|
value: toBN(dummyArgs[5]) || 0
|
||||||
|
};
|
||||||
|
|
||||||
|
const totalWithdrawalFee = await feeOracle.calculateWithdrawalFeeViaRelayer(
|
||||||
|
'user_withdrawal',
|
||||||
|
incompleteWithdrawalTx,
|
||||||
|
Number(tornadoServiceFee),
|
||||||
|
currency,
|
||||||
|
amount,
|
||||||
|
decimals,
|
||||||
|
refund,
|
||||||
|
ethPrices?.[currency]
|
||||||
|
);
|
||||||
|
const { proof, args } = await calculateDataForRelayer(totalWithdrawalFee);
|
||||||
|
|
||||||
console.log('Sending withdraw transaction through relay');
|
console.log('Sending withdraw transaction through relay');
|
||||||
const l1Fee = await fetchL1Fee({ gasPrice, gasLimit: realGasLimit });
|
|
||||||
const gasCosts = toBN(gasPrice).mul(toBN(realGasLimit)).add(toBN(l1Fee));
|
|
||||||
|
|
||||||
/** Relayer fee details **/
|
/** Relayer fee details **/
|
||||||
console.log('Transaction fee: ', rmDecimalBN(fromWei(gasCosts), 12), `${netSymbol}`);
|
console.log('Total fees: ', rmDecimalBN(fromWei(toBN(totalWithdrawalFee)), 12), `${netSymbol}`);
|
||||||
console.log('Relayer fee: ', rmDecimalBN(fromWei(relayerFee), 12), `${netSymbol}`);
|
|
||||||
console.log('Total fees: ', rmDecimalBN(fromWei(totalFee), 12), `${netSymbol}`);
|
|
||||||
/** -------------------- **/
|
/** -------------------- **/
|
||||||
|
|
||||||
if (shouldPromptConfirmation) {
|
if (shouldPromptConfirmation) {
|
||||||
@ -638,7 +579,12 @@ async function withdraw({ deposit, currency, amount, recipient, relayerURL, refu
|
|||||||
const { proof, args } = await generateProof({ deposit, currency, amount, recipient, refund });
|
const { proof, args } = await generateProof({ deposit, currency, amount, recipient, refund });
|
||||||
|
|
||||||
console.log('Submitting withdraw transaction');
|
console.log('Submitting withdraw transaction');
|
||||||
await generateTransaction(tornadoProxyAddress, tornado.methods.withdraw(tornadoInstance, proof, ...args).encodeABI());
|
await generateTransaction(
|
||||||
|
tornadoProxyAddress,
|
||||||
|
tornado.methods.withdraw(tornadoInstance, proof, ...args).encodeABI(),
|
||||||
|
toBN(args[5]),
|
||||||
|
'user_withdrawal'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (currency === netSymbol.toLowerCase()) {
|
if (currency === netSymbol.toLowerCase()) {
|
||||||
await printETHBalance({ address: recipient, name: 'Recipient' });
|
await printETHBalance({ address: recipient, name: 'Recipient' });
|
||||||
@ -703,7 +649,7 @@ async function send({ address, amount, tokenAddress }) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log('Amount not defined, sending all available amounts');
|
console.log('Amount not defined, sending all available amounts');
|
||||||
const gasPrice = new BigNumber(await fetchGasPrice());
|
const gasPrice = new BigNumber(await feeOracle.getGasPrice('other'));
|
||||||
const gasLimit = new BigNumber(21000);
|
const gasLimit = new BigNumber(21000);
|
||||||
if (netId == 1) {
|
if (netId == 1) {
|
||||||
const priorityFee = new BigNumber(await gasPrices(3));
|
const priorityFee = new BigNumber(await gasPrices(3));
|
||||||
@ -903,122 +849,6 @@ function getCurrentNetworkSymbol() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchGasPrice() {
|
|
||||||
try {
|
|
||||||
/** Gas preferences **/
|
|
||||||
console.log('Gas speed preference: ', preferenceSpeed);
|
|
||||||
/** ----------------------------------------------- **/
|
|
||||||
|
|
||||||
// Extra bump estimated gas price for some chains
|
|
||||||
let bumpPercent;
|
|
||||||
switch (netId) {
|
|
||||||
case 5:
|
|
||||||
bumpPercent = 50;
|
|
||||||
break;
|
|
||||||
case 137:
|
|
||||||
case 43114:
|
|
||||||
case 100:
|
|
||||||
bumpPercent = 30;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
bumpPercent = 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const oracleOptions = {
|
|
||||||
chainId: netId,
|
|
||||||
defaultRpc: web3.currentProvider.host,
|
|
||||||
minPriority: netId === 1 || netId === 5 ? 2 : 0.05,
|
|
||||||
percentile: 5,
|
|
||||||
blocksCount: 20
|
|
||||||
};
|
|
||||||
const oracle = new GasPriceOracle(oracleOptions);
|
|
||||||
const { maxFeePerGas, gasPrice } = await oracle.getTxGasParams({ legacySpeed: preferenceSpeed, bumpPercent });
|
|
||||||
|
|
||||||
return maxFeePerGas || gasPrice;
|
|
||||||
} catch (e) {
|
|
||||||
const wei = toBN(await web3.eth.getGasPrice());
|
|
||||||
const bumped = wei.add(wei.mul(toBN(bumpPercent)).div(toBN(100)));
|
|
||||||
return toHex(bumped);
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
throw new Error(`Method fetchGasPrice has error ${err.message}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get default gas limit depending on chain ID
|
|
||||||
* Available chain ID's on Tornado
|
|
||||||
* @typedef {1 | 5 | 10 | 56 | 100 | 137 | 42161 | 43114 } NetID
|
|
||||||
* @param {NetID}} netId
|
|
||||||
* @returns {Number} acceptable withdraw gas limit for selected chain
|
|
||||||
*/
|
|
||||||
function getHardcodedWithdrawGasLimit(netId) {
|
|
||||||
switch (netId) {
|
|
||||||
case 10:
|
|
||||||
return 440000;
|
|
||||||
case 42161:
|
|
||||||
return 1900000;
|
|
||||||
default:
|
|
||||||
return 390000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Estimate gas limit for withdraw transaction via relayer with pregenerated proof
|
|
||||||
* @typedef {string} EthAddress Wallet (account) address
|
|
||||||
* @param {object} args Function arguments
|
|
||||||
* @param {EthAddress} args.relayer Relayer address
|
|
||||||
* @param {string} args.proof Calculated SNARK proof for withdrawal
|
|
||||||
* @param {Array<string>} args.callArgs Arguments to call 'withdraw' function from Tornado Proxy contract
|
|
||||||
* @returns {Promise<Number>} Acceptable gas limit to send withdraw transaction via relayer for selected chain
|
|
||||||
*/
|
|
||||||
async function estimateWithdrawGasLimit({ relayer, proof, callArgs }) {
|
|
||||||
const tx = tornado.methods.withdraw(tornadoInstance, proof, ...callArgs).encodeABI();
|
|
||||||
const nonce = await web3.eth.getTransactionCount(relayer);
|
|
||||||
const gasLimit = await estimateGas(relayer, tornadoProxyAddress, nonce, tx, callArgs[5]);
|
|
||||||
|
|
||||||
return gasLimit;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function calculateRelayerWithdrawFee({
|
|
||||||
currency,
|
|
||||||
gasPrice,
|
|
||||||
amount,
|
|
||||||
refund,
|
|
||||||
ethPrices,
|
|
||||||
relayerServiceFee,
|
|
||||||
decimals,
|
|
||||||
gasLimit
|
|
||||||
}) {
|
|
||||||
const decimalsPoint =
|
|
||||||
Math.floor(relayerServiceFee) === Number(relayerServiceFee) ? 0 : relayerServiceFee.toString().split('.')[1].length;
|
|
||||||
const roundDecimal = 10 ** decimalsPoint;
|
|
||||||
const total = toBN(fromDecimals({ amount, decimals }));
|
|
||||||
const feePercent = total.mul(toBN(relayerServiceFee * roundDecimal)).div(toBN(roundDecimal * 100));
|
|
||||||
const l1Fee = await fetchL1Fee({ gasPrice, gasLimit });
|
|
||||||
const expense = toBN(gasPrice)
|
|
||||||
.mul(toBN(gasLimit || getHardcodedWithdrawGasLimit(netId)))
|
|
||||||
.add(toBN(l1Fee));
|
|
||||||
|
|
||||||
let desiredFee;
|
|
||||||
switch (currency) {
|
|
||||||
case netSymbol.toLowerCase(): {
|
|
||||||
desiredFee = expense.add(feePercent);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
desiredFee = expense
|
|
||||||
.add(toBN(refund))
|
|
||||||
.mul(toBN(10 ** decimals))
|
|
||||||
.div(toBN(ethPrices[currency]));
|
|
||||||
desiredFee = desiredFee.add(feePercent);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return { desiredFee, feePercent };
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Waits for transaction to be mined
|
* Waits for transaction to be mined
|
||||||
* @param txHash Hash of transaction
|
* @param txHash Hash of transaction
|
||||||
@ -1599,6 +1429,7 @@ async function init({ rpc, noteNetId, currency = 'dai', amount = '100', balanceC
|
|||||||
netId = await web3.eth.net.getId();
|
netId = await web3.eth.net.getId();
|
||||||
netName = getCurrentNetworkName();
|
netName = getCurrentNetworkName();
|
||||||
netSymbol = getCurrentNetworkSymbol();
|
netSymbol = getCurrentNetworkSymbol();
|
||||||
|
feeOracle = Number(netId) === 1 ? new TornadoFeeOracleV4(netId, rpc) : new TornadoFeeOracleV5(netId, rpc);
|
||||||
|
|
||||||
if (noteNetId && Number(noteNetId) !== netId) {
|
if (noteNetId && Number(noteNetId) !== netId) {
|
||||||
throw new Error('This note is for a different network. Specify the --rpc option explicitly');
|
throw new Error('This note is for a different network. Specify the --rpc option explicitly');
|
||||||
|
273
package-lock.json
generated
273
package-lock.json
generated
@ -158,6 +158,15 @@
|
|||||||
"@ethersproject/bytes": "^5.7.0"
|
"@ethersproject/bytes": "^5.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@ethersproject/basex": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/properties": "^5.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@ethersproject/bignumber": {
|
"@ethersproject/bignumber": {
|
||||||
"version": "5.7.0",
|
"version": "5.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz",
|
||||||
@ -191,6 +200,23 @@
|
|||||||
"@ethersproject/bignumber": "^5.7.0"
|
"@ethersproject/bignumber": "^5.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@ethersproject/contracts": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/abi": "^5.7.0",
|
||||||
|
"@ethersproject/abstract-provider": "^5.7.0",
|
||||||
|
"@ethersproject/abstract-signer": "^5.7.0",
|
||||||
|
"@ethersproject/address": "^5.7.0",
|
||||||
|
"@ethersproject/bignumber": "^5.7.0",
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/constants": "^5.7.0",
|
||||||
|
"@ethersproject/logger": "^5.7.0",
|
||||||
|
"@ethersproject/properties": "^5.7.0",
|
||||||
|
"@ethersproject/transactions": "^5.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@ethersproject/hash": {
|
"@ethersproject/hash": {
|
||||||
"version": "5.7.0",
|
"version": "5.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz",
|
||||||
@ -207,6 +233,45 @@
|
|||||||
"@ethersproject/strings": "^5.7.0"
|
"@ethersproject/strings": "^5.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@ethersproject/hdnode": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/abstract-signer": "^5.7.0",
|
||||||
|
"@ethersproject/basex": "^5.7.0",
|
||||||
|
"@ethersproject/bignumber": "^5.7.0",
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/logger": "^5.7.0",
|
||||||
|
"@ethersproject/pbkdf2": "^5.7.0",
|
||||||
|
"@ethersproject/properties": "^5.7.0",
|
||||||
|
"@ethersproject/sha2": "^5.7.0",
|
||||||
|
"@ethersproject/signing-key": "^5.7.0",
|
||||||
|
"@ethersproject/strings": "^5.7.0",
|
||||||
|
"@ethersproject/transactions": "^5.7.0",
|
||||||
|
"@ethersproject/wordlists": "^5.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@ethersproject/json-wallets": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/abstract-signer": "^5.7.0",
|
||||||
|
"@ethersproject/address": "^5.7.0",
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/hdnode": "^5.7.0",
|
||||||
|
"@ethersproject/keccak256": "^5.7.0",
|
||||||
|
"@ethersproject/logger": "^5.7.0",
|
||||||
|
"@ethersproject/pbkdf2": "^5.7.0",
|
||||||
|
"@ethersproject/properties": "^5.7.0",
|
||||||
|
"@ethersproject/random": "^5.7.0",
|
||||||
|
"@ethersproject/strings": "^5.7.0",
|
||||||
|
"@ethersproject/transactions": "^5.7.0",
|
||||||
|
"aes-js": "3.0.0",
|
||||||
|
"scrypt-js": "3.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@ethersproject/keccak256": {
|
"@ethersproject/keccak256": {
|
||||||
"version": "5.7.0",
|
"version": "5.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz",
|
||||||
@ -229,6 +294,15 @@
|
|||||||
"@ethersproject/logger": "^5.7.0"
|
"@ethersproject/logger": "^5.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@ethersproject/pbkdf2": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/sha2": "^5.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@ethersproject/properties": {
|
"@ethersproject/properties": {
|
||||||
"version": "5.7.0",
|
"version": "5.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz",
|
||||||
@ -237,6 +311,49 @@
|
|||||||
"@ethersproject/logger": "^5.7.0"
|
"@ethersproject/logger": "^5.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@ethersproject/providers": {
|
||||||
|
"version": "5.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz",
|
||||||
|
"integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/abstract-provider": "^5.7.0",
|
||||||
|
"@ethersproject/abstract-signer": "^5.7.0",
|
||||||
|
"@ethersproject/address": "^5.7.0",
|
||||||
|
"@ethersproject/base64": "^5.7.0",
|
||||||
|
"@ethersproject/basex": "^5.7.0",
|
||||||
|
"@ethersproject/bignumber": "^5.7.0",
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/constants": "^5.7.0",
|
||||||
|
"@ethersproject/hash": "^5.7.0",
|
||||||
|
"@ethersproject/logger": "^5.7.0",
|
||||||
|
"@ethersproject/networks": "^5.7.0",
|
||||||
|
"@ethersproject/properties": "^5.7.0",
|
||||||
|
"@ethersproject/random": "^5.7.0",
|
||||||
|
"@ethersproject/rlp": "^5.7.0",
|
||||||
|
"@ethersproject/sha2": "^5.7.0",
|
||||||
|
"@ethersproject/strings": "^5.7.0",
|
||||||
|
"@ethersproject/transactions": "^5.7.0",
|
||||||
|
"@ethersproject/web": "^5.7.0",
|
||||||
|
"bech32": "1.1.4",
|
||||||
|
"ws": "7.4.6"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ws": {
|
||||||
|
"version": "7.4.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
|
||||||
|
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@ethersproject/random": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/logger": "^5.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@ethersproject/rlp": {
|
"@ethersproject/rlp": {
|
||||||
"version": "5.7.0",
|
"version": "5.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz",
|
||||||
@ -246,6 +363,16 @@
|
|||||||
"@ethersproject/logger": "^5.7.0"
|
"@ethersproject/logger": "^5.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@ethersproject/sha2": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/logger": "^5.7.0",
|
||||||
|
"hash.js": "1.1.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@ethersproject/signing-key": {
|
"@ethersproject/signing-key": {
|
||||||
"version": "5.7.0",
|
"version": "5.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz",
|
||||||
@ -266,6 +393,19 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@ethersproject/solidity": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/bignumber": "^5.7.0",
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/keccak256": "^5.7.0",
|
||||||
|
"@ethersproject/logger": "^5.7.0",
|
||||||
|
"@ethersproject/sha2": "^5.7.0",
|
||||||
|
"@ethersproject/strings": "^5.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@ethersproject/strings": {
|
"@ethersproject/strings": {
|
||||||
"version": "5.7.0",
|
"version": "5.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz",
|
||||||
@ -292,6 +432,38 @@
|
|||||||
"@ethersproject/signing-key": "^5.7.0"
|
"@ethersproject/signing-key": "^5.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@ethersproject/units": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/bignumber": "^5.7.0",
|
||||||
|
"@ethersproject/constants": "^5.7.0",
|
||||||
|
"@ethersproject/logger": "^5.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@ethersproject/wallet": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/abstract-provider": "^5.7.0",
|
||||||
|
"@ethersproject/abstract-signer": "^5.7.0",
|
||||||
|
"@ethersproject/address": "^5.7.0",
|
||||||
|
"@ethersproject/bignumber": "^5.7.0",
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/hash": "^5.7.0",
|
||||||
|
"@ethersproject/hdnode": "^5.7.0",
|
||||||
|
"@ethersproject/json-wallets": "^5.7.0",
|
||||||
|
"@ethersproject/keccak256": "^5.7.0",
|
||||||
|
"@ethersproject/logger": "^5.7.0",
|
||||||
|
"@ethersproject/properties": "^5.7.0",
|
||||||
|
"@ethersproject/random": "^5.7.0",
|
||||||
|
"@ethersproject/signing-key": "^5.7.0",
|
||||||
|
"@ethersproject/transactions": "^5.7.0",
|
||||||
|
"@ethersproject/wordlists": "^5.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@ethersproject/web": {
|
"@ethersproject/web": {
|
||||||
"version": "5.7.1",
|
"version": "5.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz",
|
||||||
@ -304,6 +476,18 @@
|
|||||||
"@ethersproject/strings": "^5.7.0"
|
"@ethersproject/strings": "^5.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@ethersproject/wordlists": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/bytes": "^5.7.0",
|
||||||
|
"@ethersproject/hash": "^5.7.0",
|
||||||
|
"@ethersproject/logger": "^5.7.0",
|
||||||
|
"@ethersproject/properties": "^5.7.0",
|
||||||
|
"@ethersproject/strings": "^5.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@humanwhocodes/config-array": {
|
"@humanwhocodes/config-array": {
|
||||||
"version": "0.5.0",
|
"version": "0.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
|
||||||
@ -434,6 +618,48 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@tornado/tornado-config": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://git.tornado.ws/api/packages/tornado-packages/npm/%40tornado%2Ftornado-config/-/2.0.0/tornado-config-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-7EkpWNfEm34VEOrbLnPpvd/aUJYnA1L+6/qx2fZ/AfmuJFkjSZ18Z4jvVGNY7ktKIhTu3/Tbze+9l3eNueCNIA=="
|
||||||
|
},
|
||||||
|
"@tornado/tornado-oracles": {
|
||||||
|
"version": "1.3.2",
|
||||||
|
"resolved": "https://git.tornado.ws/api/packages/tornado-packages/npm/%40tornado%2Ftornado-oracles/-/1.3.2/tornado-oracles-1.3.2.tgz",
|
||||||
|
"integrity": "sha512-z3NI35GKKznxVigF0OghqQ8S3sT/S4oD3AtXqyf+P2bfkriAsdrXnsSMW7Vxej529e5k3cA0dPtOs4eFqFE/7Q==",
|
||||||
|
"requires": {
|
||||||
|
"@tornado/gas-price-oracle": "^0.5.3",
|
||||||
|
"@tornado/tornado-config": "^2.0.0",
|
||||||
|
"@types/node": "^20.5.1",
|
||||||
|
"bignumber.js": "^9.1.1",
|
||||||
|
"ethers": "5.7"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@tornado/gas-price-oracle": {
|
||||||
|
"version": "0.5.3",
|
||||||
|
"resolved": "https://git.tornado.ws/api/packages/tornado-packages/npm/%40tornado%2Fgas-price-oracle/-/0.5.3/gas-price-oracle-0.5.3.tgz",
|
||||||
|
"integrity": "sha512-LpVfPiPIz3FOmJdiqJf/yoeO5n9/Pd5jgtdY+6hB9lNW0AiWhylhpScojICViS+3OL9QC8CoTlgr+kbfGeO9pQ==",
|
||||||
|
"requires": {
|
||||||
|
"axios": "^0.21.2",
|
||||||
|
"bignumber.js": "^9.0.0",
|
||||||
|
"node-cache": "^5.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@types/node": {
|
||||||
|
"version": "20.5.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.6.tgz",
|
||||||
|
"integrity": "sha512-Gi5wRGPbbyOTX+4Y2iULQ27oUPrefaB0PxGQJnfyWN3kvEDGM3mIB5M/gQLmitZf7A9FmLeaqxD3L1CXpm3VKQ=="
|
||||||
|
},
|
||||||
|
"axios": {
|
||||||
|
"version": "0.21.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
|
||||||
|
"integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
|
||||||
|
"requires": {
|
||||||
|
"follow-redirects": "^1.14.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@tornado/web3-providers-http": {
|
"@tornado/web3-providers-http": {
|
||||||
"version": "1.6.5-p1",
|
"version": "1.6.5-p1",
|
||||||
"resolved": "https://git.tornado.ws/api/packages/tornado-packages/npm/%40tornado%2Fweb3-providers-http/-/1.6.5-p1/web3-providers-http-1.6.5-p1.tgz",
|
"resolved": "https://git.tornado.ws/api/packages/tornado-packages/npm/%40tornado%2Fweb3-providers-http/-/1.6.5-p1/web3-providers-http-1.6.5-p1.tgz",
|
||||||
@ -587,6 +813,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
|
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
|
||||||
},
|
},
|
||||||
|
"aes-js": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw=="
|
||||||
|
},
|
||||||
"agent-base": {
|
"agent-base": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||||
@ -753,6 +984,11 @@
|
|||||||
"tweetnacl": "^0.14.3"
|
"tweetnacl": "^0.14.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"bech32": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="
|
||||||
|
},
|
||||||
"big-integer": {
|
"big-integer": {
|
||||||
"version": "1.6.51",
|
"version": "1.6.51",
|
||||||
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
|
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
|
||||||
@ -2019,6 +2255,43 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ethers": {
|
||||||
|
"version": "5.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz",
|
||||||
|
"integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==",
|
||||||
|
"requires": {
|
||||||
|
"@ethersproject/abi": "5.7.0",
|
||||||
|
"@ethersproject/abstract-provider": "5.7.0",
|
||||||
|
"@ethersproject/abstract-signer": "5.7.0",
|
||||||
|
"@ethersproject/address": "5.7.0",
|
||||||
|
"@ethersproject/base64": "5.7.0",
|
||||||
|
"@ethersproject/basex": "5.7.0",
|
||||||
|
"@ethersproject/bignumber": "5.7.0",
|
||||||
|
"@ethersproject/bytes": "5.7.0",
|
||||||
|
"@ethersproject/constants": "5.7.0",
|
||||||
|
"@ethersproject/contracts": "5.7.0",
|
||||||
|
"@ethersproject/hash": "5.7.0",
|
||||||
|
"@ethersproject/hdnode": "5.7.0",
|
||||||
|
"@ethersproject/json-wallets": "5.7.0",
|
||||||
|
"@ethersproject/keccak256": "5.7.0",
|
||||||
|
"@ethersproject/logger": "5.7.0",
|
||||||
|
"@ethersproject/networks": "5.7.1",
|
||||||
|
"@ethersproject/pbkdf2": "5.7.0",
|
||||||
|
"@ethersproject/properties": "5.7.0",
|
||||||
|
"@ethersproject/providers": "5.7.2",
|
||||||
|
"@ethersproject/random": "5.7.0",
|
||||||
|
"@ethersproject/rlp": "5.7.0",
|
||||||
|
"@ethersproject/sha2": "5.7.0",
|
||||||
|
"@ethersproject/signing-key": "5.7.0",
|
||||||
|
"@ethersproject/solidity": "5.7.0",
|
||||||
|
"@ethersproject/strings": "5.7.0",
|
||||||
|
"@ethersproject/transactions": "5.7.0",
|
||||||
|
"@ethersproject/units": "5.7.0",
|
||||||
|
"@ethersproject/wallet": "5.7.0",
|
||||||
|
"@ethersproject/web": "5.7.1",
|
||||||
|
"@ethersproject/wordlists": "5.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ethjs-unit": {
|
"ethjs-unit": {
|
||||||
"version": "0.1.6",
|
"version": "0.1.6",
|
||||||
"resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz",
|
||||||
|
@ -13,8 +13,8 @@
|
|||||||
"@ethersproject/transactions": "^5.7.0",
|
"@ethersproject/transactions": "^5.7.0",
|
||||||
"@tornado/circomlib": "0.0.20-p2",
|
"@tornado/circomlib": "0.0.20-p2",
|
||||||
"@tornado/fixed-merkle-tree": "0.6.1-p1",
|
"@tornado/fixed-merkle-tree": "0.6.1-p1",
|
||||||
"@tornado/gas-price-oracle": "0.5.2-p1",
|
|
||||||
"@tornado/snarkjs": "0.1.20-p2",
|
"@tornado/snarkjs": "0.1.20-p2",
|
||||||
|
"@tornado/tornado-oracles": "^1.3.2",
|
||||||
"@tornado/web3-providers-http": "1.6.5-p1",
|
"@tornado/web3-providers-http": "1.6.5-p1",
|
||||||
"@tornado/websnark": "0.0.4-p1",
|
"@tornado/websnark": "0.0.4-p1",
|
||||||
"axios": "^0.19.2",
|
"axios": "^0.19.2",
|
||||||
|
Loading…
Reference in New Issue
Block a user