@aurigami/sdk 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,7 +32,7 @@ export class MoneyMarketRead extends BlockchainEntityRead {
32
32
  constructor(networkConnection: NetworkConnection, auToken: Address, underlyingAsset: Address) {
33
33
  super(networkConnection);
34
34
  if (isSameAddress(underlyingAsset, ETHAddress)) {
35
- this.auToken = new Contract(auToken, AuETHABI.abi, networkConnection.provider) as AuETH
35
+ this.auToken = new Contract(auToken, AuETHABI.abi, networkConnection.provider) as AuETH;
36
36
  } else {
37
37
  this.auToken = new Contract(auToken, AuErc20ABI.abi, networkConnection.provider) as AuErc20;
38
38
  }
package/src/SDK.ts CHANGED
@@ -103,6 +103,7 @@ export class SdkRead extends BlockchainEntityRead {
103
103
  accountLiquidity = values[0]; rewardBalancesMetadata = values[1]; lockedAmount = values[2];
104
104
  const borrowedvaluation: BigNumber = totalBorrowLimit.minus(new BigNumber(accountLiquidity[1].toString()).div(decimalFactor(18)));
105
105
  const bufferedBorrowLimit: BigNumber = totalBorrowLimit.multipliedBy(BORROW_LIMIT_BUFFER);
106
+ const minimumBorrowLimitAllowed = borrowedvaluation.div(BORROW_LIMIT_BUFFER);
106
107
 
107
108
  var borrowableAmount: BigNumber;
108
109
  if (bufferedBorrowLimit.lte(borrowedvaluation)) {
@@ -114,10 +115,17 @@ export class SdkRead extends BlockchainEntityRead {
114
115
  for (var i = 0; i < marketCount; i ++) {
115
116
  const auToken = networkAddresses.auTokens[i];
116
117
  const moneyMarket: MoneyMarketRead = new MoneyMarketRead(this._networkConnection, auToken.address, auToken.underlying);
117
- userMarketDetails[i].maxWithdrawableAmount = new TokenAmount(
118
- moneyMarket.underlying,
119
- borrowableAmount.div(underlyingPrices[i]).toFixed(18)
120
- )
118
+ const maxWithdrawCap: BigNumber = (totalBorrowLimit.minus(minimumBorrowLimitAllowed)).div(userMarketDetails[i].collateralRatio).div(underlyingPrices[i]);
119
+ userMarketDetails[i].maxWithdrawableAmount = userMarketDetails[i].isCollateral && maxWithdrawCap.lt(userMarketDetails[i].depositBalance.formattedAmount())
120
+ ? new TokenAmount(
121
+ moneyMarket.underlying,
122
+ maxWithdrawCap.toFixed(24),
123
+ false
124
+ )
125
+ : new TokenAmount(
126
+ moneyMarket.underlying,
127
+ userMarketDetails[i].depositBalance.rawAmount()
128
+ );
121
129
  }
122
130
 
123
131
  return {
package/src/dummy.ts CHANGED
@@ -39,4 +39,5 @@ export const dummyUserMarketDetails: UserMarketDetails = {
39
39
  borrowBalance: dummyZeroTokenAmount,
40
40
  isCollateral: true,
41
41
  maxWithdrawableAmount: dummyTokenAmount,
42
+ collateralRatio: 0.5
42
43
  };
@@ -7,7 +7,7 @@ import { PriceOracle } from "@aurigami/contracts/typechain";
7
7
  import { TokenAmount } from "./tokenAmount";
8
8
  import { Address } from "./types";
9
9
  import IUniswapV2PairABI from './abis/IUniswapV2Pair.json';
10
- import dummyABI from "./abis/dummy.json";
10
+ import AuriLensABI from '@aurigami/contracts/artifacts/contracts/AuriLens.sol/AuriLens.json';
11
11
 
12
12
  const axios = require('axios')
13
13
 
@@ -78,8 +78,11 @@ export async function fetchPriceFromOracle(auTokenAddress: Address, underlyingDe
78
78
  return processPriceFromOracle(rawPrice, underlyingDecimal)
79
79
  }
80
80
 
81
- export async function fetchUnderlyingTokensPrices(provider: providers.Provider) {
82
- const auriLens: Contract = new Contract(networkAddresses.misc.AURILENS, dummyABI.abi, provider);
81
+ export async function fetchUnderlyingTokensPrices(provider: providers.Provider): Promise<{
82
+ auToken: string,
83
+ underlyingPrice: BigNumber
84
+ }[]> {
85
+ const auriLens: Contract = new Contract(networkAddresses.misc.AURILENS, AuriLensABI.abi, provider);
83
86
  const auTokenAddresses = networkAddresses.auTokens.map((auToken) => auToken.address);
84
87
  const underlyingDecimals = networkAddresses.auTokens.map((auToken) => getDecimal(auToken.underlying));
85
88
  const rawPrices = await auriLens.auTokenUnderlyingPriceAll(auTokenAddresses);