@subwallet/invariant-vara-sdk
Version:
<div align="center"> <h1>⚡Invariant protocol⚡</h1> <p> <a href="https://invariant.app/math-spec-vara.pdf">MATH SPEC 📄</a> | <a href="https://discord.gg/VzS3C9wR">DISCORD 🌐</a> | </p> </div>
208 lines (207 loc) • 7.55 kB
JavaScript
function copyObject(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (Array.isArray(obj)) {
return obj.map(copyObject);
}
const copiedObject = {};
for (const key in obj) {
copiedObject[key] = copyObject(obj[key]);
}
return copiedObject;
}
export const decodeU256FromU64Array = (value) => {
return BigInt(value);
};
export const decodeU128FromU64Array = (value) => {
return BigInt(value);
};
export const encodeU256ToU64Array = (value) => {
return value.toString();
};
export const encodeU128ToU64Array = (value) => {
return value.toString();
};
export const encodeLiquidity = encodeU256ToU64Array;
export const encodeTokenAmount = encodeU256ToU64Array;
export const decodeLiquidity = decodeU256FromU64Array;
export const decodeTokenAmount = decodeU256FromU64Array;
export const encodeTick = (value) => {
const newVal = copyObject(value);
newVal.liquidityChange = encodeLiquidity(value.liquidityChange);
newVal.liquidityGross = encodeLiquidity(value.liquidityGross);
return newVal;
};
export const encodeLiquidityTick = (value) => {
const newVal = copyObject(value);
newVal.liquidityChange = encodeLiquidity(value.liquidityChange);
return newVal;
};
export const encodePool = (value) => {
const newVal = copyObject(value);
newVal.liquidity = encodeLiquidity(value.liquidity);
newVal.feeProtocolTokenX = encodeTokenAmount(value.feeProtocolTokenX);
newVal.feeProtocolTokenY = encodeTokenAmount(value.feeProtocolTokenY);
return newVal;
};
export const encodeLiquidityResult = (value) => {
const newVal = copyObject(value);
newVal.x = encodeTokenAmount(value.x);
newVal.y = encodeTokenAmount(value.y);
newVal.l = encodeTokenAmount(value.l);
return newVal;
};
export const encodeSingleTokenLiquidity = (value) => {
const newVal = copyObject(value);
newVal.amount = encodeTokenAmount(value.amount);
newVal.l = encodeLiquidity(value.l);
return newVal;
};
export const encodeQuoteResult = (value) => {
const newVal = copyObject(value);
newVal.amountIn = encodeTokenAmount(value.amountIn);
newVal.amountOut = encodeTokenAmount(value.amountOut);
newVal.ticks = value.ticks.map(encodeTick);
return newVal;
};
export const encodeTokenAmounts = (value) => {
const newVal = copyObject(value);
newVal.x = encodeTokenAmount(value.x);
newVal.y = encodeTokenAmount(value.y);
return newVal;
};
export const encodeCalculateFeeResult = (value) => {
const newVal = copyObject(value);
newVal[0] = encodeTokenAmount(value[0]);
newVal[1] = encodeTokenAmount(value[1]);
return newVal;
};
export const encodeAmountDeltaResult = (value) => {
const newVal = copyObject(value);
newVal.x = encodeTokenAmount(value.x);
newVal.y = encodeTokenAmount(value.y);
return newVal;
};
export const encodeSwapResult = (value) => {
const newVal = copyObject(value);
newVal.amountIn = encodeTokenAmount(value.amountIn);
newVal.amountOut = encodeTokenAmount(value.amountOut);
newVal.feeAmount = encodeTokenAmount(value.feeAmount);
return newVal;
};
export const encodeCalculateSwapResult = (value) => {
const newVal = copyObject(value);
newVal.amountIn = encodeTokenAmount(value.amountIn);
newVal.amountOut = encodeTokenAmount(value.amountOut);
newVal.fee = encodeTokenAmount(value.fee);
newVal.pool = encodePool(value.pool);
newVal.ticks = value.ticks.map(encodeTick);
return newVal;
};
export const encodeCalculateAmountDeltaResult = (value) => {
const newVal = copyObject(value);
newVal[0] = encodeTokenAmount(value[0]);
newVal[1] = encodeTokenAmount(value[1]);
return newVal;
};
export const encodePosition = (value) => {
const newVal = copyObject(value);
newVal.liquidity = encodeLiquidity(value.liquidity);
newVal.tokensOwedX = encodeTokenAmount(value.tokensOwedX);
newVal.tokensOwedY = encodeTokenAmount(value.tokensOwedY);
return newVal;
};
export const decodeTick = (value) => {
const newVal = copyObject(value);
newVal.liquidityChange = decodeLiquidity(value.liquidityChange);
newVal.liquidityGross = decodeLiquidity(value.liquidityGross);
return newVal;
};
export const decodeLiquidityTick = (value) => {
const newVal = copyObject(value);
newVal.liquidityChange = decodeLiquidity(value.liquidityChange);
return newVal;
};
export const decodePool = (value) => {
const newVal = copyObject(value);
newVal.liquidity = decodeLiquidity(value.liquidity);
newVal.feeProtocolTokenX = decodeTokenAmount(value.feeProtocolTokenX);
newVal.feeProtocolTokenY = decodeTokenAmount(value.feeProtocolTokenY);
return newVal;
};
export const decodeLiquidityResult = (value) => {
const newVal = copyObject(value);
newVal.x = decodeTokenAmount(value.x);
newVal.y = decodeTokenAmount(value.y);
newVal.l = decodeTokenAmount(value.l);
return newVal;
};
export const decodeSingleTokenLiquidity = (value) => {
const newVal = copyObject(value);
newVal.amount = decodeTokenAmount(value.amount);
newVal.l = decodeLiquidity(value.l);
return newVal;
};
export const decodeQuoteResult = (value) => {
const newVal = copyObject(value);
newVal.amountIn = decodeTokenAmount(value.amountIn);
newVal.amountOut = decodeTokenAmount(value.amountOut);
newVal.ticks = value.ticks.map(decodeTick);
return newVal;
};
export const decodeTokenAmounts = (value) => {
const newVal = copyObject(value);
newVal.x = decodeTokenAmount(value.x);
newVal.y = decodeTokenAmount(value.y);
return newVal;
};
export const decodeCalculateFeeResult = (value) => {
const newVal = copyObject(value);
newVal[0] = decodeTokenAmount(value[0]);
newVal[1] = decodeTokenAmount(value[1]);
return newVal;
};
export const decodeAmountDeltaResult = (value) => {
const newVal = copyObject(value);
newVal.x = decodeTokenAmount(value.x);
newVal.y = decodeTokenAmount(value.y);
return newVal;
};
export const decodeSwapResult = (value) => {
const newVal = copyObject(value);
newVal.amountIn = decodeTokenAmount(value.amountIn);
newVal.amountOut = decodeTokenAmount(value.amountOut);
newVal.feeAmount = decodeTokenAmount(value.feeAmount);
return newVal;
};
export const decodeCalculateSwapResult = (value) => {
const newVal = copyObject(value);
newVal.amountIn = decodeTokenAmount(value.amountIn);
newVal.amountOut = decodeTokenAmount(value.amountOut);
newVal.fee = decodeTokenAmount(value.fee);
newVal.pool = decodePool(value.pool);
newVal.ticks = value.ticks.map(decodeTick);
return newVal;
};
export const decodeCalculateAmountDeltaResult = (value) => {
const newVal = copyObject(value);
newVal[0] = decodeTokenAmount(value[0]);
newVal[1] = decodeTokenAmount(value[1]);
return newVal;
};
export const decodePosition = (value) => {
const newVal = copyObject(value);
newVal.liquidity = decodeLiquidity(value.liquidity);
newVal.tokensOwedX = decodeTokenAmount(value.tokensOwedX);
newVal.tokensOwedY = decodeTokenAmount(value.tokensOwedY);
return newVal;
};
export const decodeSimulateSwapResult = (value) => {
const newVal = copyObject(value);
newVal.amountIn = decodeTokenAmount(value.amountIn);
newVal.amountOut = decodeTokenAmount(value.amountOut);
newVal.fee = decodeTokenAmount(value.fee);
newVal.crossedTicks = value.crossedTicks.map(decodeLiquidityTick);
return newVal;
};