Socket
Socket
Sign inDemoInstall

handle-sdk

Package Overview
Dependencies
Maintainers
1
Versions
447
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

handle-sdk - npm Package Compare versions

Comparing version 0.0.26 to 0.0.27

dist/abi/Liquidator.json

0

abi/ERC20.json

@@ -0,0 +0,0 @@ {

@@ -0,0 +0,0 @@ {

@@ -0,0 +0,0 @@ {

12

dist/package.json
{
"name": "handle-sdk",
"version": "0.0.26",
"version": "0.0.27",
"description": "handle.fi sdk",

@@ -14,3 +14,6 @@ "main": "dist/src/index.js",

"prepublish": "tsc",
"test": "jest --env=node --colors --coverage test"
"test": "jest --env=node --colors --coverage test",
"watch-build": "tsc-watch",
"watch-dist": "copy-and-watch --watch dist/** ../handle-vue/node_modules/handle-sdk/dist",
"watch": "npm-run-all -p -r watch-build watch-dist"
},

@@ -29,2 +32,3 @@ "dependencies": {

"@types/node": "^15.9.0",
"copy-and-watch": "^0.1.5",
"dotenv": "^10.0.0",

@@ -34,6 +38,8 @@ "husky": "^6.0.0",

"jest-environment-node": "^27.0.3",
"npm-run-all": "^4.1.5",
"prettier": "^2.3.0",
"pretty-quick": "^3.1.0",
"ts-jest": "^27.0.2"
"ts-jest": "^27.0.2",
"tsc-watch": "^4.4.0"
}
}

@@ -0,0 +0,0 @@ import { SDK as HandleSDK } from "./types/SDK";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ import { ethers } from "ethers";

@@ -0,0 +0,0 @@ "use strict";

declare const _default: (filter: string) => string;
export default _default;

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ import { ethers } from "ethers";

@@ -0,0 +0,0 @@ "use strict";

declare const _default: (filter: string) => string;
export default _default;

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ import { ethers } from "ethers";

@@ -68,3 +68,3 @@ "use strict";

throw new Error("Could not read fxTokens");
return [2 /*return*/, tokens.map(function (t) { return (__assign(__assign({}, t), { address: t.id, totalSupply: ethers_1.ethers.BigNumber.from(t.totalSupply), rate: ethers_1.ethers.BigNumber.from(t.rate) })); })];
return [2 /*return*/, tokens.map(function (t) { return (__assign(__assign({}, t), { address: t.id.toLowerCase(), totalSupply: ethers_1.ethers.BigNumber.from(t.totalSupply), rate: ethers_1.ethers.BigNumber.from(t.rate) })); })];
}

@@ -71,0 +71,0 @@ });

declare const _default: (filter: string) => string;
export default _default;

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ import { GraphQLClient } from "graphql-request/dist";

@@ -0,0 +0,0 @@ "use strict";

declare const _default: string;
export default _default;

@@ -0,0 +0,0 @@ "use strict";

export declare const buildFilter: (value: any, depth?: number) => string;

@@ -0,0 +0,0 @@ "use strict";

@@ -12,4 +12,5 @@ import { ethers } from "ethers";

}[];
redeemableTokens: ethers.BigNumber;
};
export declare const queryVault: (client: GraphQLClient, filter: any) => Promise<IndexedVaultData>;
export declare const queryVaults: (client: GraphQLClient, filter: any) => Promise<IndexedVaultData[]>;

@@ -83,2 +83,3 @@ "use strict";

fxToken: vault.fxToken,
redeemableTokens: ethers_1.ethers.BigNumber.from(vault.redeemableTokens),
collateralTokens: vault.collateralTokens.map(function (ct) { return (__assign(__assign({}, ct), { amount: ethers_1.ethers.BigNumber.from(ct.amount) })); })

@@ -85,0 +86,0 @@ }); })];

declare const _default: (filter: string) => string;
export default _default;

@@ -8,3 +8,3 @@ "use strict";

var dist_1 = require("graphql-request/dist");
exports.default = (function (filter) { return dist_1.gql(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n query {\n vaults", " {\n account\n debt\n fxToken\n collateralTokens {\n address\n amount\n }\n }\n }\n"], ["\n query {\n vaults", " {\n account\n debt\n fxToken\n collateralTokens {\n address\n amount\n }\n }\n }\n"])), filter); });
exports.default = (function (filter) { return dist_1.gql(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n query {\n vaults", " {\n account\n debt\n fxToken\n collateralTokens {\n address\n amount\n }\n redeemableTokens\n }\n }\n"], ["\n query {\n vaults", " {\n account\n debt\n fxToken\n collateralTokens {\n address\n amount\n }\n redeemableTokens\n }\n }\n"])), filter); });
var templateObject_1;

@@ -0,0 +0,0 @@ import { Token } from "./Token";

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

@@ -8,3 +8,4 @@ import { ethers } from "ethers";

Treasury = "Treasury",
VaultLibrary = "VaultLibrary"
VaultLibrary = "VaultLibrary",
Liquidator = "Liquidator"
}

@@ -11,0 +12,0 @@ declare type NetworkConfig = {

@@ -51,2 +51,3 @@ "use strict";

var VaultLibrary_json_1 = __importDefault(require("../../abi/VaultLibrary.json"));
var Liquidator_json_1 = __importDefault(require("../../abi/Liquidator.json"));
var Abi;

@@ -60,2 +61,3 @@ (function (Abi) {

Abi["VaultLibrary"] = "VaultLibrary";
Abi["Liquidator"] = "Liquidator";
})(Abi = exports.Abi || (exports.Abi = {}));

@@ -69,2 +71,3 @@ var abi = (_a = {},

_a[Abi.VaultLibrary] = VaultLibrary_json_1.default,
_a[Abi.Liquidator] = Liquidator_json_1.default,
_a);

@@ -71,0 +74,0 @@ var Config = /** @class */ (function () {

@@ -0,0 +0,0 @@ import { BigNumber } from "ethers";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ import { ethers } from "ethers";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ import { Token } from "./Token";

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

@@ -29,4 +29,5 @@ import { fxToken } from "./fxToken";

getFxTokenBySymbol(symbol: fxTokens): fxToken;
getFxTokenAddress(symbol: fxTokens): string;
getCollateralTokenBySymbol(symbol: CollateralTokens): CollateralToken;
getCollateralTokenByAddress(address: string): CollateralToken;
}

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

};
Protocol.prototype.getFxTokenAddress = function (symbol) {
return this.getFxTokenBySymbol(symbol).address;
};
Protocol.prototype.getCollateralTokenBySymbol = function (symbol) {

@@ -137,0 +140,0 @@ var token = this.collateralTokens.find(function (x) { return x.symbol === symbol; });

@@ -0,0 +0,0 @@ export declare enum fxTokens {

@@ -0,0 +0,0 @@ "use strict";

@@ -27,2 +27,3 @@ import { ethers } from "ethers";

vaultLibrary: ethers.Contract;
liquidator: ethers.Contract;
[fxTokens.fxAUD]: ethers.Contract;

@@ -29,0 +30,0 @@ [fxTokens.fxEUR]: ethers.Contract;

@@ -230,2 +230,13 @@ "use strict";

}); }); }
},
{
name: "liquidator",
abi: Config_1.Abi.Liquidator,
// @ts-ignore
addressGetter: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.contracts.handle.liquidator()];
case 1: return [2 /*return*/, _a.sent()];
}
}); }); }
}

@@ -232,0 +243,0 @@ ];

@@ -0,0 +0,0 @@ import { ethers } from "ethers";

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
import { fxTokens } from "./ProtocolTokens";
import { SDK } from "./SDK";
export declare const tokenAddressToFxToken: (address: string, sdk: SDK) => fxTokens;

@@ -0,0 +0,0 @@ "use strict";

@@ -17,2 +17,3 @@ import { fxToken } from "./fxToken";

freeCollateralAsEth: ethers.BigNumber;
redeemableTokens: ethers.BigNumber;
ratios: {

@@ -37,3 +38,12 @@ current: ethers.BigNumber;

withdrawCollateral(amount: ethers.BigNumber, collateralToken: CollateralTokens, returnTxData?: boolean, gasLimit?: ethers.BigNumber, gasPrice?: ethers.BigNumber): Promise<any>;
burn(amount: ethers.BigNumber, returnTxData?: boolean, gasLimit?: ethers.BigNumber, gasPrice?: ethers.BigNumber, deadline?: number): Promise<any>;
static redeem(fxToken: fxTokens, amount: ethers.BigNumber, sdk: SDK, referral?: string, returnTxData?: boolean, deadline?: number): Promise<any>;
/**
* Finds an array of redeemable vaults which may be used to redeem up to
* the redeemableAmount input provided.
* @param fxToken The vault fxToken
* @param redeemableAmount The amount to redeem
* @param sdk The SDK instance
* @param maxSearchCount The max. number of vaults to find for redemption
*/
static getRedeemableVaultsForAmount(fxToken: fxTokens, redeemableAmount: ethers.BigNumber, sdk: SDK, maxSearchCount?: number): Promise<Vault[]>;
}

@@ -52,11 +52,12 @@ "use strict";

this.account = account;
this.debt = ethers_1.ethers.BigNumber.from(0);
this.debtAsEth = ethers_1.ethers.BigNumber.from(0);
this.debt = ethers_1.ethers.constants.Zero;
this.debtAsEth = ethers_1.ethers.constants.Zero;
this.collateral = [];
this.collateralAsEth = ethers_1.ethers.BigNumber.from(0);
this.freeCollateralAsEth = ethers_1.ethers.BigNumber.from(0);
this.collateralAsEth = ethers_1.ethers.constants.Zero;
this.freeCollateralAsEth = ethers_1.ethers.constants.Zero;
this.redeemableTokens = ethers_1.ethers.constants.Zero;
this.ratios = {
current: ethers_1.ethers.BigNumber.from(0),
minting: ethers_1.ethers.BigNumber.from(0),
liquidation: ethers_1.ethers.BigNumber.from(0)
current: ethers_1.ethers.constants.Zero,
minting: ethers_1.ethers.constants.Zero,
liquidation: ethers_1.ethers.constants.Zero
};

@@ -132,2 +133,3 @@ }

this.collateralAsEth = ethers_1.ethers.BigNumber.from(0);
this.redeemableTokens = data.redeemableTokens;
for (_i = 0, _b = data.collateralTokens; _i < _b.length; _i++) {

@@ -197,2 +199,3 @@ token = _b[_i];

throw new Error("This function requires a signer");
deadline = deadline !== null && deadline !== void 0 ? deadline : Math.floor(Date.now() / 1000) + 300;
func = !returnTxData

@@ -202,3 +205,3 @@ ? this.sdk.contracts.comptroller

collateralTokenAddress = this.sdk.protocol.getCollateralTokenBySymbol(collateralToken).address;
return [4 /*yield*/, func.mint(tokenAmount, this.token.address, collateralTokenAddress, collateralAmount, getDeadline(deadline), referral !== null && referral !== void 0 ? referral : ethers_1.ethers.constants.AddressZero, {
return [4 /*yield*/, func.mint(tokenAmount, this.token.address, collateralTokenAddress, collateralAmount, deadline, referral !== null && referral !== void 0 ? referral : ethers_1.ethers.constants.AddressZero, {
gasPrice: gasPrice,

@@ -222,6 +225,7 @@ gasLimit: gasLimit

throw new Error("This function requires a signer");
deadline = deadline !== null && deadline !== void 0 ? deadline : Math.floor(Date.now() / 1000) + 300;
func = !returnTxData
? this.sdk.contracts.comptroller
: this.sdk.contracts.comptroller.populateTransaction;
return [4 /*yield*/, func.mintWithoutCollateral(tokenAmount, this.token.address, getDeadline(deadline), referral !== null && referral !== void 0 ? referral : ethers_1.ethers.constants.AddressZero, {
return [4 /*yield*/, func.mintWithoutCollateral(tokenAmount, this.token.address, deadline, referral !== null && referral !== void 0 ? referral : ethers_1.ethers.constants.AddressZero, {
gasPrice: gasPrice,

@@ -303,19 +307,24 @@ gasLimit: gasLimit

};
Vault.prototype.burn = function (amount, returnTxData, gasLimit, gasPrice, deadline) {
Vault.redeem = function (fxToken, amount, sdk, referral, returnTxData, deadline) {
if (returnTxData === void 0) { returnTxData = false; }
return __awaiter(this, void 0, void 0, function () {
var func;
var accounts, func;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.sdk.signer)
throw new Error("This function requires a signer");
case 0: return [4 /*yield*/, Vault.getRedeemableVaultsForAmount(fxToken, amount, sdk)];
case 1:
accounts = (_a.sent()).map(function (vault) { return vault.account; });
if (accounts.length == 0)
throw new Error("No vaults available for redemption");
deadline = deadline !== null && deadline !== void 0 ? deadline : Math.floor(Date.now() / 1000) + 300;
console.log("accounts: ", accounts);
console.log("accounts length: ", accounts.length);
func = !returnTxData
? this.sdk.contracts.comptroller
: this.sdk.contracts.comptroller.populateTransaction;
return [4 /*yield*/, func.burn(amount, this.token.address, getDeadline(deadline), {
gasPrice: gasPrice,
gasLimit: gasLimit
})];
case 1: return [2 /*return*/, _a.sent()];
? sdk.contracts.liquidator
: sdk.contracts.liquidator.populateTransaction;
console.log("amount: ", amount);
console.log("token: ", sdk.protocol.getFxTokenAddress(fxToken));
console.log("deadline: ", deadline);
return [4 /*yield*/, func.buyCollateralFromManyVaults(amount, sdk.protocol.getFxTokenAddress(fxToken), accounts, deadline, referral !== null && referral !== void 0 ? referral : ethers_1.ethers.constants.AddressZero)];
case 2: return [2 /*return*/, _a.sent()];
}

@@ -325,2 +334,41 @@ });

};
/**
* Finds an array of redeemable vaults which may be used to redeem up to
* the redeemableAmount input provided.
* @param fxToken The vault fxToken
* @param redeemableAmount The amount to redeem
* @param sdk The SDK instance
* @param maxSearchCount The max. number of vaults to find for redemption
*/
Vault.getRedeemableVaultsForAmount = function (fxToken, redeemableAmount, sdk, maxSearchCount) {
if (maxSearchCount === void 0) { maxSearchCount = 100; }
return __awaiter(this, void 0, void 0, function () {
var vaults, redeemableCount, redeemableVaults, _i, vaults_1, vault;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, Vault.query(sdk, {
first: maxSearchCount,
orderBy: "redeemableTokens",
orderDirection: "asc",
where: {
fxToken: sdk.protocol.getFxTokenAddress(fxToken),
isRedeemable: true
}
})];
case 1:
vaults = _a.sent();
redeemableCount = ethers_1.ethers.constants.Zero;
redeemableVaults = [];
for (_i = 0, vaults_1 = vaults; _i < vaults_1.length; _i++) {
vault = vaults_1[_i];
redeemableCount = redeemableCount.add(vault.redeemableTokens);
redeemableVaults.push(vault);
if (redeemableCount.gte(redeemableAmount))
break;
}
return [2 /*return*/, redeemableVaults];
}
});
});
};
return Vault;

@@ -330,3 +378,3 @@ }());

var indexedVaultDataToVaults = function (vaultData, sdk) { return __awaiter(void 0, void 0, void 0, function () {
var vaults, _i, vaultData_1, vd, v;
var vaults, _i, vaultData_1, data, vault;
return __generator(this, function (_a) {

@@ -340,8 +388,8 @@ switch (_a.label) {

if (!(_i < vaultData_1.length)) return [3 /*break*/, 4];
vd = vaultData_1[_i];
v = new Vault(vd.account, utils_1.tokenAddressToFxToken(vd.fxToken, sdk), sdk);
return [4 /*yield*/, v.update(vd)];
data = vaultData_1[_i];
vault = new Vault(data.account, utils_1.tokenAddressToFxToken(data.fxToken, sdk), sdk);
return [4 /*yield*/, vault.update(data)];
case 2:
_a.sent();
vaults.push(v);
vaults.push(vault);
_a.label = 3;

@@ -355,2 +403,1 @@ case 3:

}); };
var getDeadline = function (deadline) { return deadline !== null && deadline !== void 0 ? deadline : Math.floor(Date.now() / 1000) + 300; };

@@ -0,0 +0,0 @@ import { CollateralToken } from "./CollateralToken";

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

@@ -0,0 +0,0 @@ import { ethers } from "ethers";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

@@ -47,3 +47,3 @@ "use strict";

var DEPOSIT_AMOUNT = ethers_1.ethers.utils.parseEther("0.0000000000000001");
var GAS_LIMIT = ethers_1.ethers.BigNumber.from("2500000");
var GAS_PRICE = ethers_1.ethers.BigNumber.from("2500000");
globals_1.xdescribe("Vault: depositCollateral, withdrawCollateral", function () {

@@ -71,3 +71,3 @@ var _this = this;

switch (_a.label) {
case 0: return [4 /*yield*/, vault.depositCollateral(DEPOSIT_AMOUNT, ProtocolTokens_1.CollateralTokens.WETH, false, GAS_LIMIT)];
case 0: return [4 /*yield*/, vault.depositCollateral(DEPOSIT_AMOUNT, ProtocolTokens_1.CollateralTokens.WETH, false, GAS_PRICE)];
case 1: return [4 /*yield*/, (_a.sent()).wait(1)];

@@ -83,3 +83,3 @@ case 2:

switch (_a.label) {
case 0: return [4 /*yield*/, vault.depositCollateral(DEPOSIT_AMOUNT, ProtocolTokens_1.CollateralTokens.DAI, false, GAS_LIMIT)];
case 0: return [4 /*yield*/, vault.depositCollateral(DEPOSIT_AMOUNT, ProtocolTokens_1.CollateralTokens.DAI, false, GAS_PRICE)];
case 1: return [4 /*yield*/, (_a.sent()).wait(1)];

@@ -95,3 +95,3 @@ case 2:

switch (_a.label) {
case 0: return [4 /*yield*/, vault.withdrawCollateral(DEPOSIT_AMOUNT, ProtocolTokens_1.CollateralTokens.WETH, false, GAS_LIMIT)];
case 0: return [4 /*yield*/, vault.withdrawCollateral(DEPOSIT_AMOUNT, ProtocolTokens_1.CollateralTokens.WETH, false, GAS_PRICE)];
case 1: return [4 /*yield*/, (_a.sent()).wait(1)];

@@ -107,3 +107,3 @@ case 2:

switch (_a.label) {
case 0: return [4 /*yield*/, vault.withdrawCollateral(DEPOSIT_AMOUNT, ProtocolTokens_1.CollateralTokens.DAI, false, GAS_LIMIT)];
case 0: return [4 /*yield*/, vault.withdrawCollateral(DEPOSIT_AMOUNT, ProtocolTokens_1.CollateralTokens.DAI, false, GAS_PRICE)];
case 1: return [4 /*yield*/, (_a.sent()).wait(1)];

@@ -110,0 +110,0 @@ case 2:

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ "use strict";

import { GraphQLClient } from "graphql-request/dist";
export declare const getKovanGqlClient: () => GraphQLClient;

@@ -0,0 +0,0 @@ "use strict";

@@ -0,0 +0,0 @@ module.exports = {

{
"name": "handle-sdk",
"version": "0.0.26",
"version": "0.0.27",
"description": "handle.fi sdk",

@@ -14,3 +14,6 @@ "main": "dist/src/index.js",

"prepublish": "tsc",
"test": "jest --env=node --colors --coverage test"
"test": "jest --env=node --colors --coverage test",
"watch-build": "tsc-watch",
"watch-dist": "copy-and-watch --watch dist/** ../handle-vue/node_modules/handle-sdk/dist",
"watch": "npm-run-all -p -r watch-build watch-dist"
},

@@ -29,2 +32,3 @@ "dependencies": {

"@types/node": "^15.9.0",
"copy-and-watch": "^0.1.5",
"dotenv": "^10.0.0",

@@ -34,6 +38,8 @@ "husky": "^6.0.0",

"jest-environment-node": "^27.0.3",
"npm-run-all": "^4.1.5",
"prettier": "^2.3.0",
"pretty-quick": "^3.1.0",
"ts-jest": "^27.0.2"
"ts-jest": "^27.0.2",
"tsc-watch": "^4.4.0"
}
}

@@ -0,0 +0,0 @@ # handle.fi SDK

@@ -0,0 +0,0 @@ import { SDK as HandleSDK } from "./types/SDK";

@@ -0,0 +0,0 @@ import query from "./query";

@@ -0,0 +0,0 @@ import { gql } from "graphql-request/dist";

@@ -0,0 +0,0 @@ import query from "./query";

@@ -0,0 +0,0 @@ import { gql } from "graphql-request/dist";

@@ -39,3 +39,3 @@ import query from "./query";

...t,
address: t.id,
address: t.id.toLowerCase(),
totalSupply: ethers.BigNumber.from(t.totalSupply),

@@ -42,0 +42,0 @@ rate: ethers.BigNumber.from(t.rate)

@@ -0,0 +0,0 @@ import { gql } from "graphql-request/dist";

@@ -0,0 +0,0 @@ import query from "./query";

@@ -0,0 +0,0 @@ import { gql } from "graphql-request/dist";

@@ -0,0 +0,0 @@ export const buildFilter = (value: any, depth = 0): string => {

@@ -12,2 +12,3 @@ import query from "./query";

collateralTokens: { address: string; amount: ethers.BigNumber }[];
redeemableTokens: ethers.BigNumber;
};

@@ -24,2 +25,3 @@

}[];
redeemableTokens: string;
}[];

@@ -45,2 +47,3 @@ };

fxToken: vault.fxToken as fxTokens, // todo - map from token address to token type
redeemableTokens: ethers.BigNumber.from(vault.redeemableTokens),
collateralTokens: vault.collateralTokens.map((ct) => ({

@@ -47,0 +50,0 @@ ...ct,

@@ -13,4 +13,5 @@ import { gql } from "graphql-request/dist";

}
redeemableTokens
}
}
`;

@@ -0,0 +0,0 @@ import { Token } from "./Token";

@@ -9,2 +9,3 @@ import config from "../../config.json";

import VaultLibrary from "../../abi/VaultLibrary.json";
import Liquidator from "../../abi/Liquidator.json";

@@ -17,3 +18,4 @@ export enum Abi {

Treasury = "Treasury",
VaultLibrary = "VaultLibrary"
VaultLibrary = "VaultLibrary",
Liquidator = "Liquidator"
}

@@ -27,3 +29,4 @@

[Abi.Treasury]: Treasury,
[Abi.VaultLibrary]: VaultLibrary
[Abi.VaultLibrary]: VaultLibrary,
[Abi.Liquidator]: Liquidator
};

@@ -30,0 +33,0 @@

@@ -0,0 +0,0 @@ import axios, { AxiosInstance } from "axios";

@@ -0,0 +0,0 @@ import { ethers } from "ethers";

@@ -0,0 +0,0 @@ import { Token } from "./Token";

@@ -74,2 +74,6 @@ import { fxToken } from "./fxToken";

public getFxTokenAddress(symbol: fxTokens): string {
return this.getFxTokenBySymbol(symbol).address;
}
public getCollateralTokenBySymbol(symbol: CollateralTokens): CollateralToken {

@@ -76,0 +80,0 @@ const token = this.collateralTokens.find((x) => x.symbol === symbol);

@@ -0,0 +0,0 @@ export enum fxTokens {

@@ -34,2 +34,3 @@ import packageJson from "../../package.json";

vaultLibrary: ethers.Contract;
liquidator: ethers.Contract;
[fxTokens.fxAUD]: ethers.Contract;

@@ -179,2 +180,8 @@ [fxTokens.fxEUR]: ethers.Contract;

addressGetter: async () => await this.contracts.handle.fxKeeperPool()
},
{
name: "liquidator",
abi: Abi.Liquidator,
// @ts-ignore
addressGetter: async () => await this.contracts.handle.liquidator()
}

@@ -181,0 +188,0 @@ ];

@@ -0,0 +0,0 @@ import { ethers } from "ethers";

@@ -0,0 +0,0 @@ import { fxTokens } from "./ProtocolTokens";

@@ -19,2 +19,3 @@ import { fxToken } from "./fxToken";

public freeCollateralAsEth: ethers.BigNumber;
public redeemableTokens: ethers.BigNumber;
public ratios: {

@@ -33,11 +34,12 @@ current: ethers.BigNumber;

this.account = account;
this.debt = ethers.BigNumber.from(0);
this.debtAsEth = ethers.BigNumber.from(0);
this.debt = ethers.constants.Zero;
this.debtAsEth = ethers.constants.Zero;
this.collateral = [];
this.collateralAsEth = ethers.BigNumber.from(0);
this.freeCollateralAsEth = ethers.BigNumber.from(0);
this.collateralAsEth = ethers.constants.Zero;
this.freeCollateralAsEth = ethers.constants.Zero;
this.redeemableTokens = ethers.constants.Zero;
this.ratios = {
current: ethers.BigNumber.from(0),
minting: ethers.BigNumber.from(0),
liquidation: ethers.BigNumber.from(0)
current: ethers.constants.Zero,
minting: ethers.constants.Zero,
liquidation: ethers.constants.Zero
};

@@ -84,2 +86,3 @@ }

this.collateralAsEth = ethers.BigNumber.from(0);
this.redeemableTokens = data.redeemableTokens;
for (let token of data.collateralTokens) {

@@ -151,2 +154,3 @@ const collateralToken = this.sdk.protocol.getCollateralTokenByAddress(token.address);

if (!this.sdk.signer) throw new Error("This function requires a signer");
deadline = deadline ?? Math.floor(Date.now() / 1000) + 300;
const func = !returnTxData

@@ -162,3 +166,3 @@ ? this.sdk.contracts.comptroller

collateralAmount,
getDeadline(deadline),
deadline,
referral ?? ethers.constants.AddressZero,

@@ -182,2 +186,3 @@ {

if (!this.sdk.signer) throw new Error("This function requires a signer");
deadline = deadline ?? Math.floor(Date.now() / 1000) + 300;
const func = !returnTxData

@@ -189,3 +194,3 @@ ? this.sdk.contracts.comptroller

this.token.address,
getDeadline(deadline),
deadline,
referral ?? ethers.constants.AddressZero,

@@ -290,19 +295,64 @@ {

public async burn(
public static async redeem(
fxToken: fxTokens,
amount: ethers.BigNumber,
sdk: SDK,
referral?: string,
returnTxData: boolean = false,
gasLimit?: ethers.BigNumber,
gasPrice?: ethers.BigNumber,
deadline?: number
) {
if (!this.sdk.signer) throw new Error("This function requires a signer");
const accounts: string[] = (await Vault.getRedeemableVaultsForAmount(fxToken, amount, sdk)).map(
(vault) => vault.account
);
if (accounts.length == 0) throw new Error("No vaults available for redemption");
deadline = deadline ?? Math.floor(Date.now() / 1000) + 300;
console.log("accounts: ", accounts);
console.log("accounts length: ", accounts.length);
// @ts-ignore
const func: ethers.Contract = !returnTxData
? sdk.contracts.liquidator
: sdk.contracts.liquidator.populateTransaction;
console.log("amount: ", amount);
console.log("token: ", sdk.protocol.getFxTokenAddress(fxToken));
console.log("deadline: ", deadline);
return await func.buyCollateralFromManyVaults(
amount,
sdk.protocol.getFxTokenAddress(fxToken),
accounts,
deadline,
referral ?? ethers.constants.AddressZero
);
}
const func = !returnTxData
? this.sdk.contracts.comptroller
: this.sdk.contracts.comptroller.populateTransaction;
return await func.burn(amount, this.token.address, getDeadline(deadline), {
gasPrice,
gasLimit
/**
* Finds an array of redeemable vaults which may be used to redeem up to
* the redeemableAmount input provided.
* @param fxToken The vault fxToken
* @param redeemableAmount The amount to redeem
* @param sdk The SDK instance
* @param maxSearchCount The max. number of vaults to find for redemption
*/
public static async getRedeemableVaultsForAmount(
fxToken: fxTokens,
redeemableAmount: ethers.BigNumber,
sdk: SDK,
maxSearchCount: number = 100
): Promise<Vault[]> {
const vaults: Vault[] = await Vault.query(sdk, {
first: maxSearchCount,
orderBy: "redeemableTokens",
orderDirection: "asc",
where: {
fxToken: sdk.protocol.getFxTokenAddress(fxToken),
isRedeemable: true
}
});
let redeemableCount = ethers.constants.Zero;
let redeemableVaults = [];
for (let vault of vaults) {
redeemableCount = redeemableCount.add(vault.redeemableTokens);
redeemableVaults.push(vault);
if (redeemableCount.gte(redeemableAmount)) break;
}
return redeemableVaults;
}

@@ -314,6 +364,6 @@ }

for (const vd of vaultData) {
const v = new Vault(vd.account, tokenAddressToFxToken(vd.fxToken, sdk), sdk);
await v.update(vd);
vaults.push(v);
for (const data of vaultData) {
const vault = new Vault(data.account, tokenAddressToFxToken(data.fxToken, sdk), sdk);
await vault.update(data);
vaults.push(vault);
}

@@ -323,3 +373,1 @@

};
const getDeadline = (deadline?: number) => deadline ?? Math.floor(Date.now() / 1000) + 300;

@@ -0,0 +0,0 @@ import { CollateralToken } from "./CollateralToken";

@@ -0,0 +0,0 @@ import dotenv from "dotenv";

@@ -0,0 +0,0 @@ import { describe, it } from "@jest/globals";

@@ -0,0 +0,0 @@ import { describe, it } from "@jest/globals";

@@ -12,3 +12,3 @@ import { xdescribe, it } from "@jest/globals";

const DEPOSIT_AMOUNT = ethers.utils.parseEther("0.0000000000000001");
const GAS_LIMIT = ethers.BigNumber.from("2500000");
const GAS_PRICE = ethers.BigNumber.from("2500000");

@@ -23,3 +23,3 @@ xdescribe("Vault: depositCollateral, withdrawCollateral", function () {

await (
await vault.depositCollateral(DEPOSIT_AMOUNT, CollateralTokens.WETH, false, GAS_LIMIT)
await vault.depositCollateral(DEPOSIT_AMOUNT, CollateralTokens.WETH, false, GAS_PRICE)
).wait(1);

@@ -29,3 +29,3 @@ });

await (
await vault.depositCollateral(DEPOSIT_AMOUNT, CollateralTokens.DAI, false, GAS_LIMIT)
await vault.depositCollateral(DEPOSIT_AMOUNT, CollateralTokens.DAI, false, GAS_PRICE)
).wait(1);

@@ -35,3 +35,3 @@ });

await (
await vault.withdrawCollateral(DEPOSIT_AMOUNT, CollateralTokens.WETH, false, GAS_LIMIT)
await vault.withdrawCollateral(DEPOSIT_AMOUNT, CollateralTokens.WETH, false, GAS_PRICE)
).wait(1);

@@ -41,5 +41,5 @@ });

await (
await vault.withdrawCollateral(DEPOSIT_AMOUNT, CollateralTokens.DAI, false, GAS_LIMIT)
await vault.withdrawCollateral(DEPOSIT_AMOUNT, CollateralTokens.DAI, false, GAS_PRICE)
).wait(1);
});
});

@@ -0,0 +0,0 @@ import { describe, it } from "@jest/globals";

@@ -0,0 +0,0 @@ import { describe, it } from "@jest/globals";

@@ -0,0 +0,0 @@ import { describe, it } from "@jest/globals";

@@ -0,0 +0,0 @@ import { xdescribe, it } from "@jest/globals";

@@ -0,0 +0,0 @@ import { describe, it } from "@jest/globals";

@@ -0,0 +0,0 @@ import { describe, it } from "@jest/globals";

@@ -0,0 +0,0 @@ import { describe, it } from "@jest/globals";

@@ -0,0 +0,0 @@ import config from "../config.json";

@@ -0,0 +0,0 @@ {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

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