New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

bancorx

Package Overview
Dependencies
Maintainers
1
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bancorx - npm Package Compare versions

Comparing version 0.2.8 to 0.2.9

1

build/AbstractBancorCalculator.d.ts
import { Symbol, Asset } from "eos-common";
import { nRelay, EosAccount, HydratedRelay } from "./interfaces";
export declare abstract class AbstractBancorCalculator {
constructor();
estimateCost(amountDesired: Asset, from: Symbol): Promise<Asset>;

@@ -6,0 +5,0 @@ estimateReturn(amount: Asset, to: Symbol): Promise<Asset>;

80

build/AbstractBancorCalculator.js
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("./index");
class AbstractBancorCalculator {
constructor() { }
estimateCost(amountDesired, from) {
return __awaiter(this, void 0, void 0, function* () {
const reverseRelaysRequired = index_1.createPath(amountDesired.symbol, from, yield this.fetchRelays());
const hydratedRelays = yield this.hydrateRelays(reverseRelaysRequired);
const costAmount = hydratedRelays.reduce((lastCost, relay) => {
const fromReserveBalance = relay.reserves.find((reserve) => reserve.amount.symbol.isEqual(lastCost.symbol));
const toReserveBalance = relay.reserves.find((reserve) => !reserve.amount.symbol.isEqual(lastCost.symbol));
const result = index_1.calculateCost(toReserveBalance.amount, fromReserveBalance.amount, lastCost);
return result;
}, amountDesired);
return costAmount;
});
async estimateCost(amountDesired, from) {
const reverseRelaysRequired = index_1.createPath(amountDesired.symbol, from, await this.fetchRelays());
const hydratedRelays = await this.hydrateRelays(reverseRelaysRequired);
const costAmount = hydratedRelays.reduce((lastCost, relay) => {
const fromReserveBalance = relay.reserves.find((reserve) => reserve.amount.symbol.isEqual(lastCost.symbol));
const toReserveBalance = relay.reserves.find((reserve) => !reserve.amount.symbol.isEqual(lastCost.symbol));
const result = index_1.calculateCost(toReserveBalance.amount, fromReserveBalance.amount, lastCost);
return result;
}, amountDesired);
return costAmount;
}
estimateReturn(amount, to) {
return __awaiter(this, void 0, void 0, function* () {
const relaysRequired = index_1.createPath(amount.symbol, to, yield this.fetchRelays());
const hydratedRelays = yield this.hydrateRelays(relaysRequired);
const returnAmount = hydratedRelays.reduce((lastReward, relay) => {
const fromReserveBalance = relay.reserves.find((reserve) => reserve.amount.symbol.isEqual(lastReward.symbol));
const toReserveBalance = relay.reserves.find((reserve) => !reserve.amount.symbol.isEqual(lastReward.symbol));
const result = index_1.calculateReturn(fromReserveBalance.amount, toReserveBalance.amount, lastReward);
return result;
}, amount);
return returnAmount;
});
async estimateReturn(amount, to) {
const relaysRequired = index_1.createPath(amount.symbol, to, await this.fetchRelays());
const hydratedRelays = await this.hydrateRelays(relaysRequired);
const returnAmount = hydratedRelays.reduce((lastReward, relay) => {
const fromReserveBalance = relay.reserves.find((reserve) => reserve.amount.symbol.isEqual(lastReward.symbol));
const toReserveBalance = relay.reserves.find((reserve) => !reserve.amount.symbol.isEqual(lastReward.symbol));
const result = index_1.calculateReturn(fromReserveBalance.amount, toReserveBalance.amount, lastReward);
return result;
}, amount);
return returnAmount;
}
// Fetch balance returns Assets of the things
hydrateRelay(balances, relay) {
const result = Object.assign(Object.assign({}, relay), { reserves: relay.reserves.map((reserve) => ({
const result = Object.assign(Object.assign({}, relay), { fee: 0, reserves: relay.reserves.map((reserve) => ({
amount: balances.find(balance => balance.symbol.isEqual(reserve.symbol)),

@@ -51,15 +37,13 @@ contract: reserve.contract

}
hydrateRelays(relays) {
return __awaiter(this, void 0, void 0, function* () {
const hydratedRelays = [];
for (var i = 0; i < relays.length; i++) {
let reserves = relays[i].isMultiContract
? yield this.fetchMultiRelayReserves(relays[i].contract, relays[i].smartToken.symbol.code())
: yield this.fetchSingleRelayReserves(relays[i].contract);
let newRelay = this.hydrateRelay(reserves, relays[i]);
// @ts-ignore
hydratedRelays.push(newRelay);
}
return hydratedRelays;
});
async hydrateRelays(relays) {
const hydratedRelays = [];
for (var i = 0; i < relays.length; i++) {
let reserves = relays[i].isMultiContract
? await this.fetchMultiRelayReserves(relays[i].contract, relays[i].smartToken.symbol.code())
: await this.fetchSingleRelayReserves(relays[i].contract);
let newRelay = this.hydrateRelay(reserves, relays[i]);
// @ts-ignore
hydratedRelays.push(newRelay);
}
return hydratedRelays;
}

@@ -66,0 +50,0 @@ }

@@ -58,2 +58,4 @@ import { Converter, nRelay, ChoppedRelay } from "./interfaces";

export declare function calculateCost(balanceFrom: Asset, balanceTo: Asset, amountDesired: Asset): Asset;
export declare function calculateReserveToSmart(reserveAmount: Asset, reserveBalance: Asset, smartSupply: Asset, ratio?: number): Asset;
export declare function calculateSmartToReserve(smartTokens: Asset, reserveBalance: Asset, smartSupply: Asset, ratio?: number): Asset;
/**

@@ -90,1 +92,6 @@ * Compose Memo

export declare function createPath(from: Symbol, to: Symbol, relays: nRelay[]): nRelay[];
export declare function chargeFee(asset: Asset, decimalFee: number, magnitude?: number): Asset;
export declare function liquidate(smartTokens: Asset, reserveBalance: Asset, smartSupply: Asset): Asset;
export declare function calculateLiquidateCost(reserveTokens: Asset, reserveBalance: Asset, smartSupply: Asset): Asset;
export declare function fund(smartTokens: Asset, reserveBalance: Asset, smartSupply: Asset): Asset;
export declare function calculateFundReturn(reserveTokens: Asset, reserveBalance: Asset, smartSupply: Asset): Asset;

@@ -41,2 +41,5 @@ "use strict";

throw new Error("From symbol does not match amount symbol");
if (amount.amount >= balanceFrom.amount)
throw new Error("Impossible to buy the entire reserve or more");
decimal_js_1.default.set({ precision: 15, rounding: decimal_js_1.default.ROUND_DOWN });
const balanceFromNumber = balanceFrom.toDecimal();

@@ -47,6 +50,7 @@ const balanceToNumber = balanceTo.toDecimal();

.div(balanceFromNumber.plus(amountNumber))
.times(balanceToNumber)
.toFixed(balanceTo.symbol.precision, decimal_js_1.default.ROUND_DOWN);
const formatted = new decimal_js_1.default(Number(reward) * Math.pow(10, balanceTo.symbol.precision)).toFixed(0, decimal_js_1.default.ROUND_DOWN);
return new eos_common_1.Asset(Number(formatted), balanceTo.symbol);
.times(balanceToNumber);
return new eos_common_1.Asset(reward
.times(Math.pow(10, balanceTo.symbol.precision))
.toDecimalPlaces(0, decimal_js_1.default.ROUND_DOWN)
.toNumber(), balanceTo.symbol);
}

@@ -88,10 +92,39 @@ exports.calculateReturn = calculateReturn;

const oneNumber = new decimal_js_1.default(1);
decimal_js_1.default.set({ precision: 15, rounding: decimal_js_1.default.ROUND_UP });
const reward = balanceFromNumber
.div(oneNumber.minus(amountNumber.div(balanceToNumber)))
.minus(balanceFromNumber)
.toFixed(0, decimal_js_1.default.ROUND_UP);
const formatted = new decimal_js_1.default(Number(reward) * Math.pow(10, balanceTo.symbol.precision)).toFixed(0, decimal_js_1.default.ROUND_DOWN);
return new eos_common_1.Asset(Number(formatted), balanceFrom.symbol);
.minus(balanceFromNumber);
return new eos_common_1.Asset(reward
.times(Math.pow(10, balanceFrom.symbol.precision))
.toDecimalPlaces(0, decimal_js_1.default.ROUND_FLOOR)
.toNumber(), balanceFrom.symbol);
}
exports.calculateCost = calculateCost;
function calculateReserveToSmart(reserveAmount, reserveBalance, smartSupply, ratio = 0.5) {
const smartSupplyN = smartSupply.toDecimal().times(-1);
const balanceN = reserveBalance.toDecimal();
const depositAmountN = reserveAmount.toDecimal();
const one = new decimal_js_1.default(1);
decimal_js_1.default.set({ precision: 15, rounding: decimal_js_1.default.ROUND_DOWN });
const reward = smartSupplyN.times(one.minus(one.plus(depositAmountN.div(balanceN)).pow(ratio)));
return new eos_common_1.Asset(reward
.times(Math.pow(10, smartSupply.symbol.precision))
.toDecimalPlaces(0, decimal_js_1.default.ROUND_FLOOR)
.toNumber(), smartSupply.symbol);
}
exports.calculateReserveToSmart = calculateReserveToSmart;
function calculateSmartToReserve(smartTokens, reserveBalance, smartSupply, ratio = 0.5) {
const reserveTokensN = smartTokens.toDecimal();
const reserveBalanceN = reserveBalance.toDecimal();
const smartSupplyN = smartSupply.toDecimal();
const one = new decimal_js_1.default(1);
const ratioN = one.div(new decimal_js_1.default(ratio));
decimal_js_1.default.set({ precision: 15, rounding: decimal_js_1.default.ROUND_DOWN });
const reward = reserveBalanceN.times(one.minus(decimal_js_1.default.pow(one.minus(reserveTokensN.div(smartSupplyN)), ratioN)));
return new eos_common_1.Asset(reward
.times(Math.pow(10, reserveBalance.symbol.precision))
.toDecimalPlaces(0, decimal_js_1.default.ROUND_FLOOR)
.toNumber(), reserveBalance.symbol);
}
exports.calculateSmartToReserve = calculateSmartToReserve;
/**

@@ -204,3 +237,3 @@ * Compose Memo

}
// Opposite of unChopRelays
// Opposite of ChopRelays
function unChopRelays(choppedRelays, relays) {

@@ -223,2 +256,69 @@ return choppedRelays.reduce((accum, choppedRelay) => {

exports.createPath = createPath;
function chargeFee(asset, decimalFee, magnitude = 1) {
decimal_js_1.default.set({ precision: 15, rounding: decimal_js_1.default.ROUND_DOWN });
const assetAmount = asset.toDecimal();
const one = new decimal_js_1.default(1);
const totalFee = assetAmount.times(one.minus(decimal_js_1.default.pow(one.minus(decimalFee), magnitude)));
const newAmount = assetAmount.minus(totalFee);
return new eos_common_1.Asset(newAmount
.times(Math.pow(10, asset.symbol.precision))
.toDecimalPlaces(0, decimal_js_1.default.ROUND_FLOOR)
.toNumber(), asset.symbol);
}
exports.chargeFee = chargeFee;
function liquidate(smartTokens, reserveBalance, smartSupply) {
const smartTokensN = smartTokens.toDecimal();
const reserveBalanceN = reserveBalance.toDecimal();
const smartSupplyN = smartSupply.toDecimal();
const reward = smartTokensN.times(reserveBalanceN).div(smartSupplyN);
return new eos_common_1.Asset(reward
.times(Math.pow(10, reserveBalance.symbol.precision))
.toDecimalPlaces(0, decimal_js_1.default.ROUND_DOWN)
.toNumber(), reserveBalance.symbol);
}
exports.liquidate = liquidate;
function calculateLiquidateCost(reserveTokens, reserveBalance, smartSupply) {
const reserveTokensN = reserveTokens.toDecimal();
const reserveBalanceN = reserveBalance.toDecimal();
const smartSupplyN = smartSupply.toDecimal();
const reward = reserveTokensN.times(smartSupplyN).div(reserveBalanceN);
return new eos_common_1.Asset(reward
.times(Math.pow(10, smartSupply.symbol.precision))
.toDecimalPlaces(0, decimal_js_1.default.ROUND_DOWN)
.toNumber(), smartSupply.symbol);
}
exports.calculateLiquidateCost = calculateLiquidateCost;
function fund(smartTokens, reserveBalance, smartSupply) {
const reserveTokensN = smartTokens.toDecimal();
const reserveBalanceN = reserveBalance.toDecimal();
const smartSupplyN = smartSupply.toDecimal();
const one = new decimal_js_1.default(1);
// (smart_amount * balance - 1) / current_smart_supply + 1;
const reward = reserveTokensN
.times(reserveBalanceN)
.minus(one)
.div(smartSupplyN)
.plus(one);
return new eos_common_1.Asset(reward
.times(Math.pow(10, reserveBalance.symbol.precision))
.toDecimalPlaces(0, decimal_js_1.default.ROUND_DOWN)
.toNumber(), reserveBalance.symbol);
}
exports.fund = fund;
function calculateFundReturn(reserveTokens, reserveBalance, smartSupply) {
const reserveTokensN = reserveTokens.toDecimal();
const reserveBalanceN = reserveBalance.toDecimal();
const smartSupplyN = smartSupply.toDecimal();
const one = new decimal_js_1.default(1);
const reward = reserveTokensN
.times(smartSupplyN)
.minus(smartSupplyN)
.plus(one)
.div(reserveBalanceN);
return new eos_common_1.Asset(reward
.times(Math.pow(10, smartSupply.symbol.precision))
.toDecimalPlaces(0, decimal_js_1.default.ROUND_DOWN)
.toNumber(), smartSupply.symbol);
}
exports.calculateFundReturn = calculateFundReturn;
//# sourceMappingURL=index.js.map

@@ -70,2 +70,3 @@ import { Symbol, Asset } from "eos-common";

isMultiContract: boolean;
fee: number;
}

@@ -72,0 +73,0 @@ export interface nRelay {

{
"name": "bancorx",
"version": "0.2.8",
"version": "0.2.9",
"description": "BancorX Utility",

@@ -26,2 +26,3 @@ "main": "build/index.js",

"dependencies": {
"decimal.js": "^10.2.0",
"eos-common": "^0.1.36",

@@ -28,0 +29,0 @@ "underscore": "^1.9.1",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc