├── .env-example ├── .gitignore ├── README.md ├── package.json ├── src ├── api.ts ├── auto-trade.ts ├── main.ts └── models.ts ├── trade-params.json ├── tsconfig.json └── yarn.lock /.env-example: -------------------------------------------------------------------------------- 1 | PUBLIC_KEY="" 2 | PRIVATE_KEY="" 3 | REFRESH_INTERVAL=60000 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .env 4 | .vscode -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 1inch-bot 2 | 3 | 1inch exchange trade bot that allows for limit orders, stop loss oders, take profits on ethereum/polygon (matic) 4 | 5 | # configuring the app 6 | 7 | ## install dependencies 8 | 9 | `yarn` or `npm i` 10 | 11 | ## configure orders 12 | 13 | set trade parameters in de `trade-params.json` 14 | 15 | ``` 16 | { 17 | "orders": [ 18 | { 19 | "symbol": "amWMATIC", 20 | "quote": "amUSDC", 21 | "chain": 137, 22 | "type": "BUY", 23 | "price": 1.43, 24 | "amount": 50, 25 | "recurring": true, 26 | "status": "PENDING" 27 | }, 28 | { 29 | "symbol": "amWMATIC", 30 | "quote": "amUSDC", 31 | "chain": 137, 32 | "type": "SELL", 33 | "price": 1.45, 34 | "amount": 35, 35 | "recurring": true, 36 | "status": "PENDING" 37 | }, 38 | { 39 | "symbol": "QUICK", 40 | "quote": "USDC", 41 | "chain": 137, 42 | "type": "SELL", 43 | "price": 750, 44 | "amount": 14, 45 | "status": "PENDING" 46 | } 47 | ] 48 | } 49 | ``` 50 | 51 | quote is the symbol you are trading against, in my example i'm swapping from/to amUSDC. 52 | if you want to set up a recurring order, add the parameter recurring and set it to `true`. 53 | 54 | ## hook it up to your wallet 55 | 56 | copy the `.env-example` and rename it to `.env`, adjust the values. 57 | 58 | `REFRESH_INTERVAL` is the interval the bot updates prices/trades in milliseconds. The example is set to 1 minute 59 | 60 | you can extract your public and private keys from your metamask browser extention. 61 | 62 | \*\*Also be sure to approve the allowances in the 1inch app first, I still need to add a piece of code that approves the allowances in the bot. 63 | 64 | # compiling and running the app 65 | 66 | ## compilation 67 | 68 | be sure you have typescript installed 69 | 70 | `tsc` 71 | 72 | ## running after compilation 73 | 74 | `node dist/main` 75 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "defitrade", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "dotenv": "^10.0.0", 14 | "ethers": "^5.4.0", 15 | "simple-json-db": "^1.2.3" 16 | }, 17 | "devDependencies": { 18 | "@types/node": "^15.12.5" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/api.ts: -------------------------------------------------------------------------------- 1 | import { ethers } from "ethers"; 2 | import { baseCurrency, Chain, Token } from "./models"; 3 | import axios from "axios"; 4 | 5 | const baseUrl = `https://api.1inch.exchange/v3.0`; 6 | // const MATICprovider = new ethers.providers.JsonRpcProvider("https://rpc-mainnet.maticvigil.com"); //rpc can be replaced with an ETH or BSC RPC 7 | const MATICprovider = new ethers.providers.JsonRpcProvider("https://rpc-mainnet.maticvigil.com/v1/1697a4350bd5369ddcee70f5a62a2b90ad4b1c52"); //rpc can be replaced with an ETH or BSC RPC 8 | const wallet = new ethers.Wallet(`0x${process.env.PRIVATE_KEY}`, MATICprovider); //connect the matic provider along with using the private key as a signer 9 | const weiDecimals = 1000000000000000000; 10 | 11 | export class Api { 12 | constructor() {} 13 | 14 | async getTokenList(chain: Chain | string = Chain.Polygon): Promise { 15 | try { 16 | const listUrl = `${baseUrl}/${chain}/tokens`; 17 | const tokenObject = (await axios.get(listUrl)).data.tokens; 18 | const balanceURL = `https://balances.1inch.exchange/v1.1/${chain}/allowancesAndBalances/0x11111112542d85b3ef69ae05771c2dccff4faa26/${process.env.PUBLIC_KEY}?tokensFetchType=listedTokens`; 19 | const balances = (await axios.get(balanceURL)).data; 20 | const tokens: Token[] = Object.keys(tokenObject).map((t: string) => ({ pair: `${tokenObject[t].symbol}${baseCurrency.name}`, ...tokenObject[t] })); 21 | const tokenPricesUrl = `https://token-prices.1inch.exchange/v1.1/${chain}`; 22 | const response = (await axios.get(tokenPricesUrl)).data; 23 | const tokenPrices = response.message ? new Error(response.message) : response; 24 | const usdcPrice = +tokenPrices[baseCurrency.address] / weiDecimals; 25 | 26 | for (const token of tokens) { 27 | token.price = (+tokenPrices[token.address] / weiDecimals) * (1 / usdcPrice); 28 | token.balance = +balances[token.address].balance ? +balances[token.address].balance / Math.pow(10, +token.decimals) : 0; 29 | token.allowance = +balances[token.address].allowance ? +balances[token.address].allowance / Math.pow(10, +token.decimals) : 0; 30 | } 31 | return tokens; 32 | } catch { 33 | return []; 34 | } 35 | } 36 | 37 | async swap(fromToken: Token, toToken: Token, amount: number, force = false, slippage = 1, chain: Chain | string = Chain.Polygon): Promise { 38 | try { 39 | const wei = amount * Math.pow(10, +fromToken.decimals); 40 | const url = `${baseUrl}/${chain}/swap?fromAddress=${process.env.PUBLIC_KEY}&fromTokenAddress=${fromToken.address}&toTokenAddress=${toToken.address}&amount=${wei}&slippage=${slippage}`; 41 | const response = await axios.get(url); 42 | 43 | if (response.status === 200) { 44 | const tokenObject = response.data; 45 | 46 | // console.log(tokenObject); 47 | // console.log(tokenObject["tx"]["value"]); 48 | // console.log(parseInt(tokenObject["tx"]["value"])); 49 | 50 | const transaction = { 51 | from: tokenObject["tx"].from, 52 | to: tokenObject["tx"].to, 53 | data: tokenObject["tx"].data, 54 | value: `0x${parseInt(tokenObject["tx"]["value"]).toString(16)}`, 55 | }; 56 | 57 | return new Promise((resolve, reject) => { 58 | const trySwap = async () => 59 | wallet 60 | .sendTransaction(transaction) 61 | .then((swap) => { 62 | if (swap) { 63 | console.log(`SWAP ${amount} ${fromToken.symbol} to ${toToken.symbol} - hash: https://polygonscan.com/tx/${swap["hash"]}`); 64 | const scannerUrl = `https://polygonscan.com/tx/${swap["hash"]}`; 65 | if (swap["hash"]) { 66 | if (force) { 67 | const checkInterval = setInterval(async () => { 68 | axios 69 | .get(scannerUrl) 70 | .then((response) => { 71 | if (response.data.includes(`Fail with error`)) { 72 | console.warn(`SWAP ${amount} ${fromToken.symbol} to ${toToken.symbol} - SWAP failed, retrying...`); 73 | clearInterval(checkInterval); 74 | trySwap(); 75 | } else if (response.data.includes(`Success`)) { 76 | console.log(`SWAP ${amount} ${fromToken.symbol} to ${toToken.symbol} - SWAP succeeded.`); 77 | clearInterval(checkInterval); 78 | resolve(scannerUrl); 79 | } else if (response.data.includes(`Sorry, We are unable to locate this TxnHash`)) { 80 | console.log(`SWAP ${amount} ${fromToken.symbol} to ${toToken.symbol} - unable to find transaction hash.`); 81 | clearInterval(checkInterval); 82 | } else { 83 | console.log(`SWAP ${amount} ${fromToken.symbol} to ${toToken.symbol} - transaction pending...`); 84 | } 85 | }) 86 | .catch((e) => { 87 | console.error(`SWAP ${amount} ${fromToken.symbol} to ${toToken.symbol} - SWAP failed: ${e}`); 88 | clearInterval(checkInterval); 89 | trySwap(); 90 | }); 91 | }, 10 * 1000); 92 | } else { 93 | resolve(scannerUrl); 94 | } 95 | } else { 96 | resolve(null); 97 | } 98 | } 99 | }) 100 | .catch((e) => { 101 | resolve(null); 102 | }); 103 | trySwap(); 104 | }); 105 | } else { 106 | console.error(response.statusText); 107 | return null; 108 | } 109 | } catch (e) { 110 | console.error(e); 111 | return null; 112 | } 113 | } 114 | 115 | async approve(tokenAddress: string, amount: number, chain: Chain | string = Chain.Polygon): Promise { 116 | // TODO 117 | const tokenUrl = `${baseUrl}/${chain}/approve/calldata`; 118 | const tokenObject = (await axios.get(tokenUrl)).data.tokens; 119 | return tokenObject ? Object.keys(tokenObject).map((t) => tokenObject[t]) : []; 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /src/auto-trade.ts: -------------------------------------------------------------------------------- 1 | import { TradeParam } from "./models"; 2 | import { Api } from "./api"; 3 | import axios from "axios"; 4 | 5 | const updateStatus = async (db, order: TradeParam, status: string) => { 6 | const orders: TradeParam[] = await db.get("orders"); 7 | const filteredOrders = orders.filter((o) => o.id !== order.id); 8 | await db.set("orders", [...filteredOrders, { ...order, status: status }]); 9 | }; 10 | 11 | export const limitBuy = async (api: Api, db, tokens, order: TradeParam) => { 12 | const tradeToken = tokens.find((t) => t.symbol === order.symbol); 13 | const quoteToken = tokens.find((t) => t.symbol === order.quote); 14 | 15 | if (tradeToken && quoteToken) { 16 | const currentPrice = tradeToken.price / quoteToken.price; 17 | const tradeAmount = +(order.amount * currentPrice).toFixed(quoteToken.decimals); 18 | 19 | if (tradeAmount > quoteToken.balance) { 20 | console.log(`BUY ${order.amount} ${tradeToken.symbol} for ${tradeAmount} ${quoteToken.symbol} - not enough balance - balance: ${quoteToken.balance}`); 21 | } else { 22 | console.log( 23 | `BUY ${order.amount} ${tradeToken.symbol} for ${tradeAmount} ${quoteToken.symbol} when ${tradeToken.symbol}/${quoteToken.symbol} price is below ${order.price} - last price: ${currentPrice}` 24 | ); 25 | if (currentPrice <= order.price) { 26 | updateStatus(db, order, "EXECUTING"); 27 | const scannerUrl = await api.swap(quoteToken, tradeToken, tradeAmount, order.force, order.slippage, order.chain); 28 | if (scannerUrl) { 29 | if (order.recurring) { 30 | updateStatus(db, order, "PENDING"); 31 | } else { 32 | updateStatus(db, order, "EXECUTED"); 33 | } 34 | } else { 35 | updateStatus(db, order, "PENDING"); 36 | } 37 | } 38 | } 39 | } else { 40 | console.log(`API busy`); 41 | } 42 | }; 43 | 44 | export const stopBuy = async (api: Api, db, tokens, order: TradeParam) => { 45 | const tradeToken = tokens.find((t) => t.symbol === order.symbol); 46 | const quoteToken = tokens.find((t) => t.symbol === order.quote); 47 | 48 | if (tradeToken && quoteToken) { 49 | const currentPrice = tradeToken.price / quoteToken.price; 50 | const tradeAmount = +(order.amount * currentPrice).toFixed(quoteToken.decimals); 51 | 52 | if (tradeAmount > quoteToken.balance) { 53 | console.log(`BUY ${order.amount} ${tradeToken.symbol} for ${tradeAmount} ${quoteToken.symbol} - not enough balance - balance: ${quoteToken.balance}`); 54 | } else { 55 | console.log( 56 | `BUY ${order.amount} ${tradeToken.symbol} for ${tradeAmount} ${quoteToken.symbol} when ${tradeToken.symbol}/${quoteToken.symbol} price is above ${order.price} - last price: ${currentPrice}` 57 | ); 58 | if (currentPrice >= order.price) { 59 | updateStatus(db, order, "EXECUTING"); 60 | const scannerUrl = await api.swap(quoteToken, tradeToken, tradeAmount, order.force, order.slippage, order.chain); 61 | if (scannerUrl) { 62 | if (order.recurring) { 63 | updateStatus(db, order, "PENDING"); 64 | } else { 65 | updateStatus(db, order, "EXECUTED"); 66 | } 67 | } else { 68 | updateStatus(db, order, "PENDING"); 69 | } 70 | } 71 | } 72 | } else { 73 | console.log(`API busy`); 74 | } 75 | }; 76 | 77 | export const limitSell = async (api: Api, db, tokens, order: TradeParam) => { 78 | const tradeToken = tokens.find((t) => t.symbol === order.symbol); 79 | const quoteToken = tokens.find((t) => t.symbol === order.quote); 80 | if (tradeToken && quoteToken) { 81 | const currentPrice = tradeToken.price / quoteToken.price; 82 | const tradeAmount = +(order.amount * order.price).toFixed(tradeToken.decimals); 83 | 84 | if (order.amount > tradeToken.balance) { 85 | console.log(`SELL ${order.amount} ${tradeToken.symbol} for ${tradeAmount} ${quoteToken.symbol} - not enough balance - balance: ${tradeToken.balance}`); 86 | } else { 87 | console.log( 88 | `SELL ${order.amount} ${tradeToken.symbol} for ${tradeAmount} ${quoteToken.symbol} when ${tradeToken.symbol}/${quoteToken.symbol} price is above ${order.price} - last price: ${currentPrice}` 89 | ); 90 | 91 | if (currentPrice >= order.price) { 92 | updateStatus(db, order, "EXECUTING"); 93 | const scannerUrl = await api.swap(tradeToken, quoteToken, order.amount, order.force, order.slippage, order.chain); 94 | if (scannerUrl) { 95 | if (order.recurring) { 96 | updateStatus(db, order, "PENDING"); 97 | } else { 98 | updateStatus(db, order, "EXECUTED"); 99 | } 100 | } else { 101 | updateStatus(db, order, "PENDING"); 102 | } 103 | } 104 | } 105 | } else { 106 | console.log(`API busy`); 107 | } 108 | }; 109 | 110 | export const stopSell = async (api: Api, db, tokens, order: TradeParam) => { 111 | const tradeToken = tokens.find((t) => t.symbol === order.symbol); 112 | const quoteToken = tokens.find((t) => t.symbol === order.quote); 113 | if (tradeToken && quoteToken) { 114 | const currentPrice = tradeToken.price / quoteToken.price; 115 | const tradeAmount = +(order.amount * order.price).toFixed(tradeToken.decimals); 116 | 117 | if (order.amount > tradeToken.balance) { 118 | console.log(`SELL ${order.amount} ${tradeToken.symbol} for ${tradeAmount} ${quoteToken.symbol} - not enough balance - balance: ${tradeToken.balance}`); 119 | } else { 120 | console.log( 121 | `SELL ${order.amount} ${tradeToken.symbol} for ${tradeAmount} ${quoteToken.symbol} when ${tradeToken.symbol}/${quoteToken.symbol} price is below ${order.price} - last price: ${currentPrice}` 122 | ); 123 | if (currentPrice <= order.price) { 124 | updateStatus(db, order, "EXECUTING"); 125 | const scannerUrl = await api.swap(tradeToken, quoteToken, order.amount, order.force, order.slippage, order.chain); 126 | if (scannerUrl) { 127 | if (order.recurring) { 128 | updateStatus(db, order, "PENDING"); 129 | } else { 130 | updateStatus(db, order, "EXECUTED"); 131 | } 132 | } else { 133 | updateStatus(db, order, "PENDING"); 134 | } 135 | } 136 | } 137 | } else { 138 | console.log(`API busy`); 139 | } 140 | }; 141 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | require("dotenv").config(); 2 | const JSONdb = require("simple-json-db"); 3 | 4 | import { TradeParam } from "./models"; 5 | import { Api } from "./api"; 6 | import { limitBuy, limitSell, stopSell, stopBuy } from "./auto-trade"; 7 | 8 | const db = new JSONdb("trade-params.json"); 9 | const api = new Api(); 10 | 11 | const executeOrders = async () => { 12 | const orders: TradeParam[] = await db.get("orders"); 13 | let lastChain = null; 14 | let tokens = []; 15 | 16 | for (const order of orders) { 17 | if (!lastChain || order.chain !== lastChain) { 18 | tokens = await api.getTokenList(order.chain); 19 | lastChain = order.chain; 20 | } 21 | 22 | // 0 is pending, 1 is executed, 2 is repeating 23 | if (order.status === "PENDING") { 24 | if (order.type === "BUY") await limitBuy(api, db, tokens, order); 25 | if (order.type === "SELL") await limitSell(api, db, tokens, order); 26 | if (order.type === "STOPSELL") await stopSell(api, db, tokens, order); 27 | if (order.type === "STOPBUY") await stopBuy(api, db, tokens, order); 28 | } 29 | } 30 | }; 31 | 32 | const init = async () => { 33 | await executeOrders(); 34 | setInterval(async () => await executeOrders(), +process.env.REFRESH_INTERVAL); 35 | }; 36 | 37 | init(); 38 | -------------------------------------------------------------------------------- /src/models.ts: -------------------------------------------------------------------------------- 1 | export interface Token { 2 | symbol: string; 3 | pair: string; 4 | name: string; 5 | decimals: string; 6 | address: string; 7 | logoURI: string; 8 | price: number; 9 | balance: number; 10 | allowance: number; 11 | } 12 | 13 | export interface TradeParam { 14 | id: number; 15 | symbol: string; 16 | quote: string; 17 | chain: Chain; 18 | type: "BUY" | "SELL" | "STOPSELL" | "STOPBUY"; 19 | price: number; 20 | amount: number; 21 | slippage?: 1; 22 | recurring?: boolean; 23 | force?: boolean; 24 | status: "PENDING" | "EXECUTING" | "EXECUTED"; 25 | } 26 | 27 | export enum Chain { 28 | "Ethereum" = 1, 29 | "Polygon" = 137, 30 | "BinanceSmartChain" = 56, 31 | } 32 | 33 | export const baseCurrency = { 34 | name: `USDC`, 35 | address: `0x2791bca1f2de4661ed88a30c99a7a9449aa84174`, 36 | }; 37 | -------------------------------------------------------------------------------- /trade-params.json: -------------------------------------------------------------------------------- 1 | { 2 | "orders": [ 3 | { 4 | "id": 21, 5 | "symbol": "amWMATIC", 6 | "quote": "amUSDC", 7 | "chain": 137, 8 | "type": "BUY", 9 | "price": 1.41, 10 | "amount": 10, 11 | "status": "PENDING", 12 | "force": false, 13 | "recurring": true 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "declaration": true, 5 | "removeComments": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "target": "es6", 9 | "sourceMap": true, 10 | "outDir": "./dist", 11 | "baseUrl": "./src", 12 | "incremental": true, 13 | "skipLibCheck": true 14 | 15 | }, 16 | "exclude": ["node_modules", "dist"] 17 | } 18 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ethersproject/abi@5.4.0", "@ethersproject/abi@^5.4.0": 6 | version "5.4.0" 7 | resolved "https://registry.nlark.com/@ethersproject/abi/download/@ethersproject/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" 8 | integrity sha1-ptY72zZy9zg5iEbUJ5+mtsmBgkI= 9 | dependencies: 10 | "@ethersproject/address" "^5.4.0" 11 | "@ethersproject/bignumber" "^5.4.0" 12 | "@ethersproject/bytes" "^5.4.0" 13 | "@ethersproject/constants" "^5.4.0" 14 | "@ethersproject/hash" "^5.4.0" 15 | "@ethersproject/keccak256" "^5.4.0" 16 | "@ethersproject/logger" "^5.4.0" 17 | "@ethersproject/properties" "^5.4.0" 18 | "@ethersproject/strings" "^5.4.0" 19 | 20 | "@ethersproject/abstract-provider@5.4.0", "@ethersproject/abstract-provider@^5.4.0": 21 | version "5.4.0" 22 | resolved "https://registry.nlark.com/@ethersproject/abstract-provider/download/@ethersproject/abstract-provider-5.4.0.tgz#415331031b0f678388971e1987305244edc04e1d" 23 | integrity sha1-QVMxAxsPZ4OIlx4ZhzBSRO3ATh0= 24 | dependencies: 25 | "@ethersproject/bignumber" "^5.4.0" 26 | "@ethersproject/bytes" "^5.4.0" 27 | "@ethersproject/logger" "^5.4.0" 28 | "@ethersproject/networks" "^5.4.0" 29 | "@ethersproject/properties" "^5.4.0" 30 | "@ethersproject/transactions" "^5.4.0" 31 | "@ethersproject/web" "^5.4.0" 32 | 33 | "@ethersproject/abstract-signer@5.4.0", "@ethersproject/abstract-signer@^5.4.0": 34 | version "5.4.0" 35 | resolved "https://registry.nlark.com/@ethersproject/abstract-signer/download/@ethersproject/abstract-signer-5.4.0.tgz#cd5f50b93141ee9f9f49feb4075a0b3eafb57d65" 36 | integrity sha1-zV9QuTFB7p+fSf60B1oLPq+1fWU= 37 | dependencies: 38 | "@ethersproject/abstract-provider" "^5.4.0" 39 | "@ethersproject/bignumber" "^5.4.0" 40 | "@ethersproject/bytes" "^5.4.0" 41 | "@ethersproject/logger" "^5.4.0" 42 | "@ethersproject/properties" "^5.4.0" 43 | 44 | "@ethersproject/address@5.4.0", "@ethersproject/address@^5.4.0": 45 | version "5.4.0" 46 | resolved "https://registry.nlark.com/@ethersproject/address/download/@ethersproject/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" 47 | integrity sha1-ui0AoPjEwIVJM7ljuaOp9utKN6M= 48 | dependencies: 49 | "@ethersproject/bignumber" "^5.4.0" 50 | "@ethersproject/bytes" "^5.4.0" 51 | "@ethersproject/keccak256" "^5.4.0" 52 | "@ethersproject/logger" "^5.4.0" 53 | "@ethersproject/rlp" "^5.4.0" 54 | 55 | "@ethersproject/base64@5.4.0", "@ethersproject/base64@^5.4.0": 56 | version "5.4.0" 57 | resolved "https://registry.nlark.com/@ethersproject/base64/download/@ethersproject/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" 58 | integrity sha1-clK/ZSlZVMkEjHyl9D5chkQbKpo= 59 | dependencies: 60 | "@ethersproject/bytes" "^5.4.0" 61 | 62 | "@ethersproject/basex@5.4.0", "@ethersproject/basex@^5.4.0": 63 | version "5.4.0" 64 | resolved "https://registry.nlark.com/@ethersproject/basex/download/@ethersproject/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6" 65 | integrity sha1-Ci2g9OdsUEqU8rIdMWHtlDjH+KY= 66 | dependencies: 67 | "@ethersproject/bytes" "^5.4.0" 68 | "@ethersproject/properties" "^5.4.0" 69 | 70 | "@ethersproject/bignumber@5.4.0", "@ethersproject/bignumber@^5.4.0": 71 | version "5.4.0" 72 | resolved "https://registry.nlark.com/@ethersproject/bignumber/download/@ethersproject/bignumber-5.4.0.tgz#be8dea298c0ec71208ee60f0b245be0761217ad9" 73 | integrity sha1-vo3qKYwOxxII7mDwskW+B2Ehetk= 74 | dependencies: 75 | "@ethersproject/bytes" "^5.4.0" 76 | "@ethersproject/logger" "^5.4.0" 77 | bn.js "^4.11.9" 78 | 79 | "@ethersproject/bytes@5.4.0", "@ethersproject/bytes@^5.4.0": 80 | version "5.4.0" 81 | resolved "https://registry.nlark.com/@ethersproject/bytes/download/@ethersproject/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" 82 | integrity sha1-Vvoyzjv2cVN1bbrv2pIdHUd0QE4= 83 | dependencies: 84 | "@ethersproject/logger" "^5.4.0" 85 | 86 | "@ethersproject/constants@5.4.0", "@ethersproject/constants@^5.4.0": 87 | version "5.4.0" 88 | resolved "https://registry.nlark.com/@ethersproject/constants/download/@ethersproject/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" 89 | integrity sha1-7gvcswvxtTLSNTyXe/LvHuEXlYo= 90 | dependencies: 91 | "@ethersproject/bignumber" "^5.4.0" 92 | 93 | "@ethersproject/contracts@5.4.0": 94 | version "5.4.0" 95 | resolved "https://registry.nlark.com/@ethersproject/contracts/download/@ethersproject/contracts-5.4.0.tgz#e05fe6bd33acc98741e27d553889ec5920078abb" 96 | integrity sha1-4F/mvTOsyYdB4n1VOInsWSAHirs= 97 | dependencies: 98 | "@ethersproject/abi" "^5.4.0" 99 | "@ethersproject/abstract-provider" "^5.4.0" 100 | "@ethersproject/abstract-signer" "^5.4.0" 101 | "@ethersproject/address" "^5.4.0" 102 | "@ethersproject/bignumber" "^5.4.0" 103 | "@ethersproject/bytes" "^5.4.0" 104 | "@ethersproject/constants" "^5.4.0" 105 | "@ethersproject/logger" "^5.4.0" 106 | "@ethersproject/properties" "^5.4.0" 107 | "@ethersproject/transactions" "^5.4.0" 108 | 109 | "@ethersproject/hash@5.4.0", "@ethersproject/hash@^5.4.0": 110 | version "5.4.0" 111 | resolved "https://registry.nlark.com/@ethersproject/hash/download/@ethersproject/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" 112 | integrity sha1-0YqOkn6CjiKGCgEfOeQp04g0SuA= 113 | dependencies: 114 | "@ethersproject/abstract-signer" "^5.4.0" 115 | "@ethersproject/address" "^5.4.0" 116 | "@ethersproject/bignumber" "^5.4.0" 117 | "@ethersproject/bytes" "^5.4.0" 118 | "@ethersproject/keccak256" "^5.4.0" 119 | "@ethersproject/logger" "^5.4.0" 120 | "@ethersproject/properties" "^5.4.0" 121 | "@ethersproject/strings" "^5.4.0" 122 | 123 | "@ethersproject/hdnode@5.4.0", "@ethersproject/hdnode@^5.4.0": 124 | version "5.4.0" 125 | resolved "https://registry.nlark.com/@ethersproject/hdnode/download/@ethersproject/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac" 126 | integrity sha1-S8mZm5oS61zoDF+qgxFKV+QQfKw= 127 | dependencies: 128 | "@ethersproject/abstract-signer" "^5.4.0" 129 | "@ethersproject/basex" "^5.4.0" 130 | "@ethersproject/bignumber" "^5.4.0" 131 | "@ethersproject/bytes" "^5.4.0" 132 | "@ethersproject/logger" "^5.4.0" 133 | "@ethersproject/pbkdf2" "^5.4.0" 134 | "@ethersproject/properties" "^5.4.0" 135 | "@ethersproject/sha2" "^5.4.0" 136 | "@ethersproject/signing-key" "^5.4.0" 137 | "@ethersproject/strings" "^5.4.0" 138 | "@ethersproject/transactions" "^5.4.0" 139 | "@ethersproject/wordlists" "^5.4.0" 140 | 141 | "@ethersproject/json-wallets@5.4.0", "@ethersproject/json-wallets@^5.4.0": 142 | version "5.4.0" 143 | resolved "https://registry.nlark.com/@ethersproject/json-wallets/download/@ethersproject/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95" 144 | integrity sha1-JYM0HP4xP8mFZkLorOMIAVQUXpU= 145 | dependencies: 146 | "@ethersproject/abstract-signer" "^5.4.0" 147 | "@ethersproject/address" "^5.4.0" 148 | "@ethersproject/bytes" "^5.4.0" 149 | "@ethersproject/hdnode" "^5.4.0" 150 | "@ethersproject/keccak256" "^5.4.0" 151 | "@ethersproject/logger" "^5.4.0" 152 | "@ethersproject/pbkdf2" "^5.4.0" 153 | "@ethersproject/properties" "^5.4.0" 154 | "@ethersproject/random" "^5.4.0" 155 | "@ethersproject/strings" "^5.4.0" 156 | "@ethersproject/transactions" "^5.4.0" 157 | aes-js "3.0.0" 158 | scrypt-js "3.0.1" 159 | 160 | "@ethersproject/keccak256@5.4.0", "@ethersproject/keccak256@^5.4.0": 161 | version "5.4.0" 162 | resolved "https://registry.nlark.com/@ethersproject/keccak256/download/@ethersproject/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" 163 | integrity sha1-cUO47qSXYIAkHSvZLjsfG/cCUxg= 164 | dependencies: 165 | "@ethersproject/bytes" "^5.4.0" 166 | js-sha3 "0.5.7" 167 | 168 | "@ethersproject/logger@5.4.0", "@ethersproject/logger@^5.4.0": 169 | version "5.4.0" 170 | resolved "https://registry.nlark.com/@ethersproject/logger/download/@ethersproject/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" 171 | integrity sha1-85ra32KtYQxCC80Vb9QScOkbPKk= 172 | 173 | "@ethersproject/networks@5.4.0", "@ethersproject/networks@^5.4.0": 174 | version "5.4.0" 175 | resolved "https://registry.nlark.com/@ethersproject/networks/download/@ethersproject/networks-5.4.0.tgz#71eecd3ef3755118b42c1a5d2a44a7e07202e10a" 176 | integrity sha1-ce7NPvN1URi0LBpdKkSn4HIC4Qo= 177 | dependencies: 178 | "@ethersproject/logger" "^5.4.0" 179 | 180 | "@ethersproject/pbkdf2@5.4.0", "@ethersproject/pbkdf2@^5.4.0": 181 | version "5.4.0" 182 | resolved "https://registry.nlark.com/@ethersproject/pbkdf2/download/@ethersproject/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c" 183 | integrity sha1-7Yh4Kmf9oVlMItYNDKkRqdZpZBw= 184 | dependencies: 185 | "@ethersproject/bytes" "^5.4.0" 186 | "@ethersproject/sha2" "^5.4.0" 187 | 188 | "@ethersproject/properties@5.4.0", "@ethersproject/properties@^5.4.0": 189 | version "5.4.0" 190 | resolved "https://registry.nlark.com/@ethersproject/properties/download/@ethersproject/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7" 191 | integrity sha1-OLogU5tE3MXV+AxFrZAgF9zb7+c= 192 | dependencies: 193 | "@ethersproject/logger" "^5.4.0" 194 | 195 | "@ethersproject/providers@5.4.0": 196 | version "5.4.0" 197 | resolved "https://registry.nlark.com/@ethersproject/providers/download/@ethersproject/providers-5.4.0.tgz#1b9eeaf394d790a662ec66373d7219c82f4433f2" 198 | integrity sha1-G57q85TXkKZi7GY3PXIZyC9EM/I= 199 | dependencies: 200 | "@ethersproject/abstract-provider" "^5.4.0" 201 | "@ethersproject/abstract-signer" "^5.4.0" 202 | "@ethersproject/address" "^5.4.0" 203 | "@ethersproject/basex" "^5.4.0" 204 | "@ethersproject/bignumber" "^5.4.0" 205 | "@ethersproject/bytes" "^5.4.0" 206 | "@ethersproject/constants" "^5.4.0" 207 | "@ethersproject/hash" "^5.4.0" 208 | "@ethersproject/logger" "^5.4.0" 209 | "@ethersproject/networks" "^5.4.0" 210 | "@ethersproject/properties" "^5.4.0" 211 | "@ethersproject/random" "^5.4.0" 212 | "@ethersproject/rlp" "^5.4.0" 213 | "@ethersproject/sha2" "^5.4.0" 214 | "@ethersproject/strings" "^5.4.0" 215 | "@ethersproject/transactions" "^5.4.0" 216 | "@ethersproject/web" "^5.4.0" 217 | bech32 "1.1.4" 218 | ws "7.4.6" 219 | 220 | "@ethersproject/random@5.4.0", "@ethersproject/random@^5.4.0": 221 | version "5.4.0" 222 | resolved "https://registry.nlark.com/@ethersproject/random/download/@ethersproject/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16" 223 | integrity sha1-nN3mDhYNAkvjnMFvjeO5zjkZHhY= 224 | dependencies: 225 | "@ethersproject/bytes" "^5.4.0" 226 | "@ethersproject/logger" "^5.4.0" 227 | 228 | "@ethersproject/rlp@5.4.0", "@ethersproject/rlp@^5.4.0": 229 | version "5.4.0" 230 | resolved "https://registry.nlark.com/@ethersproject/rlp/download/@ethersproject/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" 231 | integrity sha1-3mGv2l/5eUVOdtOzMQpsMq0GCTE= 232 | dependencies: 233 | "@ethersproject/bytes" "^5.4.0" 234 | "@ethersproject/logger" "^5.4.0" 235 | 236 | "@ethersproject/sha2@5.4.0", "@ethersproject/sha2@^5.4.0": 237 | version "5.4.0" 238 | resolved "https://registry.nlark.com/@ethersproject/sha2/download/@ethersproject/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371" 239 | integrity sha1-yajbEDcBTLxOlIK9Zi+GwJBEA3E= 240 | dependencies: 241 | "@ethersproject/bytes" "^5.4.0" 242 | "@ethersproject/logger" "^5.4.0" 243 | hash.js "1.1.7" 244 | 245 | "@ethersproject/signing-key@5.4.0", "@ethersproject/signing-key@^5.4.0": 246 | version "5.4.0" 247 | resolved "https://registry.nlark.com/@ethersproject/signing-key/download/@ethersproject/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" 248 | integrity sha1-LwUSCYToHPiaPV9t7Fxo7giU++w= 249 | dependencies: 250 | "@ethersproject/bytes" "^5.4.0" 251 | "@ethersproject/logger" "^5.4.0" 252 | "@ethersproject/properties" "^5.4.0" 253 | bn.js "^4.11.9" 254 | elliptic "6.5.4" 255 | hash.js "1.1.7" 256 | 257 | "@ethersproject/solidity@5.4.0": 258 | version "5.4.0" 259 | resolved "https://registry.nlark.com/@ethersproject/solidity/download/@ethersproject/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" 260 | integrity sha1-EwXgWOoC3EiR3xizMjKxGhTs6ew= 261 | dependencies: 262 | "@ethersproject/bignumber" "^5.4.0" 263 | "@ethersproject/bytes" "^5.4.0" 264 | "@ethersproject/keccak256" "^5.4.0" 265 | "@ethersproject/sha2" "^5.4.0" 266 | "@ethersproject/strings" "^5.4.0" 267 | 268 | "@ethersproject/strings@5.4.0", "@ethersproject/strings@^5.4.0": 269 | version "5.4.0" 270 | resolved "https://registry.nlark.com/@ethersproject/strings/download/@ethersproject/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" 271 | integrity sha1-+xInATLdhLApBqjYla5+f6PQfZo= 272 | dependencies: 273 | "@ethersproject/bytes" "^5.4.0" 274 | "@ethersproject/constants" "^5.4.0" 275 | "@ethersproject/logger" "^5.4.0" 276 | 277 | "@ethersproject/transactions@5.4.0", "@ethersproject/transactions@^5.4.0": 278 | version "5.4.0" 279 | resolved "https://registry.nlark.com/@ethersproject/transactions/download/@ethersproject/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" 280 | integrity sha1-oVnQNReTNL2S80DOD3foPp4VIuA= 281 | dependencies: 282 | "@ethersproject/address" "^5.4.0" 283 | "@ethersproject/bignumber" "^5.4.0" 284 | "@ethersproject/bytes" "^5.4.0" 285 | "@ethersproject/constants" "^5.4.0" 286 | "@ethersproject/keccak256" "^5.4.0" 287 | "@ethersproject/logger" "^5.4.0" 288 | "@ethersproject/properties" "^5.4.0" 289 | "@ethersproject/rlp" "^5.4.0" 290 | "@ethersproject/signing-key" "^5.4.0" 291 | 292 | "@ethersproject/units@5.4.0": 293 | version "5.4.0" 294 | resolved "https://registry.nlark.com/@ethersproject/units/download/@ethersproject/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe" 295 | integrity sha1-1XR3pEmLFLiLEDlgYsjLuvIMef4= 296 | dependencies: 297 | "@ethersproject/bignumber" "^5.4.0" 298 | "@ethersproject/constants" "^5.4.0" 299 | "@ethersproject/logger" "^5.4.0" 300 | 301 | "@ethersproject/wallet@5.4.0": 302 | version "5.4.0" 303 | resolved "https://registry.nlark.com/@ethersproject/wallet/download/@ethersproject/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353" 304 | integrity sha1-+ltZgwtC6b5W6t1FoWouCTOtk1M= 305 | dependencies: 306 | "@ethersproject/abstract-provider" "^5.4.0" 307 | "@ethersproject/abstract-signer" "^5.4.0" 308 | "@ethersproject/address" "^5.4.0" 309 | "@ethersproject/bignumber" "^5.4.0" 310 | "@ethersproject/bytes" "^5.4.0" 311 | "@ethersproject/hash" "^5.4.0" 312 | "@ethersproject/hdnode" "^5.4.0" 313 | "@ethersproject/json-wallets" "^5.4.0" 314 | "@ethersproject/keccak256" "^5.4.0" 315 | "@ethersproject/logger" "^5.4.0" 316 | "@ethersproject/properties" "^5.4.0" 317 | "@ethersproject/random" "^5.4.0" 318 | "@ethersproject/signing-key" "^5.4.0" 319 | "@ethersproject/transactions" "^5.4.0" 320 | "@ethersproject/wordlists" "^5.4.0" 321 | 322 | "@ethersproject/web@5.4.0", "@ethersproject/web@^5.4.0": 323 | version "5.4.0" 324 | resolved "https://registry.nlark.com/@ethersproject/web/download/@ethersproject/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" 325 | integrity sha1-SfrBc7lpkjNO02oXVTi6B6dBPR8= 326 | dependencies: 327 | "@ethersproject/base64" "^5.4.0" 328 | "@ethersproject/bytes" "^5.4.0" 329 | "@ethersproject/logger" "^5.4.0" 330 | "@ethersproject/properties" "^5.4.0" 331 | "@ethersproject/strings" "^5.4.0" 332 | 333 | "@ethersproject/wordlists@5.4.0", "@ethersproject/wordlists@^5.4.0": 334 | version "5.4.0" 335 | resolved "https://registry.nlark.com/@ethersproject/wordlists/download/@ethersproject/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7" 336 | integrity sha1-80IF7Du8nixJytrud0zwsH51c9c= 337 | dependencies: 338 | "@ethersproject/bytes" "^5.4.0" 339 | "@ethersproject/hash" "^5.4.0" 340 | "@ethersproject/logger" "^5.4.0" 341 | "@ethersproject/properties" "^5.4.0" 342 | "@ethersproject/strings" "^5.4.0" 343 | 344 | "@types/node@^15.12.5": 345 | version "15.12.5" 346 | resolved "https://registry.nlark.com/@types/node/download/@types/node-15.12.5.tgz?cache=0&sync_timestamp=1624763102752&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-15.12.5.tgz#9a78318a45d75c9523d2396131bd3cca54b2d185" 347 | integrity sha1-mngxikXXXJUj0jlhMb08ylSy0YU= 348 | 349 | aes-js@3.0.0: 350 | version "3.0.0" 351 | resolved "https://registry.npm.taobao.org/aes-js/download/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" 352 | integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= 353 | 354 | axios@^0.21.1: 355 | version "0.21.1" 356 | resolved "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz?cache=0&sync_timestamp=1608611475093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" 357 | integrity sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg= 358 | dependencies: 359 | follow-redirects "^1.10.0" 360 | 361 | bech32@1.1.4: 362 | version "1.1.4" 363 | resolved "https://registry.npm.taobao.org/bech32/download/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" 364 | integrity sha1-44yfN78Xm46xauOncrQMNW1IMuk= 365 | 366 | bn.js@^4.11.9: 367 | version "4.12.0" 368 | resolved "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" 369 | integrity sha1-d1s/J477uXGO7HNh9IP7Nvu/6og= 370 | 371 | brorand@^1.1.0: 372 | version "1.1.0" 373 | resolved "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 374 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= 375 | 376 | dotenv@^10.0.0: 377 | version "10.0.0" 378 | resolved "https://registry.nlark.com/dotenv/download/dotenv-10.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdotenv%2Fdownload%2Fdotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" 379 | integrity sha1-PUInuPuV+BCWzdK2ZlP7LHCFuoE= 380 | 381 | elliptic@6.5.4: 382 | version "6.5.4" 383 | resolved "https://registry.nlark.com/elliptic/download/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" 384 | integrity sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s= 385 | dependencies: 386 | bn.js "^4.11.9" 387 | brorand "^1.1.0" 388 | hash.js "^1.0.0" 389 | hmac-drbg "^1.0.1" 390 | inherits "^2.0.4" 391 | minimalistic-assert "^1.0.1" 392 | minimalistic-crypto-utils "^1.0.1" 393 | 394 | ethers@^5.4.0: 395 | version "5.4.0" 396 | resolved "https://registry.nlark.com/ethers/download/ethers-5.4.0.tgz#e9fe4b39350bcce5edd410c70bd57ba328ecf474" 397 | integrity sha1-6f5LOTULzOXt1BDHC9V7oyjs9HQ= 398 | dependencies: 399 | "@ethersproject/abi" "5.4.0" 400 | "@ethersproject/abstract-provider" "5.4.0" 401 | "@ethersproject/abstract-signer" "5.4.0" 402 | "@ethersproject/address" "5.4.0" 403 | "@ethersproject/base64" "5.4.0" 404 | "@ethersproject/basex" "5.4.0" 405 | "@ethersproject/bignumber" "5.4.0" 406 | "@ethersproject/bytes" "5.4.0" 407 | "@ethersproject/constants" "5.4.0" 408 | "@ethersproject/contracts" "5.4.0" 409 | "@ethersproject/hash" "5.4.0" 410 | "@ethersproject/hdnode" "5.4.0" 411 | "@ethersproject/json-wallets" "5.4.0" 412 | "@ethersproject/keccak256" "5.4.0" 413 | "@ethersproject/logger" "5.4.0" 414 | "@ethersproject/networks" "5.4.0" 415 | "@ethersproject/pbkdf2" "5.4.0" 416 | "@ethersproject/properties" "5.4.0" 417 | "@ethersproject/providers" "5.4.0" 418 | "@ethersproject/random" "5.4.0" 419 | "@ethersproject/rlp" "5.4.0" 420 | "@ethersproject/sha2" "5.4.0" 421 | "@ethersproject/signing-key" "5.4.0" 422 | "@ethersproject/solidity" "5.4.0" 423 | "@ethersproject/strings" "5.4.0" 424 | "@ethersproject/transactions" "5.4.0" 425 | "@ethersproject/units" "5.4.0" 426 | "@ethersproject/wallet" "5.4.0" 427 | "@ethersproject/web" "5.4.0" 428 | "@ethersproject/wordlists" "5.4.0" 429 | 430 | follow-redirects@^1.10.0: 431 | version "1.14.1" 432 | resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" 433 | integrity sha1-2RFN7Qoc/dM04WTmZirQK/2R/0M= 434 | 435 | hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: 436 | version "1.1.7" 437 | resolved "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 438 | integrity sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I= 439 | dependencies: 440 | inherits "^2.0.3" 441 | minimalistic-assert "^1.0.1" 442 | 443 | hmac-drbg@^1.0.1: 444 | version "1.0.1" 445 | resolved "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 446 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= 447 | dependencies: 448 | hash.js "^1.0.3" 449 | minimalistic-assert "^1.0.0" 450 | minimalistic-crypto-utils "^1.0.1" 451 | 452 | inherits@^2.0.3, inherits@^2.0.4: 453 | version "2.0.4" 454 | resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 455 | integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= 456 | 457 | js-sha3@0.5.7: 458 | version "0.5.7" 459 | resolved "https://registry.npm.taobao.org/js-sha3/download/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" 460 | integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= 461 | 462 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 463 | version "1.0.1" 464 | resolved "https://registry.nlark.com/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 465 | integrity sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc= 466 | 467 | minimalistic-crypto-utils@^1.0.1: 468 | version "1.0.1" 469 | resolved "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 470 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= 471 | 472 | scrypt-js@3.0.1: 473 | version "3.0.1" 474 | resolved "https://registry.npm.taobao.org/scrypt-js/download/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" 475 | integrity sha1-0xSlfCrvadGtmKE4oh/p6vqe4xI= 476 | 477 | simple-json-db@^1.2.3: 478 | version "1.2.3" 479 | resolved "https://registry.nlark.com/simple-json-db/download/simple-json-db-1.2.3.tgz#ea7256bbbb1205b4af079f9bed2611e33401bce7" 480 | integrity sha1-6nJWu7sSBbSvB5+b7SYR4zQBvOc= 481 | 482 | ws@7.4.6: 483 | version "7.4.6" 484 | resolved "https://registry.nlark.com/ws/download/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" 485 | integrity sha1-VlTKjs3u5HwzqaS/bSjivimAN3w= 486 | --------------------------------------------------------------------------------