From 4a230d77918d40c3c461cc074fdf72b2194f0ca7 Mon Sep 17 00:00:00 2001 From: john Date: Wed, 10 Jul 2024 18:13:03 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 6 +- .env.test | 6 +- src/contract/abi/RedDevils.json | 355 ++++++++++---------- src/contract/abi/USDT.json | 569 ++++++++++++++++++++++++-------- src/i18n/translation/cn.json | 7 +- src/i18n/translation/de.json | 7 +- src/i18n/translation/en.json | 7 +- src/i18n/translation/jp.json | 8 +- src/i18n/translation/tw.json | 8 +- src/pages/Home.module.css | 41 ++- src/pages/Home.tsx | 50 ++- src/pages/LevelUp.tsx | 2 +- src/server/api.ts | 9 +- 13 files changed, 732 insertions(+), 343 deletions(-) diff --git a/.env.development b/.env.development index 37b068d..98333cc 100644 --- a/.env.development +++ b/.env.development @@ -1,7 +1,7 @@ ### # @LastEditors: John # @Date: 2024-07-02 11:31:07 - # @LastEditTime: 2024-07-03 10:21:21 + # @LastEditTime: 2024-07-10 15:25:12 # @Author: John ### ### @@ -13,7 +13,7 @@ VITE_BASE_URL= VITE_BASE_API_URL=/dev VITE_PARTICIPATE_CHAIN_ID=97 -VITE_PURCHASED_CONTRACT_ADDRESS=0x7aAe4f2CA23482B58D6f9e8d1fBb5e413e7013c8 +VITE_PURCHASED_CONTRACT_ADDRESS=0xcA03e32ab7731cD721239A7AD24f3d185e4d63CD VITE_RECEIVE_RAMB_CONTRACT_ADDRESS=0x944fBF12c9b77BFfFA223CE1568F28820d319c2F -VITE_NETWORK_USDT_ADDRESS=0xf9A18B7FC8Eb118f8Ad59fBD6eb1A181eaCb4E63 +VITE_NETWORK_USDT_ADDRESS=0x6d528B0a62f8cDdf4B3F6961D70F4f4a18a92A0D VITE_CHECK_TRANSACTION_DETAILS_URL=https://testnet.bscscan.com/ \ No newline at end of file diff --git a/.env.test b/.env.test index 3b3a9a3..3dae2e1 100644 --- a/.env.test +++ b/.env.test @@ -1,13 +1,13 @@ ### # @LastEditors: John # @Date: 2024-06-24 18:38:45 - # @LastEditTime: 2024-07-03 10:21:32 + # @LastEditTime: 2024-07-10 15:24:55 # @Author: John ### VITE_BASE_URL=http://wwwtest.exgo.pro VITE_BASE_API_URL=http://wwwtest.exgo.pro VITE_PARTICIPATE_CHAIN_ID=97 -VITE_PURCHASED_CONTRACT_ADDRESS=0x7aAe4f2CA23482B58D6f9e8d1fBb5e413e7013c8 +VITE_PURCHASED_CONTRACT_ADDRESS=0xcA03e32ab7731cD721239A7AD24f3d185e4d63CD VITE_RECEIVE_RAMB_CONTRACT_ADDRESS=0x944fBF12c9b77BFfFA223CE1568F28820d319c2F -VITE_NETWORK_USDT_ADDRESS=0xf9A18B7FC8Eb118f8Ad59fBD6eb1A181eaCb4E63 +VITE_NETWORK_USDT_ADDRESS=0x6d528B0a62f8cDdf4B3F6961D70F4f4a18a92A0D VITE_CHECK_TRANSACTION_DETAILS_URL=https://testnet.bscscan.com/ \ No newline at end of file diff --git a/src/contract/abi/RedDevils.json b/src/contract/abi/RedDevils.json index bc66142..8280548 100644 --- a/src/contract/abi/RedDevils.json +++ b/src/contract/abi/RedDevils.json @@ -1,4 +1,33 @@ [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "orderId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paymentType", + "type": "uint256" + } + ], + "name": "buyHMNFT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -15,11 +44,6 @@ "internalType": "address", "name": "p1", "type": "address" - }, - { - "internalType": "address", - "name": "p2", - "type": "address" } ], "stateMutability": "nonpayable", @@ -103,6 +127,60 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paymentTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "orderId", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "hashStr", + "type": "bytes32" + } + ], + "name": "reward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "name": "rewardNFT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "anonymous": false, "inputs": [ @@ -128,6 +206,89 @@ "name": "RewardSuccess", "type": "event" }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "name": "setNFTAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "a", + "type": "address" + } + ], + "name": "setPayeeAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + } + ], + "name": "setPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "name": "setUSDCAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "orderId", + "type": "uint256" + } + ], + "name": "upgradePrivilege", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "anonymous": false, "inputs": [ @@ -154,31 +315,9 @@ "type": "event" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "orderId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "paymentType", - "type": "uint256" - } - ], - "name": "buyHMNFT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], + "inputs": [], + "name": "withdraw", + "outputs": [], "stateMutability": "nonpayable", "type": "function" }, @@ -240,19 +379,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "payee2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "price", @@ -266,111 +392,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "paymentTime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "orderId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "hashStr", - "type": "bytes32" - } - ], - "name": "reward", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "setNFTAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "a", - "type": "address" - }, - { - "internalType": "address", - "name": "b", - "type": "address" - } - ], - "name": "setPayeeAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "p", - "type": "uint256" - } - ], - "name": "setPrice", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "setTokenIndex", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "setUSDCAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "tokenIndex", @@ -397,37 +418,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "orderId", - "type": "uint256" - } - ], - "name": "upgradePrivilege", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "usdc", @@ -440,12 +430,5 @@ ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" } ] diff --git a/src/contract/abi/USDT.json b/src/contract/abi/USDT.json index 405d6b3..6bcabcc 100644 --- a/src/contract/abi/USDT.json +++ b/src/contract/abi/USDT.json @@ -1,195 +1,223 @@ [ { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, "inputs": [ { - "name": "_spender", + "internalType": "address", + "name": "spender", "type": "address" }, { - "name": "_value", + "internalType": "uint256", + "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { + "internalType": "bool", "name": "", "type": "bool" } ], - "payable": false, "stateMutability": "nonpayable", "type": "function" }, { - "constant": true, "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_from", - "type": "address" - }, - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, "stateMutability": "nonpayable", - "type": "function" + "type": "constructor" }, { - "constant": true, "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" + "name": "ECDSAInvalidSignature", + "type": "error" }, { - "constant": true, "inputs": [ { - "name": "_owner", - "type": "address" + "internalType": "uint256", + "name": "length", + "type": "uint256" } ], - "name": "balanceOf", - "outputs": [ + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "ERC20InsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", "name": "balance", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" } ], - "payable": false, - "stateMutability": "view", - "type": "function" + "name": "ERC20InsufficientBalance", + "type": "error" }, { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ + "inputs": [ { - "name": "", + "internalType": "address", + "name": "approver", + "type": "address" + } + ], + "name": "ERC20InvalidApprover", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "ERC20InvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ERC20InvalidSender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "ERC20InvalidSpender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "ERC2612ExpiredSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "ERC2612InvalidSigner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "currentNonce", + "type": "uint256" + } + ], + "name": "InvalidAccountNonce", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", "type": "string" } ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" + "name": "StringTooLong", + "type": "error" }, { "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" } @@ -197,26 +225,301 @@ "name": "Approval", "type": "event" }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "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": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "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": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" } ] diff --git a/src/i18n/translation/cn.json b/src/i18n/translation/cn.json index bf05743..819735f 100644 --- a/src/i18n/translation/cn.json +++ b/src/i18n/translation/cn.json @@ -42,7 +42,7 @@ "提升级别": "提升级别", "社长": "社长", "当前升级价格:": "当前升级价格:", - "升级费用xxx USDT起,其中gas费2USDT,剩余部分50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。": "升级费用{{value1}} USDT起,其中gas费2USDT,剩余部分50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加{{value2}},既第二位社长升级铸造费用为{{value1}}u+{{value1}}*{{value2}}={{value3}} USDT,以此类推。", + "升级费用xxx USDT起,50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。": "升级费用{{value1}} USDT起,50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加{{value2}},既第二位社长升级铸造费用为{{value1}}u+{{value1}}*{{value2}}={{value3}} USDT,以此类推。", "升级条件": "升级条件", "普通会员": "普通会员", "(限量xxx个)": "(限量 {{value}} 个)", @@ -106,5 +106,8 @@ "无等级": "无等级", "无效的邀请链接": "无效的邀请链接", - "交易红魔股权NFT": "交易红魔股权NFT" + "交易红魔股权NFT": "交易红魔股权NFT", + "上级链接": "上级链接", + "邀请链接:": "邀请链接:", + "上级地址:": "上级地址:" } diff --git a/src/i18n/translation/de.json b/src/i18n/translation/de.json index 187ea3a..0e86041 100644 --- a/src/i18n/translation/de.json +++ b/src/i18n/translation/de.json @@ -42,7 +42,7 @@ "提升级别": "Levelaufstieg", "社长": "Vorsitzender", "当前升级价格:": "Aktueller Upgrade-Preis:", - "升级费用xxx USDT起,其中gas费2USDT,剩余部分50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。": "Upgrade-Kosten ab {{value1}} USDT, davon 2USDT Gas-Gebühren, 50% des Restbetrags gehen in den Liquiditätspool und die anderen 50% werden auf alle erfolgreichen Vorsitzenden und Fundmanager aufgeteilt. Ab dem zweiten Vorsitzenden steigen die Prägekosten um {{value2}} pro Aufstieg, also {{value1}}u+{{value1}}*{{value2}}={{value3}} USDT für den zweiten, usw.", + "升级费用xxx USDT起,50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。": "Upgrade-Kosten ab {{value1}} USDT, 50% des Restbetrags gehen in den Liquiditätspool und die anderen 50% werden auf alle erfolgreichen Vorsitzenden und Fundmanager aufgeteilt. Ab dem zweiten Vorsitzenden steigen die Prägekosten um {{value2}} pro Aufstieg, also {{value1}}u+{{value1}}*{{value2}}={{value3}} USDT für den zweiten, usw.", "升级条件": "Upgrade-Bedingungen", "普通会员": "Normales Mitglied", "(限量xxx个)": "(Begrenzt auf {{value}} Stück)", @@ -105,5 +105,8 @@ "升级中": "Wird aktualisiert", "无等级": "Keine Bewertung", "无效的邀请链接": "Ungültiger Einladungslink", - "交易红魔股权NFT": "Handel mit Red Devil Equity NFT" + "交易红魔股权NFT": "Handel mit Red Devil Equity NFT", + "上级链接": "Link des Vorgesetzten", + "邀请链接:": "Einladungslink:", + "上级地址:": "Adresse des Vorgesetzten:" } diff --git a/src/i18n/translation/en.json b/src/i18n/translation/en.json index ef90064..811a133 100644 --- a/src/i18n/translation/en.json +++ b/src/i18n/translation/en.json @@ -42,7 +42,7 @@ "提升级别": "Upgrade Level", "社长": "Leader", "当前升级价格:": "Current Upgrade Price:", - "升级费用xxx USDT起,其中gas费2USDT,剩余部分50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。": "Upgrade cost starts at {{value1}} USDT, including 2USDT gas fee; 50% goes to the fund pool, and 50% is distributed among successful Leaders and Foundation Leaders. From the second Leader onwards, each upgrade cost increases by {{value2}}, i.e., second Leader upgrade costs {{value1}}u+{{value1}}*{{value2}}={{value3}} USDT, and so on.", + "升级费用xxx USDT起,50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。": "Upgrade cost starts at {{value1}} USDT, 50% goes to the fund pool, and 50% is distributed among successful Leaders and Foundation Leaders. From the second Leader onwards, each upgrade cost increases by {{value2}}, i.e., second Leader upgrade costs {{value1}}u+{{value1}}*{{value2}}={{value3}} USDT, and so on.", "升级条件": "Upgrade Conditions", "普通会员": "Regular Member", "(限量xxx个)": "(Limited to {{value}})", @@ -105,5 +105,8 @@ "升级中": "Upgrading", "无等级": "No Grade", "无效的邀请链接": "Invalid invitation link", - "交易红魔股权NFT": "Trade Red Devil Equity NFT" + "交易红魔股权NFT": "Trade Red Devil Equity NFT", + "上级链接": "Superior's Link", + "邀请链接:": "Invitation Link:", + "上级地址:": "Superior's Address:" } diff --git a/src/i18n/translation/jp.json b/src/i18n/translation/jp.json index 4dab8e6..27cc36a 100644 --- a/src/i18n/translation/jp.json +++ b/src/i18n/translation/jp.json @@ -42,7 +42,7 @@ "提升级别": "レベルアップ", "社长": "リーダー", "当前升级价格:": "現在のアップグレード価格:", - "升级费用xxx USDT起,其中gas费2USDT,剩余部分50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。": "アップグレード費用は{{value1}} USDTから、うちガス代2USDT、残りの50%は資金プールに入り、もう50%はアップグレードに成功したリーダーとファンドリーダーに分配。2人目のリーダーからは、アップグレード費用が{{value2}}ずつ増加、つまり2人目は{{value1}}u+{{value1}}*{{value2}}={{value3}} USDT、以降も同様。", + "升级费用xxx USDT起,50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。": "アップグレード費用は{{value1}} USDTから、残りの50%は資金プールに入り、もう50%はアップグレードに成功したリーダーとファンドリーダーに分配。2人目のリーダーからは、アップグレード費用が{{value2}}ずつ増加、つまり2人目は{{value1}}u+{{value1}}*{{value2}}={{value3}} USDT、以降も同様。", "升级条件": "アップグレード条件", "普通会员": "一般会員", "(限量xxx个)": "(限定 {{value}} 個)", @@ -105,5 +105,9 @@ "升级中": "アップグレード中", "无等级": "グレードなし", "无效的邀请链接": "無効な招待リンクです", - "交易红魔股权NFT": "レッドデビル株式NFTを取引する" + "交易红魔股权NFT": "レッドデビル株式NFTを取引する", + + "上级链接": "上司のリンク", + "邀请链接:": "招待リンク:", + "上级地址:": "上司の住所:" } diff --git a/src/i18n/translation/tw.json b/src/i18n/translation/tw.json index 6a4c21c..2a995f4 100644 --- a/src/i18n/translation/tw.json +++ b/src/i18n/translation/tw.json @@ -42,7 +42,7 @@ "提升级别": "提升級別", "社长": "社長", "当前升级价格:": "當前升級價格:", - "升级费用xxx USDT起,其中gas费2USDT,剩余部分50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。": "升級費用{{value1}} USDT起,其中gas費2USDT,剩餘部分50%進入資金池,另外50%平均分給所有升級成功的社長和基金會社長。自第二個社長升級開始,每升級一名社長所需鑄造費用增加{{value2}},即第二位社長升級鑄造費用為{{value1}}u+{{value1}}*{{value2}}={{value3}} USDT,以此類推。", + "升级费用xxx USDT起,50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。": "升級費用{{value1}} USDT起,50%進入資金池,另外50%平均分給所有升級成功的社長和基金會社長。自第二個社長升級開始,每升級一名社長所需鑄造費用增加{{value2}},即第二位社長升級鑄造費用為{{value1}}u+{{value1}}*{{value2}}={{value3}} USDT,以此類推。", "升级条件": "升級條件", "普通会员": "普通會員", "(限量xxx个)": "(限量 {{value}} 個)", @@ -105,5 +105,9 @@ "升级中": "升級中", "无等级": "無等級", "无效的邀请链接": "無效的邀請連結", - "交易红魔股权NFT": "交易紅魔股權NFT" + "交易红魔股权NFT": "交易紅魔股權NFT", + + "上级链接": "上級鏈接", + "邀请链接:": "邀請鏈接:", + "上级地址:": "上級地址:" } diff --git a/src/pages/Home.module.css b/src/pages/Home.module.css index 1b91eb6..fdbf64b 100644 --- a/src/pages/Home.module.css +++ b/src/pages/Home.module.css @@ -685,7 +685,8 @@ margin-top: 10px; > span { - &:nth-of-type(1) { + &:nth-of-type(1), + &:nth-of-type(3) { /* 自动布局子元素 */ opacity: 0.8; @@ -701,6 +702,9 @@ z-index: 0; } + &:nth-of-type(3) { + margin-top: 20px; + } &:nth-of-type(2) { /* 自动布局子元素 */ @@ -746,11 +750,38 @@ gap: 16px; white-space: nowrap; + } + } + .superior_content_link { + display: flex; + align-items: center; + gap: 10px; - .invite_content_icon { - width: 24px; - height: 24px; - } + > span { + /* 自动布局子元素 */ + opacity: 1; + + font-family: DM Sans; + font-size: 14px; + font-weight: 500; + line-height: normal; + letter-spacing: 0em; + + font-variation-settings: "opsz" auto; + font-feature-settings: "kern" on; + color: #ffffff; + + z-index: 0; + + display: flex; + align-items: center; + gap: 16px; + + white-space: nowrap; + } + + .invite_content_icon { + margin-left: auto; } } } diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index a52e4cc..cdb8cab 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -13,7 +13,11 @@ import { BaseError, useAccount } from "wagmi"; import { useNavigate } from "react-router-dom"; import { Button, Dialog, Empty, PullToRefresh, Toast } from "antd-mobile"; import { loginOut } from "@/utils/wallet"; -import { api_claim_income, api_get_homepage_user_data } from "@/server/api"; +import { + api_claim_income, + api_get_homepage_user_data, + api_get_user_superiors, +} from "@/server/api"; import { UserHomeData, UserIncome } from "@/server/module"; import { UrlQueryParamsKey } from "@/constants"; import { receiveByContract } from "@/contract/utils"; @@ -29,6 +33,10 @@ export default function () { const [tabIndex, setTabIndex] = useState(0); const navigate = useNavigate(); const [userData, setUserData] = useState(); + + const [superiorsAddress, setSuperiorsAddress] = useState(); + const [superiorsShareCode, setSuperiorsShareCode] = useState(); + const statusRecord: Record = { pulling: "Pull down to refresh", canRelease: "Release to refresh immediately", @@ -42,6 +50,11 @@ export default function () { }`, [userData] ); + const superiorInvitationLink = useMemo( + () => + `${location.origin}/#/?${UrlQueryParamsKey.INVITE_CODE}=${superiorsShareCode}`, + [superiorsShareCode] + ); const receiveLoadingToast = useRef(); const { transcationStatus, @@ -51,6 +64,14 @@ export default function () { useEffect(() => { getHomeData(); + if (Token) { + api_get_user_superiors() + .send({}) + .then((res) => { + setSuperiorsAddress(res.data?.data.address); + setSuperiorsShareCode(res.data?.data.shareCode); + }); + } return () => {}; }, [Token]); @@ -421,6 +442,33 @@ export default function () { "普通会员每邀请铸造一个NFT可获得一份空投福利;推荐铸造20个NFT的可升级为会长;团队中拥有20位会长可升级为基金会社长;邀请越多级别越高福利越多。" )} + + {superiorsAddress && ( + <> + {t("上级链接")} +
+ <> + + {shortenString(superiorInvitationLink, 18, 18)} + + { + copyText(superiorInvitationLink); + }} + className={classes.invite_content_icon} + name="fuzhi" + color={"#fff"} + />{" "} + +
+
+ <> + {t("上级地址:")} + {shortenString(superiorsAddress, 15, 15)} + +
+ + )} diff --git a/src/pages/LevelUp.tsx b/src/pages/LevelUp.tsx index 33365d3..8cd9d84 100644 --- a/src/pages/LevelUp.tsx +++ b/src/pages/LevelUp.tsx @@ -122,7 +122,7 @@ export default function () { {t("价格说明:")} {t( - "升级费用xxx USDT起,其中gas费2USDT,剩余部分50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。", + "升级费用xxx USDT起,50%进入资金池,另外50%平均分给所有升级成功的社长和基金会社长。自第二个社长升级开始,每升级一名社长所需铸造费用增加xxx,既第二位社长升级铸造费用为xxxu+xxx*xxx=xxx USDT,以此类推。", { value1: userUpgradeInfo?.upgradeFees || 0, value2: userUpgradeInfo?.proportion || "0%", diff --git a/src/server/api.ts b/src/server/api.ts index 4e13fc3..4452451 100644 --- a/src/server/api.ts +++ b/src/server/api.ts @@ -1,7 +1,7 @@ /* * @LastEditors: John * @Date: 2024-06-18 10:28:21 - * @LastEditTime: 2024-07-02 11:36:40 + * @LastEditTime: 2024-07-10 11:53:39 * @Author: John */ import { GET, POST } from "./client"; @@ -145,3 +145,10 @@ export function api_query_whether_the_user_is_binding_relationship() { url: "/api/account/bindOrNot", }); } + +// 获取用户上级 +export function api_get_user_superiors() { + return GET({ + url: "/api/user/getTheSuperior", + }); +}