From a302304845ce785ff7efbaa30cba85bbb597d378 Mon Sep 17 00:00:00 2001 From: gary <1032230992@qq.com> Date: Sun, 24 Apr 2022 14:48:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=86=9B=E5=9B=A2=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/favicon.ico | Bin 116129 -> 67646 bytes public/index.html | 10 +- public/manifest.json | 4 +- src/config/abi/referral.json | 565 ++++++++++-------- src/config/abi/referralReward.json | 99 +++ src/config/constants/contracts.ts | 10 +- src/config/constants/meta.ts | 2 +- src/hooks/useContract.ts | 5 + src/hooks/useGetDocumentTitlePrice.ts | 2 +- src/services/referral.ts | 7 + src/utils/addressHelpers.ts | 3 + src/utils/contractHelpers.ts | 5 + src/utils/formatBalance.ts | 3 + src/views/Referral/components/BuyNftModal.tsx | 8 +- src/views/Referral/hooks/index.ts | 57 ++ src/views/Referral/index.tsx | 4 +- 16 files changed, 526 insertions(+), 258 deletions(-) create mode 100644 src/config/abi/referralReward.json create mode 100644 src/views/Referral/hooks/index.ts diff --git a/public/favicon.ico b/public/favicon.ico index 874b565be2cebe6cdb9e8b3eb585a56b267ae8e3..b9f68986ddafffe2ec24044404d50d457869eeba 100644 GIT binary patch literal 67646 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

OWofq5=MIVEp1&umj(O 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 diff --git a/public/index.html b/public/index.html index db1cb99..308e168 100644 --- a/public/index.html +++ b/public/index.html @@ -12,7 +12,7 @@ - PancakeSwap + HighCity Swap - --> -

diff --git a/public/manifest.json b/public/manifest.json index 286bd1b..0b6f6b0 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,6 +1,6 @@ { - "short_name": "PancakeSwap", - "name": "PancakeSwap", + "short_name": "HighCitySwap", + "name": "HighCitySwap", "description": "Farm CAKE with Pancake LP Tokens", "homepage_url": "https://pancakeswap.finance", "start_url": ".", diff --git a/src/config/abi/referral.json b/src/config/abi/referral.json index 8a9935f..558fea0 100644 --- a/src/config/abi/referral.json +++ b/src/config/abi/referral.json @@ -1,322 +1,403 @@ [ + { + "inputs": [ + { "internalType": "address", "name": "_hccAddress", "type": "address" }, + { "internalType": "address", "name": "_otherPaymentAddress", "type": "address" }, + { "internalType": "uint256", "name": "_hccPirce", "type": "uint256" }, + { "internalType": "uint256", "name": "_otherPaymentPirce", "type": "uint256" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } + { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, + { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], - "name": "InviteReward", + "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } + { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, + { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, + { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, + { "indexed": true, "internalType": "uint256", "name": "code", "type": "uint256" } + ], + "name": "CreateNft", + "type": "event" + }, + { + "anonymous": false, + "inputs": [{ "indexed": false, "internalType": "address", "name": "newHccAddress", "type": "address" }], + "name": "HccAddressChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [{ "indexed": false, "internalType": "uint256", "name": "newHccPrice", "type": "uint256" }], + "name": "HccPriceChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [{ "indexed": false, "internalType": "address", "name": "newOtherPaymentAddress", "type": "address" }], + "name": "OtherPaymentAddressChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [{ "indexed": false, "internalType": "uint256", "name": "newOtherPaymentPirce", "type": "uint256" }], + "name": "OtherPaymentPirceChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, + { + "anonymous": false, + "inputs": [{ "indexed": false, "internalType": "bool", "name": "pause", "type": "bool" }], + "name": "PauseEvent", + "type": "event" + }, { "anonymous": false, "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } + { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, + { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], - "name": "WithdrawInviteReward", + "name": "Transfer", "type": "event" }, { "inputs": [], - "name": "_candy", - "outputs": [ - { - "internalType": "contract ICandy", - "name": "", - "type": "address" - } - ], + "name": "START_AT", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_lastTokenID", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [ - { - "internalType": "address", - "name": "child", - "type": "address" - }, - { - "internalType": "address", - "name": "invite", - "type": "address" - } + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "_timestamp", "type": "uint256" }, + { "internalType": "uint256", "name": "code", "type": "uint256" }, + { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], - "name": "addInviteAddress", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "invite", - "type": "address" - }, - { - "internalType": "uint256", - "name": "rewardNum", - "type": "uint256" - } - ], - "name": "addInviteReward", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addWhitelisted", + "name": "adminMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "canGetRewardMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], + "name": "balanceOf", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseTokenURI", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "executorAddress", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }], + "name": "getApproved", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hccAddress", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hccPirce", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [ - { - "internalType": "address", - "name": "findAddress", - "type": "address" - } - ], - "name": "getInviteAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "operator", "type": "address" } ], + "name": "isApprovedForAll", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { "inputs": [], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], "stateMutability": "view", "type": "function" }, { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "inviteNumMap", - "outputs": [ - { - "internalType": "int128", - "name": "", - "type": "int128" - } - ], + "inputs": [], + "name": "otherPaymentAddress", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "stateMutability": "view", "type": "function" }, { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "inviteTotalRewardMap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isWhitelisted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "leaderMap", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], + "inputs": [], + "name": "otherPaymentPirce", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }], + "name": "ownerOf", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }], + "name": "rawOwnerOf", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, + { "internalType": "bytes", "name": "_data", "type": "bytes" } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "operator", "type": "address" }, + { "internalType": "bool", "name": "approved", "type": "bool" } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "string", "name": "baseURI", "type": "string" }], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "executor", "type": "address" }], + "name": "setExecutorAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "newHccAddress", "type": "address" }], + "name": "setHccAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "newHccPirce", "type": "uint256" }], + "name": "setHccPirce", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "newOtherPaymentAddress", "type": "address" }], + "name": "setOtherPaymentAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "newOtherPaymentPirce", "type": "uint256" }], + "name": "setOtherPaymentPirce", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bool", "name": "_pause", "type": "bool" }], + "name": "setPause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "wallet", "type": "address" }, + { "internalType": "uint256", "name": "code", "type": "uint256" }, + { "internalType": "uint256", "name": "_timestamp", "type": "uint256" }, + { "internalType": "bytes", "name": "_signature", "type": "bytes" } + ], + "name": "signatureWallet", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" }], + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "index", "type": "uint256" }], + "name": "tokenByIndex", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "uint256", "name": "index", "type": "uint256" } ], - "name": "removeWhitelisted", - "outputs": [], - "stateMutability": "nonpayable", + "name": "tokenOfOwnerByIndex", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256", "name": "tokenId", "type": "uint256" }], + "name": "tokenURI", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", "type": "function" }, { "inputs": [], - "name": "renounceOwnership", + "name": "totalSupply", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalToken", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "tokenId", "type": "uint256" } + ], + "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { - "inputs": [ - { - "internalType": "address", - "name": "candy", - "type": "address" - } - ], - "name": "setCandyTokenAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], + "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { - "inputs": [], - "name": "withDrawReward", + "inputs": [{ "internalType": "address", "name": "_owner", "type": "address" }], + "name": "walletOfOwner", + "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "tokenAddress", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "withDrawToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/src/config/abi/referralReward.json b/src/config/abi/referralReward.json new file mode 100644 index 0000000..c3b2868 --- /dev/null +++ b/src/config/abi/referralReward.json @@ -0,0 +1,99 @@ +[ + { + "inputs": [ + { "internalType": "contract IERC20", "name": "_HCC", "type": "address" }, + { "internalType": "address", "name": "_executorAddress", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, + { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "indexed": false, "internalType": "bytes", "name": "_signature", "type": "bytes" } + ], + "name": "WithDrawEvnet", + "type": "event" + }, + { + "inputs": [], + "name": "HCC", + "outputs": [{ "internalType": "contract IERC20", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "executorAddress", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [{ "internalType": "address", "name": "_executorAddress", "type": "address" }], + "name": "setExecutor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "uint256", "name": "_expiredTime", "type": "uint256" }, + { "internalType": "bytes", "name": "_signature", "type": "bytes" } + ], + "name": "signatureWallet", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "_amount", "type": "uint256" }, + { "internalType": "uint256", "name": "_expiredTime", "type": "uint256" }, + { "internalType": "bytes", "name": "_signature", "type": "bytes" } + ], + "name": "withDrawReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "withDrawToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/src/config/constants/contracts.ts b/src/config/constants/contracts.ts index af0c319..04c5966 100644 --- a/src/config/constants/contracts.ts +++ b/src/config/constants/contracts.ts @@ -8,17 +8,21 @@ export default { 56: '0x6ab8463a4185b80905e05a9ff80a2d6b714b9e95', }, boardChef: { - 97: '0x88fd1e29160f6d498038254f1bd0f7729f812fa1', + 97: '0xfe73bcc71c1e8f41f29c07ee921777ff8232eba7', 56: '0xD34871F12ace1BB8034E18009104b9dA60B84250', // NEED CHANGE ่Š‚็‚น่‘ฃไบ‹ไผšๅˆ็บฆ }, holderChef: { - 97: '0x0373aa1d09d58bb789db694d6b944b052ff26d91', + 97: '0xc49ef97410f495164604be0de2baae908913c4cc', 56: '0xD34871F12ace1BB8034E18009104b9dA60B84250', // NEED CHANGE ๆŒๅธไบบ }, referralChef: { - 97: '0xE79D28722220fcC13833476E327DEA3a663f64DB', + 97: '0x2f2aec0ee0da9f81e28e78a072cfbea6f35b1e06', 56: '0x88F46EF2Ee08494D84942DCA3bd24cDEf7C88Ae2', // NEED CHANGE ้‚€่ฏทๆˆ–ๅˆ™ๅ†›ๅ›ข้•ฟ }, + referralRewardChef: { + 97: '0xe031cf7053ea3b7605bb289efe2307356f6ace6d', + 56: '0x88F46EF2Ee08494D84942DCA3bd24cDEf7C88Ae2', // NEED CHANGE ้‚€่ฏทๆˆ–ๅˆ™ๅ†›ๅ›ข้•ฟๆ”ถ็›Š + }, lotteryV2: { 97: '0x5790c3534F30437641541a0FA04C992799602998', 56: '0x5aF6D33DE2ccEC94efb1bDF8f92Bd58085432d2c', diff --git a/src/config/constants/meta.ts b/src/config/constants/meta.ts index 9b127ec..41f3def 100644 --- a/src/config/constants/meta.ts +++ b/src/config/constants/meta.ts @@ -2,7 +2,7 @@ import { ContextApi } from 'contexts/Localization/types' import { PageMeta } from './types' export const DEFAULT_META: PageMeta = { - title: 'PancakeSwap', + title: 'HighCitySwap', description: 'The most popular AMM on BSC by user count! Earn CAKE through yield farming or win it in the Lottery, then stake it in Syrup Pools to earn more tokens! Initial Farm Offerings (new token launch model pioneered by PancakeSwap), NFTs, and more, on a platform you can trust.', image: 'https://pancakeswap.finance/images/hero.png', diff --git a/src/hooks/useContract.ts b/src/hooks/useContract.ts index cc77f12..2e9ab77 100644 --- a/src/hooks/useContract.ts +++ b/src/hooks/useContract.ts @@ -26,6 +26,7 @@ import { getBunnySpecialPredictionContract, getReferralchefContract, getBoardchefContract, + getReferralRewardchefContract, } from 'utils/contractHelpers' // Imports below migrated from Exchange useContract.ts @@ -108,6 +109,10 @@ export const useReferralchef = () => { const { library } = useActiveWeb3React() return useMemo(() => getReferralchefContract(library.getSigner()), [library]) } +export const useReferralRewardchef = () => { + const { library } = useActiveWeb3React() + return useMemo(() => getReferralRewardchefContract(library.getSigner()), [library]) +} export const useSousChef = (id) => { const { library } = useActiveWeb3React() return useMemo(() => getSouschefContract(id, library.getSigner()), [id, library]) diff --git a/src/hooks/useGetDocumentTitlePrice.ts b/src/hooks/useGetDocumentTitlePrice.ts index 161540f..12a9214 100644 --- a/src/hooks/useGetDocumentTitlePrice.ts +++ b/src/hooks/useGetDocumentTitlePrice.ts @@ -5,7 +5,7 @@ const useGetDocumentTitlePrice = () => { const cakePriceBusd = useCakeBusdPrice() useEffect(() => { const cakePriceBusdString = cakePriceBusd ? cakePriceBusd.toFixed(2) : '' - document.title = `Pancake Swap - ${cakePriceBusdString}` + document.title = `HighCity Swap - ${cakePriceBusdString}` }, [cakePriceBusd]) } export default useGetDocumentTitlePrice diff --git a/src/services/referral.ts b/src/services/referral.ts index 4ff6fac..e4a8f18 100644 --- a/src/services/referral.ts +++ b/src/services/referral.ts @@ -7,4 +7,11 @@ export const getReferralInfo = () => { }) } +export const withdrawReward = () => { + return request.request({ + url: '/high_city/app/api/invite/reward/receive', + method: 'get', + }) +} + export default getReferralInfo diff --git a/src/utils/addressHelpers.ts b/src/utils/addressHelpers.ts index 563de00..30cb2ea 100644 --- a/src/utils/addressHelpers.ts +++ b/src/utils/addressHelpers.ts @@ -26,6 +26,9 @@ export const getBoardAddress = () => { export const getReferralAddress = () => { return getAddress(addresses.referralChef) } +export const getReferralRewardAddress = () => { + return getAddress(addresses.referralRewardChef) +} export const getWbnbAddress = () => { return getAddress(tokens.wbnb.address) } diff --git a/src/utils/contractHelpers.ts b/src/utils/contractHelpers.ts index 3610ce1..3e3abbe 100644 --- a/src/utils/contractHelpers.ts +++ b/src/utils/contractHelpers.ts @@ -26,6 +26,7 @@ import { getBunnySpecialPredictionAddress, getBoardAddress, getReferralAddress, + getReferralRewardAddress, } from 'utils/addressHelpers' // ABI @@ -44,6 +45,7 @@ import pointCenterIfo from 'config/abi/pointCenterIfo.json' import lotteryV2Abi from 'config/abi/lotteryV2.json' import masterChef from 'config/abi/masterchef.json' import referralChef from 'config/abi/referral.json' +import referralRewardChef from 'config/abi/referralReward.json' import boardChef from 'config/abi/board.json' import sousChef from 'config/abi/sousChef.json' import sousChefV2 from 'config/abi/sousChefV2.json' @@ -122,6 +124,9 @@ export const getBoardchefContract = (id: number, signer?: ethers.Signer | ethers export const getReferralchefContract = (signer?: ethers.Signer | ethers.providers.Provider) => { return getContract(referralChef, getReferralAddress(), signer) } +export const getReferralRewardchefContract = (signer?: ethers.Signer | ethers.providers.Provider) => { + return getContract(referralRewardChef, getReferralRewardAddress(), signer) +} export const getClaimRefundContract = (signer?: ethers.Signer | ethers.providers.Provider) => { return getContract(claimRefundAbi, getClaimRefundAddress(), signer) } diff --git a/src/utils/formatBalance.ts b/src/utils/formatBalance.ts index 9b8f5d3..30a0c32 100644 --- a/src/utils/formatBalance.ts +++ b/src/utils/formatBalance.ts @@ -9,6 +9,9 @@ import { BIG_TEN } from './bigNumber' export const getDecimalAmount = (amount: BigNumber, decimals = 18) => { return new BigNumber(amount).times(BIG_TEN.pow(decimals)) } +export const getDecimalAmountNumber = (amount: BigNumber | number, decimals = 18) => { + return new BigNumber(amount).times(BIG_TEN.pow(decimals)).toNumber() +} export const getBalanceAmount = (amount: BigNumber | number, decimals = 18) => { return new BigNumber(amount).dividedBy(BIG_TEN.pow(decimals)) diff --git a/src/views/Referral/components/BuyNftModal.tsx b/src/views/Referral/components/BuyNftModal.tsx index a4515df..dcf6f69 100644 --- a/src/views/Referral/components/BuyNftModal.tsx +++ b/src/views/Referral/components/BuyNftModal.tsx @@ -4,6 +4,7 @@ import { useTranslation } from 'contexts/Localization' import { Flex, Button, Modal, Image } from '@pancakeswap/uikit' import TextFlex from './TextFlex' import FlexCom from './FlexCom' +import { useBuyTransaction } from '../hooks' const ModalDiv = styled(Modal)` width: 80%; @@ -49,8 +50,11 @@ const ImageDiv = styled(Image)` const BuyNftModal: React.FC = () => { const { t } = useTranslation() - + const sendBuyTransaction = useBuyTransaction() // const onDismiss = () => {} + const handleBuy = () => { + sendBuyTransaction() + } return ( @@ -71,7 +75,7 @@ const BuyNftModal: React.FC = () => { - {t('Buy It Now')} + {t('Buy It Now')} ) diff --git a/src/views/Referral/hooks/index.ts b/src/views/Referral/hooks/index.ts new file mode 100644 index 0000000..42e7d4d --- /dev/null +++ b/src/views/Referral/hooks/index.ts @@ -0,0 +1,57 @@ +import { useState, useCallback } from 'react' +import { useReferralchef, useReferralRewardchef } from 'hooks/useContract' +import useTokenBalance, { useGetBnbBalance } from 'hooks/useTokenBalance' +import { getAddress } from 'utils/addressHelpers' +import tokensList from 'config/constants/tokens' +import useToast from 'hooks/useToast' +import { useTranslation } from 'contexts/Localization' +import { getBalanceNumber, getDecimalAmountNumber } from 'utils/formatBalance' +import { withdrawReward } from 'services/referral' + +const useCheckTokenBalance = ({ isBnb, isHcc, isUsdt }) => { + const { balance: bnbTokenBalance } = useGetBnbBalance() + const { balance: usdtTokenBalance } = useTokenBalance(getAddress(tokensList.usdt.address)) + const { balance: hccTokenBalance } = useTokenBalance(getAddress(tokensList.hcc.address)) + const { toastWarning } = useToast() + const { t } = useTranslation() + const onCheck = useCallback(() => { + if ( + (isBnb && getBalanceNumber(bnbTokenBalance) === 0) || + (isHcc && getBalanceNumber(hccTokenBalance) === 0) || + (isUsdt && getBalanceNumber(usdtTokenBalance) === 0) + ) { + toastWarning(t('Insufficient Balance')) + } + }, [isBnb, isHcc, isUsdt]) + return [onCheck] +} + +export const useBuyTransaction = () => { + const referralContract = useReferralchef() + const transaction = async () => { + const data = await withdrawReward() + const { to, amount, code, signature } = data + console.log(data) + const params = [to, amount, code, signature] + const price = getDecimalAmountNumber(amount) + const res = await referralContract.adminMint(...params, { value: price }) + return res + } + return transaction +} + +export const useWithdraw = () => { + const referralRewardContract = useReferralRewardchef() + const transaction = async () => { + const data = await withdrawReward() + const { to, amount, expiredTime, signature } = data + console.log(data) + const params = [to, amount, expiredTime, signature] + const price = getDecimalAmountNumber(amount) + const res = await referralRewardContract.withDrawReward(...params, { value: price }) + return res + } + return transaction +} + +export default useCheckTokenBalance diff --git a/src/views/Referral/index.tsx b/src/views/Referral/index.tsx index ad01b90..911f214 100644 --- a/src/views/Referral/index.tsx +++ b/src/views/Referral/index.tsx @@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react' import styled from 'styled-components' import { fetchReferralInfoAsync } from 'state/actions' import { useAccount } from 'state/userInfo/hooks' -import { useReferralConfigInfo } from 'state/referral/hooks' +import { useReferralCommanderConfigInfo } from 'state/referral/hooks' import { useDispatch } from 'react-redux' import UnunitedCom from './components/UnunitedCom' import ConnectedCom from './components/Connected' @@ -42,7 +42,7 @@ const Nft: React.FC = () => { const dispatch = useDispatch() const account = useAccount() - const referralConfigInfo = useReferralConfigInfo() + const referralConfigInfo = useReferralCommanderConfigInfo() console.log(referralConfigInfo) useEffect(() => { dispatch(fetchReferralInfoAsync(account))