From d829a752a5c3c9f06a73b5d23ce6f87fa429825c Mon Sep 17 00:00:00 2001 From: yyy9608 Date: Fri, 29 Dec 2023 18:00:37 +0800 Subject: [PATCH] commit --- .env | 4 +- config/webpackDevServer.config.js | 3 +- package.json | 5 +- public/index.html | 2 +- src/api/axios_config.ts | 8 +- src/api/index.ts | 37 +- src/api/service.ts | 40 +- src/assets/FIL.png | Bin 0 -> 1333 bytes src/assets/USDT.png | Bin 0 -> 2100 bytes src/assets/iconfont/iconfont.css | 18 +- src/assets/iconfont/iconfont.js | 2 +- src/assets/iconfont/iconfont.json | 21 + src/assets/iconfont/iconfont.ttf | Bin 3248 -> 4000 bytes src/assets/iconfont/iconfont.woff | Bin 2280 -> 2760 bytes src/assets/iconfont/iconfont.woff2 | Bin 1784 -> 2216 bytes src/assets/recharge.png | Bin 0 -> 4398 bytes src/assets/record.png | Bin 0 -> 4025 bytes src/assets/team.png | Bin 0 -> 3620 bytes src/assets/withdraw.png | Bin 0 -> 4449 bytes src/components/BackBar.tsx | 20 + src/contract/IERC20.d.ts | 324 ++++++++++++++ src/contract/IERC20__factory.ts | 203 +++++++++ src/hooks/useConnectWallet.ts | 4 +- src/hooks/useCopy.ts | 15 + src/pages/personal/AccountAssetsCard.tsx | 61 +++ src/pages/personal/index.tsx | 69 +-- src/pages/recharge/index.tsx | 162 +++++++ src/pages/record/index.tsx | 303 +++++++++++++ src/pages/withdraw/index.tsx | 76 ++++ src/router/layout/Navbar.tsx | 19 +- src/router/layout/Notify.tsx | 6 +- src/router/layout/index.tsx | 12 +- src/router/routes.tsx | 16 + src/store/index.ts | 32 +- src/styles/global.scss | 1 + src/styles/layout.scss | 16 +- src/styles/personal.scss | 90 ++-- src/styles/recharge.scss | 71 +++ src/styles/theme.scss | 1 + src/types/store.d.ts | 25 +- src/utils/copy.ts | 22 + src/utils/index.ts | 63 ++- src/utils/wei.ts | 21 + yarn.lock | 532 ++++++++++++++++++++--- 44 files changed, 2111 insertions(+), 193 deletions(-) create mode 100644 src/assets/FIL.png create mode 100644 src/assets/USDT.png create mode 100644 src/assets/recharge.png create mode 100644 src/assets/record.png create mode 100644 src/assets/team.png create mode 100644 src/assets/withdraw.png create mode 100644 src/components/BackBar.tsx create mode 100644 src/contract/IERC20.d.ts create mode 100644 src/contract/IERC20__factory.ts create mode 100644 src/hooks/useCopy.ts create mode 100644 src/pages/personal/AccountAssetsCard.tsx create mode 100644 src/pages/recharge/index.tsx create mode 100644 src/pages/record/index.tsx create mode 100644 src/pages/withdraw/index.tsx create mode 100644 src/styles/recharge.scss create mode 100644 src/utils/copy.ts create mode 100644 src/utils/wei.ts 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 0000000000000000000000000000000000000000..876e83984da981716b7bc3b05be8672b34e582be GIT binary patch literal 1333 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 e@%h3|X!<`QTD~qiwM%#a0000.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}")}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 1ce06677a70c1aa53ec319e368994d4ec1d48864..c64293a1537f4aa88fa6de4b007bd61d8d745ccd 100644 GIT binary patch delta 1343 zcmZuwUuauZ7(d^+_nvd^|0GLp+O9QiQj?Xs4bwIOyN*q!b65r?p-LZEkYl;iSaJ9 z`!5$4W~-r(j@=@}TE&5Li_9bZa;JV{<6E2M_k*}wx%KstjfHIQN) zS1cU&eKndMfy_8thq z4aPyyxM4@$=0f8(V>g_T6Ez(wOz+?@O}Gc#m>r^2VZsXQ+Pb2!*EQjKOwmeI0T7zd zU0qBR&YT_^9v(V<=9B-F!c!}!POZEnMQgHPxUL}uJl?P*7t_eqPJ*cWo6KtIVcwxaRim6Y# zcozNYJ{}!Hd)p7GARqY3F`TL-g!@)UqGGtguR?bfAYnpuIF2{Z0WTZ8k!&uVff`KN z)El&0H9SYnaiU$+LFbs2>QSuLr`919X73<=Yw{PshyISe4#-|<2VbX--%=cVYw~+8z?BCf(8t! y3DCg+6D+X7A!4SuTDnv!zv32`mn*LxF3((;eYD3=?$ICLvqpS#b+(mNjBpYMI%=eh6R4;`nsZ#709eFS6+ z!1H|Bu4XTbn}E?vWEM+rUX9Ludkd%;AX+Fa*e`S4M;n~|LEH}-@l|z)`6+R`P_EU7 z_k5rGez6`dRr0p^Fj^yjjCFt6u2*Fc6`l{U&MevGg+}Vb_%V?9Ou@x!Wu<1H&AtPy zn;h7I0FkEO#JmdEs@wJX4kGPCxYD?WWmj8kPo-0 z5x8}iHNg4Klm@q>)7GF4ytD=t;Z15#8{WA_cujr43pDXl2Bah>^4-W9{7)^*yfpih WVn{@kL?tGs#3dm~>4G!e^W-mcC4?pb diff --git a/src/assets/iconfont/iconfont.woff b/src/assets/iconfont/iconfont.woff index 905d5ea12798ce2bfd8c79b217dffc9065e5cce7..3d501f8b3b38e21cf43b39adda3e8aff8a16aa1a 100644 GIT binary patch delta 2302 zcmVq006T9 z00Lrwso8yJYY3001!n001^94Y){XXk}pl z00@Kt001BW001NjWCrDEZFG1500^W2000^Q001;M^8f#AZ)0Hq00_VU000~S000~e zY7Ss+VR&#j000Qw0000V0000W0UZFXZeeX@000R50003%0007K5TiV>aBp*T000U+ z0001q0002NJM7}olL!Gp0`X&$O93PTvAvUV0TX|glMRG;oaK_e5rZ%cg`WdBe=gFJ z1!yt^j6=x~9BoF(AgRI~qsZQZJXuAWkOd;&=Q}-}C7omd6@Y@=NC~(X9MqmvUDgYn zvR>j&|B8z$;w4BUy$mwS6uUU5I<;w8SKwD{!yNN|KN{P^vwFaemCrchz>e6r^PBnp z$3lO;A0JP=q1%&SaDtG=fW~`6H!g#b-;M?+4Veu69kDYweZ<+|9*}B-8$oIf{Vi!R zP`v?0X+~TCc${rjU2Ggz6~5=*o!_0E@p@)w*XykJXVx=uY_FY}on04uy_>3bY+@%a zU?<31y8=YwxJfB)N~BcDTBTH~TE}gXS|NXsg6IP(3XiCYDlmNjq`ZKHDj`J(o_GL> z2WW(V9dl;3Zd8fAqjS%lJ@?E#-}%nDgeTSU1ipV> z3ayNAgB$LyhMrid0@Yb?hrmz)tdiY;YHb=^6CLrx#opR0_SUgIi1CV+={^)iLFNTu zoFFIqzaxm8kl^_rt9_~wSE(2`2S;gM)3sEhk5a~qN>bu(GRD8iiJHkXZi_MikrO3N z5*w?Fr$NwTO2BE({n z+}FJ-%2Heq@f%X2Ux>wcN$EFp^lqwuKsof0F{3Ns)h+ z#ig%m7>cy_nPWss_x>j*K>_zvSq+ba(+81^)&vOt=-(KSBq0*aBJ2Vn(qMmjZq0U} z1MLJg%ZZ?aQFK(*$WRqu`ihlhO7IiqIEwhOay)d?^YvHsrH8(36>}+piWKnNI@J6s zeGqgKJe!=snpPAQ^8BJMx$tt&IFF$ij&2UouSSHnJ&TMVpY`^zyE2GI~{_5*X+v^vq zzF)ntzPo9*pc%mXiX)B3? zvyw%ei$czS*iwhP6HwdbC{SeEm0`Qr26SeqOv zd!yqMXDgg@gX5gFNGU_?Z> z4AZSu?Gn%ZAMJy6f2mem^5I8E%J6Ni6?hn*OrO)?~poFPyW zLY$0rNC>x%#KF#iEU_7a@1^TPsX}|WMSw+&fx}Ci>wC`e2`f8R9Gka_qUG>dusRhuo7H<{R{tT?!5ivvq#p^Hq0|Q{5#ua zNs=Zf37#A*x8{GRioRibR?73M*hWiy4!jWvCj+~vJ_OjwYIPl}65E>1imV8iM8?4+ z$HWCY8ysZq1^8FDmC!jhGXTR`_*Hfo24)zizZrZ!1An2vK}+1Ru#&ay?24W!Fs}P? z*0QoR&apy5@4iou_G{`t#t!;6o4M5cfXS zqBejr2JCVAC!&xM%=M>@8k;saA&0|ae$>`6u6jC5{lVO|*RIV)f?mIUVtnkx!kM3* zSvWBkD(6pb9)DBL>TqZN6Pvkf!Gqgl-)x*eGKp-5a&Jj`HatfR&+#+%UABx!e~z3Y zUm;|;0^xt{f-pu6qr?j;4X+3d@KGTZ;ypy&sLfzkvGGPp<4I>hFWF8}h45?U3$v8(^&J)13oOA*MfEot+|*J{Xl(eZVlpMBsX6m5=bmk!b-BA{P7QA8c@c3C z^SZw*f*~%$Xt%{=k<(?Uf-EU}Rum;AL3Iz{UUqOhC*9gbWP-!F&b=02%B7%dh|}rf zd+<iz0T)~`;wF@(;$J@0JEasq zI`FgTIR-nmp8Vn(kfnO#>XaRA%N}U66n9tI#cFmY4S7pjZ$dP0X*qD=N88(2=fL`R YDKk?tPOY3XEu0F4_yYTnFu4E#0EE;kasU7T delta 1817 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 S?6!bFY5H~Gz0gdIF#rG-rer7p diff --git a/src/assets/recharge.png b/src/assets/recharge.png new file mode 100644 index 0000000000000000000000000000000000000000..c70680ec77bf9f3025259b1e5384c0641cccba55 GIT binary patch literal 4398 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 n { + + 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"