@aurigami/sdk 1.23.0 → 1.24.0

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 (101) hide show
  1. package/dist/SDK.d.ts +48 -65
  2. package/dist/SDK.js +165 -0
  3. package/dist/abis/index.d.ts +18 -18
  4. package/dist/abis/index.js +39 -0
  5. package/dist/consts/constants.d.ts +139 -139
  6. package/dist/consts/constants.js +185 -0
  7. package/dist/consts/decimals.d.ts +1 -1
  8. package/dist/consts/decimals.js +35 -0
  9. package/dist/consts/deployments.d.ts +3 -3
  10. package/dist/consts/deployments.js +9 -0
  11. package/dist/consts/dummy.d.ts +13 -13
  12. package/dist/consts/dummy.js +43 -0
  13. package/dist/consts/index.d.ts +5 -5
  14. package/dist/consts/index.js +9 -0
  15. package/dist/consts/symbols.d.ts +1 -1
  16. package/dist/consts/symbols.js +10 -0
  17. package/dist/entities/BlockchainEntity.d.ts +13 -13
  18. package/dist/entities/BlockchainEntity.js +36 -0
  19. package/dist/entities/auriEnv.d.ts +34 -40
  20. package/dist/entities/auriEnv.js +166 -0
  21. package/dist/entities/index.d.ts +4 -4
  22. package/dist/entities/index.js +8 -0
  23. package/dist/entities/token.d.ts +7 -7
  24. package/dist/entities/token.js +27 -0
  25. package/dist/entities/tokenAmount.d.ts +13 -13
  26. package/dist/entities/tokenAmount.js +52 -0
  27. package/dist/helpers/aurigami-api.d.ts +13 -13
  28. package/dist/helpers/aurigami-api.js +26 -0
  29. package/dist/helpers/aurora-api-helpers.d.ts +1 -1
  30. package/dist/helpers/aurora-api-helpers.js +15 -0
  31. package/dist/helpers/graphql-helpers.d.ts +1 -1
  32. package/dist/helpers/graphql-helpers.js +13 -0
  33. package/dist/helpers/helpers.d.ts +23 -40
  34. package/dist/helpers/helpers.js +148 -0
  35. package/dist/helpers/historicalPriceFetcher.d.ts +15 -15
  36. package/dist/helpers/historicalPriceFetcher.js +142 -0
  37. package/dist/helpers/index.d.ts +7 -7
  38. package/dist/helpers/index.js +11 -0
  39. package/dist/helpers/kyber-aggregator-api.d.ts +5 -5
  40. package/dist/helpers/kyber-aggregator-api.js +27 -0
  41. package/dist/helpers/multicall.d.ts +40 -0
  42. package/dist/helpers/multicall.js +203 -0
  43. package/dist/helpers/notification-api.d.ts +2 -2
  44. package/dist/helpers/notification-api.js +21 -0
  45. package/dist/helpers/one-inch-aggregator-api.d.ts +21 -21
  46. package/dist/helpers/one-inch-aggregator-api.js +19 -0
  47. package/dist/helpers/priceFetcher.d.ts +36 -36
  48. package/dist/helpers/priceFetcher.js +296 -0
  49. package/dist/helpers/subgraphQuery.d.ts +1 -1
  50. package/dist/helpers/subgraphQuery.js +22 -0
  51. package/dist/helpers/transfer-event-query.d.ts +17 -26
  52. package/dist/helpers/transfer-event-query.js +41 -0
  53. package/dist/index.d.ts +7 -7
  54. package/dist/index.js +17 -8
  55. package/dist/interactors/Airdrop.d.ts +17 -26
  56. package/dist/interactors/Airdrop.js +48 -0
  57. package/dist/interactors/MoneyMarket.d.ts +63 -63
  58. package/dist/interactors/MoneyMarket.js +392 -0
  59. package/dist/interactors/Multicall.d.ts +15 -18
  60. package/dist/interactors/Multicall.js +36 -0
  61. package/dist/interactors/Papermill.d.ts +27 -57
  62. package/dist/interactors/Papermill.js +125 -0
  63. package/dist/interactors/PlyGame.d.ts +30 -42
  64. package/dist/interactors/PlyGame.js +146 -0
  65. package/dist/interactors/PlyTokenLock.d.ts +16 -16
  66. package/dist/interactors/PlyTokenLock.js +44 -0
  67. package/dist/interactors/Pulp.d.ts +17 -17
  68. package/dist/interactors/Pulp.js +43 -0
  69. package/dist/interactors/Referral.d.ts +35 -78
  70. package/dist/interactors/Referral.js +158 -0
  71. package/dist/interactors/Staking.d.ts +20 -26
  72. package/dist/interactors/Staking.js +106 -0
  73. package/dist/interactors/index.d.ts +9 -9
  74. package/dist/interactors/index.js +13 -0
  75. package/dist/interactors/misc.d.ts +31 -39
  76. package/dist/interactors/misc.js +318 -0
  77. package/dist/types/index.d.ts +175 -197
  78. package/dist/types/index.js +18 -0
  79. package/package.json +3 -3
  80. package/src/SDK.ts +1 -1
  81. package/src/entities/auriEnv.ts +29 -27
  82. package/src/helpers/historicalPriceFetcher.ts +9 -12
  83. package/src/helpers/multicall.ts +251 -0
  84. package/src/helpers/priceFetcher.ts +19 -21
  85. package/src/interactors/Airdrop.ts +2 -2
  86. package/src/interactors/MoneyMarket.ts +31 -27
  87. package/src/interactors/Multicall.ts +3 -3
  88. package/src/interactors/Papermill.ts +9 -9
  89. package/src/interactors/PlyGame.ts +10 -10
  90. package/src/interactors/PlyTokenLock.ts +2 -3
  91. package/src/interactors/Pulp.ts +4 -2
  92. package/src/interactors/Referral.ts +6 -6
  93. package/src/interactors/Staking.ts +13 -9
  94. package/src/interactors/misc.ts +7 -5
  95. package/src/types/index.ts +32 -2
  96. package/dist/sdk.cjs.development.js +0 -6325
  97. package/dist/sdk.cjs.development.js.map +0 -1
  98. package/dist/sdk.cjs.production.min.js +0 -2
  99. package/dist/sdk.cjs.production.min.js.map +0 -1
  100. package/dist/sdk.esm.js +0 -6193
  101. package/dist/sdk.esm.js.map +0 -1
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Airdrop = exports.AirdropReadWrite = exports.AirdropRead = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ethers_1 = require("ethers");
6
+ const entities_1 = require("../entities");
7
+ const helpers = tslib_1.__importStar(require("../helpers"));
8
+ class AirdropRead extends entities_1.BlockchainEntityRead {
9
+ constructor(networkConnection) {
10
+ super(networkConnection);
11
+ Object.defineProperty(this, "env", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: void 0
16
+ });
17
+ this.env = new entities_1.AuriEnv(networkConnection);
18
+ }
19
+ async getRedeemableReward(campaign, token, user) {
20
+ let tokenInstance = new entities_1.Token(token, helpers.getDecimal(token));
21
+ let rewards = await this.env.auriAirdrop.raw.getRedeemableReward(ethers_1.utils.formatBytes32String(campaign), token, user);
22
+ return new entities_1.TokenAmount(tokenInstance, rewards.toString());
23
+ }
24
+ }
25
+ exports.AirdropRead = AirdropRead;
26
+ class AirdropReadWrite extends AirdropRead {
27
+ async redeemMultiple(campaigns, tokens) {
28
+ helpers.assert(campaigns.length == tokens.length, 'campaigns and tokens must have the same length');
29
+ return this.env.auriAirdrop.raw.connect(this._networkConnection.signer).redeem(campaigns.map((e) => ethers_1.utils.formatBytes32String(e)), tokens, await this._networkConnection.signer.getAddress());
30
+ }
31
+ async redeemSingle(campaign, token) {
32
+ return this.redeemMultiple([campaign], [token]);
33
+ }
34
+ }
35
+ exports.AirdropReadWrite = AirdropReadWrite;
36
+ class Airdrop extends entities_1.BlockchainEntity {
37
+ constructor() {
38
+ super();
39
+ }
40
+ read(networkConnection) {
41
+ return new AirdropRead(networkConnection);
42
+ }
43
+ readWrite(networkConnection) {
44
+ return new AirdropReadWrite(networkConnection);
45
+ }
46
+ }
47
+ exports.Airdrop = Airdrop;
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWlyZHJvcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmFjdG9ycy9BaXJkcm9wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxtQ0FBZ0Q7QUFDaEQsMENBQWtHO0FBQ2xHLDREQUFzQztBQUd0QyxNQUFhLFdBQVksU0FBUSwrQkFBb0I7SUFHbkQsWUFBbUIsaUJBQW9DO1FBQ3JELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBSFg7Ozs7O1dBQWE7UUFJM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLGtCQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBS00sS0FBSyxDQUFDLG1CQUFtQixDQUM5QixRQUFnQixFQUNoQixLQUFjLEVBQ2QsSUFBYTtRQUViLElBQUksYUFBYSxHQUFVLElBQUksZ0JBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXZFLElBQUksT0FBTyxHQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUNsRSxjQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQ25DLEtBQUssRUFDTCxJQUFJLENBQ0wsQ0FBQztRQUVGLE9BQU8sSUFBSSxzQkFBVyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ0Y7QUExQkQsa0NBMEJDO0FBRUQsTUFBYSxnQkFBaUIsU0FBUSxXQUFXO0lBSXhDLEtBQUssQ0FBQyxjQUFjLENBQ3pCLFNBQW1CLEVBQ25CLE1BQWlCO1FBRWpCLE9BQU8sQ0FBQyxNQUFNLENBQ1osU0FBUyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUNqQyxnREFBZ0QsQ0FDakQsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTyxDQUFDLENBQUMsTUFBTSxDQUM3RSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbEQsTUFBTSxFQUNOLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFLTSxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQWdCLEVBQUUsS0FBYztRQUN4RCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBekJELDRDQXlCQztBQUVELE1BQWEsT0FBUSxTQUFRLDJCQUFnQjtJQUMzQztRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUNNLElBQUksQ0FBQyxpQkFBb0M7UUFDOUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDTSxTQUFTLENBQUMsaUJBQW9DO1FBQ25ELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQVZELDBCQVVDIn0=
@@ -1,63 +1,63 @@
1
- import { AuETH, AuErc20, EthRepayHelper } from '@aurigami/contracts/typechain';
2
- import { TransactionResponse } from '@ethersproject/abstract-provider';
3
- import BigNumber from 'bignumber.js';
4
- import { BigNumber as BN } from 'ethers';
5
- import { AuriEnv, BlockchainEntity, BlockchainEntityRead, Token, TokenAmount } from '../entities';
6
- import { Address, Apy, MoneyMarketDetails, NetworkConnection } from '../types';
7
- declare type RewardSpeeds = {
8
- plyRewardSupplySpeed: BN;
9
- plyRewardBorrowSpeed: BN;
10
- auroraRewardSupplySpeed: BN;
11
- auroraRewardBorrowSpeed: BN;
12
- };
13
- export declare class MoneyMarketRead extends BlockchainEntityRead {
14
- underlying: Token;
15
- auToken: AuErc20 | AuETH;
16
- readonly env: AuriEnv;
17
- constructor(networkConnection: NetworkConnection, auToken: Address, underlyingAsset: Address);
18
- getUnderlyingPrice(): Promise<BigNumber>;
19
- getPlyPrice(): Promise<BigNumber>;
20
- protected getRewardSpeeds(): Promise<RewardSpeeds>;
21
- getTotalTokenBorrowed(): Promise<TokenAmount>;
22
- getTotalTokenDeposited(): Promise<TokenAmount>;
23
- getDepositAPY(): Promise<BigNumber>;
24
- getBorrowAPY(): Promise<BigNumber>;
25
- getCollateralRatio(): Promise<BigNumber>;
26
- getBorrowPlyAPY(): Promise<BigNumber>;
27
- getDepositPlyAPY(): Promise<BigNumber>;
28
- getDepositNearAPY(): Promise<BigNumber>;
29
- getBorrowNearAPY(): Promise<BigNumber>;
30
- getDepositMetaAPY(): Promise<BigNumber>;
31
- getDepositStaderAPY(): Promise<BigNumber>;
32
- getDetails(): Promise<MoneyMarketDetails>;
33
- getUserBorrowBalance(userAddress: string): Promise<TokenAmount>;
34
- getUserDepositBalance(userAddress: string): Promise<TokenAmount>;
35
- private getDepositNEARRewardPerWeek;
36
- private getBorrowNEARRewardPerWeek;
37
- mintCap(): Promise<TokenAmount>;
38
- borrowCap(): Promise<TokenAmount>;
39
- getDepositBorrowValue(userAddress: Address): Promise<{
40
- suppliedValue: BigNumber;
41
- borrowedValue: BigNumber;
42
- }>;
43
- getApyWithoutIncentive(userAddress: Address): Promise<Apy>;
44
- getApyWithIncentive(userAddress: Address): Promise<Apy>;
45
- }
46
- export declare class MoneyMarketReadWrite extends MoneyMarketRead {
47
- protected _EthRepayHelper: EthRepayHelper;
48
- constructor(networkConnection: NetworkConnection, auToken: Address, underlyingAsset: Address);
49
- deposit(amount: TokenAmount): Promise<TransactionResponse>;
50
- borrow(amount: TokenAmount): Promise<TransactionResponse>;
51
- withdraw(amount: TokenAmount): Promise<TransactionResponse>;
52
- repay(amount: TokenAmount): Promise<TransactionResponse>;
53
- enableCollateral(): Promise<TransactionResponse>;
54
- disableCollateral(): Promise<TransactionResponse>;
55
- }
56
- export declare class MoneyMarket extends BlockchainEntity {
57
- protected address: Address;
58
- protected underlying: Address;
59
- constructor(address: string, underlying: string);
60
- read(networkConnection: NetworkConnection): MoneyMarketRead;
61
- readWrite(networkConnection: NetworkConnection): MoneyMarketReadWrite;
62
- }
63
- export {};
1
+ import { AuETH, AuErc20, EthRepayHelper } from '@aurigami/contracts/typechain';
2
+ import { TransactionResponse } from '@ethersproject/abstract-provider';
3
+ import BigNumber from 'bignumber.js';
4
+ import { BigNumber as BN } from 'ethers';
5
+ import { AuriEnv, BlockchainEntity, BlockchainEntityRead, Token, TokenAmount } from '../entities';
6
+ import { Address, Apy, MoneyMarketDetails, MulticallStatic, NetworkConnection } from '../types';
7
+ type RewardSpeeds = {
8
+ plyRewardSupplySpeed: BN;
9
+ plyRewardBorrowSpeed: BN;
10
+ auroraRewardSupplySpeed: BN;
11
+ auroraRewardBorrowSpeed: BN;
12
+ };
13
+ export declare class MoneyMarketRead extends BlockchainEntityRead {
14
+ underlying: Token;
15
+ auToken: MulticallStatic<AuErc20 | AuETH>;
16
+ readonly env: AuriEnv;
17
+ constructor(networkConnection: NetworkConnection, auToken: Address, underlyingAsset: Address);
18
+ getUnderlyingPrice(): Promise<BigNumber>;
19
+ getPlyPrice(): Promise<BigNumber>;
20
+ protected getRewardSpeeds(): Promise<RewardSpeeds>;
21
+ getTotalTokenBorrowed(): Promise<TokenAmount>;
22
+ getTotalTokenDeposited(): Promise<TokenAmount>;
23
+ getDepositAPY(): Promise<BigNumber>;
24
+ getBorrowAPY(): Promise<BigNumber>;
25
+ getCollateralRatio(): Promise<BigNumber>;
26
+ getBorrowPlyAPY(): Promise<BigNumber>;
27
+ getDepositPlyAPY(): Promise<BigNumber>;
28
+ getDepositNearAPY(): Promise<BigNumber>;
29
+ getBorrowNearAPY(): Promise<BigNumber>;
30
+ getDepositMetaAPY(): Promise<BigNumber>;
31
+ getDepositStaderAPY(): Promise<BigNumber>;
32
+ getDetails(): Promise<MoneyMarketDetails>;
33
+ getUserBorrowBalance(userAddress: string): Promise<TokenAmount>;
34
+ getUserDepositBalance(userAddress: string): Promise<TokenAmount>;
35
+ private getDepositNEARRewardPerWeek;
36
+ private getBorrowNEARRewardPerWeek;
37
+ mintCap(): Promise<TokenAmount>;
38
+ borrowCap(): Promise<TokenAmount>;
39
+ getDepositBorrowValue(userAddress: Address): Promise<{
40
+ suppliedValue: BigNumber;
41
+ borrowedValue: BigNumber;
42
+ }>;
43
+ getApyWithoutIncentive(userAddress: Address): Promise<Apy>;
44
+ getApyWithIncentive(userAddress: Address): Promise<Apy>;
45
+ }
46
+ export declare class MoneyMarketReadWrite extends MoneyMarketRead {
47
+ protected _EthRepayHelper: MulticallStatic<EthRepayHelper>;
48
+ constructor(networkConnection: NetworkConnection, auToken: Address, underlyingAsset: Address);
49
+ deposit(amount: TokenAmount): Promise<TransactionResponse>;
50
+ borrow(amount: TokenAmount): Promise<TransactionResponse>;
51
+ withdraw(amount: TokenAmount): Promise<TransactionResponse>;
52
+ repay(amount: TokenAmount): Promise<TransactionResponse>;
53
+ enableCollateral(): Promise<TransactionResponse>;
54
+ disableCollateral(): Promise<TransactionResponse>;
55
+ }
56
+ export declare class MoneyMarket extends BlockchainEntity {
57
+ protected address: Address;
58
+ protected underlying: Address;
59
+ constructor(address: string, underlying: string);
60
+ read(networkConnection: NetworkConnection): MoneyMarketRead;
61
+ readWrite(networkConnection: NetworkConnection): MoneyMarketReadWrite;
62
+ }
63
+ export {};
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MoneyMarket = exports.MoneyMarketReadWrite = exports.MoneyMarketRead = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
6
+ const cache_decorator_1 = require("cache-decorator");
7
+ const ethers_1 = require("ethers");
8
+ const abis = tslib_1.__importStar(require("../abis"));
9
+ const consts = tslib_1.__importStar(require("../consts"));
10
+ const consts_1 = require("../consts");
11
+ const entities_1 = require("../entities");
12
+ const helpers = tslib_1.__importStar(require("../helpers"));
13
+ const multicall_1 = require("../helpers/multicall");
14
+ const priceFetcher_1 = require("../helpers/priceFetcher");
15
+ class MoneyMarketRead extends entities_1.BlockchainEntityRead {
16
+ constructor(networkConnection, auToken, underlyingAsset) {
17
+ super(networkConnection);
18
+ Object.defineProperty(this, "underlying", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: void 0
23
+ });
24
+ Object.defineProperty(this, "auToken", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: void 0
29
+ });
30
+ Object.defineProperty(this, "env", {
31
+ enumerable: true,
32
+ configurable: true,
33
+ writable: true,
34
+ value: void 0
35
+ });
36
+ this.env = new entities_1.AuriEnv(networkConnection);
37
+ if (helpers.isSameAddress(underlyingAsset, consts.ETHAddress)) {
38
+ this.auToken = (0, multicall_1.createContract)(auToken, abis.AuETHABI.abi, networkConnection.provider);
39
+ }
40
+ else {
41
+ this.auToken = (0, multicall_1.createContract)(auToken, abis.AuErc20ABI.abi, networkConnection.provider);
42
+ }
43
+ this.underlying = new entities_1.Token(underlyingAsset, helpers.getDecimal(underlyingAsset));
44
+ }
45
+ async getUnderlyingPrice() {
46
+ return (0, priceFetcher_1.fetchPrice)(this.underlying.address, this._networkConnection.provider);
47
+ }
48
+ async getPlyPrice() {
49
+ return (0, priceFetcher_1.fetchPrice)(consts.networkAddresses.tokens.PLY, this._networkConnection.provider);
50
+ }
51
+ async getRewardSpeeds() {
52
+ var speeds = await this.env.auriLens.callStatic.getRewardSpeeds(this.env.comptroller.address, this.auToken.address);
53
+ return speeds;
54
+ }
55
+ async getTotalTokenBorrowed() {
56
+ return new entities_1.TokenAmount(this.underlying, (await this.auToken.callStatic.totalBorrows()).toString());
57
+ }
58
+ async getTotalTokenDeposited() {
59
+ const [totalBorrow, totalCash] = await Promise.all([
60
+ this.getTotalTokenBorrowed(),
61
+ this.auToken.callStatic.getCash(),
62
+ ]);
63
+ return new entities_1.TokenAmount(this.underlying, ethers_1.BigNumber.from(new entities_1.TokenAmount(this.underlying, totalCash.toString()).rawAmount())
64
+ .add(totalBorrow.rawAmount())
65
+ .toString());
66
+ }
67
+ async getDepositAPY() {
68
+ const supplyRatePerTimestamp = await this.auToken.callStatic.supplyRatePerTimestamp();
69
+ const supplyRatePerDay = new bignumber_js_1.default(supplyRatePerTimestamp.toString())
70
+ .multipliedBy(consts_1.ONE_DAY)
71
+ .div(helpers.decimalFactor(18));
72
+ return new bignumber_js_1.default(supplyRatePerDay.plus(1)).pow(365).minus(1);
73
+ }
74
+ async getBorrowAPY() {
75
+ const borrowRatePerTimestamp = await this.auToken.callStatic.borrowRatePerTimestamp();
76
+ const borrowRatePerDay = new bignumber_js_1.default(borrowRatePerTimestamp.toString())
77
+ .multipliedBy(consts_1.ONE_DAY)
78
+ .div(helpers.decimalFactor(18));
79
+ return new bignumber_js_1.default(borrowRatePerDay.plus(1)).pow(365).minus(1);
80
+ }
81
+ async getCollateralRatio() {
82
+ return this.env.comptroller.callStatic.markets(this.auToken.address).then((res) => {
83
+ return new bignumber_js_1.default(res.collateralFactorMantissa.toString()).div(helpers.decimalFactor(18));
84
+ });
85
+ }
86
+ async getBorrowPlyAPY() {
87
+ const [totalBorrowed, rewardSpeeds, plyPrice, underlyingPrice] = await Promise.all([
88
+ this.getTotalTokenBorrowed(),
89
+ this.getRewardSpeeds(),
90
+ this.getPlyPrice(),
91
+ this.getUnderlyingPrice(),
92
+ ]);
93
+ return helpers.calcLMRewardApr((0, priceFetcher_1.calcValuation)(new entities_1.TokenAmount(entities_1.PLYToken, rewardSpeeds.plyRewardBorrowSpeed.toString()), plyPrice), underlyingPrice.multipliedBy(totalBorrowed.formattedAmount()), consts.ONE_YEAR);
94
+ }
95
+ async getDepositPlyAPY() {
96
+ const [totalDeposited, rewardSpeeds, plyPrice, underlyingPrice] = await Promise.all([
97
+ this.getTotalTokenDeposited(),
98
+ this.getRewardSpeeds(),
99
+ this.getPlyPrice(),
100
+ this.getUnderlyingPrice(),
101
+ ]);
102
+ return helpers.calcLMRewardApr((0, priceFetcher_1.calcValuation)(new entities_1.TokenAmount(entities_1.PLYToken, rewardSpeeds.plyRewardSupplySpeed.toString()), plyPrice), underlyingPrice.multipliedBy(totalDeposited.formattedAmount()), consts.ONE_YEAR);
103
+ }
104
+ async getDepositNearAPY() {
105
+ const [totalDeposited, underlyingPrice] = await Promise.all([
106
+ this.getTotalTokenDeposited(),
107
+ this.getUnderlyingPrice(),
108
+ ]);
109
+ let depositNEARApy = helpers.calcLMRewardApr(await (0, priceFetcher_1.fetchValuation)(this.getDepositNEARRewardPerWeek(), this._networkConnection.provider), underlyingPrice.multipliedBy(totalDeposited.formattedAmount()), 52);
110
+ return depositNEARApy;
111
+ }
112
+ async getBorrowNearAPY() {
113
+ const [totalBorrowed, underlyingPrice] = await Promise.all([
114
+ this.getTotalTokenBorrowed(),
115
+ this.getUnderlyingPrice(),
116
+ ]);
117
+ let borrowNEARApy = helpers.calcLMRewardApr(await (0, priceFetcher_1.fetchValuation)(this.getBorrowNEARRewardPerWeek(), this._networkConnection.provider), underlyingPrice.multipliedBy(totalBorrowed.formattedAmount()), 52);
118
+ return borrowNEARApy;
119
+ }
120
+ async getDepositMetaAPY() {
121
+ return new bignumber_js_1.default(0);
122
+ }
123
+ async getDepositStaderAPY() {
124
+ return new bignumber_js_1.default(0);
125
+ }
126
+ async getDetails() {
127
+ const [totalDeposited, totalBorrowed, depositAPY, borrowAPY, collateralRatio, rewardSpeeds] = await Promise.all([
128
+ this.getTotalTokenDeposited(),
129
+ this.getTotalTokenBorrowed(),
130
+ this.getDepositAPY(),
131
+ this.getBorrowAPY(),
132
+ this.getCollateralRatio(),
133
+ this.getRewardSpeeds(),
134
+ ]);
135
+ const [depositPlyAPY, borrowPlyAPY, depositNearAPY, borrowNearAPY, depositMetaAPY, staderDepositApy,] = await Promise.all([
136
+ this.getDepositPlyAPY(),
137
+ this.getBorrowPlyAPY(),
138
+ this.getDepositNearAPY(),
139
+ this.getBorrowNearAPY(),
140
+ this.getDepositMetaAPY(),
141
+ this.getDepositStaderAPY(),
142
+ ]);
143
+ return {
144
+ auTokenAddress: this.auToken.address,
145
+ totalTokenDeposited: totalDeposited,
146
+ totalTokenBorrowed: totalBorrowed,
147
+ depositApy: depositAPY.toNumber(),
148
+ depositPlyApy: depositPlyAPY.toNumber(),
149
+ borrowApy: borrowAPY.toNumber(),
150
+ borrowPlyApy: borrowPlyAPY.toNumber() * -1,
151
+ collateralRatio: collateralRatio.toNumber(),
152
+ depositPlyPerWeek: new entities_1.TokenAmount(entities_1.PLYToken, rewardSpeeds.plyRewardSupplySpeed.mul(consts.ONE_DAY).mul(7).toString()),
153
+ borrowPlyPerWeek: new entities_1.TokenAmount(entities_1.PLYToken, rewardSpeeds.plyRewardBorrowSpeed.mul(consts.ONE_DAY).mul(7).toString()),
154
+ depositNEARApy: depositNearAPY.toNumber(),
155
+ borrowNEARApy: borrowNearAPY.toNumber() * -1,
156
+ depositMETAApy: depositMetaAPY.toNumber(),
157
+ staderDepositApy: staderDepositApy.toNumber(),
158
+ };
159
+ }
160
+ async getUserBorrowBalance(userAddress) {
161
+ const totalBorrow = await this.auToken.callStatic.borrowBalanceCurrent(userAddress);
162
+ return new entities_1.TokenAmount(this.underlying, totalBorrow.toString());
163
+ }
164
+ async getUserDepositBalance(userAddress) {
165
+ const totalDeposit = await this.auToken.callStatic.balanceOfUnderlying(userAddress);
166
+ return new entities_1.TokenAmount(this.underlying, totalDeposit.toString());
167
+ }
168
+ getDepositNEARRewardPerWeek() {
169
+ const NEARToken = new entities_1.Token(consts.networkAddresses.tokens.WNEAR, helpers.getDecimal(consts.networkAddresses.tokens.WNEAR));
170
+ const rewardStartTime = 1650636000;
171
+ const rewardStopTime = 1651845600;
172
+ const currentTime = helpers.getCurrentTimestamp();
173
+ if (currentTime <= rewardStopTime && currentTime > rewardStartTime) {
174
+ const reward = consts.DEPOSIT_NEAR_REWARDS_PER_WEEK[this.underlying.address.toLocaleLowerCase()] ?? '0';
175
+ return new entities_1.TokenAmount(NEARToken, reward, false);
176
+ }
177
+ else {
178
+ return new entities_1.TokenAmount(NEARToken, '0');
179
+ }
180
+ }
181
+ getBorrowNEARRewardPerWeek() {
182
+ const NEARToken = new entities_1.Token(consts.networkAddresses.tokens.WNEAR, helpers.getDecimal(consts.networkAddresses.tokens.WNEAR));
183
+ const rewardStartTime = 1650636000;
184
+ const rewardStopTime = 1651845600;
185
+ const currentTime = helpers.getCurrentTimestamp();
186
+ if (currentTime <= rewardStopTime && currentTime > rewardStartTime) {
187
+ const reward = consts.BORROW_NEAR_REWARDS_PER_WEEK[this.underlying.address.toLocaleLowerCase()] ?? '0';
188
+ return new entities_1.TokenAmount(NEARToken, reward, false);
189
+ }
190
+ else {
191
+ return new entities_1.TokenAmount(NEARToken, '0');
192
+ }
193
+ }
194
+ async mintCap() {
195
+ return new entities_1.TokenAmount(this.underlying, (await this.env.comptroller.callStatic.mintCaps(this.auToken.address)).toString());
196
+ }
197
+ async borrowCap() {
198
+ return new entities_1.TokenAmount(this.underlying, (await this.env.comptroller.callStatic.borrowCaps(this.auToken.address)).toString());
199
+ }
200
+ async getDepositBorrowValue(userAddress) {
201
+ const [price, depositBalance, borrowBalance] = await Promise.all([
202
+ this.getUnderlyingPrice(),
203
+ this.getUserDepositBalance(userAddress),
204
+ this.getUserBorrowBalance(userAddress),
205
+ ]);
206
+ const suppliedValue = price.multipliedBy(depositBalance.formattedAmount());
207
+ const borrowedValue = price.multipliedBy(borrowBalance.formattedAmount());
208
+ return {
209
+ suppliedValue,
210
+ borrowedValue,
211
+ };
212
+ }
213
+ async getApyWithoutIncentive(userAddress) {
214
+ const [price, depositApy, borrowApy, depositBalance, borrowBalance] = await Promise.all([
215
+ this.getUnderlyingPrice(),
216
+ this.getDepositAPY(),
217
+ this.getBorrowAPY(),
218
+ this.getUserDepositBalance(userAddress),
219
+ this.getUserBorrowBalance(userAddress),
220
+ ]);
221
+ const suppliedValue = price.multipliedBy(depositBalance.formattedAmount());
222
+ const borrowedValue = price.multipliedBy(borrowBalance.formattedAmount());
223
+ const sum = helpers.calcNetApy(suppliedValue, depositApy, borrowedValue, borrowApy);
224
+ return {
225
+ sum,
226
+ suppliedValue,
227
+ borrowedValue,
228
+ };
229
+ }
230
+ async getApyWithIncentive(userAddress) {
231
+ const [price, depositApy, borrowApy, depositBalance, borrowBalance, nearDepositApy, plyDepositApy, metaDepositApy, nearBorrowApy, plyBorrowApy,] = await Promise.all([
232
+ this.getUnderlyingPrice(),
233
+ this.getDepositAPY(),
234
+ this.getBorrowAPY(),
235
+ this.getUserDepositBalance(userAddress),
236
+ this.getUserBorrowBalance(userAddress),
237
+ this.getDepositNearAPY(),
238
+ this.getDepositPlyAPY(),
239
+ this.getDepositMetaAPY(),
240
+ this.getBorrowNearAPY(),
241
+ this.getBorrowPlyAPY(),
242
+ ]);
243
+ const staderDepositApy = await this.getDepositStaderAPY();
244
+ const suppliedValue = price.multipliedBy(depositBalance.formattedAmount());
245
+ const borrowedValue = price.multipliedBy(borrowBalance.formattedAmount());
246
+ const totalDepositApy = depositApy
247
+ .plus(nearDepositApy)
248
+ .plus(plyDepositApy)
249
+ .plus(metaDepositApy)
250
+ .plus(staderDepositApy);
251
+ const totalBorrowApy = borrowApy.plus(nearBorrowApy).plus(plyBorrowApy);
252
+ const sum = helpers.calcNetApy(suppliedValue, totalDepositApy, borrowedValue, totalBorrowApy);
253
+ return {
254
+ sum,
255
+ suppliedValue,
256
+ borrowedValue,
257
+ };
258
+ }
259
+ }
260
+ exports.MoneyMarketRead = MoneyMarketRead;
261
+ tslib_1.__decorate([
262
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
263
+ ], MoneyMarketRead.prototype, "getUnderlyingPrice", null);
264
+ tslib_1.__decorate([
265
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
266
+ ], MoneyMarketRead.prototype, "getPlyPrice", null);
267
+ tslib_1.__decorate([
268
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
269
+ ], MoneyMarketRead.prototype, "getRewardSpeeds", null);
270
+ tslib_1.__decorate([
271
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
272
+ ], MoneyMarketRead.prototype, "getTotalTokenBorrowed", null);
273
+ tslib_1.__decorate([
274
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
275
+ ], MoneyMarketRead.prototype, "getTotalTokenDeposited", null);
276
+ tslib_1.__decorate([
277
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
278
+ ], MoneyMarketRead.prototype, "getDepositAPY", null);
279
+ tslib_1.__decorate([
280
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
281
+ ], MoneyMarketRead.prototype, "getBorrowAPY", null);
282
+ tslib_1.__decorate([
283
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
284
+ ], MoneyMarketRead.prototype, "getCollateralRatio", null);
285
+ tslib_1.__decorate([
286
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
287
+ ], MoneyMarketRead.prototype, "getBorrowPlyAPY", null);
288
+ tslib_1.__decorate([
289
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
290
+ ], MoneyMarketRead.prototype, "getDepositPlyAPY", null);
291
+ tslib_1.__decorate([
292
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
293
+ ], MoneyMarketRead.prototype, "getDepositNearAPY", null);
294
+ tslib_1.__decorate([
295
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
296
+ ], MoneyMarketRead.prototype, "getBorrowNearAPY", null);
297
+ tslib_1.__decorate([
298
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
299
+ ], MoneyMarketRead.prototype, "getDepositMetaAPY", null);
300
+ tslib_1.__decorate([
301
+ (0, cache_decorator_1.cache)({ ttl: consts_1.CACHE_TIMEOUT, type: cache_decorator_1.CacheType.MEMO })
302
+ ], MoneyMarketRead.prototype, "getDepositStaderAPY", null);
303
+ class MoneyMarketReadWrite extends MoneyMarketRead {
304
+ constructor(networkConnection, auToken, underlyingAsset) {
305
+ super(networkConnection, auToken, underlyingAsset);
306
+ Object.defineProperty(this, "_EthRepayHelper", {
307
+ enumerable: true,
308
+ configurable: true,
309
+ writable: true,
310
+ value: void 0
311
+ });
312
+ this._EthRepayHelper = (0, multicall_1.createContract)(consts.networkAddresses.misc.ETHREPAYHELPER, abis.EthRepayHelperABI.abi, networkConnection.provider);
313
+ }
314
+ async deposit(amount) {
315
+ if (helpers.isSameAddress(amount.token.address, consts.ETHAddress)) {
316
+ return this.auToken.raw
317
+ .connect(this._networkConnection.signer)
318
+ .mint({ value: amount.rawAmount() });
319
+ }
320
+ else {
321
+ return this.auToken.raw
322
+ .connect(this._networkConnection.signer)
323
+ .mint(amount.rawAmount());
324
+ }
325
+ }
326
+ async borrow(amount) {
327
+ return this.auToken.raw.connect(this._networkConnection.signer).borrow(amount.rawAmount());
328
+ }
329
+ async withdraw(amount) {
330
+ if (new bignumber_js_1.default(amount.rawAmount()).lt(0)) {
331
+ return this.auToken.raw.connect(this._networkConnection.signer).redeemUnderlying(consts.INF);
332
+ }
333
+ return this.auToken.raw
334
+ .connect(this._networkConnection.signer)
335
+ .redeemUnderlying(amount.rawAmount());
336
+ }
337
+ async repay(amount) {
338
+ if (helpers.isSameAddress(amount.token.address, consts.ETHAddress)) {
339
+ return this._EthRepayHelper.raw
340
+ .connect(this._networkConnection.signer)
341
+ .repayBorrow({ value: amount.rawAmount() });
342
+ }
343
+ else {
344
+ if (new bignumber_js_1.default(amount.rawAmount()).lt(0)) {
345
+ return this.auToken.raw.connect(this._networkConnection.signer).repayBorrow(consts.INF);
346
+ }
347
+ else {
348
+ return this.auToken.raw
349
+ .connect(this._networkConnection.signer)
350
+ .repayBorrow(amount.rawAmount());
351
+ }
352
+ }
353
+ }
354
+ async enableCollateral() {
355
+ return this.env.comptroller.raw
356
+ .connect(this._networkConnection.signer)
357
+ .enterMarkets([this.auToken.address]);
358
+ }
359
+ async disableCollateral() {
360
+ return this.env.comptroller.raw
361
+ .connect(this._networkConnection.signer)
362
+ .exitMarket(this.auToken.address);
363
+ }
364
+ }
365
+ exports.MoneyMarketReadWrite = MoneyMarketReadWrite;
366
+ class MoneyMarket extends entities_1.BlockchainEntity {
367
+ constructor(address, underlying) {
368
+ super();
369
+ Object.defineProperty(this, "address", {
370
+ enumerable: true,
371
+ configurable: true,
372
+ writable: true,
373
+ value: void 0
374
+ });
375
+ Object.defineProperty(this, "underlying", {
376
+ enumerable: true,
377
+ configurable: true,
378
+ writable: true,
379
+ value: void 0
380
+ });
381
+ this.address = helpers.validateAndParseAddress(address);
382
+ this.underlying = helpers.validateAndParseAddress(underlying);
383
+ }
384
+ read(networkConnection) {
385
+ return new MoneyMarketRead(networkConnection, this.address, this.underlying);
386
+ }
387
+ readWrite(networkConnection) {
388
+ return new MoneyMarketReadWrite(networkConnection, this.address, this.underlying);
389
+ }
390
+ }
391
+ exports.MoneyMarket = MoneyMarket;
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZXlNYXJrZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJhY3RvcnMvTW9uZXlNYXJrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLHdFQUFxQztBQUNyQyxxREFBbUQ7QUFDbkQsbUNBQXlDO0FBQ3pDLHNEQUFnQztBQUNoQywwREFBb0M7QUFDcEMsc0NBQW1EO0FBQ25ELDBDQU9xQjtBQUNyQiw0REFBc0M7QUFDdEMsb0RBQXNEO0FBQ3RELDBEQUFvRjtBQVVwRixNQUFhLGVBQWdCLFNBQVEsK0JBQW9CO0lBSXZELFlBQVksaUJBQW9DLEVBQUUsT0FBZ0IsRUFBRSxlQUF3QjtRQUMxRixLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUpwQjs7Ozs7V0FBa0I7UUFDbEI7Ozs7O1dBQTBDO1FBQ2pDOzs7OztXQUFhO1FBRzNCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxrQkFBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsMEJBQWMsRUFBUSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0YsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsMEJBQWMsRUFDM0IsT0FBTyxFQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUNuQixpQkFBaUIsQ0FBQyxRQUFRLENBQzNCLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGdCQUFLLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBR1ksQUFB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
@@ -1,18 +1,15 @@
1
- import { Multicall2 } from '@aurigami/contracts/typechain';
2
- import { Contract } from 'ethers';
3
- import { Result } from 'ethers/lib/utils';
4
- import { BlockchainEntityRead } from '../entities';
5
- import { NetworkConnection } from '../types';
6
- export declare class MulticallRead extends BlockchainEntityRead {
7
- readonly multicall: Multicall2;
8
- constructor(networkConnection: NetworkConnection);
9
- /**
10
- * Run multiple calls via multicall contract
11
- */
12
- aggregate(calls: {
13
- contract: Contract;
14
- method: string;
15
- args: any[];
16
- returnTypes: string[];
17
- }[]): Promise<Result[]>;
18
- }
1
+ import { Multicall2 } from '@aurigami/contracts/typechain';
2
+ import { Contract } from 'ethers';
3
+ import { Result } from 'ethers/lib/utils';
4
+ import { BlockchainEntityRead } from '../entities';
5
+ import { MulticallStatic, NetworkConnection } from '../types';
6
+ export declare class MulticallRead extends BlockchainEntityRead {
7
+ readonly multicall: Multicall2;
8
+ constructor(networkConnection: NetworkConnection);
9
+ aggregate(calls: {
10
+ contract: MulticallStatic<Contract>;
11
+ method: string;
12
+ args: any[];
13
+ returnTypes: string[];
14
+ }[]): Promise<Result[]>;
15
+ }