diff --git a/.env b/.env index 7485974..0c2dcd1 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ SKIP_PREFLIGHT_CHECK=true GENERATE_SOURCEMAP=false -REACT_APP_BASE_URL='http://14.29.101.215:30304' +REACT_APP_BASE_URL='http://14.29.101.215:30307' REACT_APP_SHARE_LINK='http://14.29.101.215:30305/#/' -REACT_APP_SIGN_KEY='finance_ad123' +REACT_APP_SIGN_KEY='9527nft9527_@fsdgfsx' \ No newline at end of file diff --git a/config/webpackDevServer.config.js b/config/webpackDevServer.config.js index 9446ab0..b593b19 100644 --- a/config/webpackDevServer.config.js +++ b/config/webpackDevServer.config.js @@ -102,7 +102,8 @@ module.exports = function (proxy, allowedHost) { // `proxy` is run between `before` and `after` `webpack-dev-server` hooks proxy: { '/api': { - target: 'http://14.29.101.215:30304', // 你要代理的后端API服务器地址 + target: 'http://14.29.101.215:30307', // 你要代理的后端API服务器地址 + // target: 'http://14.29.101.215:30304', // 你要代理的后端API服务器地址 changeOrigin: true, // 设置为true,以处理跨域请求 }, }, diff --git a/package.json b/package.json index 9c87c96..283f49c 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "@babel/core": "^7.16.0", + "@ethersproject/providers": "^5.7.2", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", "@svgr/webpack": "^5.5.0", "@testing-library/jest-dom": "^5.17.0", @@ -30,7 +31,7 @@ "eslint": "^8.3.0", "eslint-config-react-app": "^7.0.1", "eslint-webpack-plugin": "^3.1.1", - "ethers": "^6.9.0", + "ethers": "5.7.1", "file-loader": "^6.2.0", "fs-extra": "^10.0.0", "html-webpack-plugin": "^5.5.0", @@ -39,6 +40,7 @@ "jest-resolve": "^27.4.2", "jest-watch-typeahead": "^1.0.0", "js-md5": "^0.8.3", + "lodash": "^4.17.21", "mini-css-extract-plugin": "^2.4.5", "mobx": "^6.12.0", "mobx-react": "^9.1.0", @@ -94,6 +96,7 @@ ] }, "devDependencies": { + "@types/lodash": "^4.14.202", "postcss-px-to-viewport": "^1.1.1", "sass": "^1.69.5", "sass-resources-loader": "^2.2.5" diff --git a/public/index.html b/public/index.html index ac982cc..74c8dd8 100644 --- a/public/index.html +++ b/public/index.html @@ -34,7 +34,7 @@ .public-border-width { width: 0%; height: 100%; - background:linear-gradient(103deg, #1DD0DF -1%, #1DD0DF -1%, #1BEDFF -1%, #14BDEB 108%); + background: linear-gradient(103deg, #1DD0DF -1%, #1DD0DF -1%, #1BEDFF -1%, #14BDEB 108%); transition: all .25s linear; } diff --git a/src/api/axios_config.ts b/src/api/axios_config.ts index a3039e9..eae38d8 100644 --- a/src/api/axios_config.ts +++ b/src/api/axios_config.ts @@ -1,5 +1,11 @@ +export const getBaseUR = () => { + return process.env.NODE_ENV === "development" + ? "/api" + : process.env.REACT_APP_BASE_URL + "/api"; +}; + export default { - baseURL: process.env.NODE_ENV === 'development' ? '/api' : process.env.REACT_APP_BASE_URL + '/api', + baseURL: getBaseUR(), method: "post", //`timeout`选项定义了请求发出的延迟毫秒数 //如果请求花费的时间超过延迟的时间,那么请求会被终止 diff --git a/src/api/index.ts b/src/api/index.ts index ef6ae96..cf245a1 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,15 +1,38 @@ -import { PerformSignin, PerformSNonce } from "~/types" -import request from './service' +import { PerformSignin, PerformSNonce } from "~/types"; +import request from "./service"; /** * @description 获取随机数 */ -export const getNonce = (query: PerformSNonce) => request({ - url: '/v1/nonce', - data: query -}) +export const getNonce = (query: PerformSNonce) => + request({ + url: "/v1/nonce", + data: query, + }); /** * @description 签名 */ -export const performSignin = (query: PerformSignin) => request({ url: '/v1/signin', data: query }) \ No newline at end of file +export const performSignin = (query: PerformSignin) => + request({ url: "/v1/signin", data: query }); + +/** + * @description 上传图片 + */ +export const uploadImage = (file: File) => { + const body = new FormData(); + console.log(body); + + body.append("img", file); + return request({ url: "/v1/uploadImg", data: body }) +}; + +/** + * @description 用户信息 + */ +export const accountInfo = () => request({ url: '/v1/account' }) + +/** + * @description coin list + */ +export const coin_list = () => request({ url: '/v1/tokenList' }) diff --git a/src/api/service.ts b/src/api/service.ts index 23d02f6..538c1e8 100644 --- a/src/api/service.ts +++ b/src/api/service.ts @@ -1,31 +1,36 @@ import axiosConfig from "./axios_config"; -import axios from 'axios'; +import axios from "axios"; import signGenerator from "../utils/sign/sign"; import { Toast } from "react-vant"; import sortParam from "../utils/sign/sort"; -import store from '../store'; +import store from "../store"; const service = axios.create(axiosConfig); // 请求拦截 service.interceptors.request.use( - config => { + (config) => { + console.log(config); + (config.headers as any).token = store.state.token; if (!config.data) config.data = {}; let ps = config.params ? sortParam(config.params) : ""; let timestamp = new Date().getTime(); let signData = { - uri: '/api' + config.url, + uri: "/api" + config.url, timestamp: timestamp, args: ps, }; let sign = signGenerator(signData); (config.headers as any).sign = sign; (config.headers as any).timestamp = timestamp; + + if(config.data instanceof FormData) return config + config.data = JSON.stringify(config.data); return config; }, - error => { + (error) => { return Promise.reject(error); } ); @@ -35,31 +40,32 @@ service.interceptors.response.use( (res: any) => { try { let data = JSON.parse(res.data); - if (data.code === 101) { //Token 过期 - store.removeAddr() - store.removeToken() - }; + if (data.code === 101) { + //Token 过期 + store.removeAddr(); + store.removeToken(); + } if (data.code !== 0) { Toast.info({ message: data.msg, - duration: 2000 + duration: 2000, }); - }; - return data + } + return data; } catch (error) { return null; } }, - error => { + (error) => { try { - if(error.response){ + if (error.response) { let data = JSON.parse(error.response.data); Toast.info(data.err); - return data + return data; } } catch (error) { console.error(error); } } -) -export default service; \ No newline at end of file +); +export default service; diff --git a/src/assets/FIL.png b/src/assets/FIL.png new file mode 100644 index 0000000..876e839 Binary files /dev/null and b/src/assets/FIL.png differ diff --git a/src/assets/USDT.png b/src/assets/USDT.png new file mode 100644 index 0000000..55f8450 Binary files /dev/null and b/src/assets/USDT.png differ diff --git a/src/assets/iconfont/iconfont.css b/src/assets/iconfont/iconfont.css index f7a7bc9..b65d74d 100644 --- a/src/assets/iconfont/iconfont.css +++ b/src/assets/iconfont/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 4379626 */ - src: url('iconfont.woff2?t=1703215943461') format('woff2'), - url('iconfont.woff?t=1703215943461') format('woff'), - url('iconfont.ttf?t=1703215943461') format('truetype'); + src: url('iconfont.woff2?t=1703840169958') format('woff2'), + url('iconfont.woff?t=1703840169958') format('woff'), + url('iconfont.ttf?t=1703840169958') format('truetype'); } .iconfont { @@ -13,6 +13,18 @@ -moz-osx-font-smoothing: grayscale; } +.icon-datijilu:before { + content: "\e606"; +} + +.icon-arrow-left-bold:before { + content: "\e685"; +} + +.icon-arrow-right-bold:before { + content: "\e687"; +} + .icon-tuichu:before { content: "\e669"; } diff --git a/src/assets/iconfont/iconfont.js b/src/assets/iconfont/iconfont.js index c8a5e75..1710846 100644 --- a/src/assets/iconfont/iconfont.js +++ b/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_4379626='',function(c){var t=(t=document.getElementsByTagName("script"))[t.length-1],e=t.getAttribute("data-injectcss"),t=t.getAttribute("data-disable-injectsvg");if(!t){var o,i,n,l,a,s=function(t,e){e.parentNode.insertBefore(t,e)};if(e&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(t){console&&console.log(t)}}o=function(){var t,e=document.createElement("div");e.innerHTML=c._iconfont_svg_string_4379626,(e=e.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",e=e,(t=document.body).firstChild?s(e,t.firstChild):t.appendChild(e))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),o()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(n=o,l=c.document,a=!1,h(),l.onreadystatechange=function(){"complete"==l.readyState&&(l.onreadystatechange=null,d())})}function d(){a||(a=!0,n())}function h(){try{l.documentElement.doScroll("left")}catch(t){return void setTimeout(h,50)}d()}}(window); \ No newline at end of file +window._iconfont_svg_string_4379626='',function(e){var t=(t=document.getElementsByTagName("script"))[t.length-1],c=t.getAttribute("data-injectcss"),t=t.getAttribute("data-disable-injectsvg");if(!t){var l,o,i,n,s,a=function(t,c){c.parentNode.insertBefore(t,c)};if(c&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(t){console&&console.log(t)}}l=function(){var t,c=document.createElement("div");c.innerHTML=e._iconfont_svg_string_4379626,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(t=document.body).firstChild?a(c,t.firstChild):t.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),l()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=l,n=e.document,s=!1,h(),n.onreadystatechange=function(){"complete"==n.readyState&&(n.onreadystatechange=null,d())})}function d(){s||(s=!0,i())}function h(){try{n.documentElement.doScroll("left")}catch(t){return void setTimeout(h,50)}d()}}(window); \ No newline at end of file diff --git a/src/assets/iconfont/iconfont.json b/src/assets/iconfont/iconfont.json index 1a8d423..232d65f 100644 --- a/src/assets/iconfont/iconfont.json +++ b/src/assets/iconfont/iconfont.json @@ -5,6 +5,27 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "1240492", + "name": "答题记录", + "font_class": "datijilu", + "unicode": "e606", + "unicode_decimal": 58886 + }, + { + "icon_id": "15838561", + "name": "arrow-left-bold", + "font_class": "arrow-left-bold", + "unicode": "e685", + "unicode_decimal": 59013 + }, + { + "icon_id": "15838566", + "name": "arrow-right-bold", + "font_class": "arrow-right-bold", + "unicode": "e687", + "unicode_decimal": 59015 + }, { "icon_id": "12331673", "name": "退出", diff --git a/src/assets/iconfont/iconfont.ttf b/src/assets/iconfont/iconfont.ttf index 1ce0667..c64293a 100644 Binary files a/src/assets/iconfont/iconfont.ttf and b/src/assets/iconfont/iconfont.ttf differ diff --git a/src/assets/iconfont/iconfont.woff b/src/assets/iconfont/iconfont.woff index 905d5ea..3d501f8 100644 Binary files a/src/assets/iconfont/iconfont.woff and b/src/assets/iconfont/iconfont.woff differ diff --git a/src/assets/iconfont/iconfont.woff2 b/src/assets/iconfont/iconfont.woff2 index f82e642..e76f34d 100644 Binary files a/src/assets/iconfont/iconfont.woff2 and b/src/assets/iconfont/iconfont.woff2 differ diff --git a/src/assets/recharge.png b/src/assets/recharge.png new file mode 100644 index 0000000..c70680e Binary files /dev/null and b/src/assets/recharge.png differ diff --git a/src/assets/record.png b/src/assets/record.png new file mode 100644 index 0000000..4f84a42 Binary files /dev/null and b/src/assets/record.png differ diff --git a/src/assets/team.png b/src/assets/team.png new file mode 100644 index 0000000..d8ffb5d Binary files /dev/null and b/src/assets/team.png differ diff --git a/src/assets/withdraw.png b/src/assets/withdraw.png new file mode 100644 index 0000000..cdb677b Binary files /dev/null and b/src/assets/withdraw.png differ diff --git a/src/components/BackBar.tsx b/src/components/BackBar.tsx new file mode 100644 index 0000000..7f26124 --- /dev/null +++ b/src/components/BackBar.tsx @@ -0,0 +1,20 @@ +import { useRouter } from "~/hooks/useRouter"; + +interface BackBarProps { + title: string +} + +const BackBar = ({ title }: BackBarProps) => { + + const { push } = useRouter(); + + return ( +
+
push(-1)}>
+
{title}
+
+
+ ) +}; + +export default BackBar; \ No newline at end of file diff --git a/src/contract/IERC20.d.ts b/src/contract/IERC20.d.ts new file mode 100644 index 0000000..adc03a1 --- /dev/null +++ b/src/contract/IERC20.d.ts @@ -0,0 +1,324 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { + ethers, + EventFilter, + Signer, + BigNumber, + BigNumberish, + PopulatedTransaction, + BaseContract, + ContractTransaction, + Overrides, + CallOverrides, +} from "ethers"; +import { BytesLike } from "@ethersproject/bytes"; +import { Listener, Provider } from "@ethersproject/providers"; +import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import type { TypedEventFilter, TypedEvent, TypedListener } from "./common"; + +interface IERC20Interface extends ethers.utils.Interface { + functions: { + "allowance(address,address)": FunctionFragment; + "approve(address,uint256)": FunctionFragment; + "balanceOf(address)": FunctionFragment; + "totalSupply()": FunctionFragment; + "transfer(address,uint256)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "allowance", + values: [string, string] + ): string; + encodeFunctionData( + functionFragment: "approve", + values: [string, BigNumberish] + ): string; + encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; + encodeFunctionData( + functionFragment: "totalSupply", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "transferFrom", + values: [string, string, BigNumberish] + ): string; + + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalSupply", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "transferFrom", + data: BytesLike + ): Result; + + events: { + "Approval(address,address,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; +} + +export type ApprovalEvent = TypedEvent< + [string, string, BigNumber] & { + owner: string; + spender: string; + value: BigNumber; + } +>; + +export type TransferEvent = TypedEvent< + [string, string, BigNumber] & { from: string; to: string; value: BigNumber } +>; + +export class IERC20 extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter + ): this; + + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + queryFilter, EventArgsObject>( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + interface: IERC20Interface; + + functions: { + allowance( + owner: string, + spender: string, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + approve( + spender: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>; + + totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; + + transfer( + to: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferFrom( + from: string, + to: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + allowance( + owner: string, + spender: string, + overrides?: CallOverrides + ): Promise; + + approve( + spender: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferFrom( + from: string, + to: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + callStatic: { + allowance( + owner: string, + spender: string, + overrides?: CallOverrides + ): Promise; + + approve( + spender: string, + amount: BigNumberish, + overrides?: CallOverrides + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: string, + amount: BigNumberish, + overrides?: CallOverrides + ): Promise; + + transferFrom( + from: string, + to: string, + amount: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "Approval(address,address,uint256)"( + owner?: string | null, + spender?: string | null, + value?: null + ): TypedEventFilter< + [string, string, BigNumber], + { owner: string; spender: string; value: BigNumber } + >; + + Approval( + owner?: string | null, + spender?: string | null, + value?: null + ): TypedEventFilter< + [string, string, BigNumber], + { owner: string; spender: string; value: BigNumber } + >; + + "Transfer(address,address,uint256)"( + from?: string | null, + to?: string | null, + value?: null + ): TypedEventFilter< + [string, string, BigNumber], + { from: string; to: string; value: BigNumber } + >; + + Transfer( + from?: string | null, + to?: string | null, + value?: null + ): TypedEventFilter< + [string, string, BigNumber], + { from: string; to: string; value: BigNumber } + >; + }; + + estimateGas: { + allowance( + owner: string, + spender: string, + overrides?: CallOverrides + ): Promise; + + approve( + spender: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + balanceOf(account: string, overrides?: CallOverrides): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferFrom( + from: string, + to: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; + + populateTransaction: { + allowance( + owner: string, + spender: string, + overrides?: CallOverrides + ): Promise; + + approve( + spender: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + balanceOf( + account: string, + overrides?: CallOverrides + ): Promise; + + totalSupply(overrides?: CallOverrides): Promise; + + transfer( + to: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + transferFrom( + from: string, + to: string, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + }; +} diff --git a/src/contract/IERC20__factory.ts b/src/contract/IERC20__factory.ts new file mode 100644 index 0000000..b771d0e --- /dev/null +++ b/src/contract/IERC20__factory.ts @@ -0,0 +1,203 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from "ethers"; +import type { Provider } from "@ethersproject/providers"; +import type { IERC20, IERC20Interface } from "./IERC20"; + +export const _abi = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "owner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "spender", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "Approval", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "from", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "value", + type: "uint256", + }, + ], + name: "Transfer", + type: "event", + }, + { + inputs: [ + { + internalType: "address", + name: "owner", + type: "address", + }, + { + internalType: "address", + name: "spender", + type: "address", + }, + ], + name: "allowance", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "spender", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "approve", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "account", + type: "address", + }, + ], + name: "balanceOf", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "totalSupply", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "from", + type: "address", + }, + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "transferFrom", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, +]; + +export class IERC20__factory { + static readonly abi = _abi; + static createInterface(): IERC20Interface { + return new utils.Interface(_abi) as IERC20Interface; + } + static connect(address: string, signerOrProvider: Signer | Provider): IERC20 { + return new Contract(address, _abi, signerOrProvider) as IERC20; + } +} diff --git a/src/hooks/useConnectWallet.ts b/src/hooks/useConnectWallet.ts index 3abfd6a..a8cf94d 100644 --- a/src/hooks/useConnectWallet.ts +++ b/src/hooks/useConnectWallet.ts @@ -1,7 +1,7 @@ import { Toast } from "react-vant"; import { getNonce, performSignin } from "~/api"; +import { toBig } from "~/utils/wei"; import $store from "../store"; -import { toNumber } from "ethers"; export default function useConnectWallet() { const connect = async () => { @@ -64,7 +64,7 @@ export default function useConnectWallet() { }); let nonce: any = await getNonce({ address: address, - chainId: toNumber(chain_id), + chainId: toBig(chain_id).toNumber(), }); if (nonce.code !== 0) return; let random = nonce.data.nonce; diff --git a/src/hooks/useCopy.ts b/src/hooks/useCopy.ts new file mode 100644 index 0000000..80b2af3 --- /dev/null +++ b/src/hooks/useCopy.ts @@ -0,0 +1,15 @@ +import { Toast } from 'react-vant'; +import { copy } from "../utils/copy"; + +const useCopyLink = () => { + + const copyVal = (address: any) => { + copy(address, () => { + Toast.success('复制成功'); + }) + }; + + return { copyVal } +}; + +export default useCopyLink; \ No newline at end of file diff --git a/src/pages/personal/AccountAssetsCard.tsx b/src/pages/personal/AccountAssetsCard.tsx new file mode 100644 index 0000000..76d7b73 --- /dev/null +++ b/src/pages/personal/AccountAssetsCard.tsx @@ -0,0 +1,61 @@ +import '~/styles/personal.scss' +import { useMemo } from "react"; +import { useRouter } from "~/hooks/useRouter"; + +const AccountAssetsCard = () => { + + const { push } = useRouter(); + + const balanceList = useMemo(() => [ + { title: 'USDT资产', value: 0, symbol: 'USDT' }, + { title: 'FIL资产', value: 0, symbol: 'FIL' }, + ], []); + + const menu = useMemo(() => [ + { title: '充值', icon: require('~/assets/recharge.png'), path: '/recharge' }, + { title: '提现', icon: require('~/assets/withdraw.png'), path: '/withdraw' }, + { title: '账单', icon: require('~/assets/record.png'), path: '/record' }, + { title: '团队', icon: require('~/assets/team.png'), path: '/team' }, + ], []); + + return ( +
+
+
+
+
总资产估值
+
1429.32 USDT
+
+
+ { + balanceList.map((item, index) => ( +
+
{item.title}
+
+
+ {item.value} + {item.symbol} +
+
+
+ )) + } +
+
+
+ {/* */} +
+ { + menu.map((item, index) => ( +
push(item.path)}> + +
{item.title}
+
+ )) + } +
+
+ ) +}; + +export default AccountAssetsCard; \ No newline at end of file diff --git a/src/pages/personal/index.tsx b/src/pages/personal/index.tsx index e62ab24..b2bd1d9 100644 --- a/src/pages/personal/index.tsx +++ b/src/pages/personal/index.tsx @@ -1,42 +1,45 @@ +import { Divider } from 'react-vant' import '~/styles/personal.scss' +import AccountAssetsCard from './AccountAssetsCard' const Personal = () => { return ( -
- - {/*
购物车
-
- { - Array.from({ length: 5 }).map((_, index) => ( -
- -
-
The Unkown
-
-
ETH 2.25
-
- -
iamjackrider
-
-
-
Top Bid is By You
-
Time Remaining
-
-
- - -
00:02:30
-
-
- -
-
-
+
+ {/* Toast.info('文件大小不能超过500kb')} + upload={upload} + /> */} +
+
+ +
+
+ +
+
资产
+ +
+
名称
+
可用
+
+
+
+ +
+
USDT
+
TetherUS
- )) - } */} - {/*
*/} +
+
+
100
+
$429.32
+
+
+
+
) } diff --git a/src/pages/recharge/index.tsx b/src/pages/recharge/index.tsx new file mode 100644 index 0000000..d59291d --- /dev/null +++ b/src/pages/recharge/index.tsx @@ -0,0 +1,162 @@ +import '~/styles/recharge.scss' +import { observer } from 'mobx-react' +import store from '../../store' +import { useMemo, useRef, useState } from 'react' +import { useRouter } from '../../hooks/useRouter' +import { ethers } from 'ethers' +import { Button, Toast } from 'react-vant' +import { switchNetWork } from '../../utils' +import { IERC20__factory } from '../../contract/IERC20__factory' +import { toWei } from '../../utils/wei' +import BackBar from '~/components/BackBar' + +const Recharge = () => { + + const { coinIndex, coinList, userInfo } = store.state + const { push } = useRouter() + const inputRef = useRef(null); + const currentCoin = useMemo(() => coinList[coinIndex], [coinIndex, coinList]) + const [loading, setLoading] = useState(false); + + const provider = useMemo(() => { + if (window.ethereum) { + return new ethers.providers.Web3Provider(window.ethereum) + }; + return null; + }, []); + + const handleTransferParams = async () => { + let from = window.ethereum.selectedAddress; + let toAddress = userInfo.deposit_address; + let contractAddress = currentCoin.address; + if (!provider) { + Toast.info('請檢查網絡是否正常'); + return -1 + } + if (!inputRef.current) { + Toast.info('請稍後重試'); + return -1 + } + let value = inputRef.current.value; + if (!value) { + Toast.info('請輸入數量'); + return -1 + } + let _contract = IERC20__factory.connect(contractAddress as string, provider); + + // 判断 gas 余额 + let eth = await provider.getBalance(from) + const needGas = toWei("0.01") + + if (eth.lt(needGas)) { + Toast.info('Gas 費不足 0.01'); + return -1 + } + + // 判断代币余额 + let balanceToken = await _contract.balanceOf(from) + let currToken = toWei(value) + + if (balanceToken.lt(currToken)) { + Toast.info('Token 餘額不足'); + return -1 + } + + let { to, data } = await _contract.populateTransaction.transfer(toAddress, toWei(value)); + let requestData = { + from, + to, + data, + value: '0x0' + }; + return requestData; + }; + + const handleExchange = async () => { + if (!provider || loading) return; + let value = inputRef.current?.value; + if (!value) { + Toast.info('請輸入數量'); + return; + }; + + setLoading(true); + try { + let isNode = await switchNetWork(); + if (!isNode) return; + let data = await handleTransferParams(); + if (data == -1) { + // Toast.info('请检查网络是否正常'); + setLoading(false); + return; + } + + let txHash = await window.ethereum.request({ + method: 'eth_sendTransaction', + params: [ + data + ] + }); + let tx = await provider.getTransaction(txHash); + let { status } = await tx.wait(); + setLoading(false); + if (status === 1) { + Toast.success('充值成功'); + setTimeout(() => { + push(-1) + }, 1000) + } else { + Toast.fail('充值失敗'); + } + } catch (error) { + setLoading(false); + } + }; + + + return ( +
+ +
+
push('/choose')}> +
+ { + currentCoin && + } +
{currentCoin && currentCoin.symbol}
+
+
+ +
+
+
+ +
+
+
+
+
主網
+
BNB Smart Chain(BEP20)
+
+
+
數量
+
+ +
+ { + currentCoin && + } +
{currentCoin && currentCoin.symbol}
+ {/*
最大
*/} +
+
+
+
+ +
+
+
+ ) +} + +export default observer(Recharge) \ No newline at end of file diff --git a/src/pages/record/index.tsx b/src/pages/record/index.tsx new file mode 100644 index 0000000..d22e441 --- /dev/null +++ b/src/pages/record/index.tsx @@ -0,0 +1,303 @@ +import { useEffect, useMemo, useState } from "react"; +import useCopyLink from "~/hooks/useCopy"; +import { getTime, splitAddress } from "~/utils"; +import store from "~/store"; +import { observer } from "mobx-react"; +import { useRouter } from "~/hooks/useRouter"; +import BackBar from "~/components/BackBar"; +import { Cell, Empty, List, Tabs } from "react-vant"; +import { debounce } from 'lodash'; +import '~/styles/personal.scss'; + +const Record = () => { + + const { token } = store.state; + const recordTabs = useMemo(() => ['充值', '提现', '收益'], []); + const [recordIndex, setRecordIndex] = useState(0); + const { copyVal } = useCopyLink(); + const { push } = useRouter(); + const [query, setQuery] = useState([ + { page: 1, page_size: 20 }, + { page: 1, page_size: 20 }, + { page: 1, page_size: 20 }, + ]); + const [finished, setFinished] = useState([true, true, true]); + const [assetsRecord, setAssetsRecord] = useState([ + [] as any[], + [] as any[], + [] as any[], + ]); + + const getAssetsRecord = debounce(async () => { + + // let res: any = await assets_record({ type: recordIndex + 1, ...query[recordIndex] }); + let res: any = {}; + if (res.code === 0) { + if (res.data.length < 20) { + if (assetsRecord[recordIndex].length <= 0) { + assetsRecord[recordIndex] = res.data + } else { + assetsRecord[recordIndex] = [...assetsRecord[recordIndex], ...res.data] + } + finished[recordIndex] = true + setFinished([...finished]); + setAssetsRecord([...assetsRecord]); + return + } + query[recordIndex].page = query[recordIndex].page + 1 + if (assetsRecord[recordIndex].length <= 0) { + assetsRecord[recordIndex] = res.data + } else { + assetsRecord[recordIndex] = [...assetsRecord[recordIndex], ...res.data] + }; + finished[recordIndex] = false; + setFinished([...finished]); + setAssetsRecord([...assetsRecord]); + setQuery([...query]); + }; + }, 200); + + const renderItem = (index: number) => { + let el = [ + , + , + , + , + , + + ]; + return el[index]; + }; + + useEffect(() => { + // token && assetsRecord[recordIndex].length <= 0 && getAssetsRecord(); + // !token && push('/', null, true); + // !token && setFinished([true, true, true, true, true, true]); + }, [recordIndex, token]); + + + return ( +
+ + setRecordIndex(index)} + align="start" + className="tabs" + lazyRender + > + { + recordTabs.map((item, index) => ( + + {renderItem(index)} + + )) + } + +
+ ) +} + +interface ChildProps { + list: any[], + copy?: Function, + finished: boolean, + getData: Function +} + +const RechargeRecord = ( + { list, copy, finished, getData }: ChildProps +) => { + + if (list.length <= 0 || Object.keys(list).length <= 0) return ; + + return ( + getData()} errorText="请求失败,点击重新加载" offset={10}> + { + list.map(item => ( + +
+
+
{item.status === -3 ? '激活赠送' : '充值'}
+
{getTime(item.time * 1000)}
+
+ 交易哈希:{splitAddress(item.order, 10)} + copy && copy(item.order)}> +
+
+
+
+{item.amount} {item.symbol}
+
= 0 ? 'blue-color' : 'red-color'}`} + > + {item.status !== -3 && (item.status === 3 ? '完成' : item.type >= 0 ? '确认中' : '失败')} +
+
+
+
+ )) + } +
+ ) +} + +const WithdrawRecord = ({ list, finished, getData, copy }: ChildProps) => { + + if (list.length <= 0 || Object.keys(list).length <= 0) return ; + + return ( + getData()} errorText="请求失败,点击重新加载" offset={10}> + { + list.map((item, index) => ( + +
+
+
提现
+
手续费
+
{getTime(item.time * 1000)}
+
+ 交易哈希:{item.order && splitAddress(item.order, 10)} + {item.order && { + copy && copy(item.order) + }}>} +
+
+
+
+
{item.amount} {item.symbol}
+
{item.amount_fee} {item.symbol_fee}
+
+
{item.status === 5 ? '完成' : '审核中'}
+
+
+
+ )) + } +
+ + ) +} + +const TransferRecord = ({ list, finished, getData }: ChildProps) => { + + if (list.length <= 0 || Object.keys(list).length <= 0) return ; + + return ( + getData()} errorText="请求失败,点击重新加载" offset={10}> + { + list.map((item, index) => ( + +
+
+
划转 {item.name}
+
手续费
+
{getTime(item.time * 1000)}
+
+
+
+
{Number(item.amount) >= 0 && '+'}{item.amount} {item.symbol}
+
{item.amount_fee} {item.symbol_fee}
+
+
完成
+
+
+
+ )) + } +
+ ) +} + +const OrderRecord = ( + { list, finished, getData }: ChildProps +) => { + + if (list.length <= 0 || Object.keys(list).length <= 0) return ; + + return ( + <> + getData()} errorText="请求失败,点击重新加载" offset={10}> + { + list.map(item => ( + +
+
ID {item.order}
+
{getTime(item.time * 1000)}
+
+
+
{item.type === 1 ? '主单盈亏' : '对冲单盈亏'}
+
= 0 ? "green-color" : 'red-color'}>{Number(item.amount) >= 0 && '+'}{item.amount} {item.symbol}
+
+
+
保险赔付
+
= 0 ? "green-color" : 'red-color'}>{Number(item.rebate_amount) >= 0 && '+'}{item.rebate_amount} {item.symbol}
+
+
+
结算费
+
{item.settle_fee} {item.symbol_fee}
+
+
+ )) + } +
+ + ) +} + +const ProfitPositionRecord = ({ list, getData, finished }: ChildProps) => { + + if (list.length <= 0 || Object.keys(list).length <= 0) return ; + + return ( + getData()} errorText="请求失败,点击重新加载" offset={10}> + { + list.map(item => ( + +
+
ID {item.order}
+
{getTime(item.time * 1000)}
+
+
+
{item.name}
+
{Number(item.amount) >= 0 && '+'}{item.amount} {item.symbol}
+
+
+ )) + } +
+ ) +} + +const MonthlyFeeRecord = ({ list, finished, getData }: ChildProps) => { + + if (list.length <= 0 || Object.keys(list).length <= 0) return ; + + return ( + getData()} errorText="请求失败,点击重新加载" offset={10}> + { + list.map(item => ( + +
+
{item.name}
+
{Number(item.amount) >= 0 && '+'}{item.amount} {item.symbol}
+
+
{getTime(item.time * 1000)}
+
+ )) + } +
+ ) +} + + +export default observer(Record); \ No newline at end of file diff --git a/src/pages/withdraw/index.tsx b/src/pages/withdraw/index.tsx new file mode 100644 index 0000000..60fc316 --- /dev/null +++ b/src/pages/withdraw/index.tsx @@ -0,0 +1,76 @@ +import '~/styles/recharge.scss' +import { observer } from 'mobx-react' +import store from '../../store' +import { useMemo, useRef, useState } from 'react' +import { useRouter } from '../../hooks/useRouter' +import { Button } from 'react-vant' +import BackBar from '~/components/BackBar' + +const Recharge = () => { + + const { coinIndex, coinList } = store.state + const { push } = useRouter() + const inputRef = useRef(null); + const currentCoin = useMemo(() => coinList[coinIndex], [coinIndex, coinList]) + const [loading, setLoading] = useState(false); + + return ( +
+ +
+
push('/choose')}> +
+ { + currentCoin && + } +
{currentCoin && currentCoin.symbol}
+
+
+ +
+
+
+ +
+
+
+ +
+
提现地址
+
+
0xasdasd;lasdljaslkdjklasdjlkasjdlk
+
+
+ +
+
主網
+
BNB Smart Chain(BEP20)
+
+ + +
+
数量
+
+ +
+
FIL
+
最大
+
+
+
可用余额:0 USDT
+
+ +
+
手续费
+
0.1000 FIL
+
+ +
+ +
+
+
+ ) +} + +export default observer(Recharge) \ No newline at end of file diff --git a/src/router/layout/Navbar.tsx b/src/router/layout/Navbar.tsx index 45fbab2..94085de 100644 --- a/src/router/layout/Navbar.tsx +++ b/src/router/layout/Navbar.tsx @@ -12,16 +12,19 @@ const Navbar = (props: NavbarProps) => { const { pathname, setVisible } = props return ( -
-
9527
- {/*
首页
*/} -
- -
setVisible(true)}> -
- +
+
+
9527
+ {/*
首页
*/} +
+ +
setVisible(true)}> +
+ +
+
) } diff --git a/src/router/layout/Notify.tsx b/src/router/layout/Notify.tsx index 6d63db0..76f63b0 100644 --- a/src/router/layout/Notify.tsx +++ b/src/router/layout/Notify.tsx @@ -11,8 +11,8 @@ const Notify = (props: NotifyProps) => { const { visible, setVisible } = props const data = [ - { title: '提醒', color: '#F96900', imgName: 'warn', desc: '您挂单的“生肖唐彩-狗”NFT, @Miner 出价 4,153.00 USDT' }, - { title: '注册成功', color: '#11C0CB', imgName: 'register-success', desc: '恭喜,您已成功注册,9527NFT数字交易平台.' }, + { title: '提醒', color: '#F96900', imgName: 'register-success', desc: '您挂单的“生肖唐彩-狗”NFT, @Miner 出价 4,153.00 USDT,您挂单的“生肖唐彩-狗”NFT, @Miner 出价 4,153.00 USDT,您挂单的“生肖唐彩-狗”NFT, @Miner 出价 4,153.00 USDT' }, + { title: '注册成功', color: '#11C0CB', imgName: 'warn', desc: '恭喜,您已成功注册,9527NFT数字交易平台.' }, ] return ( @@ -35,7 +35,7 @@ const Notify = (props: NotifyProps) => {
{ data.map((item, index) => ( -
+
{item.title}
diff --git a/src/router/layout/index.tsx b/src/router/layout/index.tsx index 22a3788..cd0d8c0 100644 --- a/src/router/layout/index.tsx +++ b/src/router/layout/index.tsx @@ -1,5 +1,5 @@ import '~/styles/layout.scss' -import { LegacyRef, useEffect, useRef, useState } from 'react'; +import { useState } from 'react'; import { useRouter } from '~/hooks/useRouter'; import Notify from './Notify'; import RenderRouter from './RenderRouter'; @@ -11,12 +11,6 @@ const LayoutRouter = () => { const { location, push } = useRouter() const [visible, setVisible] = useState(false) - const pagesRef = useRef(null); - - useEffect(() => { - // 在路由变化时将自定义滚动条滚动到顶部 - - }, [location.pathname]) return (
@@ -24,10 +18,10 @@ const LayoutRouter = () => { pathname={location.pathname} setVisible={setVisible} /> -
+
{ - tabbarData.includes(location.pathname) &&
+ tabbarData.includes(location.pathname) && location.pathname !== '/personal' &&
}
{ diff --git a/src/router/routes.tsx b/src/router/routes.tsx index 89cd197..eb2d627 100644 --- a/src/router/routes.tsx +++ b/src/router/routes.tsx @@ -6,6 +6,9 @@ const Product = lazy(() => import("~/pages/product")); const Share = lazy(() => import("~/pages/share")); const Personal = lazy(() => import("~/pages/personal")); const Detail = lazy(() => import("~/pages/detail")); +const Recharge = lazy(() => import("~/pages/recharge")); +const Withdraw = lazy(() => import("~/pages/withdraw")); +const Record = lazy(() => import("~/pages/record")); const routes = [ { @@ -28,6 +31,19 @@ const routes = [ path: "/detail", element: , }, + { + path: "/recharge", + element: , + }, + { + path: "/withdraw", + element: , + }, + { + path: "/record", + element: , + } + ] as RouteObject[]; export const tabbarData = [ diff --git a/src/store/index.ts b/src/store/index.ts index 5e25ec8..fbf03c6 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,5 +1,7 @@ import { makeAutoObservable } from "mobx"; +import { accountInfo, coin_list } from "~/api"; import { StoreLocalStorageKey } from "~/types"; +import { CoinList, UserInfo } from "~/types/store"; interface Store { state: object; @@ -9,11 +11,14 @@ class AppStore implements Store { state = { token: "", walletAddress: "", + coinIndex: 0, + coinList: [] as CoinList[], + userInfo: {} as UserInfo, }; constructor() { makeAutoObservable(this); - this.initState() + this.initState(); } /** @@ -42,6 +47,15 @@ class AppStore implements Store { window.localStorage.removeItem(StoreLocalStorageKey.TOKEN); } + async getUserInfo(): Promise { + const res: any = await accountInfo() + if (res && res.code === 0) { + this.state.userInfo = res.data + window.sessionStorage.setItem('userInfo', JSON.stringify(res.data)) + } + return res && res.data + } + /** * @description 设置地址 */ @@ -57,6 +71,22 @@ class AppStore implements Store { this.state.walletAddress = ""; window.localStorage.removeItem(StoreLocalStorageKey.ADDRESS); } + + async getCoinList(): Promise { + const res: any = await coin_list() + if (res && res.code === 0 && res.data) { + this.state.coinList = res.data + } + } + + resetCoinList(): void { + this.state.coinList = [] + } + + setCoinIndex(index: number): void { + this.state.coinIndex = index + } + } const store = new AppStore(); diff --git a/src/styles/global.scss b/src/styles/global.scss index 84ea76a..9d341ca 100644 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -8,6 +8,7 @@ $colors:( red : $red, white : $white, black : $black, + page:$page ); $iterations: 5; diff --git a/src/styles/layout.scss b/src/styles/layout.scss index 82a1699..524defb 100644 --- a/src/styles/layout.scss +++ b/src/styles/layout.scss @@ -1,8 +1,4 @@ .layout{ - display: flex; - flex-direction: column; - height: $height; - width: $width; .header{ height: 60px; @@ -10,6 +6,10 @@ display: flex; align-items: center; justify-content: space-between; + position: fixed; + inset: 0; + background-color: $page; + z-index: 1; .notify-circle{ width: 6px; @@ -17,7 +17,13 @@ border-radius: 3px; background-color: $red; } + } + .header-block{ + height: 60px; + &::before{ + content: " "; + } } .header-bg-color{ @@ -64,7 +70,7 @@ .tabbar-block{ display: block; height: 100px; - width: 1000%; + width: 100%; } } diff --git a/src/styles/personal.scss b/src/styles/personal.scss index e4ddc9c..0ba5762 100644 --- a/src/styles/personal.scss +++ b/src/styles/personal.scss @@ -1,60 +1,56 @@ -.cart{ - .cover{ - @include img-size(170px,170px) - } +.personal{ - .box{ - height: 151px; - width: 100%; - background-color: $white; - box-shadow: 8px 8px 20px 0px rgba(0, 0, 0, 0.1); - border-top-right-radius: 10px; - border-bottom-right-radius: 10px; + display: flex; + flex-direction: column; + height: calc($height - 60px); - .price-tag{ - padding: 0px 8px; - height: 18px; + .account-assets{ + .card{ + width: 100%; + border-radius: 10px; + height: 174px; + background-color: $white; + padding: 20px 30px; display: flex; - align-items: center; - background: linear-gradient(114deg, #320D6D 0%, #8A4CED 108%); - color: $white; - border-radius: 50px; - font-size: 12px; + flex-direction: column; + justify-content: space-between; + color: $black; } - - .user-tag{ - padding: 0px 8px 0px 0px; - height: 18px; + + .menu{ display: flex; - align-items: center; - background-color: #F1F1F1; - border-radius: 50px; - font-size: 12px; - .img{ - @include img-size(15px,15px); - border-radius:8px + justify-content: space-between; + text-align: center; + img{ + @include img-size(40px,40px) } } + } - .timing-box{ - width: 85px; - height: 20px; - border-radius: 20px; - background-color: #f1f1f1; - display: flex; - justify-content: center; - align-items: center; - } + .assets-box{ + height: 100%; + width: 100%; + flex: 1; + height: 100%; + border-radius: 25px 25px 0px 0px; + background-color: $white; + overflow: hidden; + overflow-y: scroll; + padding: 20px; - .delete{ - width: 22px; - height: 22px; - border-radius: 12px; - background-color: #f1f1f1; - color:#F96900; + .symbol-img{ + @include img-size(24px,24px) } - } - } + +.record{ + .tabs{ + padding: 10px 0px; + .rv-tabs__nav--capsule .rv-tab.rv-tab--active .rv-tab__text { + background-color: #EAEAEA; + color: #727272; + } + } +} \ No newline at end of file diff --git a/src/styles/recharge.scss b/src/styles/recharge.scss new file mode 100644 index 0000000..fc9d744 --- /dev/null +++ b/src/styles/recharge.scss @@ -0,0 +1,71 @@ +.recharge{ + .container{ + + .box{ + flex:1; + width: 100%; + height: 48px; + background-color: $white; + border-radius: 10px; + img{ + width: 20px; + height: 20px; + object-fit: cover; + } + } + .box-img{ + width: 48px; + height: 48px; + background-color: $white; + border-radius: 10px; + margin-left: 10px; + } + } + + .input-box{ + width: 100%; + height: 50px; + border-radius: 10px; + display: flex; + border: 1px solid #898989; + align-items: center; + justify-content: space-between; + white-space: nowrap; + + input{ + border: none; + background: none; + width: 100%; + } + + img{ + width: 20px; + height: 20px; + object-fit: cover; + margin-left: 10px; + } + } + + .border{ + width: 100%; + padding: 13px; + border: 1px solid #434343; + border-radius: 10px; + overflow: hidden; + overflow-x: scroll; + &::-webkit-scrollbar{ + display: none; + } + } + + .r-1{ + border-radius: 10px; + } + + .button{ + width: 100%; + height: 53px; + background-color: $primary; + border-radius: 16px; + } +} \ No newline at end of file diff --git a/src/styles/theme.scss b/src/styles/theme.scss index 382f119..860c7ea 100644 --- a/src/styles/theme.scss +++ b/src/styles/theme.scss @@ -7,6 +7,7 @@ $blue:#409EFF; $red:#F6465D; $white:#fff; $black:#2A2C24; +$page:rgb(248,247,255); $width:var(--width); $height:var(--height); diff --git a/src/types/store.d.ts b/src/types/store.d.ts index 30dec6a..ad54de2 100644 --- a/src/types/store.d.ts +++ b/src/types/store.d.ts @@ -3,4 +3,27 @@ enum StoreLocalStorageKey { ADDRESS = "MARKET_NFT_ADDRESS", } -export { StoreLocalStorageKey }; +interface UserInfo { + auction: number; + balance_Usdt: string; + balance_fil: string; + deposit_address: string; + income: string; + is_bound: boolean; + name: string; + sell: number; + show: number; + total: string; + url: string; +} + +interface CoinList { + address: string; + balance: string; + recharge_enabled: boolean; + symbol: string; + withdraw_enabled: boolean; + withdraw_fee: string; +} + +export { StoreLocalStorageKey, UserInfo, CoinList }; diff --git a/src/utils/copy.ts b/src/utils/copy.ts new file mode 100644 index 0000000..d260631 --- /dev/null +++ b/src/utils/copy.ts @@ -0,0 +1,22 @@ + +export function copy(value: string, cb: Function) { + // 动态创建 textarea 标签 + const textarea: any = document.createElement('textarea') + // 将该 textarea 设为 readonly 防止 iOS 下自动唤起键盘,同时将 textarea 移出可视区域 + textarea.readOnly = 'readonly' + textarea.style.position = 'absolute' + textarea.style.left = '-9999px' + // 将要 copy 的值赋给 textarea 标签的 value 属性 + // 网上有些例子是赋值给innerText,这样也会赋值成功,但是识别不了\r\n的换行符,赋值给value属性就可以 + textarea.value = value + // 将 textarea 插入到 body 中 + document.body.appendChild(textarea) + // 选中值并复制 + textarea.select() + textarea.setSelectionRange(0, textarea.value.length) + document.execCommand('Copy') + document.body.removeChild(textarea) + if (cb && Object.prototype.toString.call(cb) === '[object Function]') { + cb() + } +} \ No newline at end of file diff --git a/src/utils/index.ts b/src/utils/index.ts index f820481..fc5d673 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,3 +1,7 @@ +import { Toast } from "react-vant"; +import { toBig } from "./wei"; + +// 切割字符中 ''...'' const splitAddress = (address: string, index?: number) => { try { let idx = index ? index : 5; @@ -11,4 +15,61 @@ const splitAddress = (address: string, index?: number) => { } }; -export { splitAddress }; +const switchNetWork = () => { + return new Promise((resolve) => { + if (!window.ethereum) { + resolve(false); + return; + } + if ( + toBig(window.ethereum.chainId).toNumber() === 97 || + toBig(window.ethereum.chainId).toNumber() === 56 + ) { + //测试 + resolve(true); + return; + } + (window as any).ethereum + .request({ + method: "wallet_switchEthereumChain", + params: [{ chainId: "0x38" }], + }) + .then((r: any) => { + resolve(true); + // console.log(r); + }) + .catch((switchError: any) => { + if (switchError.code === 4902) { + resolve(false); + Toast.info("请在钱包添加币安节点"); + } + }); + }); +}; + +const toThousands = (value: number | string) => { + if (!value) return 0; + return Number(value).toLocaleString(); +}; + +/** + * @param value + * @returns + */ +const getTime = (value: number) => { + let date = new Date(value); + let yy: number | string = date.getFullYear(); + let mm: number | string = date.getMonth() + 1; + let dd: number | string = date.getDate(); + let xs: number | string = date.getHours(); + let ff: number | string = date.getMinutes(); + let ss: number | string = date.getSeconds(); + mm = mm >= 10 ? mm : "0" + mm; + dd = dd >= 10 ? dd : "0" + dd; + xs = xs >= 10 ? xs : "0" + xs; + ff = ff >= 10 ? ff : "0" + ff; + ss = ss >= 10 ? ss : "0" + ss; + return `${yy}-${mm}-${dd} ${xs}:${ff}`; +}; + +export { splitAddress, switchNetWork, toThousands, getTime }; diff --git a/src/utils/wei.ts b/src/utils/wei.ts new file mode 100644 index 0000000..5685c3a --- /dev/null +++ b/src/utils/wei.ts @@ -0,0 +1,21 @@ +import { BigNumberish, ethers, BigNumber } from "ethers"; + +export const wei = { + Zero: BigNumber.from(0), + MaxUint256: BigNumber.from("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ), + MinInt256: BigNumber.from("-0x8000000000000000000000000000000000000000000000000000000000000000"), + MaxInt256: BigNumber.from("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), + AddressZero: "0x0000000000000000000000000000000000000000", +} as any; + +export const toWei = (value: string) => { + return ethers.utils.parseUnits(value, 18); +}; + +export const toBig = (value: string) => { + return BigNumber.from(value); +}; + +export const toString = (value: BigNumberish, int?: number) => { + return ethers.utils.formatUnits(value, int || 18); +}; diff --git a/yarn.lock b/yarn.lock index ecb7c8a..e55afc5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,11 +12,6 @@ resolved "https://registry.npmmirror.com/@adobe/css-tools/-/css-tools-4.3.2.tgz#a6abc715fb6884851fca9dad37fc34739a04fd11" integrity sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw== -"@adraffy/ens-normalize@1.10.0": - version "1.10.0" - resolved "https://registry.npmmirror.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" - integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== - "@alloc/quick-lru@^5.2.0": version "5.2.0" resolved "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" @@ -1310,6 +1305,374 @@ resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@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@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@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@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@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@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.npmmirror.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.1": + version "5.7.1" + resolved "https://registry.npmmirror.com/@ethersproject/providers/-/providers-5.7.1.tgz#b0799b616d5579cd1067a8ebf1fc1ec74c1e122c" + integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ== + dependencies: + "@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" + +"@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.npmmirror.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@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" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@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@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@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@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.npmmirror.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.npmmirror.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@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@^0.11.13": version "0.11.13" resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" @@ -1633,18 +1996,6 @@ dependencies: eslint-scope "5.1.1" -"@noble/curves@1.2.0": - version "1.2.0" - resolved "https://registry.npmmirror.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.npmmirror.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2147,6 +2498,11 @@ resolved "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/lodash@^4.14.202": + version "4.14.202" + resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== + "@types/mime@*": version "3.0.4" resolved "https://registry.npmmirror.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" @@ -2171,11 +2527,6 @@ dependencies: undici-types "~5.26.4" -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.npmmirror.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== - "@types/node@^16.18.68": version "16.18.68" resolved "https://registry.npmmirror.com/@types/node/-/node-16.18.68.tgz#3155f64a961b3d8d10246c80657f9a7292e3421a" @@ -2626,10 +2977,10 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -aes-js@4.0.0-beta.5: - version "4.0.0-beta.5" - resolved "https://registry.npmmirror.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" - integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== agent-base@6: version "6.0.2" @@ -3088,6 +3439,11 @@ batch@0.6.1: resolved "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + bfj@^7.0.2: version "7.1.0" resolved "https://registry.npmmirror.com/bfj/-/bfj-7.1.0.tgz#c5177d522103f9040e1b12980fe8c38cf41d3f8b" @@ -3114,6 +3470,16 @@ bluebird@^3.7.2: resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + body-parser@1.20.1: version "1.20.1" resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" @@ -3169,6 +3535,11 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" @@ -4105,6 +4476,19 @@ electron-to-chromium@^1.4.601: resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz#2fe789d61fa09cb875569f37c309d0c2701f91c0" integrity sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ== +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emittery@^0.10.2: version "0.10.2" resolved "https://registry.npmmirror.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" @@ -4594,18 +4978,41 @@ etag@~1.8.1: resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -ethers@^6.9.0: - version "6.9.0" - resolved "https://registry.npmmirror.com/ethers/-/ethers-6.9.0.tgz#a4534bdcdfde306aee94ef32f3d5c70d7e33fcb9" - integrity sha512-pmfNyQzc2mseLe91FnT2vmNaTt8dDzhxZ/xItAV7uGsF4dI4ek2ufMu3rAkgQETL/TIs0GS5A+U05g9QyWnv3Q== - dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@types/node" "18.15.13" - aes-js "4.0.0-beta.5" - tslib "2.4.0" - ws "8.5.0" +ethers@5.7.1: + version "5.7.1" + resolved "https://registry.npmmirror.com/ethers/-/ethers-5.7.1.tgz#48c83a44900b5f006eb2f65d3ba6277047fd4f33" + integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== + dependencies: + "@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.1" + "@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" eventemitter3@^4.0.0: version "4.0.7" @@ -5159,6 +5566,14 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + hasown@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" @@ -5171,6 +5586,15 @@ he@^1.2.0: resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hoopy@^0.1.4: version "0.1.4" resolved "https://registry.npmmirror.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" @@ -5395,7 +5819,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6297,6 +6721,11 @@ js-md5@^0.8.3: resolved "https://registry.npmmirror.com/js-md5/-/js-md5-0.8.3.tgz#921bab7efa95bfc9d62b87ee08a57f8fe4305b69" integrity sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ== +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.npmmirror.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6729,11 +7158,16 @@ mini-css-extract-plugin@^2.4.5: dependencies: schema-utils "^4.0.0" -minimalistic-assert@^1.0.0: +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -8451,6 +8885,11 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" +scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -9163,11 +9602,6 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - tslib@^1.8.1: version "1.14.1" resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -9898,10 +10332,10 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@8.5.0: - version "8.5.0" - resolved "https://registry.npmmirror.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== +ws@7.4.6: + version "7.4.6" + resolved "https://registry.npmmirror.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== ws@^7.4.6: version "7.5.9"