update loading cycle + potential staking rewards
This commit is contained in:
+1
-1
@@ -14,7 +14,7 @@ import { useCycleStore } from "@/stores/cycles";
|
|||||||
import SlideoutPanel from "./components/SlideoutPanel.vue";
|
import SlideoutPanel from "./components/SlideoutPanel.vue";
|
||||||
import ConnectWallet from "./components/ConnectWallet.vue";
|
import ConnectWallet from "./components/ConnectWallet.vue";
|
||||||
|
|
||||||
import { getNetwork } from "@wagmi/core";
|
import { getNetwork, fetchTransaction } from "@wagmi/core";
|
||||||
|
|
||||||
const isMobile = ref(false);
|
const isMobile = ref(false);
|
||||||
const showPanel = ref(false);
|
const showPanel = ref(false);
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
]"
|
]"
|
||||||
v-for="token in props.data"
|
v-for="token in props.data"
|
||||||
:key="token.contractAddress"
|
:key="token.contractAddress"
|
||||||
@click="tokenStore.changeActiveToken(token)"
|
@click="changeActiveToken(token)"
|
||||||
>
|
>
|
||||||
<div class="sacrifice-token-logo">
|
<div class="sacrifice-token-logo">
|
||||||
<img v-if="isMobile" :src="token.logoMobile" alt="token logo" />
|
<img v-if="isMobile" :src="token.logoMobile" alt="token logo" />
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
>
|
>
|
||||||
No Staking Bonus
|
No Staking Bonus
|
||||||
</div>
|
</div>
|
||||||
<div class="mid-mid-text" v-else>+ TODO Staking Bonus</div>
|
<div class="mid-mid-text" v-else>+ {{ stakingOutput }} Staking Bonus</div>
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<font-awesome-icon icon="chevron-down" />
|
<font-awesome-icon icon="chevron-down" />
|
||||||
</div>
|
</div>
|
||||||
@@ -189,6 +189,7 @@ const props = defineProps({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const output = ref(0);
|
const output = ref(0);
|
||||||
|
const stakingOutput = ref(null);
|
||||||
const blockEvent = ref(null);
|
const blockEvent = ref(null);
|
||||||
const approveToast = ref(null);
|
const approveToast = ref(null);
|
||||||
/**
|
/**
|
||||||
@@ -231,8 +232,9 @@ const stateComputed = computed(() => {
|
|||||||
return returnState;
|
return returnState;
|
||||||
});
|
});
|
||||||
const processChange = debounce(async (value) => {
|
const processChange = debounce(async (value) => {
|
||||||
const returnValue = await sacrificeStore.getRewardsFor(value, activeToken.value);
|
const rewardValue = await sacrificeStore.getRewardsFor(value, activeToken.value);
|
||||||
output.value = returnValue.output;
|
output.value = rewardValue.output;
|
||||||
|
stakingOutput.value = rewardValue.staking;
|
||||||
});
|
});
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
@@ -244,6 +246,7 @@ onMounted(() => {
|
|||||||
console.log("blockNumber", blockNumber);
|
console.log("blockNumber", blockNumber);
|
||||||
var rewardValue = await sacrificeStore.getRewardsFor(sacrificeStore.sacrificeNumber, activeToken.value);
|
var rewardValue = await sacrificeStore.getRewardsFor(sacrificeStore.sacrificeNumber, activeToken.value);
|
||||||
output.value = rewardValue.output;
|
output.value = rewardValue.output;
|
||||||
|
stakingOutput.value = rewardValue.staking;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -275,12 +278,16 @@ async function approveToken(amount) {
|
|||||||
|
|
||||||
async function addTokens(value) {
|
async function addTokens(value) {
|
||||||
sacrificeStore.sacrificeNumber = Number(sacrificeStore.sacrificeNumber) + Number(value);
|
sacrificeStore.sacrificeNumber = Number(sacrificeStore.sacrificeNumber) + Number(value);
|
||||||
output.value = await sacrificeStore.getRewardsFor(sacrificeStore.sacrificeNumber, activeToken.value).output;
|
const rewardValue = await sacrificeStore.getRewardsFor(sacrificeStore.sacrificeNumber, activeToken.value);
|
||||||
|
output.value = rewardValue.output;
|
||||||
|
stakingOutput.value = rewardValue.staking;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function addMaxTokens() {
|
async function addMaxTokens() {
|
||||||
sacrificeStore.sacrificeNumber = activeWalletToken.value.balanceOf;
|
sacrificeStore.sacrificeNumber = activeWalletToken.value.balanceOf;
|
||||||
output.value = await sacrificeStore.getRewardsFor(sacrificeStore.sacrificeNumber, activeToken.value).output;
|
const rewardValue = await sacrificeStore.getRewardsFor(sacrificeStore.sacrificeNumber, activeToken.value);
|
||||||
|
output.value = rewardValue.output;
|
||||||
|
stakingOutput.value = rewardValue.staking;
|
||||||
}
|
}
|
||||||
|
|
||||||
function showApprovedToast(value, header, subheader, info) {
|
function showApprovedToast(value, header, subheader, info) {
|
||||||
@@ -310,11 +317,26 @@ function showApprovedToast(value, header, subheader, info) {
|
|||||||
toastClassName: "approve-toast toast-card",
|
toastClassName: "approve-toast toast-card",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//call function in the store and remove icon,
|
//call function in the store and remove icon,
|
||||||
async function sacrificeToken() {
|
async function sacrificeToken() {
|
||||||
await sacrificeStore.sacrificeToken(sacrificeStore.sacrificeNumber, activeToken.value);
|
await sacrificeStore.sacrificeToken(sacrificeStore.sacrificeNumber, activeToken.value);
|
||||||
toast.dismiss(approveToast.value);
|
toast.dismiss(approveToast.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function changeActiveToken(token) {
|
||||||
|
console.log("changeActiveToken");
|
||||||
|
tokenStore.activeToken = token;
|
||||||
|
if (walletStore.connected) {
|
||||||
|
//TODO, wenn connected, dann all diese Daten laden?
|
||||||
|
tokenStore.activeToken.balance = await walletStore.getTokenBalance(token);
|
||||||
|
tokenStore.activeToken.allowance = Number(await tokenStore.allowance());
|
||||||
|
}
|
||||||
|
var rewards = await sacrificeStore.getRewardsFor(sacrificeStore.sacrificeNumber, token);
|
||||||
|
console.log("rewards", rewards);
|
||||||
|
output.value = rewards.output;
|
||||||
|
stakingOutput.value = rewards.staking;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass">
|
<style lang="sass">
|
||||||
|
|||||||
@@ -77,8 +77,6 @@
|
|||||||
v-if="stakeMenu"
|
v-if="stakeMenu"
|
||||||
>
|
>
|
||||||
<template v-slot:body>
|
<template v-slot:body>
|
||||||
{{ stateStakeClaimComp }}
|
|
||||||
{{ stateStakeClaim }}
|
|
||||||
<div class="btn btn-immortal stake-button" disabled v-if="stateStakeClaimComp === 0">
|
<div class="btn btn-immortal stake-button" disabled v-if="stateStakeClaimComp === 0">
|
||||||
Enter Amount
|
Enter Amount
|
||||||
</div>
|
</div>
|
||||||
@@ -150,11 +148,7 @@ async function stakeAndClaim() {
|
|||||||
console.log(tokenNumber.value);
|
console.log(tokenNumber.value);
|
||||||
console.log(getCurrentCycleData.value.rewards_total);
|
console.log(getCurrentCycleData.value.rewards_total);
|
||||||
const coefficient = (10000 * tokenNumber.value) / getCurrentCycleData.value.rewards_total;
|
const coefficient = (10000 * tokenNumber.value) / getCurrentCycleData.value.rewards_total;
|
||||||
console.log("hier");
|
|
||||||
stateStakeClaim.value = 2;
|
stateStakeClaim.value = 2;
|
||||||
console.log("hier2");
|
|
||||||
console.log("coefficient", coefficient);
|
|
||||||
console.log("cycleStore.activeCycle", cycleStore.activeCycle);
|
|
||||||
var hash = await rewardLockerStore.stakeAndClaimCycle(coefficient, cycleStore.activeCycle);
|
var hash = await rewardLockerStore.stakeAndClaimCycle(coefficient, cycleStore.activeCycle);
|
||||||
console.log("hash");
|
console.log("hash");
|
||||||
stateStakeClaim.value = 3;
|
stateStakeClaim.value = 3;
|
||||||
@@ -169,15 +163,26 @@ async function stakeAndClaim() {
|
|||||||
(topic) => topic === "0xd0813ff03c470dcc7baa9ce36914dc2febdfd276d639deffaac383fd3db42ba3"
|
(topic) => topic === "0xd0813ff03c470dcc7baa9ce36914dc2febdfd276d639deffaac383fd3db42ba3"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var stakeData = data.logs.find((logObject) => {
|
||||||
|
return logObject.topics.find(
|
||||||
|
(topic) => topic === "0xf496bf2b14b1d178412b6f7a745900105b49b38b315cfdfbfabad31a6f995c6f"
|
||||||
|
);
|
||||||
|
});
|
||||||
//
|
//
|
||||||
console.log("rewardData", rewardData);
|
console.log("rewardData", rewardData);
|
||||||
const outputClaim = Number(rewardData?.topics[2]) / Math.pow(10, tokenStore.memeToken.decimals);
|
const outputClaim = Number(rewardData?.topics[2]) / Math.pow(10, tokenStore.memeToken.decimals);
|
||||||
|
const outputStaked = Number(stakeData?.topics[3]) / Math.pow(10, tokenStore.memeToken.decimals);
|
||||||
showSuccessToast(
|
showSuccessToast(
|
||||||
formatNumber(outputClaim),
|
formatNumber(outputClaim + outputStaked),
|
||||||
"Success!",
|
"Success!",
|
||||||
"You just claimed and staked",
|
"You just claimed and staked",
|
||||||
"Join the next cycle to increase your rewards and win with your clan."
|
"Join the next cycle to increase your rewards and win with your clan."
|
||||||
);
|
);
|
||||||
|
tokenNumber.value = 0;
|
||||||
|
stakeMenu.value = false;
|
||||||
|
await cycleStore.fillCycle(activeCycle.value, true);
|
||||||
|
await walletStore.loadWalletData();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("stakeAndClaim", error);
|
console.error("stakeAndClaim", error);
|
||||||
} finally {
|
} finally {
|
||||||
@@ -242,8 +247,8 @@ const stateClaimedComp = computed(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const stateStakeClaimComp = computed(() => {
|
const stateStakeClaimComp = computed(() => {
|
||||||
|
console.log("stateStakeClaimComp");
|
||||||
let returnState = 0;
|
let returnState = 0;
|
||||||
console.log("tokenNumber.value", tokenNumber.value);
|
|
||||||
if (
|
if (
|
||||||
tokenNumber.value === null ||
|
tokenNumber.value === null ||
|
||||||
tokenNumber.value === "" ||
|
tokenNumber.value === "" ||
|
||||||
|
|||||||
@@ -64,10 +64,13 @@ export const useCycleStore = defineStore("cycles", {
|
|||||||
console.log("updateCurrentCycle");
|
console.log("updateCurrentCycle");
|
||||||
const tokenStore = useTokenStore();
|
const tokenStore = useTokenStore();
|
||||||
const memeBurnerStore = useMemeburnerStore();
|
const memeBurnerStore = useMemeburnerStore();
|
||||||
var data = await memeBurnerStore.getSacrificedCycle(this.currentCycle);
|
var data = await memeBurnerStore.getSacrificedCycle(this.currentCycle);
|
||||||
|
console.log("this.currentCycle", this.currentCycle);
|
||||||
|
console.log("this.cycles", this.cycles);
|
||||||
var tokenIndex = this.cycles[this.currentCycle]?.token.findIndex(
|
var tokenIndex = this.cycles[this.currentCycle]?.token.findIndex(
|
||||||
(tokenData) => tokenData.contractAddress === sacrificedToken
|
(tokenData) => tokenData.contractAddress === sacrificedToken
|
||||||
);
|
);
|
||||||
|
console.log("tokenIndex", tokenIndex);
|
||||||
const token = tokenStore.getToken(sacrificedToken);
|
const token = tokenStore.getToken(sacrificedToken);
|
||||||
this.cycles[this.currentCycle].token[tokenIndex].amount =
|
this.cycles[this.currentCycle].token[tokenIndex].amount =
|
||||||
Number(data[tokenIndex].result[1]) / Math.pow(10, token.decimals)
|
Number(data[tokenIndex].result[1]) / Math.pow(10, token.decimals)
|
||||||
|
|||||||
+59
-53
@@ -30,13 +30,12 @@ export const useRewardLockerStore = defineStore("rewardlocker", {
|
|||||||
* @param {*} tokenAddress
|
* @param {*} tokenAddress
|
||||||
* @returns Rewards for specific token and specific cycle
|
* @returns Rewards for specific token and specific cycle
|
||||||
*/
|
*/
|
||||||
async getRewards(walletAddress, cycleNumber, tokenAddress) {
|
async getRewards(walletAddress, cycleNumber, tokenAddress) {
|
||||||
try {
|
try {
|
||||||
return await this.contract.read.rewards([walletAddress, cycleNumber, tokenAddress]);
|
return await this.contract.read.rewards([walletAddress, cycleNumber, tokenAddress]);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("getRewards", error);
|
console.error("getRewards", error);
|
||||||
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
async getRewardsForAllToken(cycleNumber) {
|
async getRewardsForAllToken(cycleNumber) {
|
||||||
console.log("getRewardsForAllToken");
|
console.log("getRewardsForAllToken");
|
||||||
@@ -56,39 +55,47 @@ export const useRewardLockerStore = defineStore("rewardlocker", {
|
|||||||
contracts,
|
contracts,
|
||||||
});
|
});
|
||||||
return data;
|
return data;
|
||||||
},
|
},
|
||||||
async getTotalSacrificeRewardsForAllToken(cycleNumber) {
|
async getTotalSacrificeRewardsForAllToken(cycleNumber) {
|
||||||
try {
|
try {
|
||||||
const tokenStore = useTokenStore();
|
const tokenStore = useTokenStore();
|
||||||
const contracts = [];
|
const contracts = [];
|
||||||
for (let index = 0; index < tokenStore.sacrificeToken.length; index++) {
|
for (let index = 0; index < tokenStore.sacrificeToken.length; index++) {
|
||||||
const token = tokenStore.sacrificeToken[index];
|
const token = tokenStore.sacrificeToken[index];
|
||||||
// calls.push(this.contract.methods.rewards(walletStore.address, cycleNumber, token.contractAddress));
|
contracts.push({
|
||||||
contracts.push({
|
...this.contract,
|
||||||
...this.contract,
|
functionName: "getTotalSacrificeRewardsForToken",
|
||||||
functionName: "getTotalSacrificeRewardsForToken",
|
args: [cycleNumber, token.contractAddress],
|
||||||
args: [cycleNumber, token.contractAddress],
|
});
|
||||||
|
}
|
||||||
|
const data = await multicall({
|
||||||
|
contracts,
|
||||||
});
|
});
|
||||||
}
|
// const multicallStore = useMultiCallStore();
|
||||||
const data = await multicall({
|
return data;
|
||||||
contracts,
|
} catch (error) {
|
||||||
});
|
throw new Error(error);
|
||||||
// const multicallStore = useMultiCallStore();
|
}
|
||||||
return data;
|
},
|
||||||
|
async getSacrificedTokenCoefficient(cycleNumber, sacrificedToken) {
|
||||||
} catch (error) {
|
|
||||||
throw new Error(error)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
async getSacrificedTokenCoefficient(cycleNumber, sacrificedToken) {
|
|
||||||
return await this.contract.read.getSacrificedTokenCoefficient([cycleNumber, sacrificedToken]);
|
return await this.contract.read.getSacrificedTokenCoefficient([cycleNumber, sacrificedToken]);
|
||||||
},
|
},
|
||||||
|
async getStakeRewardForSacrificeReward(sacrificedToken, reward) {
|
||||||
|
const walletStore = useWalletStoreV2();
|
||||||
|
const cycleStore = useCycleStore();
|
||||||
|
return await this.contract.read.getStakeRewardForSacrificeReward([
|
||||||
|
walletStore.address,
|
||||||
|
sacrificedToken,
|
||||||
|
reward,
|
||||||
|
]);
|
||||||
|
|
||||||
|
},
|
||||||
async lastCompletedCycle() {
|
async lastCompletedCycle() {
|
||||||
return await this.contract.read.lastCompletedCycle();
|
return await this.contract.read.lastCompletedCycle();
|
||||||
},
|
},
|
||||||
async claim(cycle) {
|
async claim(cycle) {
|
||||||
console.log("claim");
|
console.log("claim");
|
||||||
return await this.contract.write.claim([cycle]);
|
return await this.contract.write.claim([cycle]);
|
||||||
},
|
},
|
||||||
async claimAll() {
|
async claimAll() {
|
||||||
console.log("claimAll");
|
console.log("claimAll");
|
||||||
@@ -100,21 +107,21 @@ export const useRewardLockerStore = defineStore("rewardlocker", {
|
|||||||
return await this.contract.write.claim([cycles]);
|
return await this.contract.write.claim([cycles]);
|
||||||
},
|
},
|
||||||
async getTotalRewardsOf(address, cycles) {
|
async getTotalRewardsOf(address, cycles) {
|
||||||
return await this.contract.read.getTotalRewardsOf([address, cycles]);
|
return await this.contract.read.getTotalRewardsOf([address, cycles]);
|
||||||
},
|
},
|
||||||
async getTotalRewards(address) {
|
async getTotalRewards(address) {
|
||||||
const cycleStore = useCycleStore();
|
const cycleStore = useCycleStore();
|
||||||
const cycles = await cycleStore.getFinshedCycleNumbers();
|
const cycles = await cycleStore.getFinshedCycleNumbers();
|
||||||
return await this.contract.read.getTotalRewardsOf([address, cycles]);
|
return await this.contract.read.getTotalRewardsOf([address, cycles]);
|
||||||
},
|
},
|
||||||
async getStaked(address) {
|
async getStaked(address) {
|
||||||
return await this.contract.read.staked([address]);
|
return await this.contract.read.staked([address]);
|
||||||
},
|
},
|
||||||
async orderUnstake() {
|
async orderUnstake() {
|
||||||
return await this.contract.write.orderUnstake();
|
return await this.contract.write.orderUnstake();
|
||||||
},
|
},
|
||||||
async unstake(unstakeCycle) {
|
async unstake(unstakeCycle) {
|
||||||
return await this.contract.write.unstake([unstakeCycle]);
|
return await this.contract.write.unstake([unstakeCycle]);
|
||||||
},
|
},
|
||||||
async stakeBloodline(tokenNumber) {
|
async stakeBloodline(tokenNumber) {
|
||||||
console.log("tokenNumber", tokenNumber);
|
console.log("tokenNumber", tokenNumber);
|
||||||
@@ -125,7 +132,7 @@ export const useRewardLockerStore = defineStore("rewardlocker", {
|
|||||||
const spender = this.config.contractAddress;
|
const spender = this.config.contractAddress;
|
||||||
const deadline = Date.now() + 20 * 60;
|
const deadline = Date.now() + 20 * 60;
|
||||||
const decimals = tokenStore.getToken(walletStore.memeToken.contractAddress).decimals;
|
const decimals = tokenStore.getToken(walletStore.memeToken.contractAddress).decimals;
|
||||||
const value = BigInt(tokenNumber * Math.pow(10, decimals))
|
const value = BigInt(tokenNumber * Math.pow(10, decimals));
|
||||||
const nonce = await tokenStore.memeToken.contract.read.nonces([fromAddress]);
|
const nonce = await tokenStore.memeToken.contract.read.nonces([fromAddress]);
|
||||||
console.log("nonce", nonce);
|
console.log("nonce", nonce);
|
||||||
const { types, message, domain, primaryType } = createPermitObject(
|
const { types, message, domain, primaryType } = createPermitObject(
|
||||||
@@ -144,10 +151,9 @@ export const useRewardLockerStore = defineStore("rewardlocker", {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const { r, s, v } = getSignatureRSV(signature);
|
const { r, s, v } = getSignatureRSV(signature);
|
||||||
console.log("value, deadline, v, r, s", value, deadline, v, r, s);
|
console.log("value, deadline, v, r, s", value, deadline, v, r, s);
|
||||||
const hash = await this.contract.write.stakeToBeSecured([value, deadline, v, r, s]);
|
const hash = await this.contract.write.stakeToBeSecured([value, deadline, v, r, s]);
|
||||||
return hash;
|
return hash;
|
||||||
|
|
||||||
},
|
},
|
||||||
async stakeAndClaimCycle(stakeCoefficient, cycle) {
|
async stakeAndClaimCycle(stakeCoefficient, cycle) {
|
||||||
// stakeCoefficient 25% = 2500, 50% = 5000
|
// stakeCoefficient 25% = 2500, 50% = 5000
|
||||||
@@ -156,18 +162,18 @@ export const useRewardLockerStore = defineStore("rewardlocker", {
|
|||||||
const hash = await this.contract.write.stakeAndClaim([stakeCoefficient, [cycle], addresses]);
|
const hash = await this.contract.write.stakeAndClaim([stakeCoefficient, [cycle], addresses]);
|
||||||
const data = await waitForTransaction({
|
const data = await waitForTransaction({
|
||||||
hash: hash,
|
hash: hash,
|
||||||
});
|
});
|
||||||
return hash;
|
return hash;
|
||||||
},
|
},
|
||||||
async stakeAndClaimAllCycles(stakeCoefficient) {
|
async stakeAndClaimAllCycles(stakeCoefficient) {
|
||||||
console.log("stakeAndClaimAllCycles");
|
console.log("stakeAndClaimAllCycles");
|
||||||
const tokenStore = useTokenStore();
|
const tokenStore = useTokenStore();
|
||||||
const cycleStore = useCycleStore();
|
const cycleStore = useCycleStore();
|
||||||
const cycles = await cycleStore.getFinshedCycleNumbers();
|
const cycles = await cycleStore.getFinshedCycleNumbers();
|
||||||
const addresses = tokenStore.sacrificeToken.map((obj) => obj.contractAddress);
|
const addresses = tokenStore.sacrificeToken.map((obj) => obj.contractAddress);
|
||||||
var stakeCoefficientInt = Math.round(stakeCoefficient);
|
var stakeCoefficientInt = Math.round(stakeCoefficient);
|
||||||
const hash = await this.contract.write.stakeAndClaim([stakeCoefficientInt, cycles, addresses]);
|
const hash = await this.contract.write.stakeAndClaim([stakeCoefficientInt, cycles, addresses]);
|
||||||
return hash;
|
return hash;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
+32
-9
@@ -3,6 +3,8 @@ import { useMemeburnerStore } from "@/stores/memeburner";
|
|||||||
import { useUniswapStore } from "@/stores/uniswap";
|
import { useUniswapStore } from "@/stores/uniswap";
|
||||||
import { useWalletStoreV2 } from "@/stores/walletV2";
|
import { useWalletStoreV2 } from "@/stores/walletV2";
|
||||||
import { useCycleStore } from "@/stores/cycles";
|
import { useCycleStore } from "@/stores/cycles";
|
||||||
|
import { useRewardLockerStore } from "@/stores/rewardlocker";
|
||||||
|
|
||||||
|
|
||||||
import { useTokenStore } from "@/stores/tokens";
|
import { useTokenStore } from "@/stores/tokens";
|
||||||
import { waitForTransaction, readContract, watchBlockNumber, multicall } from "@wagmi/core";
|
import { waitForTransaction, readContract, watchBlockNumber, multicall } from "@wagmi/core";
|
||||||
@@ -46,12 +48,23 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
});
|
});
|
||||||
console.log("data", data);
|
console.log("data", data);
|
||||||
|
|
||||||
var rewardData = data.logs.find((logObject) => {
|
// var rewardData = data.logs.find((logObject) => {
|
||||||
return logObject.topics.find(
|
// return logObject.topics.find(
|
||||||
|
// (topic) => topic === "0x5e60ccd3c81486143d815dce24867a494d7fee585a0a44282cf479b19a5186ee"
|
||||||
|
// );
|
||||||
|
// });
|
||||||
|
|
||||||
|
var rewardData = data.logs.filter((logObject) => {
|
||||||
|
return logObject.topics.filter(
|
||||||
(topic) => topic === "0x5e60ccd3c81486143d815dce24867a494d7fee585a0a44282cf479b19a5186ee"
|
(topic) => topic === "0x5e60ccd3c81486143d815dce24867a494d7fee585a0a44282cf479b19a5186ee"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
const outputSacrifice = Number(rewardData.data) / Math.pow(10, token.decimals);
|
console.log("rewardData", rewardData);
|
||||||
|
const outputSacrifice = rewardData.reduce((x, y) => {
|
||||||
|
return x + Number(y.data) / Math.pow(10, token.decimals);
|
||||||
|
}, 0);
|
||||||
|
console.log("outputSacrifice", outputSacrifice);
|
||||||
|
// const outputSacrifice = Number(rewardData.data) / Math.pow(10, token.decimals);
|
||||||
token.allowance = await tokenStore.allowance();
|
token.allowance = await tokenStore.allowance();
|
||||||
this.sacrificeState = 4;
|
this.sacrificeState = 4;
|
||||||
showSuccessToast(
|
showSuccessToast(
|
||||||
@@ -74,7 +87,9 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
console.log("getRewardsFor", {value, token});
|
console.log("getRewardsFor", {value, token});
|
||||||
const memeburnerStore = useMemeburnerStore();
|
const memeburnerStore = useMemeburnerStore();
|
||||||
const uniswapStore = useUniswapStore();
|
const uniswapStore = useUniswapStore();
|
||||||
const walletStore = useWalletStoreV2();
|
const walletStore = useWalletStoreV2();
|
||||||
|
const rewardLockerStore = useRewardLockerStore();
|
||||||
|
|
||||||
|
|
||||||
let output = 0;
|
let output = 0;
|
||||||
try {
|
try {
|
||||||
@@ -83,12 +98,11 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
const rewardsForResult = await memeburnerStore.getRewardFor(
|
const rewardsForResult = await memeburnerStore.getRewardFor(
|
||||||
BigInt(value * Math.pow(10, token.decimals))
|
BigInt(value * Math.pow(10, token.decimals))
|
||||||
);
|
);
|
||||||
const rewardsForResultNumber = rewardsForResult.reduce((x, y) => {
|
const rewardsForResultNumber = rewardsForResult.reduce((x, y) => {
|
||||||
return x + Number(y) / Math.pow(10, token.decimals);
|
return x + Number(y) / Math.pow(10, token.decimals);
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
var quoteRewards = await uniswapStore.quoteExactInputSingle(value * Math.pow(10, token.decimals));
|
var quoteRewards = await uniswapStore.quoteExactInputSingle(value * Math.pow(10, token.decimals));
|
||||||
let variant = "sacrifice";
|
let variant = "sacrifice";
|
||||||
if (quoteRewards.result) {
|
if (quoteRewards.result) {
|
||||||
@@ -162,8 +176,17 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
output = amountSacrificeNumber;
|
output = amountSacrificeNumber;
|
||||||
console.log("use sacrifice after comparison sacrificeMemeAndBuyBLOOD and sacrificeMeme");
|
console.log("use sacrifice after comparison sacrificeMemeAndBuyBLOOD and sacrificeMeme");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return { output: output, variant: variant };
|
//potential staking rewards
|
||||||
|
let stakingRewardsNumber = 0;
|
||||||
|
if (output > 0) {
|
||||||
|
const stakingReward = await rewardLockerStore.getStakeRewardForSacrificeReward(
|
||||||
|
token.contractAddress,
|
||||||
|
output * Math.pow(10, token.decimals)
|
||||||
|
);
|
||||||
|
stakingRewardsNumber = (Number(stakingReward) / Math.pow(10, token.decimals)).toFixed(2);
|
||||||
|
}
|
||||||
|
return { output: output, variant: variant, staking: stakingRewardsNumber };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("getRewardsFor", error);
|
console.error("getRewardsFor", error);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,16 +134,6 @@ export const useTokenStore = defineStore("token", {
|
|||||||
console.error("initV2", error);
|
console.error("initV2", error);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async changeActiveToken(token) {
|
|
||||||
console.log("changeActiveToken");
|
|
||||||
this.activeToken = token;
|
|
||||||
const walletStore = useWalletStoreV2();
|
|
||||||
if (walletStore.connected) {
|
|
||||||
//TODO, wenn connected, dann all diese Daten laden?
|
|
||||||
this.activeToken.balance = await walletStore.getTokenBalance(token);
|
|
||||||
this.activeToken.allowance = Number(await this.allowance());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
async allowance() {
|
async allowance() {
|
||||||
console.log("allowance");
|
console.log("allowance");
|
||||||
const walletStore = useWalletStoreV2();
|
const walletStore = useWalletStoreV2();
|
||||||
|
|||||||
@@ -119,10 +119,10 @@ export const useWalletStoreV2 = defineStore("walletV2", {
|
|||||||
//MemeToken Staked
|
//MemeToken Staked
|
||||||
const tokenStore = useTokenStore();
|
const tokenStore = useTokenStore();
|
||||||
const staked = await rewardlockerStore.getStaked(this.address);
|
const staked = await rewardlockerStore.getStaked(this.address);
|
||||||
this.memeToken.staked = Number(staked / BigInt(Math.pow(10, tokenStore.memeToken.decimals)));
|
this.memeToken.staked = Number(staked) / Math.pow(10, tokenStore.memeToken.decimals);
|
||||||
const unclaimedRewardsArray = await rewardlockerStore.getTotalRewards(this.address);
|
const unclaimedRewardsArray = await rewardlockerStore.getTotalRewards(this.address);
|
||||||
const unclaimedRewards = unclaimedRewardsArray[0] + unclaimedRewardsArray[1];
|
const unclaimedRewards = unclaimedRewardsArray[0] + unclaimedRewardsArray[1];
|
||||||
this.memeToken.unclaimedRewards = Number(unclaimedRewards/ BigInt(Math.pow(10, tokenStore.memeToken.decimals)))
|
this.memeToken.unclaimedRewards = Number(unclaimedRewards) / Math.pow(10, tokenStore.memeToken.decimals)
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
+29
-17
@@ -22,16 +22,18 @@
|
|||||||
<div class="cycle card card--glow container container--variant1 bloodline-wrapper">
|
<div class="cycle card card--glow container container--variant1 bloodline-wrapper">
|
||||||
<div
|
<div
|
||||||
class="bloodline-border round-finish-info low-mid-text"
|
class="bloodline-border round-finish-info low-mid-text"
|
||||||
v-if="difference > 0 && cycleStore.currentCycle === cycleStore.activeCycle"
|
:class="{ loading: difference <= 0 }"
|
||||||
|
v-if="cycleStore.currentCycle === cycleStore.activeCycle"
|
||||||
>
|
>
|
||||||
<!-- <div class="round-finish-info-element low-mid-text"> -->
|
<template v-if="difference > 0">
|
||||||
<div class="round-finish-info-key">Sacrifice Goal:</div>
|
<div class="round-finish-info-key">Sacrifice Goal:</div>
|
||||||
<div class="round-finish-info-value">{{ cycleStore.getCurrentCycleData?.goalInBLD }} $BDL</div>
|
<div class="round-finish-info-value">{{ cycleStore.getCurrentCycleData?.goalInBLD }} $BDL</div>
|
||||||
<!-- </div> -->
|
<div class="round-finish-info-key">Time left:</div>
|
||||||
<!-- <div class="round-finish-info-element low-mid-text"> -->
|
<div class="round-finish-info-value">{{ days }} {{ hours }} {{ minutes }}</div>
|
||||||
<div class="round-finish-info-key">Time left:</div>
|
</template>
|
||||||
<div class="round-finish-info-value">{{ days }} {{ hours }} {{ minutes }}</div>
|
<template v-else>
|
||||||
<!-- </div> -->
|
<loading-component></loading-component>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<template v-if="cycleStore.currentCycle !== cycleStore.activeCycle">
|
<template v-if="cycleStore.currentCycle !== cycleStore.activeCycle">
|
||||||
<div class="bloodline-border bloodline-border purple cycle-winner" v-if="cycleStore.getCycleWinner">
|
<div class="bloodline-border bloodline-border purple cycle-winner" v-if="cycleStore.getCycleWinner">
|
||||||
@@ -47,15 +49,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bloodline-border bloodline-border__thin grey cycle-winner" v-else>
|
<div class="bloodline-border bloodline-border__thin grey cycle-winner" v-else>
|
||||||
<!-- <loading-component></loading-component> -->
|
<template v-if="cycleStore.getCycleWinner">
|
||||||
<div class="cycle-winner-left">
|
<div class="cycle-winner-left">
|
||||||
<div class="cycle-winner-headline">No Clan Winner</div>
|
<div class="cycle-winner-headline">No Clan Winner</div>
|
||||||
<div class="cycle-winner-subheadline">time limit has been reached</div>
|
<div class="cycle-winner-subheadline">time limit has been reached</div>
|
||||||
</div>
|
|
||||||
<div class="cycle-winner-right">
|
|
||||||
<div class="cycle-winner-logo inactive">
|
|
||||||
<img src="/assets/img/token/bloodline.png" alt="" />
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="cycle-winner-right">
|
||||||
|
<div class="cycle-winner-logo inactive">
|
||||||
|
<img src="/assets/img/token/bloodline.png" alt="" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="cycle-winner-loading" v-else>
|
||||||
|
<loading-component></loading-component>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -83,6 +89,7 @@ import { inject, ref, onMounted, onBeforeUnmount } from "vue";
|
|||||||
import BloodChart from "@/components/BloodChart.vue";
|
import BloodChart from "@/components/BloodChart.vue";
|
||||||
import TokenClaim from "@/components/TokenClaim.vue";
|
import TokenClaim from "@/components/TokenClaim.vue";
|
||||||
import { useMemeburnerStore } from "@/stores/memeburner";
|
import { useMemeburnerStore } from "@/stores/memeburner";
|
||||||
|
import LoadingComponent from "@/components/LoadingComponent.vue";
|
||||||
|
|
||||||
import { useCycleStore } from "@/stores/cycles";
|
import { useCycleStore } from "@/stores/cycles";
|
||||||
import { useRewardLockerStore } from "@/stores/rewardlocker";
|
import { useRewardLockerStore } from "@/stores/rewardlocker";
|
||||||
@@ -278,6 +285,8 @@ function timeBetweenDates(expirationTimestamp) {
|
|||||||
opacity: 0.3
|
opacity: 0.3
|
||||||
.cycle-winner-name
|
.cycle-winner-name
|
||||||
font-size: 16px
|
font-size: 16px
|
||||||
|
.cycle-winner-loading
|
||||||
|
width: 100%
|
||||||
|
|
||||||
|
|
||||||
.bloodline-clan
|
.bloodline-clan
|
||||||
@@ -291,6 +300,9 @@ function timeBetweenDates(expirationTimestamp) {
|
|||||||
display: grid
|
display: grid
|
||||||
grid-template-columns: 1fr 1fr
|
grid-template-columns: 1fr 1fr
|
||||||
text-align: right
|
text-align: right
|
||||||
|
&.loading
|
||||||
|
grid-template-columns: 1fr
|
||||||
|
|
||||||
.round-finish-info-key
|
.round-finish-info-key
|
||||||
text-align: right
|
text-align: right
|
||||||
.round-finish-info-value
|
.round-finish-info-value
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<button @click="mintToken">mint</button>
|
<button @click="mintToken">mint</button>
|
||||||
<button @click="mintToken2">mint2</button>
|
<button @click="mintToken2">mint2</button>
|
||||||
|
<button @click="mintToken3">mint3</button>
|
||||||
<button @click="sacrificeMeme">sacrifice Meme</button>
|
<button @click="sacrificeMeme">sacrifice Meme</button>
|
||||||
<button @click="approveMeme1">approve Meme1</button>
|
<button @click="approveMeme1">approve Meme1</button>
|
||||||
<button @click="tokenStore.approveToken(MemeBurnerJson, 10)">wallet approve</button>
|
<button @click="tokenStore.approveToken(MemeBurnerJson, 10)">wallet approve</button>
|
||||||
@@ -163,6 +164,19 @@ async function mintToken2() {
|
|||||||
// var totalSupply = await contract.methods.totalSupply().call();
|
// var totalSupply = await contract.methods.totalSupply().call();
|
||||||
// console.log("totalSupply", totalSupply);
|
// console.log("totalSupply", totalSupply);
|
||||||
}
|
}
|
||||||
|
async function mintToken3() {
|
||||||
|
try {
|
||||||
|
var mint = await tokenStore.token[2].contract.write.mint(["100000000000000000000000"]);
|
||||||
|
// .send({ from: web3.value.eth.Contract.defaultAccount });
|
||||||
|
console.log("mint", mint);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
// var balanceOf = await contract.methods.balanceOf("0x66422602B2f4885c57EE794174f98d9E4DDBBBC6").call();
|
||||||
|
// console.log("balanceOf", balanceOf);
|
||||||
|
// var totalSupply = await contract.methods.totalSupply().call();
|
||||||
|
// console.log("totalSupply", totalSupply);
|
||||||
|
}
|
||||||
|
|
||||||
async function fetchBalance() {
|
async function fetchBalance() {
|
||||||
var result = await walletV2Store.fetchBalance();
|
var result = await walletV2Store.fetchBalance();
|
||||||
|
|||||||
Reference in New Issue
Block a user