Skip to content

Commit

Permalink
feat: Add wadraymath.ts to support wad and ray math on ethers bignu…
Browse files Browse the repository at this point in the history
…mber
  • Loading branch information
LHerskind committed Aug 30, 2021
1 parent 1acfe5c commit cc468df
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions test-suites/helpers/utils/wadraymath.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { BigNumber } from '@ethersproject/bignumber';

import {
RAY,
WAD,
HALF_RAY,
HALF_WAD,
WAD_RAY_RATIO,
HALF_PERCENTAGE,
PERCENTAGE_FACTOR,
} from '../../../helpers/constants';

declare module '@ethersproject/bignumber' {
interface BigNumber {
ray: () => BigNumber;
wad: () => BigNumber;
halfRay: () => BigNumber;
halfWad: () => BigNumber;
halfPercentage: () => BigNumber;
percentageFactor: () => 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 => BigNumber.from(RAY);
BigNumber.prototype.wad = (): BigNumber => BigNumber.from(WAD);
BigNumber.prototype.halfRay = (): BigNumber => BigNumber.from(HALF_RAY);
BigNumber.prototype.halfWad = (): BigNumber => BigNumber.from(HALF_WAD);
BigNumber.prototype.halfPercentage = (): BigNumber => BigNumber.from(HALF_PERCENTAGE);
BigNumber.prototype.percentageFactor = (): BigNumber => BigNumber.from(PERCENTAGE_FACTOR);

BigNumber.prototype.wadMul = function (b: BigNumber): BigNumber {
return this.halfWad().add(this.mul(b)).div(this.wad());
};

BigNumber.prototype.wadDiv = function (a: BigNumber): BigNumber {
const halfA = a.div(2);
return halfA.add(this.mul(this.wad())).div(a);
};

BigNumber.prototype.rayMul = function (a: BigNumber): BigNumber {
return this.halfRay().add(this.mul(a)).div(this.ray());
};

BigNumber.prototype.rayDiv = function (a: BigNumber): BigNumber {
const halfA = a.div(2);
return halfA.add(this.mul(this.ray())).div(a);
};

BigNumber.prototype.percentMul = function (b: BigNumber): BigNumber {
return this.halfPercentage().add(this.mul(b)).div(this.percentageFactor());
};

BigNumber.prototype.percentDiv = function (a: BigNumber): BigNumber {
const halfA = a.div(2);
return halfA.add(this.mul(this.percentageFactor())).div(a);
};

BigNumber.prototype.rayToWad = function (): BigNumber {
const halfRatio = BigNumber.from(WAD_RAY_RATIO).div(2);
return halfRatio.add(this).div(WAD_RAY_RATIO);
};

BigNumber.prototype.wadToRay = function (): BigNumber {
return this.mul(WAD_RAY_RATIO);
};

0 comments on commit cc468df

Please sign in to comment.