merged pull request
This commit is contained in:
@@ -120,7 +120,7 @@ function badgeClick(token) {
|
|||||||
if (tokenStore.memeToken.contractAddress === token.contractAddress) {
|
if (tokenStore.memeToken.contractAddress === token.contractAddress) {
|
||||||
//buy
|
//buy
|
||||||
window.open(
|
window.open(
|
||||||
"https://app.uniswap.org/swap?inputCurrency=ETH&outputCurrency=0x00E5DAd5dA0FC4Da0baB7f0D99E28C07d8A88ee4&chain=goerli",
|
`https://app.uniswap.org/swap?inputCurrency=ETH&outputCurrency=${token.contractAddress}&chain=goerli`,
|
||||||
"_blank"
|
"_blank"
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ export const useMemeburnerStore = defineStore("memeburner", {
|
|||||||
return await this.contract.read.getSacrificedMeme([cycleNumber, tokenAddress]);
|
return await this.contract.read.getSacrificedMeme([cycleNumber, tokenAddress]);
|
||||||
},
|
},
|
||||||
async getAmountToReachGoal(tokenAddress) {
|
async getAmountToReachGoal(tokenAddress) {
|
||||||
return await this.contract.read.getAmountToReachGoal([tokenAddress, 0]);
|
return await this.contract.read.getAmountToReachGoal([tokenAddress]);
|
||||||
},
|
},
|
||||||
async getSacrificedCycle(cycleNumber) {
|
async getSacrificedCycle(cycleNumber) {
|
||||||
console.log("getSacrificedCycle", cycleNumber);
|
console.log("getSacrificedCycle", cycleNumber);
|
||||||
@@ -71,7 +71,7 @@ export const useMemeburnerStore = defineStore("memeburner", {
|
|||||||
});
|
});
|
||||||
return data;
|
return data;
|
||||||
},
|
},
|
||||||
async sacrificeMeme(amount) {
|
async sacrificeMeme(amount, minETH) {
|
||||||
const tokenStore = useTokenStore();
|
const tokenStore = useTokenStore();
|
||||||
try {
|
try {
|
||||||
if (!amount || amount == 0) {
|
if (!amount || amount == 0) {
|
||||||
@@ -80,10 +80,13 @@ export const useMemeburnerStore = defineStore("memeburner", {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.loading = true;
|
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([
|
var hash = await this.contract.write.sacrificeMeme([
|
||||||
tokenStore.activeToken.contractAddress,
|
tokenStore.activeToken.contractAddress,
|
||||||
amount,
|
amountDecimal.toString(),
|
||||||
0,
|
minETH.toString()
|
||||||
]);
|
]);
|
||||||
return hash;
|
return hash;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -93,13 +96,14 @@ export const useMemeburnerStore = defineStore("memeburner", {
|
|||||||
this.loading = false;
|
this.loading = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async sacrificeMemeAndBuyBLOOD(amount) {
|
async sacrificeMemeAndBuyBLOOD(amount, minBLOOD) {
|
||||||
const tokenStore = useTokenStore();
|
const tokenStore = useTokenStore();
|
||||||
|
|
||||||
|
const amountDecimal = BigInt(amount) * 10n ** BigInt(tokenStore.activeToken.decimals);
|
||||||
var hash = await this.contract.write.sacrificeMemeAndBuyBLOOD([
|
var hash = await this.contract.write.sacrificeMemeAndBuyBLOOD([
|
||||||
tokenStore.activeToken.contractAddress,
|
tokenStore.activeToken.contractAddress,
|
||||||
amount,
|
amountDecimal.toString(),
|
||||||
0,
|
minBLOOD.toString()
|
||||||
]);
|
]);
|
||||||
return hash;
|
return hash;
|
||||||
},
|
},
|
||||||
@@ -110,7 +114,7 @@ export const useMemeburnerStore = defineStore("memeburner", {
|
|||||||
console.log("getAmountETHBase");
|
console.log("getAmountETHBase");
|
||||||
const tokenStore = useTokenStore();
|
const tokenStore = useTokenStore();
|
||||||
return await this.contract.read.getAmountETHBase([tokenStore.activeToken.contract.address, amount, true]);
|
return await this.contract.read.getAmountETHBase([tokenStore.activeToken.contract.address, amount, true]);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
+43
-33
@@ -25,7 +25,7 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
const walletStore = useWalletStoreV2();
|
const walletStore = useWalletStoreV2();
|
||||||
const tokenStore = useTokenStore();
|
const tokenStore = useTokenStore();
|
||||||
const cycleStore = useCycleStore();
|
const cycleStore = useCycleStore();
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.sacrificeState = 2;
|
this.sacrificeState = 2;
|
||||||
@@ -34,11 +34,11 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
let hash = null;
|
let hash = null;
|
||||||
if (getRewards.variant === "sacrifice") {
|
if (getRewards.variant === "sacrifice") {
|
||||||
console.log("sacrifice");
|
console.log("sacrifice");
|
||||||
hash = await memeburnerStore.sacrificeMeme(amount);
|
hash = await memeburnerStore.sacrificeMeme(amount, getRewards.minETH);
|
||||||
console.log("hash", hash);
|
console.log("hash", hash);
|
||||||
} else {
|
} else {
|
||||||
console.log("buy");
|
console.log("buy");
|
||||||
hash = await memeburnerStore.sacrificeMemeAndBuyBLOOD(amount);
|
hash = await memeburnerStore.sacrificeMemeAndBuyBLOOD(amount, getRewards.minBLOOD);
|
||||||
console.log("hash", hash);
|
console.log("hash", hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
// (topic) => topic === "0x5e60ccd3c81486143d815dce24867a494d7fee585a0a44282cf479b19a5186ee"
|
// (topic) => topic === "0x5e60ccd3c81486143d815dce24867a494d7fee585a0a44282cf479b19a5186ee"
|
||||||
// );
|
// );
|
||||||
// });
|
// });
|
||||||
|
|
||||||
var rewardData = data.logs.filter((logObject) => {
|
var rewardData = data.logs.filter((logObject) => {
|
||||||
return logObject.topics.find(
|
return logObject.topics.find(
|
||||||
(topic) => topic === "0x5e60ccd3c81486143d815dce24867a494d7fee585a0a44282cf479b19a5186ee"
|
(topic) => topic === "0x5e60ccd3c81486143d815dce24867a494d7fee585a0a44282cf479b19a5186ee"
|
||||||
@@ -92,34 +92,41 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
const uniswapStore = useUniswapStore();
|
const uniswapStore = useUniswapStore();
|
||||||
const walletStore = useWalletStoreV2();
|
const walletStore = useWalletStoreV2();
|
||||||
const rewardLockerStore = useRewardLockerStore();
|
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;
|
let output = 0;
|
||||||
try {
|
const amountETHBase = await memeburnerStore.getAmountETHBase(amountDecimal);
|
||||||
if (!value) {
|
// 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)) {
|
||||||
this.sacrificeState = 0;
|
this.sacrificeState = 0;
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
const rewardsForResult = await memeburnerStore.getRewardFor(value);
|
|
||||||
console.log("rewardsForResult", rewardsForResult);
|
const rewardsForResult = await memeburnerStore.getRewardFor(amountDecimal);
|
||||||
const rewardsForResultNumber = rewardsForResult.reduce((x, y) => {
|
const rewardsForResultSum = rewardsForResult[0] + rewardsForResult[1];
|
||||||
return x + y
|
// quote blood amount against ETH base amount
|
||||||
}, 0n);
|
var quoteRewards = await uniswapStore.quoteExactInputSingle(amountDecimal, amountETHBase[0]);
|
||||||
var quoteRewards = await uniswapStore.quoteExactInputSingle(value);
|
|
||||||
|
let variant = "sacrifice";
|
||||||
let variant = "sacrifice";
|
|
||||||
if (quoteRewards.result) {
|
if (quoteRewards.result) {
|
||||||
const quoteRewardsNumber = quoteRewards.amount;
|
// take 99.5% of quoted amount, 0.5% allowed slippage
|
||||||
if ((quoteRewardsNumber * 995n) / 1000n > rewardsForResultNumber) {
|
minBLOOD = quoteRewards.amount * 995n / 1000n;
|
||||||
|
|
||||||
|
if (quoteRewards.amount * 95n / 100n > rewardsForResultSum) {
|
||||||
variant = "buy";
|
variant = "buy";
|
||||||
console.log("use Buy-function", {
|
console.log("use Buy-function", {
|
||||||
quoteRewardsNumber: quoteRewardsNumber,
|
quoteRewardsNumber: quoteRewards.amount,
|
||||||
rewardsForResultNumber,
|
rewardsForResultSum,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
console.log("use sacrifice-function", {
|
console.log("use sacrifice-function", {
|
||||||
quoteRewardsNumber: quoteRewardsNumber,
|
quoteRewardsNumber: quoteRewards.amount,
|
||||||
rewardsForResultNumber,
|
rewardsForResultSum,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -128,22 +135,27 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
* quoter threw an error
|
* quoter threw an error
|
||||||
*/
|
*/
|
||||||
//
|
//
|
||||||
output = rewardsForResultNumber;
|
output = rewardsForResultSum;
|
||||||
}
|
}
|
||||||
console.log("variant", variant);
|
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)) {
|
if (!walletStore.connected || (walletStore.connected && token.allowance < value)) {
|
||||||
/**
|
/**
|
||||||
* case 1
|
* case 1
|
||||||
* user is not logged in or Allowance is less than Input, then I show getRewardsForSacrifice Value
|
* user is not logged in or Allowance is less than Input, then I show getRewardsForSacrifice Value
|
||||||
* variante not relevant
|
* variante not relevant
|
||||||
*/
|
*/
|
||||||
output = rewardsForResultNumber;
|
output = rewardsForResultSum;
|
||||||
|
if (variant === "buy") {
|
||||||
|
output = quoteRewards.amount
|
||||||
|
}
|
||||||
} else if (walletStore.connected && variant === "sacrifice") {
|
} else if (walletStore.connected && variant === "sacrifice") {
|
||||||
/**
|
/**
|
||||||
* case 2
|
* case 2
|
||||||
* user is logged in and allowance is greater or equal input and variant is sacrifice
|
* user is logged in and allowance is greater or equal input and variant is sacrifice
|
||||||
*/
|
*/
|
||||||
output = rewardsForResultNumber;
|
output = rewardsForResultSum;
|
||||||
} else if (walletStore.connected && variant === "buy") {
|
} else if (walletStore.connected && variant === "buy") {
|
||||||
/**
|
/**
|
||||||
* case 3
|
* case 3
|
||||||
@@ -154,7 +166,7 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
address: memeburnerStore.contract.address,
|
address: memeburnerStore.contract.address,
|
||||||
abi: memeburnerStore.contract.abi,
|
abi: memeburnerStore.contract.abi,
|
||||||
functionName: "sacrificeMeme",
|
functionName: "sacrificeMeme",
|
||||||
args: [token.contractAddress, amountDecimal.toString(), 0],
|
args: [token.contractAddress, amountDecimal.toString(), minETH.toString()],
|
||||||
account: walletStore.address,
|
account: walletStore.address,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -162,19 +174,17 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
address: memeburnerStore.contract.address,
|
address: memeburnerStore.contract.address,
|
||||||
abi: memeburnerStore.contract.abi,
|
abi: memeburnerStore.contract.abi,
|
||||||
functionName: "sacrificeMemeAndBuyBLOOD",
|
functionName: "sacrificeMemeAndBuyBLOOD",
|
||||||
args: [token.contractAddress, amountDecimal.toString(), 0],
|
args: [token.contractAddress, amountDecimal.toString(), minBLOOD.toString()],
|
||||||
account: walletStore.address,
|
account: walletStore.address,
|
||||||
});
|
});
|
||||||
const amountBuyNumber = amountBuy
|
|
||||||
const amountSacrificeNumber = amountSacrifice
|
|
||||||
|
|
||||||
if (amountBuyNumber * 0.995 > amountSacrificeNumber) {
|
if (amountBuy * 95n / 100n > amountSacrifice) {
|
||||||
variant = "buy";
|
variant = "buy";
|
||||||
output = amountBuyNumber;
|
output = amountBuy;
|
||||||
console.log("use buy after comparison sacrificeMemeAndBuyBLOOD and sacrificeMeme");
|
console.log("use buy after comparison sacrificeMemeAndBuyBLOOD and sacrificeMeme");
|
||||||
} else {
|
} else {
|
||||||
variant = "sacrifice";
|
variant = "sacrifice";
|
||||||
output = amountSacrificeNumber;
|
output = amountSacrifice;
|
||||||
console.log("use sacrifice after comparison sacrificeMemeAndBuyBLOOD and sacrificeMeme");
|
console.log("use sacrifice after comparison sacrificeMemeAndBuyBLOOD and sacrificeMeme");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -188,7 +198,7 @@ export const useSacrificeStore = defineStore("sacrifice", {
|
|||||||
stakingRewardsNumber = stakingReward / 10n ** token.decimals
|
stakingRewardsNumber = stakingReward / 10n ** token.decimals
|
||||||
}
|
}
|
||||||
const outputNumber = output / 10n ** BigInt(token.decimals);
|
const outputNumber = output / 10n ** BigInt(token.decimals);
|
||||||
return { output: outputNumber, variant: variant, staking: stakingRewardsNumber };
|
return { output: outputNumber, variant: variant, minETH: minETH, minBLOOD: minBLOOD, staking: stakingRewardsNumber };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("getRewardsFor", error);
|
console.error("getRewardsFor", error);
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-10
@@ -2,7 +2,9 @@ import { defineStore } from "pinia";
|
|||||||
import { useWalletStoreV2 } from "@/stores/walletV2";
|
import { useWalletStoreV2 } from "@/stores/walletV2";
|
||||||
import QuoterJson from "@/assets/contracts/Quoter.json";
|
import QuoterJson from "@/assets/contracts/Quoter.json";
|
||||||
import UniswapPoolJson from "@/assets/contracts/UniswapPool.json";
|
import UniswapPoolJson from "@/assets/contracts/UniswapPool.json";
|
||||||
|
import BloodlineJson from "@/assets/contracts/Bloodline.json";
|
||||||
import { useMemeburnerStore } from "@/stores/memeburner";
|
import { useMemeburnerStore } from "@/stores/memeburner";
|
||||||
|
import { useTokenStore } from "@/stores/tokens";
|
||||||
|
|
||||||
import { getContract, multicall } from "@wagmi/core";
|
import { getContract, multicall } from "@wagmi/core";
|
||||||
|
|
||||||
@@ -38,29 +40,34 @@ export const useUniswapStore = defineStore("uniswap", {
|
|||||||
this.getPoolData();
|
this.getPoolData();
|
||||||
},
|
},
|
||||||
|
|
||||||
async quoteExactInputSingle(amount) {
|
async quoteExactInputSingle(amount, ethBase) {
|
||||||
try {
|
try {
|
||||||
console.log("quoteExactInputSingle");
|
console.log("quoteExactInputSingle");
|
||||||
const memeBurnerStore = useMemeburnerStore();
|
const memeBurnerStore = useMemeburnerStore();
|
||||||
var amountEthBase = await memeBurnerStore.getAmountETHBase(amount);
|
const tokenStore = useTokenStore();
|
||||||
console.log("amountEthBase", amountEthBase);
|
|
||||||
|
const tokenOut = tokenStore.memeToken.contractAddress;
|
||||||
|
// tokenIn - WETH
|
||||||
|
const tokenIn = BigInt(this.poolData.token0) == BigInt(tokenOut) ? this.poolData.token1 : this.poolData.token0;
|
||||||
console.log("quoteExactInputSingle-parameter", {
|
console.log("quoteExactInputSingle-parameter", {
|
||||||
token0: this.poolData.token0,
|
tokenIn: tokenIn, // WETH
|
||||||
token1: this.poolData.token1,
|
tokenOut: tokenOut, // BLOOD
|
||||||
fee: this.poolData.fee,
|
fee: this.poolData.fee,
|
||||||
amountEthBase: amountEthBase[0],
|
amountEthBase: ethBase,
|
||||||
pricelimit: 0, //sqrtPriceLimitX96
|
pricelimit: 0, //sqrtPriceLimitX96
|
||||||
});
|
});
|
||||||
|
|
||||||
const quotedAmountOut = await this.quoateV3Contract.read.quoteExactInputSingle([
|
const quotedAmountOut = await this.quoateV3Contract.read.quoteExactInputSingle([
|
||||||
this.poolData.token0, //bloodline
|
tokenIn, //weth
|
||||||
this.poolData.token1, //weth
|
tokenOut, //bloodline
|
||||||
this.poolData.fee,
|
this.poolData.fee,
|
||||||
amountEthBase[0],
|
ethBase,
|
||||||
0, //sqrtPriceLimitX96
|
0, //sqrtPriceLimitX96
|
||||||
]);
|
]);
|
||||||
console.log("quotedAmountOut", quotedAmountOut);
|
console.log("quotedAmountOut", quotedAmountOut);
|
||||||
return {result: true, amount: quotedAmountOut};
|
return {result: true, amount: quotedAmountOut};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
||||||
return { result: false, amount: null };
|
return { result: false, amount: null };
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user