curvance 1.0.1 → 1.0.3

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.
Files changed (46) hide show
  1. package/README.md +0 -4
  2. package/package.json +2 -2
  3. package/dist/abis/BaseCToken.json +0 -1550
  4. package/dist/abis/BorrowableCToken.json +0 -2188
  5. package/dist/abis/IDynamicIRM.json +0 -158
  6. package/dist/abis/MarketManagerIsolated.json +0 -1587
  7. package/dist/abis/ProtocolReader.json +0 -767
  8. package/dist/classes/CToken.d.ts +0 -170
  9. package/dist/classes/CToken.d.ts.map +0 -1
  10. package/dist/classes/CToken.js +0 -292
  11. package/dist/classes/CToken.js.map +0 -1
  12. package/dist/classes/CVE.d.ts +0 -7
  13. package/dist/classes/CVE.d.ts.map +0 -1
  14. package/dist/classes/CVE.js +0 -7
  15. package/dist/classes/CVE.js.map +0 -1
  16. package/dist/classes/ERC20.d.ts +0 -35
  17. package/dist/classes/ERC20.d.ts.map +0 -1
  18. package/dist/classes/ERC20.js +0 -68
  19. package/dist/classes/ERC20.js.map +0 -1
  20. package/dist/classes/Faucet.d.ts +0 -25
  21. package/dist/classes/Faucet.d.ts.map +0 -1
  22. package/dist/classes/Faucet.js +0 -48
  23. package/dist/classes/Faucet.js.map +0 -1
  24. package/dist/classes/Market.d.ts +0 -68
  25. package/dist/classes/Market.d.ts.map +0 -1
  26. package/dist/classes/Market.js +0 -136
  27. package/dist/classes/Market.js.map +0 -1
  28. package/dist/classes/OracleManager.d.ts +0 -13
  29. package/dist/classes/OracleManager.d.ts.map +0 -1
  30. package/dist/classes/OracleManager.js +0 -34
  31. package/dist/classes/OracleManager.js.map +0 -1
  32. package/dist/classes/ProtocolReader.d.ts +0 -116
  33. package/dist/classes/ProtocolReader.d.ts.map +0 -1
  34. package/dist/classes/ProtocolReader.js +0 -136
  35. package/dist/classes/ProtocolReader.js.map +0 -1
  36. package/dist/helpers.d.ts +0 -20
  37. package/dist/helpers.d.ts.map +0 -1
  38. package/dist/helpers.js +0 -45
  39. package/dist/helpers.js.map +0 -1
  40. package/dist/setup.d.ts +0 -11
  41. package/dist/setup.d.ts.map +0 -1
  42. package/dist/setup.js.map +0 -1
  43. package/dist/types.d.ts +0 -10
  44. package/dist/types.d.ts.map +0 -1
  45. package/dist/types.js +0 -3
  46. package/dist/types.js.map +0 -1
@@ -1,25 +0,0 @@
1
- import { Contract } from "ethers";
2
- import { TransactionResponse } from "ethers";
3
- import { address, curvance_signer } from "../types";
4
- export interface IFaucet {
5
- userLastClaimed(user: address, token: address): Promise<bigint>;
6
- multiLastClaimed(user: address, tokens: address[]): Promise<bigint[]>;
7
- multiClaim(user: address, tokens: address[], amounts: bigint[]): Promise<TransactionResponse>;
8
- claim(user: address, token: address, amount: bigint): Promise<TransactionResponse>;
9
- multiIsAvailable(tokenAddrs: address[], amounts: bigint[]): Promise<boolean[]>;
10
- }
11
- export declare class Faucet {
12
- signer: curvance_signer;
13
- address: address;
14
- contract: Contract & IFaucet;
15
- constructor(signer: curvance_signer, address: address);
16
- isAvailable(tokenAddr: address, amount: bigint): Promise<boolean>;
17
- multiIsAvailable(tokenAddrs: address[], amounts: bigint[]): Promise<{
18
- [address: `0x${string}`]: boolean;
19
- }>;
20
- lastClaimed(user: address, token: address): Promise<bigint>;
21
- multiLastClaimed(user: address, tokens: address[]): Promise<bigint[]>;
22
- multiClaim(user: address, tokens: address[], amounts: bigint[]): Promise<TransactionResponse>;
23
- claim(user: address, token: address, amount: bigint): Promise<TransactionResponse>;
24
- }
25
- //# sourceMappingURL=Faucet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Faucet.d.ts","sourceRoot":"","sources":["../../src/classes/Faucet.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,WAAW,OAAO;IACpB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnF,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAClF;AAED,qBAAa,MAAM;IACf,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;gBAEjB,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO;IAY/C,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAM9C,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;;;IAWzD,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;IAIzC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;IAIjD,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IAI9D,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;CAG5D"}
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Faucet = void 0;
4
- const helpers_1 = require("../helpers");
5
- const ERC20_1 = require("./ERC20");
6
- class Faucet {
7
- signer;
8
- address;
9
- contract;
10
- constructor(signer, address) {
11
- this.signer = signer;
12
- this.address = address;
13
- this.contract = (0, helpers_1.contractSetup)(signer, this.address, [
14
- "function userLastClaimed(address user, address token) view returns (uint256)",
15
- "function multiLastClaimed(address user, address[] tokens) view returns (uint256[])",
16
- "function multiClaim(address user, address[] tokens, uint256[] amounts) external",
17
- "function claim(address user, address token, uint256 amount) external",
18
- "function multiIsAvailable(address[] tokenAddrs, uint256[] amounts) view returns (bool[])"
19
- ]);
20
- }
21
- async isAvailable(tokenAddr, amount) {
22
- const token = new ERC20_1.ERC20(this.signer, tokenAddr);
23
- const faucetBalance = await token.balanceOf(this.address);
24
- return amount <= faucetBalance;
25
- }
26
- async multiIsAvailable(tokenAddrs, amounts) {
27
- const data = await this.contract.multiIsAvailable(tokenAddrs, amounts);
28
- let availability = {};
29
- for (let i = 0; i < tokenAddrs.length; i++) {
30
- availability[tokenAddrs[i]] = data[i];
31
- }
32
- return availability;
33
- }
34
- async lastClaimed(user, token) {
35
- return this.contract.userLastClaimed(user, token);
36
- }
37
- async multiLastClaimed(user, tokens) {
38
- return this.contract.multiLastClaimed(user, tokens);
39
- }
40
- async multiClaim(user, tokens, amounts) {
41
- return this.contract.multiClaim(user, tokens, amounts);
42
- }
43
- async claim(user, token, amount) {
44
- return this.contract.claim(user, token, amount);
45
- }
46
- }
47
- exports.Faucet = Faucet;
48
- //# sourceMappingURL=Faucet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Faucet.js","sourceRoot":"","sources":["../../src/classes/Faucet.ts"],"names":[],"mappings":";;;AAAA,wCAA2C;AAC3C,mCAAgC;AAahC,MAAa,MAAM;IACf,MAAM,CAAkB;IACxB,OAAO,CAAU;IACjB,QAAQ,CAAqB;IAE7B,YAAY,MAAuB,EAAE,OAAgB;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAA,uBAAa,EAAU,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;YACzD,8EAA8E;YAC9E,oFAAoF;YACpF,iFAAiF;YACjF,sEAAsE;YACtE,0FAA0F;SAC7F,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAkB,EAAE,MAAc;QAChD,MAAM,KAAK,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,MAAM,IAAI,aAAa,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAqB,EAAE,OAAiB;QAC3D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEvE,IAAI,YAAY,GAAoC,EAAE,CAAC;QACvD,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAY,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACtD,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAa,EAAE,KAAc;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAa,EAAE,MAAiB;QACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAa,EAAE,MAAiB,EAAE,OAAiB;QAChE,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAa,EAAE,KAAc,EAAE,MAAc;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;CACJ;AAjDD,wBAiDC"}
@@ -1,68 +0,0 @@
1
- import { Contract } from "ethers";
2
- import { DynamicMarketData, ProtocolReader, StaticMarketData, UserMarket } from "./ProtocolReader";
3
- import { BorrowableCToken, CToken } from "./CToken";
4
- import { Decimal } from "decimal.js";
5
- import { address, curvance_signer } from "../types";
6
- import { OracleManager } from "./OracleManager";
7
- export interface StatusOf {
8
- collateral: bigint;
9
- maxDebt: bigint;
10
- debt: bigint;
11
- }
12
- export interface LiquidationStatusOf {
13
- lFactor: bigint;
14
- collateralPrice: bigint;
15
- debtPrice: bigint;
16
- }
17
- export interface HypotheticalLiquidityOf {
18
- collateralSurplus: bigint;
19
- liquidityDeficit: bigint;
20
- positionsToClose: boolean[];
21
- }
22
- export interface IMarket {
23
- accountAssets(account: address): Promise<bigint>;
24
- MIN_HOLD_PERIOD(): Promise<bigint>;
25
- hypotheticalLiquidityOf(account: address, cTokenModified: address, redemptionShares: bigint, borrowAssets: bigint): Promise<HypotheticalLiquidityOf>;
26
- statusOf(account: address): Promise<StatusOf>;
27
- liquidationStatusOf(account: address, collateralToken: address, debtToken: address): Promise<LiquidationStatusOf>;
28
- }
29
- export declare class Market {
30
- signer: curvance_signer;
31
- address: address;
32
- contract: Contract & IMarket;
33
- abi: any;
34
- adapters: bigint[];
35
- cooldownLength: bigint;
36
- tokens: (CToken | BorrowableCToken)[];
37
- oracle_manager: OracleManager;
38
- cache: {
39
- static: StaticMarketData;
40
- dynamic: DynamicMarketData;
41
- user: UserMarket;
42
- };
43
- constructor(signer: curvance_signer, static_data: StaticMarketData, dynamic_data: DynamicMarketData, user_data: UserMarket, oracle_manager: OracleManager);
44
- get tvl(): Decimal;
45
- get totalDebt(): Decimal;
46
- get totalCollateral(): Decimal;
47
- statusOf(account: address): Promise<{
48
- collateral: bigint;
49
- maxDebt: bigint;
50
- debt: bigint;
51
- }>;
52
- liquidationStatusOf(account: address, collateralToken: address, debtToken: address): Promise<{
53
- lFactor: bigint;
54
- collateralPrice: bigint;
55
- debtPrice: bigint;
56
- }>;
57
- hypotheticalLiquidityOf(account: address, cTokenModified: address, redemptionShares: bigint, borrowAssets: bigint): Promise<{
58
- collateralSurplus: bigint;
59
- liquidityDeficit: bigint;
60
- positionsToClose: boolean[];
61
- }>;
62
- expiresAt(account: address, fetch?: boolean): Promise<Date | null>;
63
- multiHoldExpiresAt(markets: Market[], reader: ProtocolReader): Promise<{
64
- [address: `0x${string}`]: Date | null;
65
- }>;
66
- static getAll(signer: curvance_signer, reader: ProtocolReader, oracle_manager: OracleManager): Promise<Market[]>;
67
- }
68
- //# sourceMappingURL=Market.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Market.d.ts","sourceRoot":"","sources":["../../src/classes/Market.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,OAAO,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,OAAO;IACpB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACrJ,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9C,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrH;AAED,qBAAa,MAAM;IACf,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC7B,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,CAAC,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAM;IAC3C,cAAc,EAAE,aAAa,CAAC;IAC9B,KAAK,EAAE;QAAE,MAAM,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,iBAAiB,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;gBAG9E,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,iBAAiB,EAC/B,SAAS,EAAE,UAAU,EACrB,cAAc,EAAE,aAAa;IA2BjC,IAAI,GAAG,YAMN;IAED,IAAI,SAAS,YAQZ;IAED,IAAI,eAAe,YAMlB;IAEK,QAAQ,CAAC,OAAO,EAAE,OAAO;;;;;IASzB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO;;;;;IASlF,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;;;;;IASjH,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,UAAQ;IAOzC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc;;;WAqBrD,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa;CA2BrG"}
@@ -1,136 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Market = void 0;
7
- const helpers_1 = require("../helpers");
8
- const CToken_1 = require("./CToken");
9
- const MarketManagerIsolated_json_1 = __importDefault(require("../abis/MarketManagerIsolated.json"));
10
- const decimal_js_1 = require("decimal.js");
11
- class Market {
12
- signer;
13
- address;
14
- contract;
15
- abi;
16
- adapters;
17
- cooldownLength;
18
- tokens = [];
19
- oracle_manager;
20
- cache;
21
- constructor(signer, static_data, dynamic_data, user_data, oracle_manager) {
22
- this.signer = signer;
23
- this.address = static_data.address;
24
- this.adapters = static_data.adapters;
25
- this.oracle_manager = oracle_manager;
26
- this.cooldownLength = static_data.cooldownLength;
27
- this.contract = (0, helpers_1.contractSetup)(signer, this.address, MarketManagerIsolated_json_1.default);
28
- this.cache = { static: static_data, dynamic: dynamic_data, user: user_data };
29
- for (let i = 0; i < static_data.tokens.length; i++) {
30
- const tokenData = {
31
- ...static_data.tokens[i],
32
- ...dynamic_data.tokens[i],
33
- ...user_data.tokens[i]
34
- };
35
- if (tokenData.isBorrowable) {
36
- const ctoken = new CToken_1.BorrowableCToken(signer, tokenData.address, tokenData, this);
37
- this.tokens.push(ctoken);
38
- }
39
- else {
40
- const ctoken = new CToken_1.CToken(signer, tokenData.address, tokenData, this);
41
- this.tokens.push(ctoken);
42
- }
43
- }
44
- }
45
- get tvl() {
46
- let marketTvl = new decimal_js_1.Decimal(0);
47
- for (const token of this.tokens) {
48
- marketTvl = marketTvl.add(token.getTvl(true));
49
- }
50
- return marketTvl;
51
- }
52
- get totalDebt() {
53
- let marketDebt = new decimal_js_1.Decimal(0);
54
- for (const token of this.tokens) {
55
- if (token.isBorrowable) {
56
- marketDebt = marketDebt.add(token.getTotalDebt(true));
57
- }
58
- }
59
- return marketDebt;
60
- }
61
- get totalCollateral() {
62
- let marketCollateral = new decimal_js_1.Decimal(0);
63
- for (const token of this.tokens) {
64
- marketCollateral = marketCollateral.add(token.getTotalCollateral(true));
65
- }
66
- return marketCollateral;
67
- }
68
- async statusOf(account) {
69
- const data = await this.contract.statusOf(account);
70
- return {
71
- collateral: BigInt(data.collateral),
72
- maxDebt: BigInt(data.maxDebt),
73
- debt: BigInt(data.debt)
74
- };
75
- }
76
- async liquidationStatusOf(account, collateralToken, debtToken) {
77
- const data = await this.contract.liquidationStatusOf(account, collateralToken, debtToken);
78
- return {
79
- lFactor: BigInt(data.lFactor),
80
- collateralPrice: BigInt(data.collateralPrice),
81
- debtPrice: BigInt(data.debtPrice)
82
- };
83
- }
84
- async hypotheticalLiquidityOf(account, cTokenModified, redemptionShares, borrowAssets) {
85
- const data = await this.contract.hypotheticalLiquidityOf(account, cTokenModified, redemptionShares, borrowAssets);
86
- return {
87
- collateralSurplus: BigInt(data.collateralSurplus),
88
- liquidityDeficit: BigInt(data.liquidityDeficit),
89
- positionsToClose: data.positionsToClose
90
- };
91
- }
92
- async expiresAt(account, fetch = false) {
93
- const cooldownTimestamp = await this.contract.accountAssets(account);
94
- const cooldownLength = fetch || this.cooldownLength == 0n ? await this.contract.MIN_HOLD_PERIOD() : this.cooldownLength;
95
- const unlockTime = cooldownTimestamp + cooldownLength;
96
- return unlockTime == cooldownLength ? null : new Date(Number(unlockTime * 1000n));
97
- }
98
- async multiHoldExpiresAt(markets, reader) {
99
- if (markets.length == 0) {
100
- throw new Error("You can't fetch expirations for no markets.");
101
- }
102
- const marketAddresses = markets.map(market => market.address);
103
- const cooldownTimestamps = await reader.marketMultiCooldown(marketAddresses, this.signer.address);
104
- let cooldowns = {};
105
- for (let i = 0; i < markets.length; i++) {
106
- const market = markets[i];
107
- const cooldownTimestamp = cooldownTimestamps[i];
108
- const cooldownLength = market.cooldownLength;
109
- cooldowns[market.address] = cooldownTimestamp == cooldownLength ? null : new Date(Number(cooldownTimestamp * 1000n));
110
- }
111
- return cooldowns;
112
- }
113
- static async getAll(signer, reader, oracle_manager) {
114
- const all_data = await reader.getAllMarketData(signer.address);
115
- let markets = [];
116
- for (let i = 0; i < all_data.staticMarket.length; i++) {
117
- const staticData = all_data.staticMarket[i];
118
- const dynamicData = all_data.dynamicMarket[i];
119
- const userData = all_data.userData.markets[i];
120
- if (staticData == undefined) {
121
- throw new Error(`Could not find static market data for index: ${i}`);
122
- }
123
- if (dynamicData == undefined) {
124
- throw new Error(`Could not find dynamic market data for index: ${i}`);
125
- }
126
- if (userData == undefined) {
127
- throw new Error(`Could not find user market data for index: ${i}`);
128
- }
129
- const market = new Market(signer, staticData, dynamicData, userData, oracle_manager);
130
- markets.push(market);
131
- }
132
- return markets;
133
- }
134
- }
135
- exports.Market = Market;
136
- //# sourceMappingURL=Market.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Market.js","sourceRoot":"","sources":["../../src/classes/Market.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { address, curvance_signer } from "../types";
2
- import { Contract } from "ethers";
3
- export interface IOracleManager {
4
- getPrice(asset: address, inUSD: boolean, getLower: boolean): Promise<[bigint, bigint]>;
5
- }
6
- export declare class OracleManager {
7
- signer: curvance_signer;
8
- address: address;
9
- contract: Contract & IOracleManager;
10
- constructor(signer: curvance_signer, address: address);
11
- getPrice(asset: address, inUSD: boolean, getLower: boolean): Promise<bigint>;
12
- }
13
- //# sourceMappingURL=OracleManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OracleManager.d.ts","sourceRoot":"","sources":["../../src/classes/OracleManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1F;AAED,qBAAa,aAAa;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAAC;gBAExB,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO;IAQ/C,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;CAmBnE"}
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OracleManager = void 0;
4
- const helpers_1 = require("../helpers");
5
- class OracleManager {
6
- signer;
7
- address;
8
- contract;
9
- constructor(signer, address) {
10
- this.signer = signer;
11
- this.address = address;
12
- this.contract = (0, helpers_1.contractSetup)(signer, this.address, [
13
- "function getPrice(address, bool, bool) view returns (uint256, uint256)",
14
- ]);
15
- }
16
- async getPrice(asset, inUSD, getLower) {
17
- const [price, errorCode] = await this.contract.getPrice(asset, inUSD, getLower);
18
- if (errorCode != 0n) {
19
- let addon_msg = "unknown";
20
- switch (errorCode) {
21
- case 1n:
22
- addon_msg = "indicates that price should be taken with caution.";
23
- break;
24
- case 2n:
25
- addon_msg = "indicates a complete failure in receiving a price.";
26
- break;
27
- }
28
- throw new Error(`Error getting price for asset ${asset}: code ${errorCode} - ${addon_msg}`);
29
- }
30
- return price;
31
- }
32
- }
33
- exports.OracleManager = OracleManager;
34
- //# sourceMappingURL=OracleManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OracleManager.js","sourceRoot":"","sources":["../../src/classes/OracleManager.ts"],"names":[],"mappings":";;;AACA,wCAA2C;AAO3C,MAAa,aAAa;IACtB,MAAM,CAAkB;IACxB,OAAO,CAAU;IACjB,QAAQ,CAA4B;IAEpC,YAAY,MAAuB,EAAE,OAAgB;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAkB,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAA,uBAAa,EAAiB,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;YAChE,wEAAwE;SAC3E,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAc,EAAE,KAAc,EAAE,QAAiB;QAC5D,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAa,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE1F,IAAG,SAAS,IAAI,EAAE,EAAE,CAAC;YACjB,IAAI,SAAS,GAAG,SAAS,CAAC;YAC1B,QAAO,SAAS,EAAE,CAAC;gBACf,KAAK,EAAE;oBACH,SAAS,GAAG,oDAAoD,CAAC;oBACjE,MAAM;gBACV,KAAK,EAAE;oBACH,SAAS,GAAG,oDAAoD,CAAC;oBACjE,MAAM;YACd,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,UAAU,SAAS,MAAM,SAAS,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAhCD,sCAgCC"}
@@ -1,116 +0,0 @@
1
- import { Contract } from "ethers";
2
- import { address, curvance_signer } from "../types";
3
- export interface StaticMarketAsset {
4
- address: address;
5
- name: string;
6
- symbol: string;
7
- decimals: bigint;
8
- totalSupply: bigint;
9
- }
10
- export interface StaticMarketToken {
11
- address: address;
12
- asset: StaticMarketAsset;
13
- name: string;
14
- symbol: string;
15
- decimals: bigint;
16
- adapters: [bigint, bigint];
17
- isBorrowable: boolean;
18
- borrowPaused: boolean;
19
- collateralizationPaused: boolean;
20
- mintPaused: boolean;
21
- collateralCap: bigint;
22
- debtCap: bigint;
23
- isListed: boolean;
24
- collRatio: bigint;
25
- collReqSoft: bigint;
26
- collReqHard: bigint;
27
- liqIncBase: bigint;
28
- liqIncCurve: bigint;
29
- liqIncMin: bigint;
30
- liqIncMax: bigint;
31
- closeFactorBase: bigint;
32
- closeFactorCurve: bigint;
33
- closeFactorMin: bigint;
34
- closeFactorMax: bigint;
35
- }
36
- export interface StaticMarketData {
37
- address: address;
38
- adapters: bigint[];
39
- cooldownLength: bigint;
40
- tokens: StaticMarketToken[];
41
- }
42
- export interface DynamicMarketToken {
43
- address: address;
44
- tvl: bigint;
45
- collateral: bigint;
46
- debt: bigint;
47
- sharePrice: bigint;
48
- assetPrice: bigint;
49
- sharePriceLower: bigint;
50
- assetPriceLower: bigint;
51
- borrowRate: bigint;
52
- predictedBorrowRate: bigint;
53
- utilizationRate: bigint;
54
- supplyRate: bigint;
55
- liquidity: bigint;
56
- }
57
- export interface DynamicMarketData {
58
- address: address;
59
- tokens: DynamicMarketToken[];
60
- }
61
- export interface UserMarketToken {
62
- address: address;
63
- assetAmount: bigint;
64
- shareAmount: bigint;
65
- collateral: bigint;
66
- debt: bigint;
67
- }
68
- export interface UserMarket {
69
- address: address;
70
- collateral: bigint;
71
- maxDebt: bigint;
72
- debt: bigint;
73
- positionHealth: bigint;
74
- cooldown: bigint;
75
- tokens: UserMarketToken[];
76
- }
77
- export interface UserLock {
78
- lockIndex: bigint;
79
- amount: bigint;
80
- unlockTime: bigint;
81
- }
82
- export interface UserData {
83
- locks: UserLock[];
84
- markets: UserMarket[];
85
- }
86
- export interface IProtocolReader {
87
- getUserData(account: address): Promise<UserData>;
88
- getDynamicMarketData(): Promise<DynamicMarketData[]>;
89
- getStaticMarketData(): Promise<StaticMarketData[]>;
90
- marketMultiCooldown(markets: address[], account: address): Promise<bigint[]>;
91
- hypotheticalMaxLeverage(account: address, borrowableCToken: address, cToken: address, assets: bigint): {
92
- maxDebtBorrowable: bigint;
93
- isOffset: boolean;
94
- };
95
- }
96
- export declare class ProtocolReader {
97
- signer: curvance_signer;
98
- address: address;
99
- contract: Contract & IProtocolReader;
100
- constructor(signer: curvance_signer, address: address);
101
- getAllMarketData(account: address, use_api?: boolean): Promise<{
102
- staticMarket: StaticMarketData[];
103
- dynamicMarket: DynamicMarketData[];
104
- userData: UserData;
105
- }>;
106
- getDynamicMarketData(use_api?: boolean): Promise<DynamicMarketData[]>;
107
- getUserData(account: address): Promise<UserData>;
108
- getAllDynamicState(use_api?: boolean): Promise<void>;
109
- hypotheticalMaxLeverage(account: address, borrowableCToken: address, cToken: address, assets: bigint): Promise<{
110
- maxDebtBorrowable: bigint;
111
- isOffset: boolean;
112
- }>;
113
- marketMultiCooldown(markets: address[], account: address): Promise<bigint[]>;
114
- getStaticMarketData(use_api?: boolean): Promise<StaticMarketData[]>;
115
- }
116
- //# sourceMappingURL=ProtocolReader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProtocolReader.d.ts","sourceRoot":"","sources":["../../src/classes/ProtocolReader.ts"],"names":[],"mappings":"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"}
@@ -1,136 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ProtocolReader = void 0;
7
- const helpers_1 = require("../helpers");
8
- const ProtocolReader_json_1 = __importDefault(require("../abis/ProtocolReader.json"));
9
- class ProtocolReader {
10
- signer;
11
- address;
12
- contract;
13
- constructor(signer, address) {
14
- this.signer = signer;
15
- this.address = address;
16
- this.contract = (0, helpers_1.contractSetup)(signer, address, ProtocolReader_json_1.default);
17
- }
18
- async getAllMarketData(account, use_api = true) {
19
- const all = await Promise.all([
20
- this.getStaticMarketData(use_api),
21
- this.getDynamicMarketData(use_api),
22
- this.getUserData(account)
23
- ]);
24
- return {
25
- staticMarket: all[0],
26
- dynamicMarket: all[1],
27
- userData: all[2]
28
- };
29
- }
30
- async getDynamicMarketData(use_api = true) {
31
- // TODO: Implement API call
32
- const data = await this.contract.getDynamicMarketData();
33
- const typedData = data.map((market) => ({
34
- address: market._address,
35
- tokens: market.tokens.map((token) => ({
36
- address: token._address,
37
- tvl: BigInt(token.tvl),
38
- collateral: BigInt(token.collateral),
39
- debt: BigInt(token.debt),
40
- sharePrice: BigInt(token.sharePrice),
41
- assetPrice: BigInt(token.assetPrice),
42
- sharePriceLower: BigInt(token.sharePriceLower),
43
- assetPriceLower: BigInt(token.assetPriceLower),
44
- borrowRate: BigInt(token.borrowRate),
45
- predictedBorrowRate: BigInt(token.predictedBorrowRate),
46
- utilizationRate: BigInt(token.utilizationRate),
47
- supplyRate: BigInt(token.supplyRate),
48
- liquidity: BigInt(token.liquidity)
49
- }))
50
- }));
51
- return typedData;
52
- }
53
- async getUserData(account) {
54
- const data = await this.contract.getUserData(account);
55
- const typedData = {
56
- locks: data.locks.map((lock) => ({
57
- lockIndex: BigInt(lock.lockIndex),
58
- amount: BigInt(lock.amount),
59
- unlockTime: BigInt(lock.unlockTime)
60
- })),
61
- markets: data.markets.map((market) => ({
62
- address: market._address,
63
- collateral: BigInt(market.collateral),
64
- maxDebt: BigInt(market.maxDebt),
65
- debt: BigInt(market.debt),
66
- positionHealth: BigInt(market.positionHealth),
67
- cooldown: BigInt(market.cooldown),
68
- tokens: market.tokens.map((token) => ({
69
- address: token._address,
70
- assetAmount: BigInt(token.assetAmount),
71
- shareAmount: BigInt(token.shareAmount),
72
- collateral: BigInt(token.collateral),
73
- debt: BigInt(token.debt)
74
- }))
75
- }))
76
- };
77
- return typedData;
78
- }
79
- async getAllDynamicState(use_api = true) {
80
- // TODO: Implement API call
81
- }
82
- async hypotheticalMaxLeverage(account, borrowableCToken, cToken, assets) {
83
- const data = await this.contract.hypotheticalMaxLeverage(account, borrowableCToken, cToken, assets);
84
- return {
85
- maxDebtBorrowable: BigInt(data.maxDebtBorrowable),
86
- isOffset: data.isOffset
87
- };
88
- }
89
- async marketMultiCooldown(markets, account) {
90
- return await this.contract.marketMultiCooldown(markets, account);
91
- }
92
- async getStaticMarketData(use_api = true) {
93
- // TODO: Implement API call
94
- const data = await this.contract.getStaticMarketData();
95
- const typedData = data.map((market) => ({
96
- address: market._address,
97
- adapters: market.adapters,
98
- cooldownLength: market.cooldownLength,
99
- tokens: market.tokens.map((token) => ({
100
- address: token._address,
101
- name: token.name,
102
- symbol: token.symbol,
103
- decimals: BigInt(token.decimals),
104
- asset: {
105
- address: token.asset._address,
106
- name: token.asset.name,
107
- symbol: token.asset.symbol,
108
- decimals: BigInt(token.asset.decimals),
109
- totalSupply: BigInt(token.asset.totalSupply)
110
- },
111
- adapters: [BigInt(token.adapters[0]), BigInt(token.adapters[1])],
112
- isBorrowable: token.isBorrowable,
113
- borrowPaused: token.borrowPaused,
114
- collateralizationPaused: token.collateralizationPaused,
115
- mintPaused: token.mintPaused,
116
- collateralCap: BigInt(token.collateralCap),
117
- debtCap: BigInt(token.debtCap),
118
- isListed: token.isListed,
119
- collRatio: BigInt(token.collRatio),
120
- collReqSoft: BigInt(token.collReqSoft),
121
- collReqHard: BigInt(token.collReqHard),
122
- liqIncBase: BigInt(token.liqIncBase),
123
- liqIncCurve: BigInt(token.liqIncCurve),
124
- liqIncMin: BigInt(token.liqIncMin),
125
- liqIncMax: BigInt(token.liqIncMax),
126
- closeFactorBase: BigInt(token.closeFactorBase),
127
- closeFactorCurve: BigInt(token.closeFactorCurve),
128
- closeFactorMin: BigInt(token.closeFactorMin),
129
- closeFactorMax: BigInt(token.closeFactorMax)
130
- }))
131
- }));
132
- return typedData;
133
- }
134
- }
135
- exports.ProtocolReader = ProtocolReader;
136
- //# sourceMappingURL=ProtocolReader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProtocolReader.js","sourceRoot":"","sources":["../../src/classes/ProtocolReader.ts"],"names":[],"mappings":"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"}