diff --git a/src/components/chain/contract/ERC20.js b/src/components/chain/contract/ERC20.js index 7b2ca38..a159937 100644 --- a/src/components/chain/contract/ERC20.js +++ b/src/components/chain/contract/ERC20.js @@ -30,7 +30,9 @@ export class ERC20 { return contract.balanceOf(address); } - async allowance(provider, tokenAddress, owner, spender) { + async allowance(tokenAddress, spender) { + const provider = this.bc.eoaProvider; + const owner = provider.getSigner().getAddress(); const contract = new Contract(tokenAddress, erc20Abi, provider.getSigner()); return contract.allowance(owner, spender); } diff --git a/src/components/chain/contract/Vester.js b/src/components/chain/contract/Vester.js index e531330..a94f62a 100644 --- a/src/components/chain/contract/Vester.js +++ b/src/components/chain/contract/Vester.js @@ -55,10 +55,11 @@ export class Vester { * @returns */ async claim() { + const userAddress = await this.bc.eoaProvider.getSigner().getAddress() return this.execMethod({ provider: this.bc.eoaProvider, method: 'claim', - params: [] + params: [userAddress] }); } /** @@ -89,10 +90,11 @@ export class Vester { * 查询当前用户可以领取的CEC数量 */ async queryClaimable() { + const userAddress = await this.bc.eoaProvider.getSigner().getAddress() return this.queryMethod({ provider: this.bc.eoaProvider, method: 'claimable', - params: [] + params: [userAddress] }); } /** diff --git a/src/components/chain/utils.js b/src/components/chain/utils.js index d79ec9d..e834198 100644 --- a/src/components/chain/utils.js +++ b/src/components/chain/utils.js @@ -280,4 +280,11 @@ export const parseTradeEvent = (event) => { usd = (amount * price.price).toFixed(2) } return {icon, price, usd, currencyName, amount: amountBn, decimals: currencyData.decimals} +} + +export const queryCECPrice = async() => { + const tokenAddress = '0x111111267109489dc6f350608d5113B10c0C5cd7' + const url = `https://price.api.cx.metamask.io/v2/chains/56/spot-prices?tokenAddresses=${tokenAddress}&vsCurrency=usd&includeMarketData=true` + const res = await fetch(url).then(res => res.json()); + return res[tokenAddress].price } \ No newline at end of file diff --git a/src/components/staking/header.vue b/src/components/staking/header.vue index 0c74b2a..9288cff 100644 --- a/src/components/staking/header.vue +++ b/src/components/staking/header.vue @@ -25,7 +25,7 @@
CEC staking
-

{{ stakingStore.cecInfoData.CecStaked }}

+

{{ priceCalculated(cecInfoData.CecStaked) }}

  • @@ -36,7 +36,7 @@
    CEC disarm
    -

    {{ stakingStore.cecInfoData.CecDisarm }}

    +

    {{ priceCalculated(cecInfoData.CecDisarm) }}

  • @@ -47,7 +47,7 @@
    CEC collection
    -

    {{ stakingStore.cecInfoData.CecCollection }}

    +

    {{ priceCalculated(cecInfoData.CecCollection) }}

  • @@ -60,7 +60,7 @@
    esCEC
    -

    {{ stakingStore.cecInfoData.esCecBalance }}

    +

    {{ priceCalculated(cecInfoData.esCecBalance) }}

  • @@ -71,7 +71,7 @@
    esCEC Staking
    -

    {{ stakingStore.cecInfoData.esCecStaked }}

    +

    {{ priceCalculated(cecInfoData.esCecStaked) }}

  • @@ -82,7 +82,7 @@
    esCEC conversion
    -

    {{ stakingStore.cecInfoData.esCecConversion }}

    +

    {{ priceCalculated(cecInfoData.esCecConversion) }}

  • @@ -93,7 +93,7 @@
    esCEC collection
    -

    {{ stakingStore.cecInfoData.esCecCollection }}

    +

    {{ priceCalculated(cecInfoData.esCecCollection) }}

  • @@ -178,15 +178,24 @@ const getCecData = async () => { // esCecStaked: 0, // esCecConversion: 0, // esCecCollection: 0, + let address = localWalletStore.address + if (!address) return let timer = setInterval( async () => { - cecInfoData.value.cecBalance = parseInt(await bc.erc20.balanceOf(address)).toString() - cecInfoData.value.esCecBalance = parseInt(await bc.erc20.esCecBalanceOf(address)).toString() - cecInfoData.value.CecStaked = parseInt(await bc.staking.queryCECStaked()).toString() - cecInfoData.value.esCecStaked = parseInt(await bc.staking.queryEsCECStaked()).toString() - let res = parseInt(await bc.staking.queryClaimableByCEC()) - // let ClaimableByCEC = await bc.staking.queryCumulativeByCEC() - // let ClaimableByEsCEC = await bc.staking.queryClaimableByEsCEC() - console.log(cecInfoData.value.CecStaked,res) + cecInfoData.value.cecBalance = BigInt(await bc.erc20.balanceOf(address)).toString() + cecInfoData.value.esCecBalance = BigInt(await bc.erc20.esCecBalanceOf(address)).toString() + cecInfoData.value.CecStaked = BigInt(await bc.staking.queryCECStaked()).toString() + cecInfoData.value.esCecStaked = BigInt(await bc.staking.queryEsCECStaked()).toString() + cecInfoData.value.esCecConversion = BigInt(await bc.vester.queryVested()).toString() + // 锁定的cec 等于 转换中的esCec数量 + cecInfoData.value.CecDisarm = cecInfoData.value.esCecConversion; + try { + cecInfoData.value.CecCollection = await bc.vester.queryClaimable() + const stakeCecCollection = await bc.staking.queryClaimableByCEC() + const stakeEsCecCollection = await bc.staking.queryClaimableByEsCEC() + cecInfoData.value.esCecCollection = (BigInt(stakeCecCollection) + BigInt(stakeEsCecCollection)).toString() + } catch (e) { + console.log('query claimable error', e) + } clearInterval(timer); }, 2000); // let cec = await bc.staking.queryCECStaked() diff --git a/src/components/staking/index.vue b/src/components/staking/index.vue index 68050e3..3d68fe9 100644 --- a/src/components/staking/index.vue +++ b/src/components/staking/index.vue @@ -163,14 +163,22 @@ const dialogUnstakeText = ref({ }) const unCecStaked = async () => { - console.log(localWalletStore.address, STAKING_ADDRESSES[chainId].stakedCecTracker,stakingStore.cecInfoData.cecBalance) - // try{ - // let res = await bc.erc20.approve(STAKING_ADDRESSES[chainId].stakedCecTracker, STAKING_ADDRESSES[chainId].cec,(1*1e18).toString()) - // } catch (e) { - // console.log(e) - // } - let res = await bc.staking.stakeCec(localWalletStore.address,(1*1e18).toString()) - console.log(res) + const amount = BigInt(1 * 1e18) + console.log(localWalletStore.address, STAKING_ADDRESSES[chainId].cec, (1*1e18).toString()) + try{ + let allow = await bc.erc20.allowance(STAKING_ADDRESSES[chainId].cec, STAKING_ADDRESSES[chainId].stakedCecTracker) + allow = BigInt(allow) + if (allow < amount) { + console.log('not enough allowance') + let res = await bc.erc20.approve(STAKING_ADDRESSES[chainId].stakedCecTracker, STAKING_ADDRESSES[chainId].cec, amount) + await res.wait() + } + let res2 = await bc.staking.stakeCec(amount) + console.log(res2) + } catch (e) { + console.log(e) + } + } diff --git a/src/configs/configchain.js b/src/configs/configchain.js index b5c7a38..2b6e09e 100644 --- a/src/configs/configchain.js +++ b/src/configs/configchain.js @@ -108,12 +108,12 @@ export const STAKING_ADDRESSES = { cec: '0xfa1223747bae6d519580c53Cbb9C11a45b13c6b7', esCec: '0x1FbA3F84e62163069050f1156b73C008722136A3', vester: '0x41a7f94f0B3b615F84c7084F45556FEf1bd18A18', - stakedCecRouter: '0xE9AFdA5939023a7B4104931030a32CFAC99f4af8', - stakedCecTracker: '0x18B41FbA9E096bc3E0A1F6aa92617B819Df6A602', - stakedCecDistributor: '0xA4f4452b4B91C27B84275ebcfBCca1c277FFA15b', - stakedEsCecRouter: '0x2B656F1c485913577461e06bbf5adC999BC7743B', - stakedEsCecTracker: '0x9679DE719eCe856Fe40E1f68C5ed48b344181035', - stakedEsCecDistributor: '0x11440cE5a7d6a1e6fa1e9fd790EBa93476F0DeA0', + stakedCecRouter: '0x576c3D53c6d4A19471E216c06945d41EC39f6014', + stakedCecTracker: '0x7554e677fF63212264db26dc743c67C277f219d2', + stakedCecDistributor: '0x53153a177F4483b53b3f732Ff63eeB48c6FE89E5', + stakedEsCecRouter: '0x19934736a578527cF725a33201445166Cbb62e52', + stakedEsCecTracker: '0x30cd668d0f280C404aD504bFf5d7a3Bf535f2A92', + stakedEsCecDistributor: '0x6Ee091c2c242470f4f6D3d55604e1a66c6FF4ff5', } } diff --git a/src/configs/priceCalculate.js b/src/configs/priceCalculate.js index 22d429d..4f5923d 100644 --- a/src/configs/priceCalculate.js +++ b/src/configs/priceCalculate.js @@ -3,6 +3,9 @@ import { ethers } from "ethers" // 计算价格精度 export const priceCalculated = (price, decimals=18) => { + if (!price) { + return '0.00000' + } let str = Number(ethers.utils.formatUnits(price, decimals)).toFixed(5) if(str == '0.00000') { str = '<0.00001'