@catalabs/catalyst-sdk
Version:
Catalyst AMM SDK
55 lines • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.calcPriceCurveAreaAmp = calcPriceCurveAreaAmp;
exports.calcPriceCurveLimitAmp = calcPriceCurveLimitAmp;
exports.calcPriceCurveLimitShareAmp = calcPriceCurveLimitShareAmp;
exports.calcVaultTokensToUnitsAmp = calcVaultTokensToUnitsAmp;
exports.calcUnitsToVaultTokensAmp = calcUnitsToVaultTokensAmp;
exports.calcUnitsForVaultTokensAmp = calcUnitsForVaultTokensAmp;
const math_lib_1 = require("../math.lib");
const math_amplified_functions_1 = require("./math.amplified.functions");
function calcPriceCurveAreaAmp(input, A, W, oneMinusAmp) {
let calc = (0, math_lib_1.powWad)(W * (A + input) * math_lib_1.WAD, oneMinusAmp);
if (A !== 0n) {
calc = calc - (0, math_lib_1.powWad)(W * A * math_lib_1.WAD, oneMinusAmp);
}
return calc;
}
function calcPriceCurveLimitAmp(U, B, W, oneMinusAmp) {
const W_BxBtoOMA = (0, math_lib_1.powWad)(W * B * math_lib_1.WAD, oneMinusAmp);
if (W_BxBtoOMA < U) {
return B;
}
return (B *
(math_lib_1.WAD -
(0, math_lib_1.powWad)(((W_BxBtoOMA - U + 1n) * math_lib_1.WAD) / W_BxBtoOMA, (math_lib_1.WAD * math_lib_1.WAD) / oneMinusAmp)));
}
function calcPriceCurveLimitShareAmp(U, ts, it_times_walpha_amped, oneMinusAmpInverse) {
return ((ts *
((0, math_lib_1.powWad)(((it_times_walpha_amped + U) * math_lib_1.WAD) / it_times_walpha_amped, oneMinusAmpInverse) -
math_lib_1.WAD)) /
math_lib_1.WAD);
}
function calcVaultTokensToUnitsAmp(vaultTokens, totalSupply, walpha_0_ampped, oneMinusAmp, NTokens) {
const pt_fraction = ((totalSupply - vaultTokens) * math_lib_1.WAD) / totalSupply;
return ((walpha_0_ampped *
(math_lib_1.WAD - (0, math_lib_1.powWad)(pt_fraction, oneMinusAmp)) *
BigInt(NTokens)) /
math_lib_1.WAD);
}
function calcUnitsToVaultTokensAmp(U, totalSupply, tokenAmounts, tokenWeights, unitTracker, amplification) {
const walpha_0_ampped = (0, math_amplified_functions_1.balance0Amp)(math_lib_1.WAD - amplification, tokenAmounts, tokenWeights, unitTracker);
const it_times_walpha_amped = walpha_0_ampped * BigInt(tokenAmounts.length);
const oneMinusAmpInverse = (math_lib_1.WAD * math_lib_1.WAD) / (math_lib_1.WAD - amplification);
const vaultTokens = calcPriceCurveLimitShareAmp(U, totalSupply, it_times_walpha_amped, oneMinusAmpInverse);
return vaultTokens;
}
function calcUnitsForVaultTokensAmp(U, totalSupply, tokenAmounts, tokenWeights, unitTracker, amplification) {
const oneMinusAmp = math_lib_1.WAD - amplification;
const oneMinusAmpInverse = (math_lib_1.WAD * math_lib_1.WAD) / oneMinusAmp;
const walpha_0_ampped = (0, math_amplified_functions_1.balance0Amp)(oneMinusAmp, tokenAmounts, tokenWeights, unitTracker);
const innerPower = (0, math_lib_1.powWad)((U * math_lib_1.WAD) / (walpha_0_ampped * BigInt(tokenAmounts.length)) + math_lib_1.WAD, oneMinusAmpInverse);
const vaultTokens = (totalSupply * (innerPower - math_lib_1.WAD)) / math_lib_1.WAD;
return vaultTokens;
}
//# sourceMappingURL=math.amplified.integrals.js.map