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 (
+
+
+
+
+
+ {
+ 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
-
-
+
+ {/*
Toast.info('文件大小不能超过500kb')}
+ upload={upload}
+ /> */}
+
+
+
+
资产
+
+
+
+
+
+
- ))
- } */}
- {/*
*/}
+
+
+
+
+
)
}
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)
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+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)}>
-
-
+
)
}
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"