Browse Source

commit

master
yyy9608 1 year ago
parent
commit
d829a752a5
  1. 4
      .env
  2. 3
      config/webpackDevServer.config.js
  3. 5
      package.json
  4. 2
      public/index.html
  5. 8
      src/api/axios_config.ts
  6. 37
      src/api/index.ts
  7. 40
      src/api/service.ts
  8. BIN
      src/assets/FIL.png
  9. BIN
      src/assets/USDT.png
  10. 18
      src/assets/iconfont/iconfont.css
  11. 2
      src/assets/iconfont/iconfont.js
  12. 21
      src/assets/iconfont/iconfont.json
  13. BIN
      src/assets/iconfont/iconfont.ttf
  14. BIN
      src/assets/iconfont/iconfont.woff
  15. BIN
      src/assets/iconfont/iconfont.woff2
  16. BIN
      src/assets/recharge.png
  17. BIN
      src/assets/record.png
  18. BIN
      src/assets/team.png
  19. BIN
      src/assets/withdraw.png
  20. 20
      src/components/BackBar.tsx
  21. 324
      src/contract/IERC20.d.ts
  22. 203
      src/contract/IERC20__factory.ts
  23. 4
      src/hooks/useConnectWallet.ts
  24. 15
      src/hooks/useCopy.ts
  25. 61
      src/pages/personal/AccountAssetsCard.tsx
  26. 69
      src/pages/personal/index.tsx
  27. 162
      src/pages/recharge/index.tsx
  28. 303
      src/pages/record/index.tsx
  29. 76
      src/pages/withdraw/index.tsx
  30. 19
      src/router/layout/Navbar.tsx
  31. 6
      src/router/layout/Notify.tsx
  32. 12
      src/router/layout/index.tsx
  33. 16
      src/router/routes.tsx
  34. 32
      src/store/index.ts
  35. 1
      src/styles/global.scss
  36. 16
      src/styles/layout.scss
  37. 90
      src/styles/personal.scss
  38. 71
      src/styles/recharge.scss
  39. 1
      src/styles/theme.scss
  40. 25
      src/types/store.d.ts
  41. 22
      src/utils/copy.ts
  42. 63
      src/utils/index.ts
  43. 21
      src/utils/wei.ts
  44. 532
      yarn.lock

4
.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'

3
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,以处理跨域请求
},
},

5
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"

2
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;
}
</style>

8
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`选项定义了请求发出的延迟毫秒数
//如果请求花费的时间超过延迟的时间,那么请求会被终止

37
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 })
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' })

40
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;
);
export default service;

BIN
src/assets/FIL.png

After

Width: 40  |  Height: 40  |  Size: 1.3 KiB

BIN
src/assets/USDT.png

After

Width: 60  |  Height: 60  |  Size: 2.1 KiB

18
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";
}

2
src/assets/iconfont/iconfont.js
File diff suppressed because it is too large
View File

21
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": "退出",

BIN
src/assets/iconfont/iconfont.ttf

BIN
src/assets/iconfont/iconfont.woff

BIN
src/assets/iconfont/iconfont.woff2

BIN
src/assets/recharge.png

After

Width: 120  |  Height: 120  |  Size: 4.3 KiB

BIN
src/assets/record.png

After

Width: 120  |  Height: 120  |  Size: 3.9 KiB

BIN
src/assets/team.png

After

Width: 120  |  Height: 120  |  Size: 3.5 KiB

BIN
src/assets/withdraw.png

After

Width: 120  |  Height: 120  |  Size: 4.3 KiB

20
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 (
<div className="row-between">
<div style={{ flex: 1 }} className="iconfont icon-arrow-left-bold fz-24" onClick={() => push(-1)}></div>
<div style={{ flex: 1 }} className='tac fz-20 fz-wb-550'>{title}</div>
<div style={{ flex: 1 }}></div>
</div>
)
};
export default BackBar;

324
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<this>;
listeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter?: TypedEventFilter<EventArgsArray, EventArgsObject>
): Array<TypedListener<EventArgsArray, EventArgsObject>>;
off<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
on<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
once<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeListener<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeAllListeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>
): this;
listeners(eventName?: string): Array<Listener>;
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<EventArgsArray extends Array<any>, EventArgsObject>(
event: TypedEventFilter<EventArgsArray, EventArgsObject>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEvent<EventArgsArray & EventArgsObject>>>;
interface: IERC20Interface;
functions: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<[BigNumber]>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>;
totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
};
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
callStatic: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
};
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<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
};
populateTransaction: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
balanceOf(
account: string,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
};
}

203
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;
}
}

4
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;

15
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;

61
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 (
<div className="account-assets">
<div>
<div className='card'>
<div>
<div className='sub-color'></div>
<div className='mt-5px'><span className='fz-24 fz-wb-550'>1429.32</span> <span>USDT</span></div>
</div>
<div className='row-items'>
{
balanceList.map((item, index) => (
<div key={index} className="text-center mr-4">
<div className='sub-color'>{item.title}</div>
<div className='mt-5px' style={{ wordBreak: 'break-word' }}>
<div className='mt-5px'>
<span className='fz-24 fz-wb-550'>{item.value}</span>
<span className='ml-5px'>{item.symbol}</span>
</div>
</div>
</div>
))
}
</div>
</div>
</div>
{/* */}
<div className='mt-2 menu'>
{
menu.map((item, index) => (
<div key={index} className="row-between" onClick={() => push(item.path)}>
<img src={item.icon} alt="" />
<div className='fz-14 ml-5px'>{item.title}</div>
</div>
))
}
</div>
</div>
)
};
export default AccountAssetsCard;

69
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 (
<div className='plr-2 cart'>
{/* <div className='fz-wb-550 mtb-2'></div>
<div>
{
Array.from({ length: 5 }).map((_, index) => (
<div className='row-items mt-3' key={index}>
<img src={require('~/assets/cover.png')} className="cover" alt="" />
<div className='box p-2'>
<div className='fz-14'>The Unkown</div>
<div className='row-items mt-5px'>
<div className='price-tag'>ETH 2.25</div>
<div className='user-tag ml-1'>
<img src={require('~/assets/user.png')} className="img" alt="" />
<div className='ml-3px'>iamjackrider</div>
</div>
</div>
<div className='fz-12 sub-text mt-1'>Top Bid is By You</div>
<div className='fz-12 sub-text mt-1'>Time Remaining</div>
<div className='row-items mt-5px'>
<div className='timing-box fz-12'>
<i className='iconfont icon-clock fz-12 fz-wb-550' style={{ color: '#F96900' }} />
<Divider type='vertical' style={{ borderColor: '#C4C4C4' }} className="ml-5px" />
<div className='ml-5px fz-wb-550' style={{ color: '#F96900' }}>00:02:30</div>
</div>
<div className='ml-4 row-center delete'>
<i className='iconfont icon-delete'></i>
</div>
</div>
</div>
<div className='personal'>
{/* <Uploader
maxCount={1}
maxSize={500 * 1024}
onOversize={() => Toast.info('文件大小不能超过500kb')}
upload={upload}
/> */}
<div className='plr-2 '>
<div className='mt-3'>
<AccountAssetsCard />
</div>
</div>
<div className='mt-2 assets-box'>
<div></div>
<Divider style={{ margin: 0, borderColor: "#d8d8d8" }} />
<div className='mt-1 row-between fz-14 sub-text'>
<div></div>
<div></div>
</div>
<div className='row-between mt-2'>
<div className='row'>
<img src={require('~/assets/USDT.png')} className='symbol-img' alt="" />
<div className='ml-1'>
<div className='fz-wb-550'>USDT</div>
<div className='fz-14 sub-text mt-5px'>TetherUS</div>
</div>
))
} */}
{/* </div> */}
</div>
<div className='tar'>
<div className='fz-wb-550'>100</div>
<div className='sub-text fz-14 mt-5px'>$429.32</div>
</div>
</div>
</div>
</div>
)
}

162
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<HTMLInputElement>(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 (
<div className='recharge plr-2'>
<BackBar title='充值' />
<div className='container row-center mt-2'>
<div className='box plr-2 row-between' onClick={() => push('/choose')}>
<div className='row-items'>
{
currentCoin && <img src={require(`~/assets/${currentCoin.symbol}.png`)} alt="" />
}
<div className='fz-wb-550 ml-1'>{currentCoin && currentCoin.symbol}</div>
</div>
<div>
<i className='iconfont icon-arrow-right-bold'></i>
</div>
</div>
<div className='box-img row-center'>
<i className='iconfont icon-datijilu fz-22'></i>
</div>
</div>
<div className='mt-2'>
<div className='white-bg p-2 r-1'>
<div className='fz-14'></div>
<div className='mt-1 fz-wb-550'>BNB Smart Chain(BEP20)</div>
</div>
<div className='mt-2 white-bg r-1 p-2'>
<div className='fz-14' style={{ color: '#828284' }}></div>
<div className='mt-1 input-box plr-1'>
<input type="number" placeholder='請輸入數量' ref={inputRef} />
<div className='row-items'>
{
currentCoin && <img src={require(`~/assets/${currentCoin.symbol}.png`)} alt="" />
}
<div className='ml-5px'>{currentCoin && currentCoin.symbol}</div>
{/* <div className='primary-color ml-5px'>最大</div> */}
</div>
</div>
</div>
<div className='mt-3'>
<Button className='button' onClick={handleExchange} loading={loading} loadingType="ball" ></Button>
</div>
</div>
</div>
)
}
export default observer(Recharge)

303
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<boolean[]>([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 = [
<RechargeRecord list={assetsRecord[recordIndex]} copy={copyVal} finished={finished[recordIndex]} getData={getAssetsRecord} />,
<WithdrawRecord list={assetsRecord[recordIndex]} copy={copyVal} finished={finished[recordIndex]} getData={getAssetsRecord} />,
<TransferRecord list={assetsRecord[recordIndex]} finished={finished[recordIndex]} getData={getAssetsRecord} />,
<OrderRecord list={assetsRecord[recordIndex]} finished={finished[recordIndex]} getData={getAssetsRecord} />,
<ProfitPositionRecord list={assetsRecord[recordIndex]} finished={finished[recordIndex]} getData={getAssetsRecord} />,
<MonthlyFeeRecord list={assetsRecord[recordIndex]} finished={finished[recordIndex]} getData={getAssetsRecord} />
];
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 (
<div className="plr-2 record">
<BackBar
title='账单'
/>
<Tabs
swipeable
type="capsule"
background="rgb(248,247,255)"
sticky
offsetTop={window.innerWidth / 430 * 60}
onChange={(_, index) => setRecordIndex(index)}
align="start"
className="tabs"
lazyRender
>
{
recordTabs.map((item, index) => (
<Tabs.TabPane
key={index}
title={item}
titleStyle={{ width: 70, height: 30, padding: 0 }}
>
{renderItem(index)}
</Tabs.TabPane>
))
}
</Tabs>
</div>
)
}
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 <Empty description="暂无记录" />;
return (
<List finished={finished} onLoad={() => getData()} errorText="请求失败,点击重新加载" offset={10}>
{
list.map(item => (
<Cell key={item.id} className="ptb-1">
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
<div>
<div className='fz-wb-550'>{item.status === -3 ? '激活赠送' : '充值'}</div>
<div className='sub-color fz-14 mt-6px'>{getTime(item.time * 1000)}</div>
<div className='sub-color fz-14'>
{splitAddress(item.order, 10)}
<i className='iconfont icon-fuzhi ml-5px' onClick={() => copy && copy(item.order)}></i>
</div>
</div>
<div className='column-justify-between tae'>
<div className='green-color'>+{item.amount} {item.symbol}</div>
<div
className={`${item.status >= 0 ? 'blue-color' : 'red-color'}`}
>
{item.status !== -3 && (item.status === 3 ? '完成' : item.type >= 0 ? '确认中' : '失败')}
</div>
</div>
</div>
</Cell>
))
}
</List>
)
}
const WithdrawRecord = ({ list, finished, getData, copy }: ChildProps) => {
if (list.length <= 0 || Object.keys(list).length <= 0) return <Empty description="暂无记录" />;
return (
<List finished={finished} onLoad={() => getData()} errorText="请求失败,点击重新加载" offset={10}>
{
list.map((item, index) => (
<Cell className='ptb-1' key={item.id}>
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
<div>
<div className='fz-wb-550'></div>
<div className='fz-wb-550'></div>
<div className='sub-color fz-14'>{getTime(item.time * 1000)}</div>
<div className='sub-color fz-14'>
{item.order && splitAddress(item.order, 10)}
{item.order && <i className='iconfont icon-fuzhi ml-5px' onClick={() => {
copy && copy(item.order)
}}></i>}
</div>
</div>
<div className='column-justify-between tae'>
<div className='red-color'>
<div>{item.amount} {item.symbol}</div>
<div>{item.amount_fee} {item.symbol_fee}</div>
</div>
<div className='blue-color'>{item.status === 5 ? '完成' : '审核中'}</div>
</div>
</div>
</Cell>
))
}
</List>
)
}
const TransferRecord = ({ list, finished, getData }: ChildProps) => {
if (list.length <= 0 || Object.keys(list).length <= 0) return <Empty description="暂无记录" />;
return (
<List finished={finished} onLoad={() => getData()} errorText="请求失败,点击重新加载" offset={10}>
{
list.map((item, index) => (
<Cell className="ptb-1" key={item.id}>
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
<div>
<div className='fz-wb-550'> {item.name}</div>
<div className='fz-wb-550'></div>
<div className='sub-color fz-14 mt-6px'>{getTime(item.time * 1000)}</div>
</div>
<div className='column-justify-between tae'>
<div>
<div className={Number(item.amount) < 0 ? 'red-color' : 'green-color'}>{Number(item.amount) >= 0 && '+'}{item.amount} {item.symbol}</div>
<div className='red-color'>{item.amount_fee} {item.symbol_fee}</div>
</div>
<div className='blue-color'></div>
</div>
</div>
</Cell>
))
}
</List>
)
}
const OrderRecord = (
{ list, finished, getData }: ChildProps
) => {
if (list.length <= 0 || Object.keys(list).length <= 0) return <Empty description="暂无记录" />;
return (
<>
<List finished={finished} onLoad={() => getData()} errorText="请求失败,点击重新加载" offset={10}>
{
list.map(item => (
<Cell className="ptb-1" key={item.id}>
<div className="row-between">
<div className="fz-14">ID {item.order}</div>
<div className="sub-color fz-14">{getTime(item.time * 1000)}</div>
</div>
<div className="row-between mt-6px fz-wb-550">
<div>{item.type === 1 ? '主单盈亏' : '对冲单盈亏'}</div>
<div className={Number(item.amount) >= 0 ? "green-color" : 'red-color'}>{Number(item.amount) >= 0 && '+'}{item.amount} {item.symbol}</div>
</div>
<div className="row-between mt-6px fz-wb-550">
<div></div>
<div className={Number(item.rebate_amount) >= 0 ? "green-color" : 'red-color'}>{Number(item.rebate_amount) >= 0 && '+'}{item.rebate_amount} {item.symbol}</div>
</div>
<div className="row-between mt-6px fz-wb-550">
<div></div>
<div className="red-color">{item.settle_fee} {item.symbol_fee}</div>
</div>
</Cell>
))
}
</List>
</>
)
}
const ProfitPositionRecord = ({ list, getData, finished }: ChildProps) => {
if (list.length <= 0 || Object.keys(list).length <= 0) return <Empty description="暂无记录" />;
return (
<List finished={finished} onLoad={() => getData()} errorText="请求失败,点击重新加载" offset={10}>
{
list.map(item => (
<Cell className="ptb-1" key={item.id}>
<div className="row-between">
<div className="fz-14">ID {item.order}</div>
<div className="sub-color fz-14">{getTime(item.time * 1000)}</div>
</div>
<div className="row-between mt-6px fz-wb-550">
<div>{item.name}</div>
<div className="green-color">{Number(item.amount) >= 0 && '+'}{item.amount} {item.symbol}</div>
</div>
</Cell>
))
}
</List>
)
}
const MonthlyFeeRecord = ({ list, finished, getData }: ChildProps) => {
if (list.length <= 0 || Object.keys(list).length <= 0) return <Empty description="暂无记录" />;
return (
<List finished={finished} onLoad={() => getData()} errorText="请求失败,点击重新加载" offset={10}>
{
list.map(item => (
<Cell className="ptb-1" key={item.id}>
<div className="row-between fz-wb-550">
<div>{item.name}</div>
<div className="red-color">{Number(item.amount) >= 0 && '+'}{item.amount} {item.symbol}</div>
</div>
<div className="fz-14 sub-color">{getTime(item.time * 1000)}</div>
</Cell>
))
}
</List>
)
}
export default observer(Record);

76
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<HTMLInputElement>(null);
const currentCoin = useMemo(() => coinList[coinIndex], [coinIndex, coinList])
const [loading, setLoading] = useState(false);
return (
<div className='recharge plr-2'>
<BackBar title='提现' />
<div className='container row-center mt-2'>
<div className='box plr-2 row-between' onClick={() => push('/choose')}>
<div className='row-items'>
{
currentCoin && <img src={require(`~/assets/${currentCoin.symbol}.png`)} alt="" />
}
<div className='fz-wb-550 ml-1'>{currentCoin && currentCoin.symbol}</div>
</div>
<div>
<i className='iconfont icon-arrow-right-bold'></i>
</div>
</div>
<div className='box-img row-center'>
<i className='iconfont icon-datijilu fz-22'></i>
</div>
</div>
<div className='mt-2'>
<div className='mt-2 white-bg r-1 p-2'>
<div className='fz-14'></div>
<div className='mt-1 input-box plr-1'>
<div className='fz-14'>0xasdasd;lasdljaslkdjklasdjlkasjdlk</div>
</div>
</div>
<div className='white-bg p-2 r-1 mt-2'>
<div className='fz-14'></div>
<div className='mt-1 fz-wb-550'>BNB Smart Chain(BEP20)</div>
</div>
<div className='mt-2 white-bg r-1 p-2'>
<div className='fz-14'></div>
<div className='mt-1 input-box plr-1'>
<input />
<div className='row-items'>
<div className='ml-1 fz-14'>FIL</div>
<div className='ml-2 fz-14 primary'></div>
</div>
</div>
<div className='tar sub-text fz-14 mt-5px'>0 USDT</div>
</div>
<div className='mt-2 fz-14'>
<div></div>
<div className='mt-5px'>0.1000 FIL</div>
</div>
<div className='mt-3'>
<Button className='button' loading={loading} loadingType="ball" ></Button>
</div>
</div>
</div>
)
}
export default observer(Recharge)

19
src/router/layout/Navbar.tsx

@ -12,16 +12,19 @@ const Navbar = (props: NavbarProps) => {
const { pathname, setVisible } = props
return (
<div className={`header plr-3 ${pathname === '/share' && 'header-bg-color'}`}>
<div className='fz-wb-550' style={{ flex: 1 }}>9527</div>
{/* <div style={{ flex: 1 }} className='tac'>首页</div> */}
<div className='row-justify-end' style={{ flex: 1 }}>
<ConnectButton />
<div className='row ml-2' onClick={() => setVisible(true)}>
<div className='notify-circle'></div>
<i className='iconfont icon-messages fz-24 fz-wb-1000' />
<div>
<div className={`header plr-3 ${pathname === '/share' && 'header-bg-color'}`}>
<div className='fz-wb-550' style={{ flex: 1 }}>9527</div>
{/* <div style={{ flex: 1 }} className='tac'>首页</div> */}
<div className='row-justify-end' style={{ flex: 1 }}>
<ConnectButton />
<div className='row ml-2' onClick={() => setVisible(true)}>
<div className='notify-circle'></div>
<i className='iconfont icon-messages fz-24 fz-wb-1000' />
</div>
</div>
</div>
<div className='header-block'></div>
</div>
)
}

6
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) => {
<div>
{
data.map((item, index) => (
<div className="notify-box row-items mt-2" key={index}>
<div className="notify-box row mt-2" key={index}>
<img src={require(`~/assets/${item.imgName}.png`)} className="img" alt="" />
<div className='ml-2'>
<div className='fz-14 fz-wb-550' style={{ color: item.color }}>{item.title}</div>

12
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<HTMLDivElement>(null);
useEffect(() => {
// 在路由变化时将自定义滚动条滚动到顶部
}, [location.pathname])
return (
<div className='layout'>
@ -24,10 +18,10 @@ const LayoutRouter = () => {
pathname={location.pathname}
setVisible={setVisible}
/>
<div className='pages' ref={pagesRef}>
<div className='pages'>
<RenderRouter />
{
tabbarData.includes(location.pathname) && <div className='tabbar-block'></div>
tabbarData.includes(location.pathname) && location.pathname !== '/personal' && <div className='tabbar-block'></div>
}
</div>
{

16
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: <Detail />,
},
{
path: "/recharge",
element: <Recharge />,
},
{
path: "/withdraw",
element: <Withdraw />,
},
{
path: "/record",
element: <Record />,
}
] as RouteObject[];
export const tabbarData = [

32
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<UserInfo> {
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<void> {
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();

1
src/styles/global.scss

@ -8,6 +8,7 @@ $colors:(
red : $red,
white : $white,
black : $black,
page:$page
);
$iterations: 5;

16
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%;
}
}

90
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;
}
}
}

71
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;
}
}

1
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);

25
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 };

22
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()
}
}

63
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 };

21
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);
};

532
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"

Loading…
Cancel
Save