@paraswap/dex-lib 2.14.5 → 2.14.6
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/build/abi/maverick/pool.json +913 -0
- package/build/abi/maverick/router.json +703 -0
- package/build/dex/curve-v1/config.js +19 -19
- package/build/dex/curve-v1/config.js.map +1 -1
- package/build/dex/curve-v1-factory/config.js +2 -5
- package/build/dex/curve-v1-factory/config.js.map +1 -1
- package/build/dex/maverick/config.d.ts +4 -0
- package/build/dex/maverick/config.js +20 -0
- package/build/dex/maverick/config.js.map +1 -0
- package/build/dex/maverick/maverick-math/maverick-pool-math.d.ts +67 -0
- package/build/dex/maverick/maverick-math/maverick-pool-math.js +406 -0
- package/build/dex/maverick/maverick-math/maverick-pool-math.js.map +1 -0
- package/build/dex/maverick/maverick-math/maverick-sol-math.d.ts +17 -0
- package/build/dex/maverick/maverick-math/maverick-sol-math.js +139 -0
- package/build/dex/maverick/maverick-math/maverick-sol-math.js.map +1 -0
- package/build/dex/maverick/maverick-pool.d.ts +41 -0
- package/build/dex/maverick/maverick-pool.js +130 -0
- package/build/dex/maverick/maverick-pool.js.map +1 -0
- package/build/dex/maverick/maverick.d.ts +42 -0
- package/build/dex/maverick/maverick.js +174 -0
- package/build/dex/maverick/maverick.js.map +1 -0
- package/build/dex/maverick/subgraph-queries.d.ts +4 -0
- package/build/dex/maverick/subgraph-queries.js +114 -0
- package/build/dex/maverick/subgraph-queries.js.map +1 -0
- package/build/dex/maverick/types.d.ts +46 -0
- package/build/dex/{test-dex → maverick}/types.js.map +1 -1
- package/package.json +1 -1
- package/src/dex/curve-v1/config.ts +19 -19
- package/src/dex/curve-v1/curve-v1-e2e.test.ts +89 -0
- package/src/dex/curve-v1-factory/config.ts +2 -5
- package/tests/constants-e2e.ts +10 -0
- package/build/dex/aave-v3/tokens/arbitrum.json +0 -50
- package/build/dex/aave-v3/tokens/avalanche.json +0 -74
- package/build/dex/aave-v3/tokens/fantom.json +0 -62
- package/build/dex/aave-v3/tokens/optimism.json +0 -50
- package/build/dex/aave-v3/tokens/polygon.json +0 -116
- package/build/dex/hashflow/rate-fetcher.d.ts +0 -14
- package/build/dex/hashflow/rate-fetcher.js +0 -37
- package/build/dex/hashflow/rate-fetcher.js.map +0 -1
- package/build/dex/hashflow/validators.d.ts +0 -3
- package/build/dex/hashflow/validators.js +0 -12
- package/build/dex/hashflow/validators.js.map +0 -1
- package/build/dex/test-dex/config.d.ts +0 -4
- package/build/dex/test-dex/config.js +0 -15
- package/build/dex/test-dex/config.js.map +0 -1
- package/build/dex/test-dex/test-dex-pool.d.ts +0 -39
- package/build/dex/test-dex/test-dex-pool.js +0 -63
- package/build/dex/test-dex/test-dex-pool.js.map +0 -1
- package/build/dex/test-dex/test-dex.d.ts +0 -37
- package/build/dex/test-dex/test-dex.js +0 -126
- package/build/dex/test-dex/test-dex.js.map +0 -1
- package/build/dex/test-dex/types.d.ts +0 -6
- package/build/dex/woo-fi-v2/woo-fi-math.d.ts +0 -16
- package/build/dex/woo-fi-v2/woo-fi-math.js +0 -137
- package/build/dex/woo-fi-v2/woo-fi-math.js.map +0 -1
- package/build/lib/validators.d.ts +0 -7
- package/build/lib/validators.js +0 -27
- package/build/lib/validators.js.map +0 -1
- /package/build/dex/{test-dex → maverick}/types.js +0 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MaverickPoolMath = void 0;
|
|
4
|
+
const maverick_sol_math_1 = require("./maverick-sol-math");
|
|
5
|
+
const bigint_constants_1 = require("../../../bigint-constants");
|
|
6
|
+
class MaverickPoolMath {
|
|
7
|
+
constructor(dexKey, epsilon, fee, protocolFeeRatio, spreadFeeMultiplier, twauLookback, uShiftMultiplier, w, k, h) {
|
|
8
|
+
this.dexKey = dexKey;
|
|
9
|
+
this.epsilon = epsilon;
|
|
10
|
+
this.fee = fee;
|
|
11
|
+
this.protocolFeeRatio = protocolFeeRatio;
|
|
12
|
+
this.spreadFeeMultiplier = spreadFeeMultiplier;
|
|
13
|
+
this.twauLookback = twauLookback;
|
|
14
|
+
this.uShiftMultiplier = uShiftMultiplier;
|
|
15
|
+
this.w = w;
|
|
16
|
+
this.k = k;
|
|
17
|
+
this.h = h;
|
|
18
|
+
this.timestamp = 0n;
|
|
19
|
+
this.maxSpreadFee = BigInt(0.99e18) - this.fee;
|
|
20
|
+
this.sk = maverick_sol_math_1.MMath.sqrt(k);
|
|
21
|
+
this.sw = maverick_sol_math_1.MMath.sqrt(w);
|
|
22
|
+
this.state = {
|
|
23
|
+
quoteBalance: 0n,
|
|
24
|
+
baseBalance: 0n,
|
|
25
|
+
u: 0n,
|
|
26
|
+
twau: 0n,
|
|
27
|
+
lastTimestamp: 0n,
|
|
28
|
+
};
|
|
29
|
+
this.gammas = [
|
|
30
|
+
maverick_sol_math_1.MMath.div(bigint_constants_1.BI_POWS[18], maverick_sol_math_1.MMath.mul(this.sk, this.sw) - this.sw),
|
|
31
|
+
maverick_sol_math_1.MMath.div(this.sw, this.w - bigint_constants_1.BI_POWS[18]),
|
|
32
|
+
maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(this.sw, this.sk), this.sk - bigint_constants_1.BI_POWS[18]),
|
|
33
|
+
];
|
|
34
|
+
this.lambdas = [this.gammas[2], this.gammas[1], this.gammas[0]];
|
|
35
|
+
const gamma_h = bigint_constants_1.BI_POWS[18] + maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(h, this.gammas[2]), this.gammas[1]);
|
|
36
|
+
this.binThreshold = maverick_sol_math_1.MMath.div(this.gammas[2], maverick_sol_math_1.MMath.mul(this.lambdas[0], gamma_h));
|
|
37
|
+
this.lamb_w = maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(this.h, this.lambdas[0]), this.sw);
|
|
38
|
+
this.lamb2_w = maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(this.lambdas[0], this.lambdas[0]), maverick_sol_math_1.MMath.div(bigint_constants_1.BI_POWS[18], this.w) - bigint_constants_1.BI_POWS[18]), maverick_sol_math_1.MMath.mul(this.h, this.h));
|
|
39
|
+
this.ind_1_a2 = bigint_constants_1.BI_POWS[18] - maverick_sol_math_1.MMath.sMul(2n, this.lamb_w) + this.lamb2_w;
|
|
40
|
+
this.gamma_bar = maverick_sol_math_1.MMath.div(this.gammas[2], bigint_constants_1.BI_POWS[18] +
|
|
41
|
+
maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(this.h, this.gammas[2]), this.gammas[1]));
|
|
42
|
+
this.gam_w = maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.div(this.gamma_bar, this.sw), this.sk);
|
|
43
|
+
this.gam2_k = maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(this.gamma_bar, this.gamma_bar), maverick_sol_math_1.MMath.div(bigint_constants_1.BI_POWS[18], this.sk) - bigint_constants_1.BI_POWS[18]);
|
|
44
|
+
this.ind_0_a2 = this.gam2_k - this.gam_w;
|
|
45
|
+
this.lambda_bar = maverick_sol_math_1.MMath.div(bigint_constants_1.BI_POWS[18], maverick_sol_math_1.MMath.div(bigint_constants_1.BI_POWS[18], this.lambdas[0]) +
|
|
46
|
+
maverick_sol_math_1.MMath.div(this.h, this.lambdas[1]));
|
|
47
|
+
this.lam2_kw = maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(this.lambda_bar, this.lambda_bar), this.sw), bigint_constants_1.BI_POWS[18] - this.sk);
|
|
48
|
+
this.ind_2_a2 = -this.lambda_bar + this.lam2_kw;
|
|
49
|
+
}
|
|
50
|
+
swap(state, timestamp, amount, swapForBase) {
|
|
51
|
+
if (state.quoteBalance == 0n || state.baseBalance == 0n) {
|
|
52
|
+
return 0n;
|
|
53
|
+
}
|
|
54
|
+
this.state = state;
|
|
55
|
+
this.timestamp = timestamp;
|
|
56
|
+
if (swapForBase) {
|
|
57
|
+
return this._swapQuoteForBase(amount, true);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return this._swapBaseForQuote(amount, true);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
_spreadFee() {
|
|
64
|
+
const _twau = this._calculateTwau(this.state.u);
|
|
65
|
+
if (this.state.u > _twau) {
|
|
66
|
+
return maverick_sol_math_1.MMath.min(this.maxSpreadFee, maverick_sol_math_1.MMath.mul(bigint_constants_1.BI_POWS[18] - maverick_sol_math_1.MMath.div(_twau, this.state.u), this.spreadFeeMultiplier));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return maverick_sol_math_1.MMath.max(-this.maxSpreadFee, maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.div(this.state.u, _twau) - bigint_constants_1.BI_POWS[18], this.spreadFeeMultiplier));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
_getTimestamp() {
|
|
73
|
+
if (this.timestamp > 0n) {
|
|
74
|
+
return this.timestamp;
|
|
75
|
+
}
|
|
76
|
+
return BigInt(parseInt((new Date().getTime() / 1000).toFixed(0)));
|
|
77
|
+
}
|
|
78
|
+
_calculateTwau(newU) {
|
|
79
|
+
const timeDiff = this._getTimestamp() - this.state.lastTimestamp;
|
|
80
|
+
if ((timeDiff == 0n && this.state.twau == 0n) ||
|
|
81
|
+
timeDiff >= this.twauLookback) {
|
|
82
|
+
return newU;
|
|
83
|
+
}
|
|
84
|
+
const a = maverick_sol_math_1.MMath.div(this.twauLookback - timeDiff, this.twauLookback);
|
|
85
|
+
return maverick_sol_math_1.MMath.mul(a, this.state.twau) + maverick_sol_math_1.MMath.mul(bigint_constants_1.BI_POWS[18] - a, newU);
|
|
86
|
+
}
|
|
87
|
+
_addFeeToEscrow(amount, isQuote) {
|
|
88
|
+
const spreadFee = this._spreadFee();
|
|
89
|
+
let txFee;
|
|
90
|
+
let assetFee;
|
|
91
|
+
if (isQuote) {
|
|
92
|
+
if (spreadFee < 0) {
|
|
93
|
+
txFee = this.fee - spreadFee;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
txFee = this.fee;
|
|
97
|
+
}
|
|
98
|
+
txFee = maverick_sol_math_1.MMath.min(BigInt(0.999e18), txFee);
|
|
99
|
+
assetFee = maverick_sol_math_1.MMath.mul(amount, txFee);
|
|
100
|
+
const protocolFee = maverick_sol_math_1.MMath.mul(assetFee, this.protocolFeeRatio);
|
|
101
|
+
this.state.quoteBalance += assetFee - protocolFee;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
if (spreadFee > 0) {
|
|
105
|
+
txFee = this.fee + spreadFee;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
txFee = this.fee;
|
|
109
|
+
}
|
|
110
|
+
txFee = maverick_sol_math_1.MMath.min(BigInt(0.999e18), txFee);
|
|
111
|
+
assetFee = maverick_sol_math_1.MMath.mul(amount, txFee);
|
|
112
|
+
const protocolFee = maverick_sol_math_1.MMath.mul(assetFee, this.protocolFeeRatio);
|
|
113
|
+
this.state.baseBalance += assetFee - protocolFee;
|
|
114
|
+
}
|
|
115
|
+
return amount - assetFee;
|
|
116
|
+
}
|
|
117
|
+
_quadraticRoots(a, b, c) {
|
|
118
|
+
const d = maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.mul(b, b) - maverick_sol_math_1.MMath.sMul(4n, maverick_sol_math_1.MMath.mul(a, c))), maverick_sol_math_1.MMath.sMul(2n, a));
|
|
119
|
+
return maverick_sol_math_1.MMath.max(0n, maverick_sol_math_1.MMath.div(-b, maverick_sol_math_1.MMath.sMul(2n, a)) + d);
|
|
120
|
+
}
|
|
121
|
+
_getActiveInd() {
|
|
122
|
+
if (this.state.quoteBalance <=
|
|
123
|
+
maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(this.state.baseBalance, this.state.u), this.binThreshold)) {
|
|
124
|
+
return 0;
|
|
125
|
+
}
|
|
126
|
+
if (maverick_sol_math_1.MMath.mul(this.state.baseBalance, this.state.u) <=
|
|
127
|
+
maverick_sol_math_1.MMath.mul(this.state.quoteBalance, this.binThreshold)) {
|
|
128
|
+
return 2;
|
|
129
|
+
}
|
|
130
|
+
return 1;
|
|
131
|
+
}
|
|
132
|
+
_getAssetsInActiveBin() {
|
|
133
|
+
const activeInd = this._getActiveInd();
|
|
134
|
+
const su = maverick_sol_math_1.MMath.sqrt(this.state.u);
|
|
135
|
+
let activeInfo = {};
|
|
136
|
+
if (activeInd == 1) {
|
|
137
|
+
const _lamb_w = this.lamb_w;
|
|
138
|
+
const quotelamb = maverick_sol_math_1.MMath.mul(this.state.quoteBalance, this.lamb2_w);
|
|
139
|
+
activeInfo.c =
|
|
140
|
+
maverick_sol_math_1.MMath.mul(this.state.u, this.state.baseBalance) -
|
|
141
|
+
this.state.quoteBalance;
|
|
142
|
+
activeInfo.a0 = maverick_sol_math_1.MMath.mul(this.state.quoteBalance, maverick_sol_math_1.MMath.mul(_lamb_w, activeInfo.c) + quotelamb);
|
|
143
|
+
activeInfo.a1 =
|
|
144
|
+
activeInfo.c +
|
|
145
|
+
maverick_sol_math_1.MMath.mul(_lamb_w, maverick_sol_math_1.MMath.sMul(2n, this.state.quoteBalance) - activeInfo.c) -
|
|
146
|
+
maverick_sol_math_1.MMath.sMul(2n, quotelamb);
|
|
147
|
+
activeInfo.q1 = this._quadraticRoots(this.ind_1_a2, activeInfo.a1, activeInfo.a0);
|
|
148
|
+
activeInfo.q0 = this.state.quoteBalance - activeInfo.q1;
|
|
149
|
+
activeInfo.q2 = 0n;
|
|
150
|
+
activeInfo.b2 = maverick_sol_math_1.MMath.div(activeInfo.q0, this.state.u);
|
|
151
|
+
activeInfo.b1 = this.state.baseBalance - activeInfo.b2;
|
|
152
|
+
activeInfo.b0 = 0n;
|
|
153
|
+
activeInfo.L = maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(activeInfo.q0, this.lambdas[0]), su);
|
|
154
|
+
}
|
|
155
|
+
else if (activeInd == 0) {
|
|
156
|
+
activeInfo.a0 = maverick_sol_math_1.MMath.mul(this.state.baseBalance, maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(this.gamma_bar, this.state.quoteBalance), this.sw), this.state.u) + maverick_sol_math_1.MMath.mul(this.state.baseBalance, this.gam2_k));
|
|
157
|
+
activeInfo.a1 =
|
|
158
|
+
maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.div(this.state.quoteBalance, this.state.u), bigint_constants_1.BI_POWS[18] - maverick_sol_math_1.MMath.mul(this.sw, this.gamma_bar)) +
|
|
159
|
+
maverick_sol_math_1.MMath.mul(this.state.baseBalance, this.gam_w - maverick_sol_math_1.MMath.sMul(2n, this.gam2_k));
|
|
160
|
+
activeInfo.b0 = this._quadraticRoots(this.ind_0_a2, activeInfo.a1, activeInfo.a0);
|
|
161
|
+
activeInfo.L = maverick_sol_math_1.MMath.mul(this.state.baseBalance - activeInfo.b0, maverick_sol_math_1.MMath.mul(this.gamma_bar, su));
|
|
162
|
+
activeInfo.b1 = maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(this.h, activeInfo.L), su), this.gammas[1]);
|
|
163
|
+
activeInfo.b2 = this.state.baseBalance - activeInfo.b0 - activeInfo.b1;
|
|
164
|
+
activeInfo.q0 = this.state.quoteBalance;
|
|
165
|
+
activeInfo.q1 = 0n;
|
|
166
|
+
activeInfo.q2 = 0n;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
activeInfo.a0 = maverick_sol_math_1.MMath.mul(this.state.quoteBalance, maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(this.state.baseBalance, this.state.u), this.w), this.lambda_bar), this.sk) + maverick_sol_math_1.MMath.mul(this.state.quoteBalance, this.lam2_kw));
|
|
170
|
+
activeInfo.a1 =
|
|
171
|
+
maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(this.state.baseBalance, this.state.u), maverick_sol_math_1.MMath.mul(this.sk, this.sw - maverick_sol_math_1.MMath.mul(this.w, this.lambda_bar))) +
|
|
172
|
+
maverick_sol_math_1.MMath.mul(this.state.quoteBalance, this.lambda_bar - maverick_sol_math_1.MMath.mul(bigint_constants_1.BI_POWS[18] + bigint_constants_1.BI_POWS[18], this.lam2_kw));
|
|
173
|
+
activeInfo.q2 = this._quadraticRoots(this.ind_2_a2, activeInfo.a1, activeInfo.a0);
|
|
174
|
+
activeInfo.L = maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(this.state.quoteBalance - activeInfo.q2, this.lambda_bar), su);
|
|
175
|
+
activeInfo.q0 = maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(activeInfo.L, su), this.lambdas[0]);
|
|
176
|
+
activeInfo.q1 = this.state.quoteBalance - activeInfo.q0 - activeInfo.q2;
|
|
177
|
+
activeInfo.b0 = 0n;
|
|
178
|
+
activeInfo.b1 = 0n;
|
|
179
|
+
activeInfo.b2 = this.state.baseBalance;
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
base: [activeInfo.b0, activeInfo.b1, activeInfo.b2],
|
|
183
|
+
quote: [activeInfo.q0, activeInfo.q1, activeInfo.q2],
|
|
184
|
+
L: activeInfo.L,
|
|
185
|
+
activeInd: activeInd,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
_computeQuoteForBaseBin(quoteIn, binInd, assetInfo) {
|
|
189
|
+
if (quoteIn < 0) {
|
|
190
|
+
throw new Error(`Error_${this.dexKey}_Pool: Negative Swap`);
|
|
191
|
+
}
|
|
192
|
+
let binBase = assetInfo.base[binInd];
|
|
193
|
+
let binQuote = assetInfo.quote[binInd];
|
|
194
|
+
let L = assetInfo.L;
|
|
195
|
+
if (binInd == 1) {
|
|
196
|
+
L = maverick_sol_math_1.MMath.mul(L, this.h);
|
|
197
|
+
}
|
|
198
|
+
let spHigh;
|
|
199
|
+
let spLow;
|
|
200
|
+
if (binInd == 0) {
|
|
201
|
+
spHigh = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.div(this.state.u, this.w));
|
|
202
|
+
spLow = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.div(this.state.u, this.w), this.k));
|
|
203
|
+
}
|
|
204
|
+
else if (binInd == 1) {
|
|
205
|
+
spHigh = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.mul(this.state.u, this.w));
|
|
206
|
+
spLow = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.div(this.state.u, this.w));
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
spHigh = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(this.state.u, this.w), this.k));
|
|
210
|
+
spLow = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.mul(this.state.u, this.w));
|
|
211
|
+
}
|
|
212
|
+
let qo = maverick_sol_math_1.MMath.mul(L, spLow);
|
|
213
|
+
let bo = maverick_sol_math_1.MMath.div(L, spHigh);
|
|
214
|
+
let maxQuote = maverick_sol_math_1.MMath.mul(L, spHigh) - qo;
|
|
215
|
+
let excessQuote = maverick_sol_math_1.MMath.max(0n, quoteIn + binQuote - maxQuote);
|
|
216
|
+
let newPrice;
|
|
217
|
+
let baseOut;
|
|
218
|
+
if (excessQuote > 0n) {
|
|
219
|
+
baseOut = binBase;
|
|
220
|
+
newPrice = 0n;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
const B = bo + binBase;
|
|
224
|
+
const Q = binQuote + qo + quoteIn;
|
|
225
|
+
baseOut = maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(B, quoteIn), Q);
|
|
226
|
+
newPrice = maverick_sol_math_1.MMath.div(Q, B - baseOut);
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
quoteDelta: quoteIn - excessQuote,
|
|
230
|
+
baseDelta: -baseOut,
|
|
231
|
+
excess: excessQuote,
|
|
232
|
+
newPrice: newPrice,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
_computeBaseForQuoteBin(baseIn, binInd, assetInfo) {
|
|
236
|
+
if (baseIn < 0) {
|
|
237
|
+
throw new Error(`Error_${this.dexKey}_Pool: Negative Swap`);
|
|
238
|
+
}
|
|
239
|
+
let binBase = assetInfo.base[binInd];
|
|
240
|
+
let binQuote = assetInfo.quote[binInd];
|
|
241
|
+
let L = assetInfo.L;
|
|
242
|
+
if (binInd == 1) {
|
|
243
|
+
L = maverick_sol_math_1.MMath.mul(L, this.h);
|
|
244
|
+
}
|
|
245
|
+
let spHigh;
|
|
246
|
+
let spLow;
|
|
247
|
+
if (binInd == 0) {
|
|
248
|
+
spHigh = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.div(this.state.u, this.w));
|
|
249
|
+
spLow = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.div(this.state.u, this.w), this.k));
|
|
250
|
+
}
|
|
251
|
+
else if (binInd == 1) {
|
|
252
|
+
spHigh = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.mul(this.state.u, this.w));
|
|
253
|
+
spLow = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.div(this.state.u, this.w));
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
spHigh = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(this.state.u, this.w), this.k));
|
|
257
|
+
spLow = maverick_sol_math_1.MMath.sqrt(maverick_sol_math_1.MMath.mul(this.state.u, this.w));
|
|
258
|
+
}
|
|
259
|
+
let qo = maverick_sol_math_1.MMath.mul(L, spLow);
|
|
260
|
+
let bo = maverick_sol_math_1.MMath.div(L, spHigh);
|
|
261
|
+
let maxBase = maverick_sol_math_1.MMath.div(L, spLow) - bo;
|
|
262
|
+
let excessBase = maverick_sol_math_1.MMath.max(0n, baseIn + binBase - maxBase);
|
|
263
|
+
let newPrice;
|
|
264
|
+
let quoteOut;
|
|
265
|
+
if (excessBase > 0) {
|
|
266
|
+
quoteOut = binQuote;
|
|
267
|
+
newPrice = 0n;
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
const B = bo + binBase + baseIn;
|
|
271
|
+
const Q = binQuote + qo;
|
|
272
|
+
quoteOut = maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(Q, baseIn), B);
|
|
273
|
+
newPrice = maverick_sol_math_1.MMath.div(Q - quoteOut, B);
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
quoteDelta: -quoteOut,
|
|
277
|
+
baseDelta: baseIn - excessBase,
|
|
278
|
+
excess: excessBase,
|
|
279
|
+
newPrice: newPrice,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
_boundaryCheck(assetInfo, swapInfo, currentInd, isQuote) {
|
|
283
|
+
let alpha = bigint_constants_1.BI_POWS[18] + maverick_sol_math_1.MMath.mul(this.epsilon, this.w - bigint_constants_1.BI_POWS[18]);
|
|
284
|
+
if (isQuote) {
|
|
285
|
+
const upperSlip = maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(this.h, alpha - bigint_constants_1.BI_POWS[18]), this.sw);
|
|
286
|
+
const check = currentInd == 2 ||
|
|
287
|
+
(currentInd == 1 &&
|
|
288
|
+
assetInfo.quote[1] +
|
|
289
|
+
swapInfo.quoteDelta -
|
|
290
|
+
maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(assetInfo.base[1] + swapInfo.baseDelta, this.state.u), alpha) >
|
|
291
|
+
maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(upperSlip, assetInfo.L), maverick_sol_math_1.MMath.sqrt(this.state.u)));
|
|
292
|
+
return { check, alpha };
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
const lowerSlip = maverick_sol_math_1.MMath.mul(this.h, maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.div(bigint_constants_1.BI_POWS[18], alpha) - bigint_constants_1.BI_POWS[18], this.sw));
|
|
296
|
+
const check = currentInd == 0 ||
|
|
297
|
+
(currentInd == 1 &&
|
|
298
|
+
assetInfo.quote[1] +
|
|
299
|
+
swapInfo.quoteDelta -
|
|
300
|
+
maverick_sol_math_1.MMath.div(maverick_sol_math_1.MMath.mul(assetInfo.base[1] + swapInfo.baseDelta, this.state.u), alpha) <
|
|
301
|
+
maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.mul(lowerSlip, assetInfo.L), maverick_sol_math_1.MMath.sqrt(this.state.u)));
|
|
302
|
+
return { check, alpha };
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
_swapQuoteForBase(quoteIn, doUUpdate) {
|
|
306
|
+
if (quoteIn < 0) {
|
|
307
|
+
throw new Error(`Error_${this.dexKey}_Pool: Insufficient Swap`);
|
|
308
|
+
}
|
|
309
|
+
if (doUUpdate) {
|
|
310
|
+
quoteIn = this._addFeeToEscrow(quoteIn, true);
|
|
311
|
+
}
|
|
312
|
+
const assetInfo = this._getAssetsInActiveBin();
|
|
313
|
+
let currentInd = assetInfo.activeInd;
|
|
314
|
+
const swapInfo = [
|
|
315
|
+
this._computeQuoteForBaseBin(quoteIn, currentInd, assetInfo),
|
|
316
|
+
];
|
|
317
|
+
let baseOut = -swapInfo[0].baseDelta;
|
|
318
|
+
let counter = 0;
|
|
319
|
+
while (true) {
|
|
320
|
+
if (swapInfo[counter].excess == 0n) {
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
counter++;
|
|
324
|
+
currentInd++;
|
|
325
|
+
if (currentInd > 2) {
|
|
326
|
+
throw new Error(`Error_${this.dexKey}_Pool: Not enough base`);
|
|
327
|
+
}
|
|
328
|
+
swapInfo[counter] = this._computeQuoteForBaseBin(swapInfo[counter - 1].excess, currentInd, assetInfo);
|
|
329
|
+
baseOut -= swapInfo[counter].baseDelta;
|
|
330
|
+
}
|
|
331
|
+
if (doUUpdate && this.uShiftMultiplier > 0) {
|
|
332
|
+
let { check, alpha } = this._boundaryCheck(assetInfo, swapInfo[counter], currentInd, true);
|
|
333
|
+
if (check) {
|
|
334
|
+
let edgePrice = maverick_sol_math_1.MMath.mul(this.state.u, alpha);
|
|
335
|
+
let newU = maverick_sol_math_1.MMath.mul(bigint_constants_1.BI_POWS[18] +
|
|
336
|
+
maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.div(swapInfo[counter].newPrice - edgePrice, edgePrice), this.uShiftMultiplier), this.state.u);
|
|
337
|
+
this._updateU(newU);
|
|
338
|
+
return this._swapQuoteForBase(quoteIn, false);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
this._executeSwap(swapInfo);
|
|
342
|
+
return baseOut;
|
|
343
|
+
}
|
|
344
|
+
_swapBaseForQuote(amount, doUUpdate) {
|
|
345
|
+
if (doUUpdate) {
|
|
346
|
+
amount = this._addFeeToEscrow(amount, false);
|
|
347
|
+
}
|
|
348
|
+
const assetInfo = this._getAssetsInActiveBin();
|
|
349
|
+
let currentInd = assetInfo.activeInd;
|
|
350
|
+
const swapInfo = [
|
|
351
|
+
this._computeBaseForQuoteBin(amount, currentInd, assetInfo),
|
|
352
|
+
];
|
|
353
|
+
let quoteOut = -swapInfo[0].quoteDelta;
|
|
354
|
+
let counter = 0;
|
|
355
|
+
while (true) {
|
|
356
|
+
if (swapInfo[counter].excess == 0n) {
|
|
357
|
+
break;
|
|
358
|
+
}
|
|
359
|
+
if (currentInd <= 0) {
|
|
360
|
+
throw new Error(`Error_${this.dexKey}_Pool: Not enough quote`);
|
|
361
|
+
}
|
|
362
|
+
counter++;
|
|
363
|
+
currentInd -= 1;
|
|
364
|
+
swapInfo[counter] = this._computeBaseForQuoteBin(swapInfo[counter - 1].excess, currentInd, assetInfo);
|
|
365
|
+
quoteOut -= swapInfo[counter].quoteDelta;
|
|
366
|
+
}
|
|
367
|
+
if (doUUpdate && this.uShiftMultiplier > 0) {
|
|
368
|
+
let { check, alpha } = this._boundaryCheck(assetInfo, swapInfo[counter], currentInd, false);
|
|
369
|
+
if (check) {
|
|
370
|
+
let edgePrice = maverick_sol_math_1.MMath.div(this.state.u, alpha);
|
|
371
|
+
let newU = maverick_sol_math_1.MMath.mul(bigint_constants_1.BI_POWS[18] +
|
|
372
|
+
maverick_sol_math_1.MMath.mul(maverick_sol_math_1.MMath.div(swapInfo[counter].newPrice - edgePrice, edgePrice), this.uShiftMultiplier), this.state.u);
|
|
373
|
+
this._updateU(newU);
|
|
374
|
+
return this._swapBaseForQuote(amount, false);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
this._executeSwap(swapInfo);
|
|
378
|
+
return quoteOut;
|
|
379
|
+
}
|
|
380
|
+
_executeSwap(swapInfo) {
|
|
381
|
+
let _baseBalance = this.state.baseBalance;
|
|
382
|
+
let _quoteBalance = this.state.quoteBalance;
|
|
383
|
+
for (let i = 0; i < swapInfo.length; i++) {
|
|
384
|
+
const swapInfoInstance = swapInfo[i];
|
|
385
|
+
_baseBalance += swapInfoInstance.baseDelta;
|
|
386
|
+
_quoteBalance += swapInfoInstance.quoteDelta;
|
|
387
|
+
}
|
|
388
|
+
this.state.baseBalance = _baseBalance;
|
|
389
|
+
this.state.quoteBalance = _quoteBalance;
|
|
390
|
+
}
|
|
391
|
+
_updateU(newU) {
|
|
392
|
+
if (newU <= 0) {
|
|
393
|
+
throw new Error(`Error_${this.dexKey}_Pool: u out of bounds`);
|
|
394
|
+
}
|
|
395
|
+
if (this.state.lastTimestamp == 0n) {
|
|
396
|
+
this.state.twau = newU;
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
this.state.twau = this._calculateTwau(this.state.u);
|
|
400
|
+
}
|
|
401
|
+
this.state.lastTimestamp = this.timestamp;
|
|
402
|
+
this.state.u = newU;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
exports.MaverickPoolMath = MaverickPoolMath;
|
|
406
|
+
//# sourceMappingURL=maverick-pool-math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maverick-pool-math.js","sourceRoot":"","sources":["../../../../src/dex/maverick/maverick-math/maverick-pool-math.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class MMath {
|
|
2
|
+
static ONE: bigint;
|
|
3
|
+
static MAX_POW_RELATIVE_ERROR: bigint;
|
|
4
|
+
static abs(x: bigint): bigint;
|
|
5
|
+
static min(a: bigint, b: bigint): bigint;
|
|
6
|
+
static max(a: bigint, b: bigint): bigint;
|
|
7
|
+
static add(a: bigint, b: bigint): bigint;
|
|
8
|
+
static sub(a: bigint, b: bigint): bigint;
|
|
9
|
+
static mul(a: bigint, b: bigint): bigint;
|
|
10
|
+
static mulUpFixed(a: bigint, b: bigint): bigint;
|
|
11
|
+
static div(a: bigint, b: bigint): bigint;
|
|
12
|
+
static sqrt(x: bigint): bigint;
|
|
13
|
+
static sDivDownFixed(a: bigint, b: bigint): bigint;
|
|
14
|
+
static sMulUpFixed(a: bigint, b: bigint): bigint;
|
|
15
|
+
static sMul(a: bigint, b: bigint): bigint;
|
|
16
|
+
static sMulDownFixed(a: bigint, b: bigint): bigint;
|
|
17
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MMath = void 0;
|
|
4
|
+
const bigint_constants_1 = require("../../../bigint-constants");
|
|
5
|
+
const utils_1 = require("../../../utils");
|
|
6
|
+
const UNIT = bigint_constants_1.BI_POWS[18];
|
|
7
|
+
class MMath {
|
|
8
|
+
static abs(x) {
|
|
9
|
+
return x < 0n ? -x : x;
|
|
10
|
+
}
|
|
11
|
+
static min(a, b) {
|
|
12
|
+
return a < b ? a : b;
|
|
13
|
+
}
|
|
14
|
+
static max(a, b) {
|
|
15
|
+
return a >= b ? a : b;
|
|
16
|
+
}
|
|
17
|
+
static add(a, b) {
|
|
18
|
+
const c = a + b;
|
|
19
|
+
(0, utils_1._require)((b >= 0 && c >= a) || (b < 0 && c < a), 'Errors.ADD_OVERFLOW');
|
|
20
|
+
return c;
|
|
21
|
+
}
|
|
22
|
+
static sub(a, b) {
|
|
23
|
+
(0, utils_1._require)(b <= a, 'Errors.SUB_OVERFLOW');
|
|
24
|
+
const c = a - b;
|
|
25
|
+
return c;
|
|
26
|
+
}
|
|
27
|
+
static mul(a, b) {
|
|
28
|
+
if ((MMath.abs(a) * MMath.abs(b)) % UNIT > 499999999999999999n) {
|
|
29
|
+
return this.mulUpFixed(a, b);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return this.sMulDownFixed(a, b);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
static mulUpFixed(a, b) {
|
|
36
|
+
const product = a * b;
|
|
37
|
+
(0, utils_1._require)(a == 0n || product / a == b, 'Errors.MUL_OVERFLOW');
|
|
38
|
+
let isNegative = false;
|
|
39
|
+
if ((a < 0n && b > 0n) || (a > 0n && b < 0n)) {
|
|
40
|
+
isNegative = true;
|
|
41
|
+
}
|
|
42
|
+
if (product == 0n) {
|
|
43
|
+
return 0n;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
let result = (this.abs(product) - 1n) / this.ONE + 1n;
|
|
47
|
+
return isNegative ? -result : result;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
static div(a, b) {
|
|
51
|
+
return this.sDivDownFixed(a, b);
|
|
52
|
+
}
|
|
53
|
+
static sqrt(x) {
|
|
54
|
+
if (x == 0n) {
|
|
55
|
+
return 0n;
|
|
56
|
+
}
|
|
57
|
+
x = x * UNIT;
|
|
58
|
+
// Set the initial guess to the least power of two that is greater than or equal to sqrt(x).
|
|
59
|
+
let xAux = x;
|
|
60
|
+
let result = 1n;
|
|
61
|
+
if (xAux >= 0x100000000000000000000000000000000) {
|
|
62
|
+
xAux >>= 128n;
|
|
63
|
+
result <<= 64n;
|
|
64
|
+
}
|
|
65
|
+
if (xAux >= 0x10000000000000000) {
|
|
66
|
+
xAux >>= 64n;
|
|
67
|
+
result <<= 32n;
|
|
68
|
+
}
|
|
69
|
+
if (xAux >= 0x100000000) {
|
|
70
|
+
xAux >>= 32n;
|
|
71
|
+
result <<= 16n;
|
|
72
|
+
}
|
|
73
|
+
if (xAux >= 0x10000) {
|
|
74
|
+
xAux >>= 16n;
|
|
75
|
+
result <<= 8n;
|
|
76
|
+
}
|
|
77
|
+
if (xAux >= 0x100) {
|
|
78
|
+
xAux >>= 8n;
|
|
79
|
+
result <<= 4n;
|
|
80
|
+
}
|
|
81
|
+
if (xAux >= 0x10) {
|
|
82
|
+
xAux >>= 4n;
|
|
83
|
+
result <<= 2n;
|
|
84
|
+
}
|
|
85
|
+
if (xAux >= 0x8) {
|
|
86
|
+
result <<= 1n;
|
|
87
|
+
}
|
|
88
|
+
result = (result + x / result) >> 1n;
|
|
89
|
+
result = (result + x / result) >> 1n;
|
|
90
|
+
result = (result + x / result) >> 1n;
|
|
91
|
+
result = (result + x / result) >> 1n;
|
|
92
|
+
result = (result + x / result) >> 1n;
|
|
93
|
+
result = (result + x / result) >> 1n;
|
|
94
|
+
result = (result + x / result) >> 1n; // Seven iterations should be enough
|
|
95
|
+
let roundedDownResult = x / result;
|
|
96
|
+
return result >= roundedDownResult ? roundedDownResult : result;
|
|
97
|
+
}
|
|
98
|
+
// Functions that were in MathSol.ts from BalancerV2
|
|
99
|
+
static sDivDownFixed(a, b) {
|
|
100
|
+
(0, utils_1._require)(b != 0n, 'Errors.ZERO_DIVISION');
|
|
101
|
+
if (a == 0n) {
|
|
102
|
+
return 0n;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
const aInflated = a * this.ONE;
|
|
106
|
+
// _require(aInflated / a == ONE, Errors.DIV_INTERNAL); // mul overflow
|
|
107
|
+
return aInflated / b;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
static sMulUpFixed(a, b) {
|
|
111
|
+
const product = a * b;
|
|
112
|
+
(0, utils_1._require)(a == 0n || product / a == b, 'Errors.MUL_OVERFLOW');
|
|
113
|
+
if (product == 0n) {
|
|
114
|
+
return 0n;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// The traditional divUp formula is:
|
|
118
|
+
// divUp(x, y) := (x + y - 1) / y
|
|
119
|
+
// To avoid intermediate overflow in the addition, we distribute the division and get:
|
|
120
|
+
// divUp(x, y) := (x - 1) / y + 1
|
|
121
|
+
// Note that this requires x != 0, which we already tested for.
|
|
122
|
+
return (product - 1n) / this.ONE + 1n;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
static sMul(a, b) {
|
|
126
|
+
const c = a * b;
|
|
127
|
+
(0, utils_1._require)(a == 0n || c / a == b, 'Errors.MUL_OVERFLOW');
|
|
128
|
+
return c;
|
|
129
|
+
}
|
|
130
|
+
static sMulDownFixed(a, b) {
|
|
131
|
+
const product = a * b;
|
|
132
|
+
(0, utils_1._require)(a == 0n || product / a == b, 'Errors.MUL_OVERFLOW');
|
|
133
|
+
return product / this.ONE;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.MMath = MMath;
|
|
137
|
+
MMath.ONE = bigint_constants_1.BI_POWS[18]; // 18 decimal places
|
|
138
|
+
MMath.MAX_POW_RELATIVE_ERROR = bigint_constants_1.BI_POWS[4]; // 10 000
|
|
139
|
+
//# sourceMappingURL=maverick-sol-math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maverick-sol-math.js","sourceRoot":"","sources":["../../../../src/dex/maverick/maverick-math/maverick-sol-math.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Interface } from '@ethersproject/abi';
|
|
2
|
+
import { DeepReadonly } from 'ts-essentials';
|
|
3
|
+
import { Token, Address, Log, Logger, BlockHeader } from '../../types';
|
|
4
|
+
import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
|
|
5
|
+
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
6
|
+
import { MaverickPoolState } from './types';
|
|
7
|
+
import { MaverickPoolMath } from './maverick-math/maverick-pool-math';
|
|
8
|
+
export declare class MaverickEventPool extends StatefulEventSubscriber<MaverickPoolState> {
|
|
9
|
+
protected parentName: string;
|
|
10
|
+
protected dexHelper: IDexHelper;
|
|
11
|
+
address: Address;
|
|
12
|
+
quote: Token;
|
|
13
|
+
base: Token;
|
|
14
|
+
fee: number;
|
|
15
|
+
w: number;
|
|
16
|
+
h: number;
|
|
17
|
+
k: number;
|
|
18
|
+
paramChoice: number;
|
|
19
|
+
twauLookback: number;
|
|
20
|
+
uShiftMultiplier: number;
|
|
21
|
+
maxSpreadFee: number;
|
|
22
|
+
spreadFeeMultiplier: number;
|
|
23
|
+
protocolFeeRatio: number;
|
|
24
|
+
epsilon: number;
|
|
25
|
+
poolDecoder: (log: Log) => any;
|
|
26
|
+
poolInterface: Interface;
|
|
27
|
+
poolMath: MaverickPoolMath;
|
|
28
|
+
addressesSubscribed: string[];
|
|
29
|
+
handlers: {
|
|
30
|
+
[event: string]: (event: any, pool: MaverickPoolState, log: Log, blockHeader: BlockHeader) => MaverickPoolState;
|
|
31
|
+
};
|
|
32
|
+
constructor(parentName: string, dexHelper: IDexHelper, address: Address, quote: Token, base: Token, fee: number, w: number, h: number, k: number, paramChoice: number, twauLookback: number, uShiftMultiplier: number, maxSpreadFee: number, spreadFeeMultiplier: number, protocolFeeRatio: number, epsilon: number, logger: Logger);
|
|
33
|
+
protected processLog(state: DeepReadonly<MaverickPoolState>, log: Readonly<Log>, blockHeader: BlockHeader): DeepReadonly<MaverickPoolState> | null;
|
|
34
|
+
handleSwap(event: any, state: MaverickPoolState, log: Log, blockHeader: BlockHeader): MaverickPoolState;
|
|
35
|
+
handleAddLiquidity(event: any, state: MaverickPoolState, log: Log, blockHeader: BlockHeader): MaverickPoolState;
|
|
36
|
+
handleRemoveLiquidity(event: any, state: MaverickPoolState, log: Log, blockHeader: BlockHeader): MaverickPoolState;
|
|
37
|
+
scaleFromAmount(amount: bigint, token: Token): bigint;
|
|
38
|
+
scaleToAmount(amount: bigint, token: Token): bigint;
|
|
39
|
+
swap(amount: bigint, from: Token, to: Token): bigint;
|
|
40
|
+
generateState(blockNumber?: number | 'latest'): Promise<DeepReadonly<MaverickPoolState>>;
|
|
41
|
+
}
|