mirror of
				https://github.com/Instadapp/aave-protocol-v2.git
				synced 2024-07-29 21:47:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import BigNumber from 'bignumber.js';
 | 
						|
import {
 | 
						|
  RAY,
 | 
						|
  WAD,
 | 
						|
  HALF_RAY,
 | 
						|
  HALF_WAD,
 | 
						|
  WAD_RAY_RATIO,
 | 
						|
  HALF_PERCENTAGE,
 | 
						|
  PERCENTAGE_FACTOR,
 | 
						|
} from '../../../../helpers/constants';
 | 
						|
 | 
						|
declare module 'bignumber.js' {
 | 
						|
  interface BigNumber {
 | 
						|
    ray: () => BigNumber;
 | 
						|
    wad: () => BigNumber;
 | 
						|
    halfRay: () => BigNumber;
 | 
						|
    halfWad: () => BigNumber;
 | 
						|
    halfPercentage: () => BigNumber;
 | 
						|
    wadMul: (a: BigNumber) => BigNumber;
 | 
						|
    wadDiv: (a: BigNumber) => BigNumber;
 | 
						|
    rayMul: (a: BigNumber) => BigNumber;
 | 
						|
    rayDiv: (a: BigNumber) => BigNumber;
 | 
						|
    percentMul: (a: BigNumber) => BigNumber;
 | 
						|
    percentDiv: (a: BigNumber) => BigNumber;
 | 
						|
    rayToWad: () => BigNumber;
 | 
						|
    wadToRay: () => BigNumber;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
BigNumber.prototype.ray = (): BigNumber => {
 | 
						|
  return new BigNumber(RAY).decimalPlaces(0);
 | 
						|
};
 | 
						|
BigNumber.prototype.wad = (): BigNumber => {
 | 
						|
  return new BigNumber(WAD).decimalPlaces(0);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.halfRay = (): BigNumber => {
 | 
						|
  return new BigNumber(HALF_RAY).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.halfWad = (): BigNumber => {
 | 
						|
  return new BigNumber(HALF_WAD).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.wadMul = function (b: BigNumber): BigNumber {
 | 
						|
  return this.halfWad().plus(this.multipliedBy(b)).div(WAD).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.wadDiv = function (a: BigNumber): BigNumber {
 | 
						|
  const halfA = a.div(2).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
 | 
						|
  return halfA.plus(this.multipliedBy(WAD)).div(a).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.rayMul = function (a: BigNumber): BigNumber {
 | 
						|
  return this.halfRay().plus(this.multipliedBy(a)).div(RAY).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.rayDiv = function (a: BigNumber): BigNumber {
 | 
						|
  const halfA = a.div(2).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
 | 
						|
  return halfA
 | 
						|
    .plus(this.multipliedBy(RAY))
 | 
						|
    .decimalPlaces(0, BigNumber.ROUND_DOWN)
 | 
						|
    .div(a)
 | 
						|
    .decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.rayToWad = function (): BigNumber {
 | 
						|
  const halfRatio = new BigNumber(WAD_RAY_RATIO).div(2);
 | 
						|
 | 
						|
  return halfRatio.plus(this).div(WAD_RAY_RATIO).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.wadToRay = function (): BigNumber {
 | 
						|
  return this.multipliedBy(WAD_RAY_RATIO).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.halfPercentage = (): BigNumber => {
 | 
						|
  return new BigNumber(HALF_PERCENTAGE).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.percentMul = function (b: BigNumber): BigNumber {
 | 
						|
  return this.halfPercentage()
 | 
						|
    .plus(this.multipliedBy(b))
 | 
						|
    .div(PERCENTAGE_FACTOR)
 | 
						|
    .decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 | 
						|
 | 
						|
BigNumber.prototype.percentDiv = function (a: BigNumber): BigNumber {
 | 
						|
  const halfA = a.div(2).decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
 | 
						|
  return halfA
 | 
						|
    .plus(this.multipliedBy(PERCENTAGE_FACTOR))
 | 
						|
    .div(a)
 | 
						|
    .decimalPlaces(0, BigNumber.ROUND_DOWN);
 | 
						|
};
 |