update bigint + smaller style issues fixes
This commit is contained in:
@@ -260,4 +260,10 @@ body:hover::-webkit-scrollbar-thumb
|
||||
|
||||
.toast-header, .toast-body
|
||||
font-size: 16px
|
||||
|
||||
.Vue-Toastification__container
|
||||
&.bloodline-toast-container
|
||||
&.top-right
|
||||
@media (min-width: 992px)
|
||||
top: 100px
|
||||
</style>
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -4,12 +4,12 @@
|
||||
<template v-slot:body>
|
||||
<token-name-price
|
||||
:name="tokenStore.getToken(walletStore.memeToken?.contractAddress)?.name"
|
||||
:price="walletStore.memeToken?.unclaimedRewards / 10n ** tokenStore.memeToken.decimals"
|
||||
:price="formatNumber(walletStore.unclaimedRewards)"
|
||||
></token-name-price>
|
||||
<token-logo img="/assets/img/token/bloodline.png" :alt="'bloodline logo'"></token-logo>
|
||||
</template>
|
||||
<template v-slot:actions>
|
||||
<template v-if="walletStore.memeToken?.unclaimedRewards > 0">
|
||||
<template v-if="walletStore.unclaimedRewards > 0">
|
||||
<Transition name="smooth">
|
||||
<div class="connected-stake-buttons" v-show="!stakeMenu">
|
||||
<div class="btn btn-immortal mid-mid-text" @click="claimAll" v-if="stateStake === 0">Claim</div>
|
||||
@@ -26,9 +26,9 @@
|
||||
<stake-menu
|
||||
v-model="tokenNumber"
|
||||
@close="stakeMenu = false"
|
||||
:amount="walletStore.memeToken?.unclaimedRewards"
|
||||
:amount="walletStore.unclaimedRewards"
|
||||
:stake="stake"
|
||||
v-if="stakeMenu && walletStore.memeToken?.unclaimedRewards"
|
||||
v-if="stakeMenu"
|
||||
>
|
||||
<template v-slot:body>
|
||||
<div class="btn btn-immortal stake-button" disabled v-if="stateClaimComp === 0">
|
||||
@@ -55,13 +55,9 @@
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:message-end>
|
||||
<div class="input-balance" v-if="walletStore.memeToken?.unclaimedRewards">
|
||||
<div class="input-balance">
|
||||
Balance:
|
||||
{{
|
||||
formatNumber(
|
||||
walletStore.memeToken?.unclaimedRewards / 10n ** tokenStore.memeToken.decimals
|
||||
)
|
||||
}}
|
||||
{{ formatNumber(walletStore.unclaimedRewards) }}
|
||||
</div>
|
||||
</template>
|
||||
</stake-menu>
|
||||
|
||||
@@ -358,8 +358,8 @@ 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);
|
||||
// //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);
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
v-model="tokenNumber"
|
||||
@close="stakeMenu = false"
|
||||
:stake="stake"
|
||||
:amount="walletStore.memeToken?.balanceOf"
|
||||
:amount="balanceOf"
|
||||
v-if="stakeMenu & !unstakeMenu"
|
||||
>
|
||||
<template v-slot:body>
|
||||
@@ -104,9 +104,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<template v-slot:message-end>
|
||||
<div class="input-balance">
|
||||
Balance: {{ walletStore.memeToken?.balanceOf / 10n ** tokenStore.memeToken.decimals }}
|
||||
</div>
|
||||
<div class="input-balance">Balance: {{ formatNumber(balanceOf) }}</div>
|
||||
</template>
|
||||
</stake-menu>
|
||||
<div class="unstake-menu" v-else-if="stakeMenu & unstakeMenu">
|
||||
@@ -136,6 +134,9 @@
|
||||
<div class="connected-stake-first-round small-text text-center" v-if="cycleStore.currentCycle === 0">
|
||||
No $BLOOD on the market. Staking is activated after the first cycle is finished.
|
||||
</div>
|
||||
<div class="connected-stake-first-round small-text text-center" v-else>
|
||||
You can claim your stake next cycle
|
||||
</div>
|
||||
</slot>
|
||||
<slot></slot>
|
||||
</div>
|
||||
@@ -276,6 +277,14 @@ async function stakeToken() {
|
||||
}
|
||||
}
|
||||
|
||||
const balanceOf = computed(() => {
|
||||
if (!walletStore.memeToken?.balanceOf) {
|
||||
return 0n;
|
||||
} else {
|
||||
return walletStore.memeToken?.balanceOf / 10n ** tokenStore.memeToken.decimals;
|
||||
}
|
||||
});
|
||||
|
||||
const stateStake = computed(() => {
|
||||
let returnState = 0;
|
||||
if (state.value === 2) {
|
||||
|
||||
@@ -39,8 +39,8 @@ const tokenStore = useTokenStore();
|
||||
|
||||
const props = defineProps({
|
||||
stake: Boolean,
|
||||
modelValue: Number,
|
||||
amount: Number,
|
||||
modelValue: [Number, BigInt],
|
||||
amount: [Number, BigInt],
|
||||
});
|
||||
|
||||
const emit = defineEmits(["close", "update:modelValue"]);
|
||||
@@ -48,15 +48,14 @@ const emit = defineEmits(["close", "update:modelValue"]);
|
||||
async function addTokensPercent(value) {
|
||||
console.log("value", value);
|
||||
console.log("props.amount", props.amount);
|
||||
console.log(walletStore.memeToken.balanceOf / 10n ** tokenStore.memeToken.decimals);
|
||||
let amount;
|
||||
if (props.amount !== undefined || props.amount !== null) {
|
||||
console.log("props.amount", props.amount);
|
||||
amount = ((props.amount / 10n ** tokenStore.memeToken.decimals) * value) / 100n;
|
||||
amount = (props.amount * value) / 100n;
|
||||
} else if (props.stake) {
|
||||
amount = ((walletStore.memeToken.balanceOf / 10n ** tokenStore.memeToken.decimals) * value) / 100n;
|
||||
amount = (walletStore.memeToken.balanceOf * value) / 100n;
|
||||
} else {
|
||||
amount = ((walletStore.memeToken.staked / 10n ** tokenStore.memeToken.decimals) * value) / 100n;
|
||||
amount = (walletStore.memeToken.staked * value) / 100n;
|
||||
}
|
||||
console.log("amount", amount);
|
||||
emit("update:modelValue", Number(amount));
|
||||
|
||||
@@ -21,36 +21,31 @@
|
||||
</div> -->
|
||||
<div class="rewards-list">
|
||||
<rewards-wrapper
|
||||
v-if="getCurrentCycleData?.rewards_sacrifice !== undefined"
|
||||
title="Sacrafice Reward"
|
||||
coin="$BLOOD"
|
||||
:amount="formatNumber(getCurrentCycleData?.rewards_sacrifice / 10n ** tokenStore.memeToken.decimals)"
|
||||
:amount="formatNumber(rewardsSacrifice)"
|
||||
image="/assets/img/vampir.png"
|
||||
/>
|
||||
<rewards-wrapper
|
||||
v-if="getCurrentCycleData?.rewards_staking !== undefined"
|
||||
title="Staking Bonus"
|
||||
coin="$BLOOD"
|
||||
:amount="formatNumber(getCurrentCycleData?.rewards_staking / 10n ** tokenStore.memeToken.decimals)"
|
||||
info="max: 312m"
|
||||
:amount="formatNumber(rewardsStaking)"
|
||||
image="/assets/img/vampir.png"
|
||||
/>
|
||||
<rewards-wrapper
|
||||
v-if="getCurrentCycleData?.rewards_clan !== undefined"
|
||||
title="Clan Bonus"
|
||||
coin="$BLOOD"
|
||||
:amount="formatNumber(getCurrentCycleData?.rewards_clan / 10n ** tokenStore.memeToken.decimals)"
|
||||
:amount="formatNumber(rewardsClan)"
|
||||
image="/assets/img/vampir.png"
|
||||
/>
|
||||
</div>
|
||||
<div class="rewards-total-wrapper">
|
||||
<div class="rewards-total-headline sub-header">Total Reward</div>
|
||||
<div class="rewards-total-inner bloodline-border bloodline-border--variant1">
|
||||
<token-name-price
|
||||
v-if="getCurrentCycleData?.rewards_total !== undefined"
|
||||
name="$BLOOD"
|
||||
:price="formatNumber(getCurrentCycleData?.rewards_total / 10n ** tokenStore.memeToken.decimals)"
|
||||
></token-name-price>
|
||||
<div
|
||||
class="rewards-total-inner bloodline-border bloodline-border--variant1"
|
||||
:class="{ purple: rewardsTotal > 0 && activeCycle !== currentCycle }"
|
||||
>
|
||||
<token-name-price name="$BLOOD" :price="formatNumber(rewardsTotal)"></token-name-price>
|
||||
<token-logo img="/assets/img/vampir.png" :alt="'vampire'"></token-logo>
|
||||
</div>
|
||||
</div>
|
||||
@@ -61,7 +56,7 @@
|
||||
<template v-else-if="activeCycle === currentCycle">
|
||||
<button class="btn btn-immortal sub-header" @click="router.push({ name: 'home' })">Sacrifice</button>
|
||||
</template>
|
||||
<template v-else-if="getCurrentCycleData?.rewards_total > 0">
|
||||
<template v-else-if="rewardsTotal > 0">
|
||||
<Transition name="smooth">
|
||||
<div class="stake-buttons" v-show="!stakeMenu">
|
||||
<div class="btn btn-immortal" v-if="stateClaimedComp === 0" @click="claimRewards">Claim</div>
|
||||
@@ -77,7 +72,7 @@
|
||||
v-model="tokenNumber"
|
||||
@close="stakeMenu = false"
|
||||
:stake="stake"
|
||||
:amount="getCurrentCycleData?.rewards_total"
|
||||
:amount="rewardsTotal"
|
||||
v-if="stakeMenu"
|
||||
>
|
||||
<template v-slot:body>
|
||||
@@ -139,7 +134,8 @@ const tokenStore = useTokenStore();
|
||||
const cycleStore = useCycleStore();
|
||||
const router = useRouter();
|
||||
|
||||
const { activeCycle, currentCycle, getCurrentCycleData } = storeToRefs(cycleStore);
|
||||
const { activeCycle, currentCycle, getCurrentCycleData, rewardsSacrifice, rewardsStaking, rewardsClan, rewardsTotal } =
|
||||
storeToRefs(cycleStore);
|
||||
|
||||
const stakeMenu = ref(false);
|
||||
const stake = ref(null);
|
||||
@@ -149,13 +145,16 @@ const stateStakeClaim = ref(0);
|
||||
|
||||
async function stakeAndClaim() {
|
||||
try {
|
||||
console.log("stakeAndClaim");
|
||||
console.log(tokenNumber.value);
|
||||
console.log(getCurrentCycleData.value.rewards_total);
|
||||
const coefficient = (10000 * tokenNumber.value) / getCurrentCycleData.value.rewards_total;
|
||||
console.log(rewardsTotal.value);
|
||||
stateStakeClaim.value = 2;
|
||||
console.log("hier1");
|
||||
const coefficient = (10000n * BigInt(tokenNumber.value)) / rewardsTotal.value;
|
||||
var hash = await rewardLockerStore.stakeAndClaimCycle(coefficient, cycleStore.activeCycle);
|
||||
console.log("hash");
|
||||
console.log("hier2");
|
||||
stateStakeClaim.value = 3;
|
||||
console.log("hash");
|
||||
const data = await waitForTransaction({
|
||||
hash: hash,
|
||||
});
|
||||
@@ -176,8 +175,8 @@ async function stakeAndClaim() {
|
||||
//
|
||||
console.log("rewardData", rewardData);
|
||||
console.log("stakeData", stakeData);
|
||||
const outputClaim = Number(rewardData?.topics[2]) / 10 ** tokenStore.memeToken.decimals;
|
||||
const outputStaked = Number(stakeData?.topics[3]) / 10 ** tokenStore.memeToken.decimals;
|
||||
const outputClaim = BigInt(rewardData?.topics[2]) / 10n ** tokenStore.memeToken.decimals;
|
||||
const outputStaked = BigInt(stakeData?.topics[3]) / 10n ** tokenStore.memeToken.decimals;
|
||||
showSuccessToast(
|
||||
formatNumber(outputClaim + outputStaked),
|
||||
"Success!",
|
||||
@@ -186,13 +185,15 @@ async function stakeAndClaim() {
|
||||
);
|
||||
tokenNumber.value = 0;
|
||||
stakeMenu.value = false;
|
||||
await cycleStore.fillCycle(activeCycle.value, true);
|
||||
await walletStore.loadWalletData();
|
||||
} catch (error) {
|
||||
console.error("stakeAndClaim", error);
|
||||
} finally {
|
||||
const walletStore = useWalletStoreV2();
|
||||
await walletStore.loadWalletData();
|
||||
console.log("finally1");
|
||||
await cycleStore.fillCycle(activeCycle.value, true);
|
||||
console.log("finally2");
|
||||
stateStakeClaim.value = 1;
|
||||
}
|
||||
}
|
||||
@@ -254,19 +255,19 @@ const stateClaimedComp = computed(() => {
|
||||
const stateStakeClaimComp = computed(() => {
|
||||
console.log("stateStakeClaimComp");
|
||||
let returnState = 0;
|
||||
if (
|
||||
tokenNumber.value === null ||
|
||||
tokenNumber.value === "" ||
|
||||
tokenNumber.value === 0 ||
|
||||
tokenNumber.value > walletStore.memeToken?.unclaimedRewards
|
||||
) {
|
||||
returnState = 0;
|
||||
} else if (stateStakeClaim.value === 2) {
|
||||
if (stateStakeClaim.value === 2) {
|
||||
returnState = 2;
|
||||
} else if (stateStakeClaim.value === 3) {
|
||||
returnState = 3;
|
||||
} else if (tokenNumber.value !== null || tokenNumber.value !== "" || tokenNumber.value > 0) {
|
||||
returnState = 1;
|
||||
} else if (
|
||||
tokenNumber.value === null ||
|
||||
tokenNumber.value === "" ||
|
||||
tokenNumber.value === 0 ||
|
||||
tokenNumber.value > walletStore.unclaimedRewards
|
||||
) {
|
||||
returnState = 0;
|
||||
}
|
||||
return returnState;
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="right-side">
|
||||
<token-logo :img="props.logo" :alt="'vampir'"></token-logo>
|
||||
<token-logo img="/assets/img/vampir.png" :alt="'vampir'"></token-logo>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+3
-2
@@ -91,6 +91,7 @@ app.use(pinia);
|
||||
|
||||
app.use(Toast, {
|
||||
transition: "Vue-Toastification__fade",
|
||||
containerClassName: "bloodline-toast-container",
|
||||
});
|
||||
|
||||
|
||||
@@ -164,9 +165,9 @@ try {
|
||||
},
|
||||
async (log) => {
|
||||
console.log("CycleCompleted", log);
|
||||
await cycleStore.fillCycle(cycleStore.currentCycle);
|
||||
await cycleStore.fillCycle(cycleStore.currentCycle, true);
|
||||
cycleStore.currentCycle++;
|
||||
await cycleStore.fillCycle(cycleStore.currentCycle);
|
||||
await cycleStore.fillCycle(cycleStore.currentCycle, true);
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
+71
-47
@@ -12,9 +12,9 @@ export const useCycleStore = defineStore("cycles", {
|
||||
activeCycle: null,
|
||||
currentCycle: null,
|
||||
}),
|
||||
getters: {
|
||||
//cycle winner is the token who reached the goal
|
||||
//todo winner is now in the cycle object, no reason for that function anymore
|
||||
getters: {
|
||||
//cycle winner is the token who reached the goal
|
||||
//todo winner is now in the cycle object, no reason for that function anymore
|
||||
getCycleWinner() {
|
||||
const goal = this.getCurrentCycleData?.goal;
|
||||
if (!goal) {
|
||||
@@ -30,9 +30,37 @@ export const useCycleStore = defineStore("cycles", {
|
||||
getCurrentCycleData() {
|
||||
return this.cycles[this.activeCycle];
|
||||
},
|
||||
rewardsSacrifice() {
|
||||
const tokenStore = useTokenStore();
|
||||
if (!this.cycles[this.activeCycle]?.rewards_sacrifice) {
|
||||
return 0n;
|
||||
}
|
||||
return this.cycles[this.activeCycle]?.rewards_sacrifice / 10n ** tokenStore.memeToken.decimals;
|
||||
},
|
||||
rewardsStaking() {
|
||||
const tokenStore = useTokenStore();
|
||||
if (!this.cycles[this.activeCycle]?.rewards_staking) {
|
||||
return 0n;
|
||||
}
|
||||
return this.cycles[this.activeCycle]?.rewards_staking / 10n ** tokenStore.memeToken.decimals;
|
||||
},
|
||||
rewardsClan() {
|
||||
const tokenStore = useTokenStore();
|
||||
if (!this.cycles[this.activeCycle]?.rewards_clan) {
|
||||
return 0n;
|
||||
}
|
||||
return this.cycles[this.activeCycle]?.rewards_clan / 10n ** tokenStore.memeToken.decimals;
|
||||
},
|
||||
rewardsTotal() {
|
||||
const tokenStore = useTokenStore();
|
||||
if (!this.cycles[this.activeCycle]?.rewards_total) {
|
||||
return 0n;
|
||||
}
|
||||
return this.cycles[this.activeCycle]?.rewards_total / 10n ** tokenStore.memeToken.decimals;
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
//todo check if still needed
|
||||
//todo check if still needed
|
||||
// async loadRewardsCycles() {
|
||||
// const walletStore = useWalletStoreV2();
|
||||
// const rewardLockerStore = useRewardLockerStore();
|
||||
@@ -56,29 +84,27 @@ export const useCycleStore = defineStore("cycles", {
|
||||
// const element = data[index];
|
||||
// if (!this.cycles[index]) {
|
||||
// this.cycles[index] = {};
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
//todo check if needed, or use fillcycle
|
||||
async updateCurrentCycle(sacrificedToken) {
|
||||
console.log("updateCurrentCycle");
|
||||
//todo check if needed, or use fillcycle
|
||||
async updateCurrentCycle(sacrificedToken) {
|
||||
console.log("updateCurrentCycle");
|
||||
const memeBurnerStore = useMemeburnerStore();
|
||||
var data = await memeBurnerStore.getSacrificedCycle(this.currentCycle);
|
||||
console.log("this.currentCycle", this.currentCycle);
|
||||
console.log("this.cycles", this.cycles);
|
||||
if (this.cycles[this.currentCycle]) {
|
||||
var tokenIndex = this.cycles[this.currentCycle].token.findIndex(
|
||||
var data = await memeBurnerStore.getSacrificedCycle(this.currentCycle);
|
||||
console.log("this.currentCycle", this.currentCycle);
|
||||
console.log("this.cycles", this.cycles);
|
||||
if (this.cycles[this.currentCycle]) {
|
||||
var tokenIndex = this.cycles[this.currentCycle].token.findIndex(
|
||||
(tokenData) => tokenData.contractAddress === sacrificedToken
|
||||
);
|
||||
this.cycles[this.currentCycle].token[tokenIndex].amount =
|
||||
data[tokenIndex].result[1];
|
||||
}
|
||||
|
||||
},
|
||||
/**
|
||||
* main function to fill a round, will not be filled when already loaded
|
||||
* you can use the refillcycle to overwrite information, because if you claim or stake the values will change
|
||||
*/
|
||||
this.cycles[this.currentCycle].token[tokenIndex].amount = data[tokenIndex].result[1];
|
||||
}
|
||||
},
|
||||
/**
|
||||
* main function to fill a round, will not be filled when already loaded
|
||||
* you can use the refillcycle to overwrite information, because if you claim or stake the values will change
|
||||
*/
|
||||
async fillCycle(cycleNumber, refillCycle = false) {
|
||||
console.log("fillCycle", cycleNumber);
|
||||
const memeBurnerStore = useMemeburnerStore();
|
||||
@@ -97,22 +123,22 @@ export const useCycleStore = defineStore("cycles", {
|
||||
rewardData = await rewardLockerStore.getRewardsForAllToken(cycleNumber);
|
||||
}
|
||||
|
||||
console.log("hier");
|
||||
console.log("hier");
|
||||
//getTotalSacrificeRewardsForToken multicall for all tokens
|
||||
const tokenTotalSacrificed = await rewardLockerStore.getTotalSacrificeRewardsForAllToken(cycleNumber);
|
||||
console.log("hier1");
|
||||
console.log("hier1");
|
||||
var goal = await memeBurnerStore.getGoal(cycleNumber);
|
||||
console.log("hier123");
|
||||
console.log("hier123");
|
||||
var tokenArray = [];
|
||||
var rewards_clan = 0n;
|
||||
var rewards_sacrifice = 0n;
|
||||
var rewards_staking = 0n;
|
||||
|
||||
console.log("hier123");
|
||||
|
||||
console.log("hier123");
|
||||
for (let index = 0; index < data.length; index++) {
|
||||
var tokenData = {};
|
||||
const token = tokenStore.token[index];
|
||||
//why no multicall? todo
|
||||
const token = tokenStore.token[index];
|
||||
//why no multicall? todo
|
||||
var coefficent = await rewardLockerStore.getSacrificedTokenCoefficient(
|
||||
cycleNumber,
|
||||
token.contractAddress
|
||||
@@ -124,11 +150,11 @@ export const useCycleStore = defineStore("cycles", {
|
||||
tokenData.vampwinner = token.vamp.winner;
|
||||
tokenData.vampwinner2 = token.vamp.winner2;
|
||||
tokenData.vampname = token.vamp.name;
|
||||
tokenData.amount = data[index].result[1]
|
||||
tokenData.amountInBLD = tokenTotalSacrificed[index].result
|
||||
tokenData.amount = data[index].result[1];
|
||||
tokenData.amountInBLD = tokenTotalSacrificed[index].result;
|
||||
|
||||
if (walletStore.connected) {
|
||||
//if user is connected fill user specific data for the token
|
||||
if (walletStore.connected) {
|
||||
//if user is connected fill user specific data for the token
|
||||
const sacrificeClanReward = rewardData[index].result[1];
|
||||
let clanwin = 0n;
|
||||
if (cycleNumber !== this.currentCycle) {
|
||||
@@ -137,18 +163,16 @@ export const useCycleStore = defineStore("cycles", {
|
||||
}
|
||||
const sacrificeRewards = sacrificeClanReward;
|
||||
|
||||
tokenData.rewards_ges =
|
||||
rewardData[index].result[1] +
|
||||
rewardData[index].result[0]
|
||||
tokenData.rewards_ges = rewardData[index].result[1] + rewardData[index].result[0];
|
||||
|
||||
tokenData.rewards_clan = clanwin
|
||||
tokenData.rewards_clan = clanwin;
|
||||
|
||||
tokenData.rewards_staking = rewardData[index].result[0]
|
||||
tokenData.rewards_sacrifice = sacrificeRewards
|
||||
tokenData.rewards_staking = rewardData[index].result[0];
|
||||
tokenData.rewards_sacrifice = sacrificeRewards;
|
||||
|
||||
console.log("rewards_clan", rewards_clan);
|
||||
console.log("tokenData.rewards_clan", tokenData.rewards_clan);
|
||||
console.log("tokenData.rewards_sacrifice", tokenData.rewards_sacrifice);
|
||||
console.log("rewards_clan", rewards_clan);
|
||||
console.log("tokenData.rewards_clan", tokenData.rewards_clan);
|
||||
console.log("tokenData.rewards_sacrifice", tokenData.rewards_sacrifice);
|
||||
rewards_clan = rewards_clan + tokenData.rewards_clan;
|
||||
rewards_sacrifice = rewards_sacrifice + tokenData.rewards_sacrifice;
|
||||
rewards_staking = rewards_staking + tokenData.rewards_staking;
|
||||
@@ -156,10 +180,10 @@ export const useCycleStore = defineStore("cycles", {
|
||||
tokenArray.push(tokenData);
|
||||
}
|
||||
|
||||
const goalDecimal = goal[0]
|
||||
const goalDecimal = goal[0];
|
||||
const winner = tokenArray.find((token) => token.amount === goalDecimal);
|
||||
const goalInBLD = await memeBurnerStore.getGoalInBLOOD(cycleNumber);
|
||||
//replace vamplogo cause it will automatically change the token for the cycle view (new design)
|
||||
const goalInBLD = await memeBurnerStore.getGoalInBLOOD(cycleNumber);
|
||||
//replace vamplogo cause it will automatically change the token for the cycle view (new design)
|
||||
if (winner) {
|
||||
winner.vamplogo = winner.vampwinner;
|
||||
}
|
||||
@@ -183,10 +207,10 @@ export const useCycleStore = defineStore("cycles", {
|
||||
async getFinshedCycleNumbers() {
|
||||
const array = [];
|
||||
const rewardLockerStore = useRewardLockerStore();
|
||||
const lastCompletedCycle = await rewardLockerStore.lastCompletedCycle();
|
||||
const lastCompletedCycle = await rewardLockerStore.lastCompletedCycle();
|
||||
for (let index = 0; index <= Number(lastCompletedCycle); index++) {
|
||||
array.push(index);
|
||||
}
|
||||
}
|
||||
return array;
|
||||
},
|
||||
},
|
||||
|
||||
@@ -81,12 +81,10 @@ export const useMemeburnerStore = defineStore("memeburner", {
|
||||
}
|
||||
this.loading = true;
|
||||
|
||||
// TODO: store all integer values as one type: BigInt
|
||||
const amountDecimal = BigInt(amount) * 10n ** BigInt(tokenStore.activeToken.decimals);
|
||||
var hash = await this.contract.write.sacrificeMeme([
|
||||
tokenStore.activeToken.contractAddress,
|
||||
amountDecimal.toString(),
|
||||
minETH.toString()
|
||||
amount,
|
||||
minETH
|
||||
]);
|
||||
return hash;
|
||||
} catch (error) {
|
||||
|
||||
@@ -160,9 +160,6 @@ export const useRewardLockerStore = defineStore("rewardlocker", {
|
||||
const tokenStore = useTokenStore();
|
||||
const addresses = tokenStore.sacrificeToken.map((obj) => obj.contractAddress);
|
||||
const hash = await this.contract.write.stakeAndClaim([stakeCoefficient, [cycle], addresses]);
|
||||
const data = await waitForTransaction({
|
||||
hash: hash,
|
||||
});
|
||||
return hash;
|
||||
},
|
||||
async stakeAndClaimAllCycles(stakeCoefficient) {
|
||||
|
||||
+18
-18
@@ -28,8 +28,10 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
||||
|
||||
|
||||
try {
|
||||
this.sacrificeState = 2;
|
||||
this.sacrificeState = 2;
|
||||
console.log("hier");
|
||||
const getRewards = await this.getRewardsFor(amount, token);
|
||||
console.log("hier1");
|
||||
console.log("getRewards", getRewards);
|
||||
let hash = null;
|
||||
if (getRewards.variant === "sacrifice") {
|
||||
@@ -86,31 +88,30 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
||||
this.sacrificeState = 0;
|
||||
}
|
||||
},
|
||||
async getRewardsFor(value, token) {
|
||||
console.log("getRewardsFor", {value, token});
|
||||
async getRewardsFor(amount, token) {
|
||||
console.log("getRewardsFor", {amount, token});
|
||||
const memeburnerStore = useMemeburnerStore();
|
||||
const uniswapStore = useUniswapStore();
|
||||
const walletStore = useWalletStoreV2();
|
||||
const rewardLockerStore = useRewardLockerStore();
|
||||
// what is value here? i thought amount and value are same
|
||||
const amountDecimal = BigInt(value) * 10n ** BigInt(token.decimals == undefined ? 18n : token.decimals);
|
||||
let output = 0;
|
||||
const amountETHBase = await memeburnerStore.getAmountETHBase(amountDecimal);
|
||||
// take 99.5% of amount ETH got for selling meme, 0.5% allowed slippage
|
||||
const minETH = amountETHBase[1] * 995n / 1000n;
|
||||
|
||||
let minBLOOD;
|
||||
|
||||
try {
|
||||
if (!value || isNaN(value)) {
|
||||
try {
|
||||
|
||||
if (!amount) {
|
||||
this.sacrificeState = 0;
|
||||
return output;
|
||||
}
|
||||
}
|
||||
const amountETHBase = await memeburnerStore.getAmountETHBase(amount);
|
||||
// take 99.5% of amount ETH got for selling meme, 0.5% allowed slippage
|
||||
const minETH = (amountETHBase[1] * 995n) / 1000n;
|
||||
|
||||
const rewardsForResult = await memeburnerStore.getRewardFor(amountDecimal);
|
||||
const rewardsForResult = await memeburnerStore.getRewardFor(amount);
|
||||
const rewardsForResultSum = rewardsForResult[0] + rewardsForResult[1];
|
||||
// quote blood amount against ETH base amount
|
||||
var quoteRewards = await uniswapStore.quoteExactInputSingle(amountDecimal, amountETHBase[0]);
|
||||
var quoteRewards = await uniswapStore.quoteExactInputSingle(amount, amountETHBase[0]);
|
||||
|
||||
let variant = "sacrifice";
|
||||
if (quoteRewards.result) {
|
||||
@@ -138,9 +139,8 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
||||
output = rewardsForResultSum;
|
||||
}
|
||||
console.log("variant", variant);
|
||||
console.log("amountDecimal", amountDecimal);
|
||||
// TODO: when token.allowance become BigInt with decimals, value must be amountDecimal
|
||||
if (!walletStore.connected || (walletStore.connected && token.allowance < value)) {
|
||||
console.log("amount", amount);
|
||||
if (!walletStore.connected || (walletStore.connected && token.allowance < amount)) {
|
||||
/**
|
||||
* case 1
|
||||
* user is not logged in or Allowance is less than Input, then I show getRewardsForSacrifice Value
|
||||
@@ -166,7 +166,7 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
||||
address: memeburnerStore.contract.address,
|
||||
abi: memeburnerStore.contract.abi,
|
||||
functionName: "sacrificeMeme",
|
||||
args: [token.contractAddress, amountDecimal.toString(), minETH.toString()],
|
||||
args: [token.contractAddress, amount.toString(), minETH.toString()],
|
||||
account: walletStore.address,
|
||||
});
|
||||
|
||||
@@ -174,7 +174,7 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
||||
address: memeburnerStore.contract.address,
|
||||
abi: memeburnerStore.contract.abi,
|
||||
functionName: "sacrificeMemeAndBuyBLOOD",
|
||||
args: [token.contractAddress, amountDecimal.toString(), minBLOOD.toString()],
|
||||
args: [token.contractAddress, amount.toString(), minBLOOD.toString()],
|
||||
account: walletStore.address,
|
||||
});
|
||||
|
||||
|
||||
@@ -121,7 +121,8 @@ export const useTokenStore = defineStore("token", {
|
||||
// abi: Meme5Json.abi,
|
||||
// contractAddress: Meme5Json.contractAddress,
|
||||
// },
|
||||
{
|
||||
{
|
||||
name: "$BLOOD",
|
||||
abi: BloodlineJson.abi,
|
||||
contractAddress: BloodlineJson.contractAddress,
|
||||
logo: "/assets/img/token/bloodline.png",
|
||||
@@ -161,16 +162,16 @@ export const useTokenStore = defineStore("token", {
|
||||
});
|
||||
|
||||
contracts.push({ ...token.contract, functionName: "decimals" });
|
||||
contracts.push({ ...token.contract, functionName: "name" });
|
||||
// contracts.push({ ...token.contract, functionName: "name" });
|
||||
contracts.push({ ...token.contract, functionName: "symbol" });
|
||||
contracts.push({ ...token.contract, functionName: "totalSupply" });
|
||||
const data = await multicall({
|
||||
contracts,
|
||||
});
|
||||
token.decimals = BigInt(data[0].result);
|
||||
token.name = data[1].result;
|
||||
token.symbol = data[2].result;
|
||||
token.totalSupply = data[3].result;
|
||||
// token.name = data[1].result;
|
||||
token.symbol = data[1].result;
|
||||
token.totalSupply = data[2].result;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("initV2", error);
|
||||
|
||||
+49
-42
@@ -38,35 +38,43 @@ export const useWalletStoreV2 = defineStore("walletV2", {
|
||||
walletClient: null,
|
||||
config: null,
|
||||
chain: null,
|
||||
token: [],
|
||||
token: [],
|
||||
}),
|
||||
getters: {
|
||||
sacrificeToken: (state) => state.token.filter((obj) => {
|
||||
const tokenStore = useTokenStore();
|
||||
|
||||
return obj.contractAddress !== tokenStore.memeToken.contractAddress;
|
||||
}),
|
||||
memeToken: (state) => state.token.find((obj) => {
|
||||
const tokenStore = useTokenStore();
|
||||
|
||||
return obj.contractAddress === tokenStore.memeToken.contractAddress;
|
||||
}),
|
||||
sacrificeToken: (state) =>
|
||||
state.token.filter((obj) => {
|
||||
const tokenStore = useTokenStore();
|
||||
|
||||
return obj.contractAddress !== tokenStore.memeToken.contractAddress;
|
||||
}),
|
||||
memeToken: (state) =>
|
||||
state.token.find((obj) => {
|
||||
const tokenStore = useTokenStore();
|
||||
|
||||
return obj.contractAddress === tokenStore.memeToken.contractAddress;
|
||||
}),
|
||||
unclaimedRewards() {
|
||||
const tokenStore = useTokenStore();
|
||||
if (!this.memeToken?.unclaimedRewards) {
|
||||
return 0n;
|
||||
}
|
||||
return this.memeToken.unclaimedRewards / 10n ** tokenStore.memeToken.decimals;
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
async init() {
|
||||
console.log("wallet init");
|
||||
|
||||
const account = getAccount();
|
||||
|
||||
if (account.address) {
|
||||
this.address = account.address;
|
||||
this.connected = true;
|
||||
}
|
||||
|
||||
const account = getAccount();
|
||||
|
||||
if (account.address) {
|
||||
this.address = account.address;
|
||||
this.connected = true;
|
||||
}
|
||||
},
|
||||
async connectWallet(connector) {
|
||||
try {
|
||||
console.log("connector.name", connector.name);
|
||||
console.log("connector.name", connector.name);
|
||||
// if (!account.isConnected) {
|
||||
const connection = await connect({
|
||||
chainId: goerli.id,
|
||||
@@ -74,12 +82,12 @@ export const useWalletStoreV2 = defineStore("walletV2", {
|
||||
});
|
||||
|
||||
console.log("connection", connection);
|
||||
} catch (error) {
|
||||
if (error.message.includes("Connector not found")) {
|
||||
} catch (error) {
|
||||
if (error.message.includes("Connector not found")) {
|
||||
console.warn("Connector not found");
|
||||
}
|
||||
console.error(error);
|
||||
}
|
||||
console.error(error);
|
||||
}
|
||||
// this.address = connection.account;
|
||||
},
|
||||
async getTokenBalance(token) {
|
||||
@@ -87,8 +95,8 @@ export const useWalletStoreV2 = defineStore("walletV2", {
|
||||
return result;
|
||||
},
|
||||
async getTokenBalances() {
|
||||
console.log("getTokenBalances");
|
||||
this.token = []
|
||||
console.log("getTokenBalances");
|
||||
this.token = [];
|
||||
const tokenStore = useTokenStore();
|
||||
var contracts = [];
|
||||
for (let index = 0; index < tokenStore.token.length; index++) {
|
||||
@@ -100,29 +108,28 @@ export const useWalletStoreV2 = defineStore("walletV2", {
|
||||
contracts,
|
||||
});
|
||||
for (let index = 0; index < tokenStore.token.length; index++) {
|
||||
const token = tokenStore.token[index];
|
||||
const token = tokenStore.token[index];
|
||||
this.token.push({
|
||||
contractAddress: token.contractAddress,
|
||||
balanceOf: data[index].result
|
||||
balanceOf: data[index].result,
|
||||
});
|
||||
}
|
||||
},
|
||||
async loadWalletData() {
|
||||
if (!this.connected) {
|
||||
return
|
||||
}
|
||||
console.log("loadWalletData");
|
||||
},
|
||||
async loadWalletData() {
|
||||
if (!this.connected) {
|
||||
return;
|
||||
}
|
||||
console.log("loadWalletData");
|
||||
const rewardlockerStore = useRewardLockerStore();
|
||||
|
||||
await this.getTokenBalances();
|
||||
//MemeToken Staked
|
||||
const tokenStore = useTokenStore();
|
||||
this.memeToken.staked = await rewardlockerStore.getStaked(this.address);
|
||||
const unclaimedRewardsArray = await rewardlockerStore.getTotalRewards(this.address);
|
||||
const unclaimedRewards = unclaimedRewardsArray[0] + unclaimedRewardsArray[1];
|
||||
this.memeToken.unclaimedRewards = unclaimedRewards
|
||||
|
||||
}
|
||||
await this.getTokenBalances();
|
||||
//MemeToken Staked
|
||||
const tokenStore = useTokenStore();
|
||||
this.memeToken.staked = await rewardlockerStore.getStaked(this.address);
|
||||
const unclaimedRewardsArray = await rewardlockerStore.getTotalRewards(this.address);
|
||||
const unclaimedRewards = unclaimedRewardsArray[0] + unclaimedRewardsArray[1];
|
||||
this.memeToken.unclaimedRewards = unclaimedRewards;
|
||||
},
|
||||
},
|
||||
// persist: true,
|
||||
});
|
||||
|
||||
@@ -79,7 +79,12 @@
|
||||
<div class="bloodline-container">
|
||||
<div class="bloodline-border purple">Get up to +25% Clan Bonus on your sacrifice.</div>
|
||||
</div>
|
||||
<blood-chart :data="cycleStore.cycles[cycleStore.activeCycle]"></blood-chart>
|
||||
<template v-if="!cycleStore.cycles[cycleStore.activeCycle]">
|
||||
<Vue3Lottie :animationData="ChartLoading" :height="400" :width="400" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<blood-chart :data="cycleStore.cycles[cycleStore.activeCycle]"></blood-chart>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -98,6 +103,9 @@ import LoadingComponent from "@/components/LoadingComponent.vue";
|
||||
import { useCycleStore } from "@/stores/cycles";
|
||||
import { useRewardLockerStore } from "@/stores/rewardlocker";
|
||||
|
||||
import { Vue3Lottie } from "vue3-lottie";
|
||||
import ChartLoading from "@/assets/lottie/ChartLoading.json";
|
||||
|
||||
const cycleStore = useCycleStore();
|
||||
const tokenStore = useTokenStore();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user