moonwalkerswap-v1-sdk
Version:
An SDK for building applications on top of the Moonwalkerswap V1 protocol
108 lines • 5.43 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var types_1 = require("../types");
var constants_1 = require("../constants");
var _utils_1 = require("../_utils");
var _utils_2 = require("./_utils");
function normalizeTokenAmount(tokenAmount) {
_utils_1.ensureAllUInt8([tokenAmount.token.decimals]);
var normalizedAmount = _utils_1.normalizeBigNumberish(tokenAmount.amount);
_utils_1.ensureAllUInt256([normalizedAmount]);
return {
token: __assign({}, tokenAmount.token),
amount: normalizedAmount
};
}
function normalizeTokenReserves(tokenReserves) {
_utils_1.ensureAllUInt8([tokenReserves.token.decimals]);
return __assign({ token: __assign({}, tokenReserves.token) }, (tokenReserves.exchange ? { exchange: __assign({}, tokenReserves.exchange) } : {}), { avaxReserve: normalizeTokenAmount(tokenReserves.avaxReserve), tokenReserve: normalizeTokenAmount(tokenReserves.tokenReserve) });
}
function parseOptionalReserves(optionalReservesInput, optionalReservesOutput) {
if (types_1.areTokenReserves(optionalReservesInput) && types_1.areTokenReserves(optionalReservesOutput)) {
return {
tradeType: constants_1.TRADE_TYPE.TOKEN_TO_TOKEN,
inputReserves: normalizeTokenReserves(optionalReservesInput),
outputReserves: normalizeTokenReserves(optionalReservesOutput)
};
}
else if (types_1.areTokenReserves(optionalReservesInput) && !types_1.areTokenReserves(optionalReservesOutput)) {
return {
tradeType: constants_1.TRADE_TYPE.TOKEN_TO_AVAX,
inputReserves: normalizeTokenReserves(optionalReservesInput),
outputReserves: types_1.areAVAXReserves(optionalReservesOutput)
? optionalReservesOutput
: {
token: _utils_1.getAvaxToken(optionalReservesInput.token.chainId)
}
};
}
else if (!types_1.areTokenReserves(optionalReservesInput) && types_1.areTokenReserves(optionalReservesOutput)) {
return {
tradeType: constants_1.TRADE_TYPE.AVAX_TO_TOKEN,
inputReserves: types_1.areAVAXReserves(optionalReservesInput)
? optionalReservesInput
: {
token: _utils_1.getAvaxToken(optionalReservesOutput.token.chainId)
},
outputReserves: normalizeTokenReserves(optionalReservesOutput)
};
}
else {
throw Error('optionalReservesInput, optionalReservesOutput, or both must be defined.');
}
}
function getMarketRate(tradeType, reserves, keepAsDecimal) {
if (!types_1.areTokenReservesNormalized(reserves)) {
throw Error;
}
var numerator = tradeType === constants_1.TRADE_TYPE.AVAX_TO_TOKEN ? reserves.tokenReserve : reserves.avaxReserve;
var denominator = tradeType === constants_1.TRADE_TYPE.AVAX_TO_TOKEN ? reserves.avaxReserve : reserves.tokenReserve;
return _utils_2.calculateDecimalRate(numerator, denominator, keepAsDecimal);
}
function getMarketDetails(optionalReservesInput, optionalReservesOutput) {
var _a = parseOptionalReserves(optionalReservesInput, optionalReservesOutput), tradeType = _a.tradeType, inputReserves = _a.inputReserves, outputReserves = _a.outputReserves;
if (tradeType === constants_1.TRADE_TYPE.TOKEN_TO_TOKEN) {
var _b = getMarketRate(constants_1.TRADE_TYPE.TOKEN_TO_AVAX, inputReserves, true), numeratorInput = _b.numerator, denominatorInput = _b.denominator, decimalScalarInput = _b.decimalScalar, decimalScalarInvertedInput = _b.decimalScalarInverted;
var _c = getMarketRate(constants_1.TRADE_TYPE.AVAX_TO_TOKEN, outputReserves, true), numeratorOutput = _c.numerator, denominatorOutput = _c.denominator, decimalScalarOutput = _c.decimalScalar, decimalScalarInvertedOutput = _c.decimalScalarInverted;
var marketRate = numeratorInput
.multipliedBy(decimalScalarInput)
.multipliedBy(numeratorOutput)
.multipliedBy(decimalScalarOutput)
.dividedBy(denominatorInput.multipliedBy(denominatorOutput));
var marketRateInverted = denominatorInput
.multipliedBy(decimalScalarInvertedInput)
.multipliedBy(denominatorOutput)
.multipliedBy(decimalScalarInvertedOutput)
.dividedBy(numeratorInput.multipliedBy(numeratorOutput));
return {
tradeType: tradeType,
inputReserves: inputReserves,
outputReserves: outputReserves,
marketRate: { rate: marketRate, rateInverted: marketRateInverted }
};
}
else {
var reserves = (tradeType === constants_1.TRADE_TYPE.AVAX_TO_TOKEN
? outputReserves
: inputReserves);
return {
tradeType: tradeType,
inputReserves: inputReserves,
outputReserves: outputReserves,
marketRate: getMarketRate(tradeType, reserves)
};
}
}
exports.getMarketDetails = getMarketDetails;
//# sourceMappingURL=market.js.map