curvance 5.1.9 → 5.2.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.
- package/README.md +249 -65
- package/dist/abis/OptimizerReader.json +292 -1
- package/dist/chains/arbitrum.d.ts.map +1 -1
- package/dist/chains/arbitrum.js +14 -1
- package/dist/chains/arbitrum.js.map +1 -1
- package/dist/chains/index.d.ts +19 -0
- package/dist/chains/index.d.ts.map +1 -1
- package/dist/chains/index.js.map +1 -1
- package/dist/chains/monad.d.ts.map +1 -1
- package/dist/chains/monad.js +25 -2
- package/dist/chains/monad.js.map +1 -1
- package/dist/chains/services.d.ts +8 -0
- package/dist/chains/services.d.ts.map +1 -0
- package/dist/chains/services.js +9 -0
- package/dist/chains/services.js.map +1 -0
- package/dist/classes/Api.d.ts +7 -2
- package/dist/classes/Api.d.ts.map +1 -1
- package/dist/classes/Api.js +60 -24
- package/dist/classes/Api.js.map +1 -1
- package/dist/classes/BorrowableCToken.d.ts.map +1 -1
- package/dist/classes/BorrowableCToken.js +7 -2
- package/dist/classes/BorrowableCToken.js.map +1 -1
- package/dist/classes/CToken.d.ts +28 -15
- package/dist/classes/CToken.d.ts.map +1 -1
- package/dist/classes/CToken.js +217 -85
- package/dist/classes/CToken.js.map +1 -1
- package/dist/classes/DexAggregators/IDexAgg.d.ts +8 -0
- package/dist/classes/DexAggregators/IDexAgg.d.ts.map +1 -1
- package/dist/classes/DexAggregators/KyberSwap.d.ts +5 -2
- package/dist/classes/DexAggregators/KyberSwap.d.ts.map +1 -1
- package/dist/classes/DexAggregators/KyberSwap.js +41 -19
- package/dist/classes/DexAggregators/KyberSwap.js.map +1 -1
- package/dist/classes/DexAggregators/MultiDexAgg.d.ts +7 -4
- package/dist/classes/DexAggregators/MultiDexAgg.d.ts.map +1 -1
- package/dist/classes/DexAggregators/MultiDexAgg.js +62 -16
- package/dist/classes/DexAggregators/MultiDexAgg.js.map +1 -1
- package/dist/classes/DexAggregators/helpers.d.ts +1 -1
- package/dist/classes/DexAggregators/helpers.d.ts.map +1 -1
- package/dist/classes/DexAggregators/helpers.js +1 -1
- package/dist/classes/DexAggregators/helpers.js.map +1 -1
- package/dist/classes/DexAggregators/index.d.ts +0 -1
- package/dist/classes/DexAggregators/index.d.ts.map +1 -1
- package/dist/classes/DexAggregators/index.js +0 -1
- package/dist/classes/DexAggregators/index.js.map +1 -1
- package/dist/classes/LendingOptimizer.d.ts.map +1 -1
- package/dist/classes/LendingOptimizer.js +8 -2
- package/dist/classes/LendingOptimizer.js.map +1 -1
- package/dist/classes/Market.d.ts +5 -0
- package/dist/classes/Market.d.ts.map +1 -1
- package/dist/classes/Market.js +129 -30
- package/dist/classes/Market.js.map +1 -1
- package/dist/classes/NativeToken.d.ts +5 -2
- package/dist/classes/NativeToken.d.ts.map +1 -1
- package/dist/classes/NativeToken.js +5 -5
- package/dist/classes/NativeToken.js.map +1 -1
- package/dist/classes/OptimizerReader.d.ts +44 -4
- package/dist/classes/OptimizerReader.d.ts.map +1 -1
- package/dist/classes/OptimizerReader.js +133 -62
- package/dist/classes/OptimizerReader.js.map +1 -1
- package/dist/classes/PositionManager.d.ts +1 -0
- package/dist/classes/PositionManager.d.ts.map +1 -1
- package/dist/classes/PositionManager.js +25 -0
- package/dist/classes/PositionManager.js.map +1 -1
- package/dist/classes/ProtocolReader.d.ts +3 -0
- package/dist/classes/ProtocolReader.d.ts.map +1 -1
- package/dist/classes/ProtocolReader.js +34 -0
- package/dist/classes/ProtocolReader.js.map +1 -1
- package/dist/classes/Zapper.d.ts +4 -1
- package/dist/classes/Zapper.d.ts.map +1 -1
- package/dist/classes/Zapper.js +34 -9
- package/dist/classes/Zapper.js.map +1 -1
- package/dist/classes/index.d.ts +1 -0
- package/dist/classes/index.d.ts.map +1 -1
- package/dist/classes/index.js +1 -0
- package/dist/classes/index.js.map +1 -1
- package/dist/contracts/index.d.ts +248 -248
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +3 -2
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/monad-mainnet.json +1 -1
- package/dist/feePolicy.d.ts +29 -26
- package/dist/feePolicy.d.ts.map +1 -1
- package/dist/feePolicy.js +43 -34
- package/dist/feePolicy.js.map +1 -1
- package/dist/format/index.d.ts +5 -0
- package/dist/format/index.d.ts.map +1 -1
- package/dist/format/index.js +28 -0
- package/dist/format/index.js.map +1 -1
- package/dist/helpers.d.ts +247 -248
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +5 -5
- package/dist/helpers.js.map +1 -1
- package/dist/immutability.d.ts +6 -0
- package/dist/immutability.d.ts.map +1 -0
- package/dist/immutability.js +25 -0
- package/dist/immutability.js.map +1 -0
- package/dist/integrations/merkl.d.ts +9 -2
- package/dist/integrations/merkl.d.ts.map +1 -1
- package/dist/integrations/merkl.js +219 -11
- package/dist/integrations/merkl.js.map +1 -1
- package/dist/integrations/snapshot.d.ts +3 -0
- package/dist/integrations/snapshot.d.ts.map +1 -1
- package/dist/integrations/snapshot.js +47 -3
- package/dist/integrations/snapshot.js.map +1 -1
- package/dist/setup.d.ts +13 -3
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +101 -7
- package/dist/setup.js.map +1 -1
- package/package.json +7 -4
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { Contract } from "ethers";
|
|
2
|
+
import Decimal from "decimal.js";
|
|
2
3
|
import { address, curvance_read_provider } from "../types";
|
|
4
|
+
import type { Market } from "./Market";
|
|
3
5
|
export interface OptimizerCTokenData {
|
|
4
6
|
address: address;
|
|
5
7
|
allocatedAssets: bigint;
|
|
6
8
|
liquidity: bigint;
|
|
9
|
+
allocationCap: bigint;
|
|
10
|
+
/** Current allocation relative to the cap-derived max allocation. 10000 = at cap. */
|
|
11
|
+
allocationCapUtilizationBps: bigint;
|
|
7
12
|
}
|
|
8
13
|
export interface OptimizerMarketData {
|
|
9
14
|
address: address;
|
|
@@ -12,10 +17,30 @@ export interface OptimizerMarketData {
|
|
|
12
17
|
markets: OptimizerCTokenData[];
|
|
13
18
|
totalLiquidity: bigint;
|
|
14
19
|
sharePrice: bigint;
|
|
20
|
+
exchangeRateHighWatermark: bigint;
|
|
15
21
|
performanceFee: bigint;
|
|
22
|
+
numApprovedMarkets: bigint;
|
|
16
23
|
/** Pre-performance-fee weighted supply APY in WAD (1e18 = 100%). */
|
|
17
24
|
apy: bigint;
|
|
18
25
|
}
|
|
26
|
+
export interface OptimizerUnderlyingMarketAPY {
|
|
27
|
+
cToken: address;
|
|
28
|
+
market: address | null;
|
|
29
|
+
assetSymbol: string;
|
|
30
|
+
allocatedAssets: bigint;
|
|
31
|
+
allocationWeight: Decimal;
|
|
32
|
+
nativeApy: Decimal;
|
|
33
|
+
merklApy: Decimal;
|
|
34
|
+
totalApy: Decimal;
|
|
35
|
+
}
|
|
36
|
+
export interface OptimizerAPYBreakdown {
|
|
37
|
+
optimizer: address;
|
|
38
|
+
totalAssets: bigint;
|
|
39
|
+
nativeApy: Decimal;
|
|
40
|
+
merklApy: Decimal;
|
|
41
|
+
averageApy: Decimal;
|
|
42
|
+
markets: OptimizerUnderlyingMarketAPY[];
|
|
43
|
+
}
|
|
19
44
|
export interface OptimizerUserData {
|
|
20
45
|
address: address;
|
|
21
46
|
shareBalance: bigint;
|
|
@@ -32,9 +57,12 @@ export interface AllocationBound {
|
|
|
32
57
|
}
|
|
33
58
|
export interface IOptimizerReader {
|
|
34
59
|
getOptimizerAPY(optimizer: address): Promise<bigint>;
|
|
35
|
-
getOptimizerMarketData(optimizers: address[]): Promise<any[]>;
|
|
36
60
|
getOptimizerUserData(optimizers: address[], account: address): Promise<any[]>;
|
|
61
|
+
assetsAtTimestamp(account: address, cToken: address, timestamp: bigint): Promise<bigint>;
|
|
62
|
+
isBad(optimizer: address): Promise<address[]>;
|
|
63
|
+
multiIsBadCheck(optimizers: address[]): Promise<address[][]>;
|
|
37
64
|
optimalRebalance(optimizer: address, slippageBps: bigint): Promise<any>;
|
|
65
|
+
optimalRebalanceAt(optimizer: address, slippageBps: bigint, timestamp: bigint): Promise<any>;
|
|
38
66
|
}
|
|
39
67
|
export declare class OptimizerReader {
|
|
40
68
|
provider: curvance_read_provider;
|
|
@@ -43,13 +71,25 @@ export declare class OptimizerReader {
|
|
|
43
71
|
constructor(address: address, provider?: curvance_read_provider);
|
|
44
72
|
getOptimizerAPY(optimizer: address): Promise<bigint>;
|
|
45
73
|
getOptimizerMarketData(optimizers: address[]): Promise<OptimizerMarketData[]>;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Returns the optimizer APY model plus weighted Merkl LEND rewards.
|
|
76
|
+
*
|
|
77
|
+
* The native optimizer APY comes from `getOptimizerMarketData().apy`, which
|
|
78
|
+
* mirrors the on-chain reader's weighted supply APY. Per-market Merkl APYs
|
|
79
|
+
* come from SDK market tokens hydrated during `Market.getAll`/`setupChain`.
|
|
80
|
+
*/
|
|
81
|
+
getOptimizerAPYBreakdown(optimizer: address, markets?: Market[]): Promise<OptimizerAPYBreakdown>;
|
|
49
82
|
getOptimizerUserData(optimizers: address[], account: address): Promise<OptimizerUserData[]>;
|
|
83
|
+
assetsAtTimestamp(account: address, cToken: address, timestamp: bigint): Promise<bigint>;
|
|
84
|
+
isBad(optimizer: address): Promise<address[]>;
|
|
85
|
+
multiIsBadCheck(optimizers: address[]): Promise<address[][]>;
|
|
50
86
|
optimalRebalance(optimizer: address, slippageBps?: bigint): Promise<{
|
|
51
87
|
actions: ReallocationAction[];
|
|
52
88
|
bounds: AllocationBound[];
|
|
53
89
|
}>;
|
|
90
|
+
optimalRebalanceAt(optimizer: address, slippageBps: bigint, timestamp: bigint): Promise<{
|
|
91
|
+
actions: ReallocationAction[];
|
|
92
|
+
bounds: AllocationBound[];
|
|
93
|
+
}>;
|
|
54
94
|
}
|
|
55
95
|
//# sourceMappingURL=OptimizerReader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptimizerReader.d.ts","sourceRoot":"","sources":["../../src/classes/OptimizerReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"OptimizerReader.d.ts","sourceRoot":"","sources":["../../src/classes/OptimizerReader.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.OptimizerReader = void 0;
|
|
7
7
|
const ethers_1 = require("ethers");
|
|
8
|
+
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
8
9
|
const OptimizerReader_json_1 = __importDefault(require("../abis/OptimizerReader.json"));
|
|
10
|
+
const helpers_1 = require("../helpers");
|
|
9
11
|
const OPTIMIZER_VIEW_ABI = [
|
|
10
12
|
"function asset() view returns (address)",
|
|
11
13
|
"function totalAssets() view returns (uint256)",
|
|
12
14
|
"function exchangeRate() view returns (uint256)",
|
|
15
|
+
"function exchangeRateHighWatermark() view returns (uint256)",
|
|
13
16
|
"function fee() view returns (uint256)",
|
|
14
17
|
"function getApprovedMarkets() view returns (address[])",
|
|
18
|
+
"function allocationCaps(address cToken) view returns (uint256)",
|
|
15
19
|
];
|
|
16
20
|
const BORROWABLE_CTOKEN_VIEW_ABI = [
|
|
17
21
|
"function balanceOf(address owner) view returns (uint256)",
|
|
@@ -34,6 +38,33 @@ function normalizeAllocationBound(bound) {
|
|
|
34
38
|
maxBps: BigInt(bound.maxBps),
|
|
35
39
|
};
|
|
36
40
|
}
|
|
41
|
+
function calculateAllocationCapUtilizationBps(totalAssets, allocatedAssets, allocationCap) {
|
|
42
|
+
const maxAllocation = (totalAssets * allocationCap) / helpers_1.WAD;
|
|
43
|
+
return maxAllocation === 0n ? 0n : (allocatedAssets * helpers_1.BPS) / maxAllocation;
|
|
44
|
+
}
|
|
45
|
+
function normalizeRebalanceResult(data) {
|
|
46
|
+
const actions = data.actions ?? data[0] ?? [];
|
|
47
|
+
const bounds = data.bounds ?? data[1] ?? [];
|
|
48
|
+
return {
|
|
49
|
+
actions: actions.map((action) => normalizeReallocationAction(action)),
|
|
50
|
+
bounds: bounds.map((bound) => normalizeAllocationBound(bound)),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function getDefaultMarkets() {
|
|
54
|
+
return (require("../setup").all_markets ?? []);
|
|
55
|
+
}
|
|
56
|
+
function buildTokenIndex(markets) {
|
|
57
|
+
const tokens = new Map();
|
|
58
|
+
for (const market of markets) {
|
|
59
|
+
for (const token of market.tokens) {
|
|
60
|
+
const key = token.address.toLowerCase();
|
|
61
|
+
if (!tokens.has(key)) {
|
|
62
|
+
tokens.set(key, token);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return tokens;
|
|
67
|
+
}
|
|
37
68
|
class OptimizerReader {
|
|
38
69
|
provider;
|
|
39
70
|
address;
|
|
@@ -52,68 +83,98 @@ class OptimizerReader {
|
|
|
52
83
|
return BigInt(await this.contract.getOptimizerAPY(optimizer));
|
|
53
84
|
}
|
|
54
85
|
async getOptimizerMarketData(optimizers) {
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
shouldFallbackToViewOnlyOptimizerReads(error) {
|
|
67
|
-
const message = String(error?.shortMessage ?? error?.reason ?? error?.message ?? error);
|
|
68
|
-
return /static|state|write|non-view|call exception|execution reverted/i.test(message);
|
|
69
|
-
}
|
|
70
|
-
async getOptimizerMarketDataViewOnly(optimizer) {
|
|
71
|
-
const opt = new ethers_1.Contract(optimizer, OPTIMIZER_VIEW_ABI, this.provider);
|
|
72
|
-
const [asset, totalAssets, sharePrice, performanceFee, markets] = await Promise.all([
|
|
73
|
-
opt.asset(),
|
|
74
|
-
opt.totalAssets(),
|
|
75
|
-
opt.exchangeRate(),
|
|
76
|
-
opt.fee(),
|
|
77
|
-
opt.getApprovedMarkets(),
|
|
78
|
-
]);
|
|
79
|
-
const marketRows = await Promise.all(markets.map(async (market) => {
|
|
80
|
-
const cToken = new ethers_1.Contract(market, BORROWABLE_CTOKEN_VIEW_ABI, this.provider);
|
|
81
|
-
const shareBalance = await cToken.balanceOf(optimizer);
|
|
82
|
-
const [allocatedAssets, liquidity] = await Promise.all([
|
|
83
|
-
cToken.convertToAssets(shareBalance),
|
|
84
|
-
cToken.assetsHeld(),
|
|
86
|
+
return Promise.all(optimizers.map(async (optimizer) => {
|
|
87
|
+
const opt = new ethers_1.Contract(optimizer, OPTIMIZER_VIEW_ABI, this.provider);
|
|
88
|
+
const [asset, totalAssets, sharePrice, exchangeRateHighWatermark, performanceFee, markets,] = await Promise.all([
|
|
89
|
+
opt.asset(),
|
|
90
|
+
opt.totalAssets(),
|
|
91
|
+
opt.exchangeRate(),
|
|
92
|
+
opt.exchangeRateHighWatermark(),
|
|
93
|
+
opt.fee(),
|
|
94
|
+
opt.getApprovedMarkets(),
|
|
85
95
|
]);
|
|
96
|
+
const totalAssetsBig = BigInt(totalAssets);
|
|
97
|
+
const marketRows = await Promise.all(markets.map(async (market) => {
|
|
98
|
+
const cToken = new ethers_1.Contract(market, BORROWABLE_CTOKEN_VIEW_ABI, this.provider);
|
|
99
|
+
const [shareBalance, allocationCap] = await Promise.all([
|
|
100
|
+
cToken.balanceOf(optimizer),
|
|
101
|
+
opt.allocationCaps(market),
|
|
102
|
+
]);
|
|
103
|
+
const [allocatedAssets, liquidity] = await Promise.all([
|
|
104
|
+
cToken.convertToAssets(shareBalance),
|
|
105
|
+
cToken.assetsHeld(),
|
|
106
|
+
]);
|
|
107
|
+
const allocatedAssetsBig = BigInt(allocatedAssets);
|
|
108
|
+
const allocationCapBig = BigInt(allocationCap);
|
|
109
|
+
return {
|
|
110
|
+
address: market,
|
|
111
|
+
allocatedAssets: allocatedAssetsBig,
|
|
112
|
+
liquidity: BigInt(liquidity),
|
|
113
|
+
allocationCap: allocationCapBig,
|
|
114
|
+
allocationCapUtilizationBps: calculateAllocationCapUtilizationBps(totalAssetsBig, allocatedAssetsBig, allocationCapBig),
|
|
115
|
+
};
|
|
116
|
+
}));
|
|
86
117
|
return {
|
|
87
|
-
address:
|
|
88
|
-
|
|
89
|
-
|
|
118
|
+
address: optimizer,
|
|
119
|
+
asset: asset,
|
|
120
|
+
totalAssets: totalAssetsBig,
|
|
121
|
+
markets: marketRows,
|
|
122
|
+
totalLiquidity: marketRows.reduce((sum, market) => sum + market.liquidity, 0n),
|
|
123
|
+
sharePrice: BigInt(sharePrice),
|
|
124
|
+
exchangeRateHighWatermark: BigInt(exchangeRateHighWatermark),
|
|
125
|
+
performanceFee: BigInt(performanceFee),
|
|
126
|
+
numApprovedMarkets: BigInt(markets.length),
|
|
127
|
+
apy: await this.getOptimizerAPY(optimizer),
|
|
90
128
|
};
|
|
91
129
|
}));
|
|
92
|
-
return {
|
|
93
|
-
address: optimizer,
|
|
94
|
-
asset: asset,
|
|
95
|
-
totalAssets: BigInt(totalAssets),
|
|
96
|
-
markets: marketRows,
|
|
97
|
-
totalLiquidity: marketRows.reduce((sum, market) => sum + market.liquidity, 0n),
|
|
98
|
-
sharePrice: BigInt(sharePrice),
|
|
99
|
-
performanceFee: BigInt(performanceFee),
|
|
100
|
-
apy: await this.getOptimizerAPY(optimizer),
|
|
101
|
-
};
|
|
102
130
|
}
|
|
103
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Returns the optimizer APY model plus weighted Merkl LEND rewards.
|
|
133
|
+
*
|
|
134
|
+
* The native optimizer APY comes from `getOptimizerMarketData().apy`, which
|
|
135
|
+
* mirrors the on-chain reader's weighted supply APY. Per-market Merkl APYs
|
|
136
|
+
* come from SDK market tokens hydrated during `Market.getAll`/`setupChain`.
|
|
137
|
+
*/
|
|
138
|
+
async getOptimizerAPYBreakdown(optimizer, markets = getDefaultMarkets()) {
|
|
139
|
+
const [data] = await this.getOptimizerMarketData([optimizer]);
|
|
140
|
+
if (data == undefined) {
|
|
141
|
+
throw new Error(`OptimizerReader.getOptimizerAPYBreakdown: no data returned for ${optimizer}.`);
|
|
142
|
+
}
|
|
143
|
+
const tokenIndex = buildTokenIndex(markets);
|
|
144
|
+
const totalAssetsDecimal = new decimal_js_1.default(data.totalAssets.toString());
|
|
145
|
+
const nativeApy = new decimal_js_1.default(data.apy.toString()).div(helpers_1.WAD_DECIMAL);
|
|
146
|
+
let merklApy = new decimal_js_1.default(0);
|
|
147
|
+
const rows = [];
|
|
148
|
+
for (const marketData of data.markets) {
|
|
149
|
+
const token = tokenIndex.get(marketData.address.toLowerCase());
|
|
150
|
+
if (token == undefined) {
|
|
151
|
+
throw new Error(`OptimizerReader.getOptimizerAPYBreakdown: approved market ${marketData.address} ` +
|
|
152
|
+
`is not present in the provided SDK markets.`);
|
|
153
|
+
}
|
|
154
|
+
const allocationWeight = data.totalAssets === 0n
|
|
155
|
+
? new decimal_js_1.default(0)
|
|
156
|
+
: new decimal_js_1.default(marketData.allocatedAssets.toString()).div(totalAssetsDecimal);
|
|
157
|
+
const tokenNativeApy = token.getApy();
|
|
158
|
+
const tokenMerklApy = new decimal_js_1.default(token.incentiveSupplyApy ?? 0);
|
|
159
|
+
merklApy = merklApy.add(tokenMerklApy.mul(allocationWeight));
|
|
160
|
+
rows.push({
|
|
161
|
+
cToken: marketData.address,
|
|
162
|
+
market: token.market?.address ?? null,
|
|
163
|
+
assetSymbol: token.asset?.symbol ?? marketData.address,
|
|
164
|
+
allocatedAssets: marketData.allocatedAssets,
|
|
165
|
+
allocationWeight,
|
|
166
|
+
nativeApy: tokenNativeApy,
|
|
167
|
+
merklApy: tokenMerklApy,
|
|
168
|
+
totalApy: tokenNativeApy.add(tokenMerklApy),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
104
171
|
return {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
liquidity: BigInt(m.liquidity)
|
|
112
|
-
})),
|
|
113
|
-
totalLiquidity: BigInt(opt.totalLiquidity),
|
|
114
|
-
sharePrice: BigInt(opt.sharePrice),
|
|
115
|
-
performanceFee: BigInt(opt.performanceFee),
|
|
116
|
-
apy: opt.apy == null ? await this.getOptimizerAPY(opt._address) : BigInt(opt.apy),
|
|
172
|
+
optimizer: data.address,
|
|
173
|
+
totalAssets: data.totalAssets,
|
|
174
|
+
nativeApy,
|
|
175
|
+
merklApy,
|
|
176
|
+
averageApy: nativeApy.add(merklApy),
|
|
177
|
+
markets: rows,
|
|
117
178
|
};
|
|
118
179
|
}
|
|
119
180
|
async getOptimizerUserData(optimizers, account) {
|
|
@@ -124,14 +185,24 @@ class OptimizerReader {
|
|
|
124
185
|
redeemable: BigInt(opt.redeemable)
|
|
125
186
|
}));
|
|
126
187
|
}
|
|
188
|
+
async assetsAtTimestamp(account, cToken, timestamp) {
|
|
189
|
+
return BigInt(await this.contract.assetsAtTimestamp(account, cToken, timestamp));
|
|
190
|
+
}
|
|
191
|
+
async isBad(optimizer) {
|
|
192
|
+
const markets = await this.contract.isBad(optimizer);
|
|
193
|
+
return markets.map((market) => market);
|
|
194
|
+
}
|
|
195
|
+
async multiIsBadCheck(optimizers) {
|
|
196
|
+
const markets = await this.contract.multiIsBadCheck(optimizers);
|
|
197
|
+
return markets.map((row) => row.map((market) => market));
|
|
198
|
+
}
|
|
127
199
|
async optimalRebalance(optimizer, slippageBps = 0n) {
|
|
128
200
|
const data = await this.contract.optimalRebalance(optimizer, slippageBps);
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
};
|
|
201
|
+
return normalizeRebalanceResult(data);
|
|
202
|
+
}
|
|
203
|
+
async optimalRebalanceAt(optimizer, slippageBps, timestamp) {
|
|
204
|
+
const data = await this.contract.optimalRebalanceAt(optimizer, slippageBps, timestamp);
|
|
205
|
+
return normalizeRebalanceResult(data);
|
|
135
206
|
}
|
|
136
207
|
}
|
|
137
208
|
exports.OptimizerReader = OptimizerReader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptimizerReader.js","sourceRoot":"","sources":["../../src/classes/OptimizerReader.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAkC;AAClC,wFAA8C;
|
|
1
|
+
{"version":3,"file":"OptimizerReader.js","sourceRoot":"","sources":["../../src/classes/OptimizerReader.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,7 @@ export declare class PositionManager extends Calldata<IPositionManager> {
|
|
|
33
33
|
constructor(address: address, signer: curvance_signer, type: PositionManagerTypes);
|
|
34
34
|
static emptySwapAction(): Swap;
|
|
35
35
|
static getExpectedShares(deposit_ctoken: CToken, amount: bigint): Promise<bigint>;
|
|
36
|
+
private static assertVaultExpectedSharesTokensMatch;
|
|
36
37
|
static getVaultExpectedShares(deposit_ctoken: CToken, borrow_ctoken: CToken, borrow_amount: TokenInput): Promise<bigint>;
|
|
37
38
|
getDeleverageCalldata(action: DeleverageAction, slippage: bigint): `0x${string}`;
|
|
38
39
|
getLeverageCalldata(action: LeverageAction, slippage: bigint): `0x${string}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PositionManager.d.ts","sourceRoot":"","sources":["../../src/classes/PositionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAE,MAAM,EAAY,MAAM,UAAU,CAAC;AAG5C,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AACvE,MAAM,WAAW,cAAc;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3G,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACxF;AAED,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,gBAAgB,CAAC;IAC3D,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,gBAAgB,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,oBAAoB,CAAC;gBAEf,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB;IAQjF,MAAM,CAAC,eAAe,IAAI,IAAI;WAWjB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"PositionManager.d.ts","sourceRoot":"","sources":["../../src/classes/PositionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,OAAO,EAAE,MAAM,EAAY,MAAM,UAAU,CAAC;AAG5C,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AACvE,MAAM,WAAW,cAAc;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,OAAO,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACjF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3G,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACxF;AAED,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,gBAAgB,CAAC;IAC3D,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,gBAAgB,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,oBAAoB,CAAC;gBAEf,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB;IAQjF,MAAM,CAAC,eAAe,IAAI,IAAI;WAWjB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAIrE,OAAO,CAAC,MAAM,CAAC,oCAAoC;WAgCtC,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU;IAM5G,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM;IAIhE,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;IAI5D,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;CAGzF"}
|
|
@@ -33,7 +33,32 @@ class PositionManager extends Calldata_1.Calldata {
|
|
|
33
33
|
static async getExpectedShares(deposit_ctoken, amount) {
|
|
34
34
|
return deposit_ctoken.convertToShares(amount);
|
|
35
35
|
}
|
|
36
|
+
static assertVaultExpectedSharesTokensMatch(deposit_ctoken, borrow_ctoken) {
|
|
37
|
+
const depositMarket = deposit_ctoken.market;
|
|
38
|
+
const borrowMarket = borrow_ctoken.market;
|
|
39
|
+
if (depositMarket == undefined || borrowMarket == undefined) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (depositMarket === borrowMarket) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const depositChain = depositMarket.setup?.chain;
|
|
46
|
+
const borrowChain = borrowMarket.setup?.chain;
|
|
47
|
+
const sameMarket = depositMarket.address?.toLowerCase() === borrowMarket.address?.toLowerCase();
|
|
48
|
+
const sameChain = depositChain != null && borrowChain != null && depositChain === borrowChain;
|
|
49
|
+
const depositReaderKey = depositMarket.reader?.batchKey ?? null;
|
|
50
|
+
const borrowReaderKey = borrowMarket.reader?.batchKey ?? null;
|
|
51
|
+
const sameReaderDeployment = depositMarket.reader === borrowMarket.reader ||
|
|
52
|
+
(depositReaderKey != null && depositReaderKey === borrowReaderKey);
|
|
53
|
+
if (!sameMarket || !sameChain || !sameReaderDeployment) {
|
|
54
|
+
throw new Error(`Vault expected shares for deposit token ${deposit_ctoken.address} on ` +
|
|
55
|
+
`${depositChain ?? "unknown"} market ${depositMarket.address ?? "unknown"} cannot use ` +
|
|
56
|
+
`borrow token ${borrow_ctoken.address} from ${borrowChain ?? "unknown"} ` +
|
|
57
|
+
`market ${borrowMarket.address ?? "unknown"} with a different reader deployment.`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
36
60
|
static async getVaultExpectedShares(deposit_ctoken, borrow_ctoken, borrow_amount) {
|
|
61
|
+
PositionManager.assertVaultExpectedSharesTokensMatch(deposit_ctoken, borrow_ctoken);
|
|
37
62
|
const borrow_amount_as_bn = FormatConverter_1.default.decimalToBigInt(borrow_amount, borrow_ctoken.asset.decimals);
|
|
38
63
|
return deposit_ctoken.getExpectedVaultShares(borrow_amount_as_bn);
|
|
39
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PositionManager.js","sourceRoot":"","sources":["../../src/classes/PositionManager.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAsC;AAEtC,wCAA0D;AAC1D,oGAAqD;AAErD,wEAAgD;AA2BhD,MAAa,eAAgB,SAAQ,mBAA0B;IAC3D,MAAM,CAAkB;IACxB,QAAQ,CAA8B;IACtC,OAAO,CAAU;IACjB,IAAI,CAAuB;IAE3B,YAAY,OAAgB,EAAE,MAAuB,EAAE,IAA0B;QAC7E,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAA,uBAAa,EAAmB,MAAM,EAAE,OAAO,EAAE,oCAAG,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,eAAe;QAClB,OAAO;YACH,UAAU,EAAE,uBAAa;YACzB,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,uBAAa;YAC1B,MAAM,EAAE,uBAAa;YACrB,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,IAAI;SACb,CAAA;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,cAAsB,EAAE,MAAc;QACjE,OAAO,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,cAAsB,EAAE,aAAqB,EAAE,aAAyB;QACxG,MAAM,mBAAmB,GAAG,yBAAe,CAAC,eAAe,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzG,OAAO,cAAc,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IACtE,CAAC;IAED,qBAAqB,CAAC,MAAwB,EAAE,QAAgB;QAC5D,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,mBAAmB,CAAC,MAAsB,EAAE,QAAgB;QACxD,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,6BAA6B,CAAC,MAAc,EAAE,MAAsB,EAAE,QAAgB;QAClF,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9E,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"PositionManager.js","sourceRoot":"","sources":["../../src/classes/PositionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -110,6 +110,7 @@ export interface UserData {
|
|
|
110
110
|
markets: UserMarket[];
|
|
111
111
|
}
|
|
112
112
|
export interface IProtocolReader {
|
|
113
|
+
centralRegistry(): Promise<address>;
|
|
113
114
|
getAllDynamicState(account: address): Promise<any>;
|
|
114
115
|
getMarketSummaries(markets: address[], account: address): Promise<any>;
|
|
115
116
|
getMarketStates(markets: address[], account: address): Promise<any>;
|
|
@@ -137,6 +138,8 @@ export declare class ProtocolReader {
|
|
|
137
138
|
readonly batchKey: string | null;
|
|
138
139
|
private readonly staticMarketCacheKey;
|
|
139
140
|
constructor(address: address, provider?: curvance_read_provider, cacheNamespace?: string | null);
|
|
141
|
+
private assertTokenBelongsToReader;
|
|
142
|
+
getDaoAddress(): Promise<address>;
|
|
140
143
|
getAllMarketData(account?: address | null): Promise<{
|
|
141
144
|
staticMarket: StaticMarketData[];
|
|
142
145
|
dynamicMarket: DynamicMarketData[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProtocolReader.d.ts","sourceRoot":"","sources":["../../src/classes/ProtocolReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ProtocolReader.d.ts","sourceRoot":"","sources":["../../src/classes/ProtocolReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,eAAO,MAAM,YAAY;;;;;CAKxB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,uBAAuB,EAAE,OAAO,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACjD,MAAM,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC5B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACvE,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpE,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACrD,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACnD,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzJ,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAE,CAAC,CAAC;IAC3L,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzO,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACnJ,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAClK,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACtK,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3G,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxG,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC7K;AAmLD,6DAA6D;AAC7D,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED,qBAAa,cAAc;IACvB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAgB;gBAGjD,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,sBAAsB,EACjC,cAAc,GAAE,MAAM,GAAG,IAAW;IAoBxC,OAAO,CAAC,0BAA0B;IA2B5B,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBjC,gBAAgB,CAAC,OAAO,GAAE,OAAO,GAAG,IAAW;;;;;IA0B/C,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW;;;;;IAUzE,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW;;;;;;;IAYlG,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW;;;;;;;;IAexG,uBAAuB,CACzB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,OAAO,EAChB,cAAc,GAAE,OAAuB,EACvC,gBAAgB,GAAE,MAAW,EAC7B,YAAY,GAAE,MAAW,EACzB,UAAU,GAAE,MAAW;;;;;;;;;IAuBrB,iBAAiB,CACnB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,EACf,gBAAgB,EAAE,OAAO,EACzB,SAAS,EAAE,OAAO,EAClB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,OAAO,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM;;;;IAShB,oBAAoB;IAKpB,WAAW,CAAC,OAAO,EAAE,OAAO;IAK5B,kBAAkB,CAAC,OAAO,EAAE,OAAO;;;;IAQnC,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO;IAKvD,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO;;;;IAQpD,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;;;;IAQjI,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU;;;;;;;;IAuB9H,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO;IAIxD,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM;IAIrF,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO;IAIjD,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,GAAE,MAAa;;;;;;;;;IAM3G,mBAAmB,CAAC,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO;CAoCrE"}
|
|
@@ -8,12 +8,16 @@ exports.__resetProtocolReaderCache = __resetProtocolReaderCache;
|
|
|
8
8
|
const helpers_1 = require("../helpers");
|
|
9
9
|
const ProtocolReader_json_1 = __importDefault(require("../abis/ProtocolReader.json"));
|
|
10
10
|
const FormatConverter_1 = __importDefault(require("./FormatConverter"));
|
|
11
|
+
const validation_1 = require("../validation");
|
|
11
12
|
exports.AdaptorTypes = {
|
|
12
13
|
CHAINLINK: 4146809896196834135992027840844413263297648946195754575888528621153937239424n,
|
|
13
14
|
REDSTONE_CLASSIC: 112276167558285217273674630712820450209078260760085898814947528017380798039930n,
|
|
14
15
|
REDSTONE_CORE: 2n,
|
|
15
16
|
MOCK: 1337n
|
|
16
17
|
};
|
|
18
|
+
const CENTRAL_REGISTRY_ABI = [
|
|
19
|
+
"function daoAddress() view returns (address)",
|
|
20
|
+
];
|
|
17
21
|
const STATIC_MARKET_CACHE_TTL_MS = 60_000;
|
|
18
22
|
const PROVIDER_IDENTITIES = new WeakMap();
|
|
19
23
|
let nextProviderIdentity = 1;
|
|
@@ -189,6 +193,31 @@ class ProtocolReader {
|
|
|
189
193
|
cacheNamespace == null ? null : `${cacheNamespace}:${providerIdentity}:${normalizedAddress}`;
|
|
190
194
|
this.staticMarketCacheKey = this.batchKey;
|
|
191
195
|
}
|
|
196
|
+
assertTokenBelongsToReader(token, label) {
|
|
197
|
+
if (token == null) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const tokenMarket = token.market;
|
|
201
|
+
const tokenReader = tokenMarket?.reader;
|
|
202
|
+
if (tokenReader == undefined) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (tokenReader === this) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const tokenReaderKey = tokenReader.batchKey;
|
|
209
|
+
const readerKey = this.batchKey;
|
|
210
|
+
if (tokenReaderKey != null && tokenReaderKey === readerKey) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
throw new Error(`ProtocolReader ${this.address} cannot read ${label} token ${token.address} ` +
|
|
214
|
+
`from market ${tokenMarket.address ?? "unknown"} on ${tokenMarket.setup?.chain ?? "unknown"}.`);
|
|
215
|
+
}
|
|
216
|
+
async getDaoAddress() {
|
|
217
|
+
const centralRegistryAddress = (0, validation_1.validateAddress)(await this.contract.centralRegistry(), `ProtocolReader ${this.address} centralRegistry`);
|
|
218
|
+
const centralRegistry = (0, helpers_1.contractSetup)(this.provider, centralRegistryAddress, CENTRAL_REGISTRY_ABI);
|
|
219
|
+
return (0, validation_1.validateAddress)(await centralRegistry.daoAddress(), `CentralRegistry ${centralRegistryAddress} daoAddress`);
|
|
220
|
+
}
|
|
192
221
|
async getAllMarketData(account = null) {
|
|
193
222
|
if (account == null || account === helpers_1.EMPTY_ADDRESS) {
|
|
194
223
|
const [staticMarket, dynamicMarket] = await Promise.all([
|
|
@@ -212,6 +241,7 @@ class ProtocolReader {
|
|
|
212
241
|
};
|
|
213
242
|
}
|
|
214
243
|
async maxRedemptionOf(account, ctoken, bufferTime = 0n) {
|
|
244
|
+
this.assertTokenBelongsToReader(ctoken, "redemption");
|
|
215
245
|
const data = await this.contract.maxRedemptionOf(account, ctoken.address, bufferTime);
|
|
216
246
|
return {
|
|
217
247
|
maxCollateralizedShares: BigInt(data[0]),
|
|
@@ -220,6 +250,7 @@ class ProtocolReader {
|
|
|
220
250
|
};
|
|
221
251
|
}
|
|
222
252
|
async hypotheticalRedemptionOf(account, ctoken, shares, bufferTime = 0n) {
|
|
253
|
+
this.assertTokenBelongsToReader(ctoken, "redemption");
|
|
223
254
|
const data = await this.contract.hypotheticalRedemptionOf(account, ctoken.address, shares, bufferTime);
|
|
224
255
|
return {
|
|
225
256
|
excess: BigInt(data[0]),
|
|
@@ -230,6 +261,7 @@ class ProtocolReader {
|
|
|
230
261
|
};
|
|
231
262
|
}
|
|
232
263
|
async hypotheticalBorrowOf(account, ctoken, assets, bufferTime = 0n) {
|
|
264
|
+
this.assertTokenBelongsToReader(ctoken, "borrow");
|
|
233
265
|
const data = await this.contract.hypotheticalBorrowOf(account, ctoken.address, assets, bufferTime);
|
|
234
266
|
const loanSizeError = Boolean(data[3]);
|
|
235
267
|
const oracleError = Boolean(data[4]);
|
|
@@ -296,6 +328,8 @@ class ProtocolReader {
|
|
|
296
328
|
};
|
|
297
329
|
}
|
|
298
330
|
async hypotheticalLeverageOf(account, depositCToken, borrowableCToken, deposit_amount) {
|
|
331
|
+
this.assertTokenBelongsToReader(depositCToken, "deposit");
|
|
332
|
+
this.assertTokenBelongsToReader(borrowableCToken, "borrow");
|
|
299
333
|
const assets = FormatConverter_1.default.decimalToBigInt(deposit_amount, depositCToken.asset.decimals);
|
|
300
334
|
const [currentLeverage, adjustMaxLeverage, maxLeverage, maxDebtBorrowable, loanSizeError, oracleError,] = await this.contract.hypotheticalLeverageOf(account, depositCToken.address, borrowableCToken.address, assets, 0n);
|
|
301
335
|
return {
|