handle-sdk
Advanced tools
Comparing version 0.0.26 to 0.0.27
@@ -0,0 +0,0 @@ { |
@@ -0,0 +0,0 @@ { |
@@ -0,0 +0,0 @@ { |
{ | ||
"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"; |
export {}; |
@@ -0,0 +0,0 @@ "use strict"; |
export {}; |
@@ -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: |
export {}; |
@@ -0,0 +0,0 @@ "use strict"; |
export {}; |
@@ -0,0 +0,0 @@ "use strict"; |
export {}; |
@@ -0,0 +0,0 @@ "use strict"; |
@@ -0,0 +0,0 @@ "use strict"; |
@@ -0,0 +0,0 @@ "use strict"; |
export {}; |
@@ -0,0 +0,0 @@ "use strict"; |
export {}; |
@@ -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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1799967
171
20257
14
22