@dhedge/backend-flatcoin-core 0.2.93 → 0.2.95
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contracts/abi/asset-handler.d.ts +15 -0
- package/dist/contracts/abi/asset-handler.js +24 -0
- package/dist/contracts/index.d.ts +1 -0
- package/dist/contracts/index.js +3 -1
- package/dist/service/avg-deposit-price.service.d.ts +12 -0
- package/dist/service/avg-deposit-price.service.js +70 -0
- package/dist/service/blockchain-price.service.d.ts +12 -0
- package/dist/service/blockchain-price.service.js +53 -0
- package/dist/service/graph-query.service.d.ts +4 -0
- package/dist/service/graph-query.service.js +54 -1
- package/dist/service/index.d.ts +2 -0
- package/dist/service/index.js +2 -0
- package/dist/service/multichain-config.service.d.ts +4 -2
- package/dist/service/multichain-config.service.js +18 -9
- package/package.json +5 -3
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const AssetHandler: {
|
|
2
|
+
inputs: {
|
|
3
|
+
internalType: string;
|
|
4
|
+
name: string;
|
|
5
|
+
type: string;
|
|
6
|
+
}[];
|
|
7
|
+
name: string;
|
|
8
|
+
outputs: {
|
|
9
|
+
internalType: string;
|
|
10
|
+
name: string;
|
|
11
|
+
type: string;
|
|
12
|
+
}[];
|
|
13
|
+
stateMutability: string;
|
|
14
|
+
type: string;
|
|
15
|
+
}[];
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AssetHandler = void 0;
|
|
4
|
+
exports.AssetHandler = [
|
|
5
|
+
{
|
|
6
|
+
inputs: [
|
|
7
|
+
{
|
|
8
|
+
internalType: 'address',
|
|
9
|
+
name: 'asset',
|
|
10
|
+
type: 'address',
|
|
11
|
+
},
|
|
12
|
+
],
|
|
13
|
+
name: 'getUSDPrice',
|
|
14
|
+
outputs: [
|
|
15
|
+
{
|
|
16
|
+
internalType: 'uint256',
|
|
17
|
+
name: 'price',
|
|
18
|
+
type: 'uint256',
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
stateMutability: 'view',
|
|
22
|
+
type: 'function',
|
|
23
|
+
},
|
|
24
|
+
];
|
|
@@ -10,4 +10,5 @@ export { LimitOrder } from './abi/limit-order';
|
|
|
10
10
|
export { DelayedOrder } from './abi/delayed-order';
|
|
11
11
|
export { FlatcoinVault } from './abi/flatcoin-vault';
|
|
12
12
|
export { CanLiquidateWithPriceFeeds } from './abi/liquidation-module';
|
|
13
|
+
export { AssetHandler } from './abi/asset-handler';
|
|
13
14
|
export * from './helpers';
|
package/dist/contracts/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.CanLiquidateWithPriceFeeds = exports.FlatcoinVault = exports.DelayedOrder = exports.LimitOrder = exports.LiquidateWithoutPriceFeeds = exports.Liquidate = exports.LiquidationModule = exports.LeverageModule = exports.FlatcoinErrors = exports.ViewerGetPositionData = exports.Viewer = exports.StableModule = void 0;
|
|
17
|
+
exports.AssetHandler = exports.CanLiquidateWithPriceFeeds = exports.FlatcoinVault = exports.DelayedOrder = exports.LimitOrder = exports.LiquidateWithoutPriceFeeds = exports.Liquidate = exports.LiquidationModule = exports.LeverageModule = exports.FlatcoinErrors = exports.ViewerGetPositionData = exports.Viewer = exports.StableModule = void 0;
|
|
18
18
|
var stable_module_1 = require("./abi/stable-module");
|
|
19
19
|
Object.defineProperty(exports, "StableModule", { enumerable: true, get: function () { return stable_module_1.StableModule; } });
|
|
20
20
|
var viewer_1 = require("./abi/viewer");
|
|
@@ -39,4 +39,6 @@ var flatcoin_vault_1 = require("./abi/flatcoin-vault");
|
|
|
39
39
|
Object.defineProperty(exports, "FlatcoinVault", { enumerable: true, get: function () { return flatcoin_vault_1.FlatcoinVault; } });
|
|
40
40
|
var liquidation_module_4 = require("./abi/liquidation-module");
|
|
41
41
|
Object.defineProperty(exports, "CanLiquidateWithPriceFeeds", { enumerable: true, get: function () { return liquidation_module_4.CanLiquidateWithPriceFeeds; } });
|
|
42
|
+
var asset_handler_1 = require("./abi/asset-handler");
|
|
43
|
+
Object.defineProperty(exports, "AssetHandler", { enumerable: true, get: function () { return asset_handler_1.AssetHandler; } });
|
|
42
44
|
__exportStar(require("./helpers"), exports);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Logger } from '@nestjs/common';
|
|
2
|
+
import { GraphQueryService } from './graph-query.service';
|
|
3
|
+
import { BigNumber } from 'ethers';
|
|
4
|
+
import { BlockchainPriceService } from './blockchain-price.service';
|
|
5
|
+
export declare class AvgDepositPriceService {
|
|
6
|
+
private readonly graphQueryService;
|
|
7
|
+
private readonly logger;
|
|
8
|
+
private readonly blockchainPriceService;
|
|
9
|
+
private readonly ethAddress;
|
|
10
|
+
constructor(graphQueryService: GraphQueryService, logger: Logger, blockchainPriceService: BlockchainPriceService);
|
|
11
|
+
getAverageDepositPriceInEth(tokenId: number): Promise<BigNumber | null>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AvgDepositPriceService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const graph_query_service_1 = require("./graph-query.service");
|
|
15
|
+
const ethers_1 = require("ethers");
|
|
16
|
+
const blockchain_price_service_1 = require("./blockchain-price.service");
|
|
17
|
+
let AvgDepositPriceService = class AvgDepositPriceService {
|
|
18
|
+
constructor(graphQueryService, logger, blockchainPriceService) {
|
|
19
|
+
this.graphQueryService = graphQueryService;
|
|
20
|
+
this.logger = logger;
|
|
21
|
+
this.blockchainPriceService = blockchainPriceService;
|
|
22
|
+
if (process.env.ASSET_HANDLER_ETH_ADDRESS) {
|
|
23
|
+
this.ethAddress = process.env.ASSET_HANDLER_ETH_ADDRESS;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
throw new Error('env property ASSET_HANDLER_ETH_ADDRESS is not configured');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async getAverageDepositPriceInEth(tokenId) {
|
|
30
|
+
const leverageOpens = await this.graphQueryService.getLeverageOpensByTokenId(tokenId);
|
|
31
|
+
const leverageAdjusts = await this.graphQueryService.getLeverageAdjustsFromBlock(tokenId);
|
|
32
|
+
const leverageOpen = leverageOpens[0];
|
|
33
|
+
let potentialEthAmountHeldTotal;
|
|
34
|
+
let avgDepositPrice;
|
|
35
|
+
if (leverageOpen) {
|
|
36
|
+
const ethPriceAtDepositBlock = await this.blockchainPriceService.getUsdPriceAtBlock(this.ethAddress, leverageOpen.blockNumber);
|
|
37
|
+
const potentialEthAmountReceived = ethers_1.BigNumber.from(leverageOpen.margin)
|
|
38
|
+
.mul(ethers_1.BigNumber.from(leverageOpen.entryPrice))
|
|
39
|
+
.div(ethPriceAtDepositBlock);
|
|
40
|
+
avgDepositPrice = ethPriceAtDepositBlock;
|
|
41
|
+
potentialEthAmountHeldTotal = potentialEthAmountReceived;
|
|
42
|
+
}
|
|
43
|
+
else
|
|
44
|
+
return null;
|
|
45
|
+
if (leverageAdjusts) {
|
|
46
|
+
for (const leverageAdjust of leverageAdjusts) {
|
|
47
|
+
const marginDelta = ethers_1.BigNumber.from(leverageAdjust.marginDelta);
|
|
48
|
+
if (marginDelta.gt(ethers_1.BigNumber.from(0))) {
|
|
49
|
+
const ethPriceAtDepositBlock = await this.blockchainPriceService.getUsdPriceAtBlock(this.ethAddress, leverageAdjust.blockNumber);
|
|
50
|
+
const potentialEthAmountReceived = marginDelta
|
|
51
|
+
.mul(ethers_1.BigNumber.from(leverageAdjust.adjustPrice))
|
|
52
|
+
.div(ethPriceAtDepositBlock);
|
|
53
|
+
avgDepositPrice = potentialEthAmountHeldTotal
|
|
54
|
+
.mul(avgDepositPrice)
|
|
55
|
+
.add(marginDelta.mul(leverageAdjust.adjustPrice))
|
|
56
|
+
.div(potentialEthAmountHeldTotal.add(potentialEthAmountReceived));
|
|
57
|
+
potentialEthAmountHeldTotal = potentialEthAmountHeldTotal.add(potentialEthAmountReceived);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return avgDepositPrice;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
exports.AvgDepositPriceService = AvgDepositPriceService;
|
|
65
|
+
exports.AvgDepositPriceService = AvgDepositPriceService = __decorate([
|
|
66
|
+
(0, common_1.Injectable)(),
|
|
67
|
+
__metadata("design:paramtypes", [graph_query_service_1.GraphQueryService,
|
|
68
|
+
common_1.Logger,
|
|
69
|
+
blockchain_price_service_1.BlockchainPriceService])
|
|
70
|
+
], AvgDepositPriceService);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Logger } from '@nestjs/common';
|
|
2
|
+
import { GraphQueryService } from './graph-query.service';
|
|
3
|
+
import { BigNumber } from 'ethers';
|
|
4
|
+
import { JsonRpcProvider } from '@ethersproject/providers';
|
|
5
|
+
export declare class BlockchainPriceService {
|
|
6
|
+
private readonly graphQueryService;
|
|
7
|
+
private readonly customProvider;
|
|
8
|
+
private readonly logger;
|
|
9
|
+
private readonly assetHandlerContract;
|
|
10
|
+
constructor(graphQueryService: GraphQueryService, customProvider: JsonRpcProvider, logger: Logger);
|
|
11
|
+
getUsdPriceAtBlock(assetAddress: string, blockNumber: number): Promise<BigNumber>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.BlockchainPriceService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const graph_query_service_1 = require("./graph-query.service");
|
|
18
|
+
const ethers_1 = require("ethers");
|
|
19
|
+
const asset_handler_1 = require("../contracts/abi/asset-handler");
|
|
20
|
+
const nestjs_ethers_1 = require("nestjs-ethers");
|
|
21
|
+
const providers_1 = require("@ethersproject/providers");
|
|
22
|
+
let BlockchainPriceService = class BlockchainPriceService {
|
|
23
|
+
constructor(graphQueryService, customProvider, logger) {
|
|
24
|
+
this.graphQueryService = graphQueryService;
|
|
25
|
+
this.customProvider = customProvider;
|
|
26
|
+
this.logger = logger;
|
|
27
|
+
if (process.env.ASSET_HANDLER_CONTRACT_ADDRESS) {
|
|
28
|
+
this.assetHandlerContract = new ethers_1.Contract(process.env.ASSET_HANDLER_CONTRACT_ADDRESS, asset_handler_1.AssetHandler, this.customProvider);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
throw new Error('env property ASSET_HANDLER_CONTRACT_ADDRESS is not configured');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async getUsdPriceAtBlock(assetAddress, blockNumber) {
|
|
35
|
+
try {
|
|
36
|
+
return await this.assetHandlerContract.callStatic['getUSDPrice'](assetAddress, {
|
|
37
|
+
blockTag: blockNumber,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
this.logger.error(`Error calling getUSDPrice with asset address ${assetAddress}:`, err);
|
|
42
|
+
throw err;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
exports.BlockchainPriceService = BlockchainPriceService;
|
|
47
|
+
exports.BlockchainPriceService = BlockchainPriceService = __decorate([
|
|
48
|
+
(0, common_1.Injectable)(),
|
|
49
|
+
__param(1, (0, nestjs_ethers_1.InjectEthersProvider)()),
|
|
50
|
+
__metadata("design:paramtypes", [graph_query_service_1.GraphQueryService,
|
|
51
|
+
providers_1.JsonRpcProvider,
|
|
52
|
+
common_1.Logger])
|
|
53
|
+
], BlockchainPriceService);
|
|
@@ -8,10 +8,12 @@ export declare class GraphQueryService {
|
|
|
8
8
|
getAnnouncedOrders(timestampFrom: number): Promise<AnnouncedOrder[]>;
|
|
9
9
|
getLeverageOpensFromBLock(blockFrom: number): Promise<LeverageOpen[]>;
|
|
10
10
|
getLeverageOpensByTimestampFrom(timestampFrom: number): Promise<LeverageOpen[]>;
|
|
11
|
+
getLeverageOpensByTokenId(tokenId: number): Promise<LeverageOpen[]>;
|
|
11
12
|
getLeverageClosesFromBlock(blockFrom: number): Promise<LeverageClose[]>;
|
|
12
13
|
getLeverageClosesByTimestampFrom(timestampFrom: number): Promise<LeverageClose[]>;
|
|
13
14
|
getLeverageAdjustsByTimestampFrom(timestampFrom: number): Promise<LeverageAdjust[]>;
|
|
14
15
|
getLeverageAdjustsFromBlock(blockNumber: number): Promise<LeverageAdjust[]>;
|
|
16
|
+
getLeverageAdjustsByTokenId(tokenId: number): Promise<LeverageAdjust[]>;
|
|
15
17
|
getPositionLiquidateds(blockFrom: number): Promise<PositionLiquidated[]>;
|
|
16
18
|
getDeposits(blockFrom: number): Promise<DepositEvent[]>;
|
|
17
19
|
getDepositsByTimestampFrom(timestampFrom: number): Promise<DepositEvent[]>;
|
|
@@ -33,9 +35,11 @@ export declare class GraphQueryService {
|
|
|
33
35
|
export declare const getAnnouncedOrdersQuery: string;
|
|
34
36
|
export declare const getLeverageOpensQuery: string;
|
|
35
37
|
export declare const getLeverageOpensByTimestampFromQuery: string;
|
|
38
|
+
export declare const getLeverageOpensByTokenIdQuery: string;
|
|
36
39
|
export declare const getLeverageClosesQuery: string;
|
|
37
40
|
export declare const getLeverageClosesByTimestampFromQuery: string;
|
|
38
41
|
export declare const getLeverageAdjustsByTimestampFromQuery: string;
|
|
42
|
+
export declare const getLeverageAdjustsByTokenIdQuery: string;
|
|
39
43
|
export declare const getLeverageAdjustsByBlockFromQuery: string;
|
|
40
44
|
export declare const getPositionLiquidatedsQuery: string;
|
|
41
45
|
export declare const getDepositsQuery: string;
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.getUnitHoldersQueryPaginated = exports.getClosedPositionsQueryByCloseBlockFrom = exports.getClosedPositionsQuery = exports.getClosedPositionsQueryPaginated = exports.getOpenPositionsQueryPaginated = exports.getLimitOrderExecutedsByTimestampFromQuery = exports.getLimitOrderAnnouncedsQuery = exports.getWithdrawsByWithdrawerAddressQuery = exports.getWithdrawsByTimestampFromQuery = exports.getWithdrawsQuery = exports.getDepositsByDepositorAddressQuery = exports.getDepositsByTimestampFromQuery = exports.getDepositsQuery = exports.getPositionLiquidatedsQuery = exports.getLeverageAdjustsByBlockFromQuery = exports.getLeverageAdjustsByTimestampFromQuery = exports.getLeverageClosesByTimestampFromQuery = exports.getLeverageClosesQuery = exports.getLeverageOpensByTimestampFromQuery = exports.getLeverageOpensQuery = exports.getAnnouncedOrdersQuery = exports.GraphQueryService = void 0;
|
|
12
|
+
exports.getUnitHoldersQueryPaginated = exports.getClosedPositionsQueryByCloseBlockFrom = exports.getClosedPositionsQuery = exports.getClosedPositionsQueryPaginated = exports.getOpenPositionsQueryPaginated = exports.getLimitOrderExecutedsByTimestampFromQuery = exports.getLimitOrderAnnouncedsQuery = exports.getWithdrawsByWithdrawerAddressQuery = exports.getWithdrawsByTimestampFromQuery = exports.getWithdrawsQuery = exports.getDepositsByDepositorAddressQuery = exports.getDepositsByTimestampFromQuery = exports.getDepositsQuery = exports.getPositionLiquidatedsQuery = exports.getLeverageAdjustsByBlockFromQuery = exports.getLeverageAdjustsByTokenIdQuery = exports.getLeverageAdjustsByTimestampFromQuery = exports.getLeverageClosesByTimestampFromQuery = exports.getLeverageClosesQuery = exports.getLeverageOpensByTokenIdQuery = exports.getLeverageOpensByTimestampFromQuery = exports.getLeverageOpensQuery = exports.getAnnouncedOrdersQuery = exports.GraphQueryService = void 0;
|
|
13
13
|
const common_1 = require("@nestjs/common");
|
|
14
14
|
const graphql_request_1 = require("graphql-request");
|
|
15
15
|
let GraphQueryService = class GraphQueryService {
|
|
@@ -53,6 +53,18 @@ let GraphQueryService = class GraphQueryService {
|
|
|
53
53
|
throw error;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
+
async getLeverageOpensByTokenId(tokenId) {
|
|
57
|
+
const variables = { tokenId: tokenId };
|
|
58
|
+
try {
|
|
59
|
+
const response = await this.graphQLClient.request(exports.getLeverageOpensByTokenIdQuery, variables);
|
|
60
|
+
this.logger.log(`Fetched ${response.leverageOpens.length} leverageOpens events from the graph for tokenId: ${tokenId}`);
|
|
61
|
+
return response.leverageOpens;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
this.logger.error(`Error fetching leverageOpens events from the graph for tokenId: ${tokenId}`, error);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
56
68
|
async getLeverageClosesFromBlock(blockFrom) {
|
|
57
69
|
const variables = { fromBlock: blockFrom };
|
|
58
70
|
try {
|
|
@@ -101,6 +113,18 @@ let GraphQueryService = class GraphQueryService {
|
|
|
101
113
|
throw error;
|
|
102
114
|
}
|
|
103
115
|
}
|
|
116
|
+
async getLeverageAdjustsByTokenId(tokenId) {
|
|
117
|
+
const variables = { tokenId: tokenId };
|
|
118
|
+
try {
|
|
119
|
+
const response = await this.graphQLClient.request(exports.getLeverageAdjustsByTokenIdQuery, variables);
|
|
120
|
+
this.logger.log(`Fetched ${response.leverageAdjusts.length} leverageAdjusts events from the graph for tokenId: ${tokenId}`);
|
|
121
|
+
return response.leverageAdjusts;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
this.logger.error(`Error fetching leverageAdjusts events from the graph by tokenId: ${tokenId}`, error);
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
104
128
|
async getPositionLiquidateds(blockFrom) {
|
|
105
129
|
const variables = { fromBlock: blockFrom };
|
|
106
130
|
try {
|
|
@@ -361,6 +385,21 @@ exports.getLeverageOpensByTimestampFromQuery = (0, graphql_request_1.gql) `
|
|
|
361
385
|
}
|
|
362
386
|
}
|
|
363
387
|
`;
|
|
388
|
+
exports.getLeverageOpensByTokenIdQuery = (0, graphql_request_1.gql) `
|
|
389
|
+
query GetLeverageOpens($tokenId: Int) {
|
|
390
|
+
leverageOpens(where: { tokenId: $tokenId }, first: 1000) {
|
|
391
|
+
blockNumber
|
|
392
|
+
blockTimestamp
|
|
393
|
+
entryPrice
|
|
394
|
+
tokenId
|
|
395
|
+
account
|
|
396
|
+
margin
|
|
397
|
+
size
|
|
398
|
+
transactionHash
|
|
399
|
+
executedBy
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
`;
|
|
364
403
|
exports.getLeverageClosesQuery = (0, graphql_request_1.gql) `
|
|
365
404
|
query GetLeverageCloses($fromBlock: Int) {
|
|
366
405
|
leverageCloses(where: { blockNumber_gt: $fromBlock }, first: 1000) {
|
|
@@ -403,6 +442,20 @@ exports.getLeverageAdjustsByTimestampFromQuery = (0, graphql_request_1.gql) `
|
|
|
403
442
|
}
|
|
404
443
|
}
|
|
405
444
|
`;
|
|
445
|
+
exports.getLeverageAdjustsByTokenIdQuery = (0, graphql_request_1.gql) `
|
|
446
|
+
query GetLeverageAdjusts($tokenId: Int) {
|
|
447
|
+
leverageAdjusts(where: { tokenId: $tokenId }, first: 1000) {
|
|
448
|
+
tokenId
|
|
449
|
+
marginDelta
|
|
450
|
+
sizeDelta
|
|
451
|
+
blockTimestamp
|
|
452
|
+
transactionHash
|
|
453
|
+
adjustPrice
|
|
454
|
+
executedBy
|
|
455
|
+
blockNumber
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
`;
|
|
406
459
|
exports.getLeverageAdjustsByBlockFromQuery = (0, graphql_request_1.gql) `
|
|
407
460
|
query GetLeverageAdjusts($blockNumber: Int) {
|
|
408
461
|
leverageAdjusts(where: { blockNumber_gt: $blockNumber }, first: 1000) {
|
package/dist/service/index.d.ts
CHANGED
package/dist/service/index.js
CHANGED
|
@@ -20,3 +20,5 @@ __exportStar(require("./error.handler"), exports);
|
|
|
20
20
|
__exportStar(require("./notification.service"), exports);
|
|
21
21
|
__exportStar(require("./blockscan.service"), exports);
|
|
22
22
|
__exportStar(require("./multichain-config.service"), exports);
|
|
23
|
+
__exportStar(require("./blockchain-price.service"), exports);
|
|
24
|
+
__exportStar(require("./avg-deposit-price.service"), exports);
|
|
@@ -4,7 +4,9 @@ import { MultichainConfig } from '../entity';
|
|
|
4
4
|
export declare class MultichainConfigService {
|
|
5
5
|
private configRepository;
|
|
6
6
|
private readonly logger;
|
|
7
|
-
private
|
|
7
|
+
private readonly configs;
|
|
8
8
|
constructor(configRepository: MultichainConfigRepository, logger: Logger);
|
|
9
|
-
|
|
9
|
+
loadConfigs(appName: string, blockChainCode: string): Promise<MultichainConfig | undefined>;
|
|
10
|
+
private getConfigFromCache;
|
|
11
|
+
private putConfigsToCache;
|
|
10
12
|
}
|
|
@@ -16,25 +16,34 @@ let MultichainConfigService = class MultichainConfigService {
|
|
|
16
16
|
constructor(configRepository, logger) {
|
|
17
17
|
this.configRepository = configRepository;
|
|
18
18
|
this.logger = logger;
|
|
19
|
+
this.configs = new Map();
|
|
19
20
|
}
|
|
20
|
-
async
|
|
21
|
-
if (this.
|
|
22
|
-
return this.
|
|
21
|
+
async loadConfigs(appName, blockChainCode) {
|
|
22
|
+
if (this.getConfigFromCache(appName, blockChainCode)) {
|
|
23
|
+
return this.getConfigFromCache(appName, blockChainCode);
|
|
23
24
|
}
|
|
24
25
|
else {
|
|
25
|
-
const result = await this.configRepository.
|
|
26
|
+
const result = await this.configRepository.getByAppAndCode(appName, blockChainCode);
|
|
26
27
|
if (!result) {
|
|
27
|
-
throw new Error(
|
|
28
|
+
throw new Error(`failed to load multichain config from db for ${appName} code ${blockChainCode}`);
|
|
28
29
|
}
|
|
29
30
|
else {
|
|
30
|
-
if (!this.
|
|
31
|
-
this.
|
|
32
|
-
this.logger.log(`multichain config loaded from database`);
|
|
31
|
+
if (!this.getConfigFromCache(appName, blockChainCode)) {
|
|
32
|
+
this.putConfigsToCache(appName, blockChainCode, result);
|
|
33
|
+
this.logger.log(`multichain config loaded from database for ${appName} code ${blockChainCode}`);
|
|
33
34
|
}
|
|
34
|
-
return this.
|
|
35
|
+
return this.getConfigFromCache(appName, blockChainCode);
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
}
|
|
39
|
+
getConfigFromCache(appName, blockChainCode) {
|
|
40
|
+
const key = appName.concat(blockChainCode);
|
|
41
|
+
return this.configs.get(key);
|
|
42
|
+
}
|
|
43
|
+
putConfigsToCache(appName, blockChainCode, config) {
|
|
44
|
+
const key = appName.concat(blockChainCode);
|
|
45
|
+
this.configs.set(key, config);
|
|
46
|
+
}
|
|
38
47
|
};
|
|
39
48
|
exports.MultichainConfigService = MultichainConfigService;
|
|
40
49
|
exports.MultichainConfigService = MultichainConfigService = __decorate([
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dhedge/backend-flatcoin-core",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.95",
|
|
4
4
|
"description": "Backend Flatcoin Core",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
"nest-winston": "1.9.3",
|
|
25
25
|
"typeorm": "^0.3.17",
|
|
26
26
|
"winston": "3.10.0",
|
|
27
|
-
"graphql-request": "6.1.0"
|
|
27
|
+
"graphql-request": "6.1.0",
|
|
28
|
+
"nestjs-ethers": "^2.0.3"
|
|
28
29
|
},
|
|
29
30
|
"devDependencies": {
|
|
30
31
|
"@nestjs/testing": "^9.4.3",
|
|
@@ -45,7 +46,8 @@
|
|
|
45
46
|
"prettier": "^2.3.2",
|
|
46
47
|
"rimraf": "5.0.5",
|
|
47
48
|
"ts-jest": "29.1.0",
|
|
48
|
-
"typescript": "^5.0.0"
|
|
49
|
+
"typescript": "^5.0.0",
|
|
50
|
+
"@ethersproject/providers": "^5.7.2"
|
|
49
51
|
},
|
|
50
52
|
"repository": {
|
|
51
53
|
"type": "git",
|