mirror of
				https://github.com/Instadapp/assembly.git
				synced 2024-07-29 22:37:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			161 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { computed, Ref, ref, watch } from "@nuxtjs/composition-api";
 | |
| import { useBalances } from "../useBalances";
 | |
| import { useBigNumber } from "../useBigNumber";
 | |
| import { useToken } from "../useToken";
 | |
| import { useWeb3 } from "@instadapp/vue-web3";
 | |
| import { AbiItem } from "web3-utils";
 | |
| import BigNumber from "bignumber.js";
 | |
| BigNumber.config({ POW_PRECISION: 200 });
 | |
| import abis from "~/constant/abis";
 | |
| import addresses from "~/constant/addresses";
 | |
| import { useDSA } from "../useDSA";
 | |
| import useEventBus from "../useEventBus";
 | |
| 
 | |
| export const userData = ref<any>({
 | |
|   bammTotalSupply: "0",
 | |
|   bammUserBalance: "0",
 | |
|   ethTotal: "0",
 | |
|   ethUserBalance: "0",
 | |
|   lusdPrice: "0",
 | |
|   lusdTotal: "0",  
 | |
|   lusdUserBalance: "0",
 | |
|   unclaimedLqty: "0"
 | |
| });
 | |
| 
 | |
| const fromWei = (n) => new BigNumber(n).dividedBy(1e18).toString();
 | |
| const toWei = (n) => new BigNumber(n).multipliedBy(1e18).toString();
 | |
| 
 | |
| export function useBprotocolPosition (){
 | |
|   const { activeAccount } = useDSA();
 | |
|   const { library } = useWeb3();
 | |
|   const { onEvent } = useEventBus()
 | |
|   const { getTokenByKey } = useToken();
 | |
| 
 | |
|   const bammToken = computed(() => getTokenByKey('lusd'))
 | |
|   const ethPrice = computed(() => fromWei(userData.value.lusdPrice)) // wrong mapping
 | |
|   const bammTotalSupply = computed(() => fromWei(userData.value.bammTotalSupply));
 | |
|   const bammUserBalance = computed(() => fromWei(userData.value.bammUserBalance));
 | |
|   const ethTotal = computed(() => fromWei(userData.value.ethTotal));
 | |
|   const ethUserBalance = computed(() => fromWei(userData.value.ethUserBalance));
 | |
|   const lusdTotal = computed(() => fromWei(userData.value.lusdTotal));
 | |
|   const lusdUserBalance = computed(() => fromWei(userData.value.lusdUserBalance));
 | |
|   const unclaimedLqty = computed(() => fromWei(userData.value.unclaimedLqty));
 | |
|   const userBammInUsd = computed(() => {
 | |
|     if(userData.value.bammTotalSupply === "0"){
 | |
|       return "0"
 | |
|     }
 | |
|     const userEthInUsd = new BigNumber(userData.value.ethUserBalance).multipliedBy(ethPrice.value)
 | |
|     return fromWei(userEthInUsd.plus(userData.value.lusdUserBalance))
 | |
|   });
 | |
|   const totalBammSupplyInUsd = computed(() => {
 | |
|     if(userData.value.bammTotalSupply === "0"){
 | |
|       return "0"
 | |
|     }
 | |
|     const userEthInUsd = new BigNumber(userData.value.ethTotal).multipliedBy(ethPrice.value)
 | |
|     return fromWei(userEthInUsd.plus(userData.value.lusdTotal))
 | |
|   });
 | |
|   const userBammInLusd = computed(() => {
 | |
|     if(userData.value.bammTotalSupply === "0"){
 | |
|       return "0"
 | |
|     }
 | |
|     return fromWei((new BigNumber(userData.value.bammUserBalance).dividedBy(userData.value.bammTotalSupply)).multipliedBy(userData.value.lusdTotal))
 | |
|   });
 | |
|   const ethIsGreaterThanOnePromille = computed(()=> {
 | |
|     if(userBammInUsd.value === "0"){
 | |
|       return false;
 | |
|     }
 | |
|     const userEthInUsd = new BigNumber(ethUserBalance.value).multipliedBy(ethPrice.value)
 | |
|     const ethInSp = userEthInUsd.dividedBy(userBammInUsd.value)
 | |
|     return ethInSp.isGreaterThan(0.001)
 | |
|   })
 | |
| 
 | |
|   function lusdWithdrawAmountToBamm (lusd) {
 | |
|     const bammWithdrawRatio = new BigNumber(lusd).dividedBy(userBammInUsd.value)
 | |
|     const res = bammWithdrawRatio.multipliedBy(bammUserBalance.value).toString()
 | |
|     return res
 | |
|   }
 | |
| 
 | |
|   function absolutlWithdrawAmountInEth (lusd) {
 | |
|     const bammWithdrawRatio = new BigNumber(lusd).dividedBy(userBammInUsd.value)
 | |
|     const res = bammWithdrawRatio.multipliedBy(ethUserBalance.value).toString()
 | |
|     return res
 | |
|   }
 | |
| 
 | |
|   function absolutlWithdrawAmountInLusd (lusd) {
 | |
|     const bammWithdrawRatio = new BigNumber(lusd).dividedBy(userBammInUsd.value)
 | |
|     const res = bammWithdrawRatio.multipliedBy(lusdUserBalance.value).toString()
 | |
|     return res
 | |
|   }
 | |
| 
 | |
|   async function fetchUserData (){
 | |
|     if (!library.value || !activeAccount.value) {
 | |
|       return
 | |
|     }
 | |
|     const struct = await getUserInfo(activeAccount.value.address, library.value)
 | |
|     const data = {}
 | |
|     Object.keys(struct).filter(k=> isNaN(Number(k))).forEach(k=> {
 | |
|       data[k] = struct[k]
 | |
|     })
 | |
|     userData.value = data
 | |
|   }
 | |
| 
 | |
|   onEvent("protocol::bprotocol::refresh", fetchUserData);
 | |
| 
 | |
|   watch(
 | |
|     library,
 | |
|     async val => {
 | |
|       if (val) {
 | |
|         fetchUserData();
 | |
|       }
 | |
|     },
 | |
|     { immediate: true }
 | |
|   );
 | |
| 
 | |
|   watch(
 | |
|     activeAccount,
 | |
|     async val => {
 | |
|       if (val) {
 | |
|         fetchUserData();
 | |
|       }
 | |
|     },
 | |
|     { immediate: true }
 | |
|   );
 | |
| 
 | |
|   return { 
 | |
|     bammTotalSupply,
 | |
|     bammUserBalance,
 | |
|     ethTotal,
 | |
|     ethUserBalance,
 | |
|     ethPrice,
 | |
|     lusdTotal,  
 | |
|     lusdUserBalance,
 | |
|     unclaimedLqty,
 | |
|     fetchUserData,
 | |
|     userBammInLusd,
 | |
|     lusdWithdrawAmountToBamm,
 | |
|     bammToken,
 | |
|     absolutlWithdrawAmountInEth,
 | |
|     absolutlWithdrawAmountInLusd,
 | |
|     userBammInUsd,
 | |
|     totalBammSupplyInUsd,
 | |
|     ethIsGreaterThanOnePromille
 | |
|   }
 | |
| }
 | |
| 
 | |
| async function getUserInfo (user, web3){
 | |
|   try {
 | |
|     const resolveABI = abis.resolver.bprotocol;
 | |
|     const resolveAddr = addresses.mainnet.resolver.bprotocol;
 | |
|     const bammAddr = addresses.mainnet.bprotocolBamm;
 | |
|     const bprotocolInstance = new web3.eth.Contract(
 | |
|       resolveABI as AbiItem[],
 | |
|       resolveAddr
 | |
|     );
 | |
|     const userInfo = await bprotocolInstance.methods.getUserInfo(user, bammAddr, '0x6DEA81C8171D0bA574754EF6F8b412F2Ed88c54D').call()
 | |
|     return userInfo
 | |
| 
 | |
|   }catch (e) {
 | |
|     console.error(e);
 | |
|     return {};
 | |
|   }
 | |
| } | 
