Add liquidity / remove liquidity / balancee guard improvements

This commit is contained in:
Aleksandr Kraiz
2022-04-22 23:11:14 +04:00
parent 0a17972783
commit 0804b592d8
11 changed files with 467 additions and 61 deletions

View File

@@ -15,43 +15,25 @@ export default async function getBalance(
const assetIsNativeCryptocurrency = assetAddress === ethers.constants.AddressZero;
let assetWalletBalance: ethers.BigNumber | undefined;
let assetAllowance: ethers.BigNumber | undefined;
let denormalizedAssetInWalletBalance: BigNumber | undefined;
let denormalizedAssetInAllowance: BigNumber | undefined;
if (!assetIsNativeCryptocurrency) {
const assetContract = contracts.ERC20__factory.connect(assetAddress, provider);
const assetDecimals = await assetContract.decimals();
assetWalletBalance = await assetContract.balanceOf(walletAddress);
assetAllowance = await assetContract.allowance(walletAddress, exchangeContract.address);
denormalizedAssetInWalletBalance = utils.denormalizeNumber(assetWalletBalance, assetDecimals);
denormalizedAssetInAllowance = utils.denormalizeNumber(assetAllowance, assetDecimals);
} else {
assetWalletBalance = await provider.getBalance(walletAddress);
denormalizedAssetInWalletBalance = utils.denormalizeNumber(assetWalletBalance, NATIVE_CURRENCY_PRECISION);
denormalizedAssetInAllowance = denormalizedAssetInWalletBalance; // For native crypto no allowance is needed
}
const assetContractBalance = await exchangeContract.getBalance(assetAddress, walletAddress);
const denormalizedAssetInContractBalance = utils.denormalizeNumber(assetContractBalance, INTERNAL_ORION_PRECISION);
// const denormalizedAssetWalletBalanceAvailable = BigNumber.min(denormalizedAssetInAllowance, denormalizedAssetInWalletBalance);
const denormalizedAssetLockedBalance = await orionAggregator.getLockedBalance(walletAddress, asset);
// const denormalizedAssetAvailableBalance = denormalizedAssetInContractBalance
// .plus(denormalizedAssetWalletBalanceAvailable)
// .minus(denormalizedAssetLockedBalance[asset] ?? 0);
// const denormalizedAssetImaginaryBalance = denormalizedAssetInContractBalance
// .plus(denormalizedAssetInWalletBalance)
// .minus(denormalizedAssetLockedBalance[asset] ?? 0);
return {
exchange: denormalizedAssetInContractBalance.minus(denormalizedAssetLockedBalance[asset] ?? 0),
// imaginary: denormalizedAssetImaginaryBalance,
wallet: denormalizedAssetInWalletBalance,
allowance: denormalizedAssetInAllowance,
// approvedWalletBalance: denormalizedAssetWalletBalanceAvailable,
// available: denormalizedAssetAvailableBalance,
// locked: denormalizedAssetLockedBalance[asset],
};
}

View File

@@ -33,7 +33,6 @@ export default async (
return balances.reduce<Partial<Record<string, {
exchange: BigNumber,
wallet: BigNumber,
allowance: BigNumber,
}>>>((prev, curr) => ({
...prev,
[curr.asset]: curr.amount,

View File

@@ -0,0 +1,19 @@
import { ethers } from 'ethers';
const getNativeCryptocurrency = (assetToAddress: Partial<Record<string, string>>) => {
const addressToAsset = Object
.entries(assetToAddress)
.reduce<Partial<Record<string, string>>>((prev, [asset, address]) => {
if (!address) return prev;
return {
...prev,
[address]: asset,
};
}, {});
const nativeCryptocurrency = addressToAsset[ethers.constants.AddressZero];
if (!nativeCryptocurrency) throw new Error('Native cryptocurrency asset is not found');
return nativeCryptocurrency;
};
export default getNativeCryptocurrency;