@dhedge/backend-flatcoin-core 0.2.94 → 0.2.96

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.
@@ -0,0 +1,43 @@
1
+ export declare const PythPriceFeed: ({
2
+ inputs: {
3
+ internalType: string;
4
+ name: string;
5
+ type: string;
6
+ }[];
7
+ name: string;
8
+ outputs: {
9
+ components: ({
10
+ internalType: string;
11
+ name: string;
12
+ type: string;
13
+ components?: undefined;
14
+ } | {
15
+ components: {
16
+ internalType: string;
17
+ name: string;
18
+ type: string;
19
+ }[];
20
+ internalType: string;
21
+ name: string;
22
+ type: string;
23
+ })[];
24
+ internalType: string;
25
+ name: string;
26
+ type: string;
27
+ }[];
28
+ stateMutability: string;
29
+ type: string;
30
+ anonymous?: undefined;
31
+ } | {
32
+ anonymous: boolean;
33
+ inputs: {
34
+ indexed: boolean;
35
+ internalType: string;
36
+ name: string;
37
+ type: string;
38
+ }[];
39
+ name: string;
40
+ type: string;
41
+ outputs?: undefined;
42
+ stateMutability?: undefined;
43
+ })[];
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PythPriceFeed = void 0;
4
+ exports.PythPriceFeed = [
5
+ {
6
+ inputs: [
7
+ {
8
+ internalType: 'bytes32',
9
+ name: 'id',
10
+ type: 'bytes32',
11
+ },
12
+ ],
13
+ name: 'queryPriceFeed',
14
+ outputs: [
15
+ {
16
+ components: [
17
+ {
18
+ internalType: 'bytes32',
19
+ name: 'id',
20
+ type: 'bytes32',
21
+ },
22
+ {
23
+ components: [
24
+ {
25
+ internalType: 'int64',
26
+ name: 'price',
27
+ type: 'int64',
28
+ },
29
+ {
30
+ internalType: 'uint64',
31
+ name: 'conf',
32
+ type: 'uint64',
33
+ },
34
+ {
35
+ internalType: 'int32',
36
+ name: 'expo',
37
+ type: 'int32',
38
+ },
39
+ {
40
+ internalType: 'uint256',
41
+ name: 'publishTime',
42
+ type: 'uint256',
43
+ },
44
+ ],
45
+ internalType: 'struct PythStructs.Price',
46
+ name: 'price',
47
+ type: 'tuple',
48
+ },
49
+ {
50
+ components: [
51
+ {
52
+ internalType: 'int64',
53
+ name: 'price',
54
+ type: 'int64',
55
+ },
56
+ {
57
+ internalType: 'uint64',
58
+ name: 'conf',
59
+ type: 'uint64',
60
+ },
61
+ {
62
+ internalType: 'int32',
63
+ name: 'expo',
64
+ type: 'int32',
65
+ },
66
+ {
67
+ internalType: 'uint256',
68
+ name: 'publishTime',
69
+ type: 'uint256',
70
+ },
71
+ ],
72
+ internalType: 'struct PythStructs.Price',
73
+ name: 'emaPrice',
74
+ type: 'tuple',
75
+ },
76
+ ],
77
+ internalType: 'struct PythStructs.PriceFeed',
78
+ name: 'priceFeed',
79
+ type: 'tuple',
80
+ },
81
+ ],
82
+ stateMutability: 'view',
83
+ type: 'function',
84
+ },
85
+ {
86
+ anonymous: false,
87
+ inputs: [
88
+ {
89
+ indexed: true,
90
+ internalType: 'address',
91
+ name: 'owner',
92
+ type: 'address',
93
+ },
94
+ {
95
+ indexed: true,
96
+ internalType: 'address',
97
+ name: 'spender',
98
+ type: 'address',
99
+ },
100
+ {
101
+ indexed: false,
102
+ internalType: 'uint256',
103
+ name: 'value',
104
+ type: 'uint256',
105
+ },
106
+ ],
107
+ name: 'Approval',
108
+ type: 'event',
109
+ },
110
+ ];
@@ -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 { PythPriceFeed } from './abi/pyth-price-feed';
13
14
  export * from './helpers';
@@ -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.PythPriceFeed = 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 pyth_price_feed_1 = require("./abi/pyth-price-feed");
43
+ Object.defineProperty(exports, "PythPriceFeed", { enumerable: true, get: function () { return pyth_price_feed_1.PythPriceFeed; } });
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.PYTH_PRICE_FEED_ETH_ADDRESS) {
23
+ this.ethAddress = process.env.PYTH_PRICE_FEED_ETH_ADDRESS;
24
+ }
25
+ else {
26
+ throw new Error('env property PYTH_PRICE_FEED_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,13 @@
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
+ private getUsdPriceAtBlockUnformatted;
13
+ }
@@ -0,0 +1,62 @@
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 pyth_price_feed_1 = require("../contracts/abi/pyth-price-feed");
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.PYHT_PRICE_FEED_CONTRACT_ADDRESS) {
28
+ this.assetHandlerContract = new ethers_1.Contract(process.env.PYHT_PRICE_FEED_CONTRACT_ADDRESS, pyth_price_feed_1.PythPriceFeed, this.customProvider);
29
+ }
30
+ else {
31
+ throw new Error('env property PYHT_PRICE_FEED_CONTRACT_ADDRESS is not configured');
32
+ }
33
+ }
34
+ async getUsdPriceAtBlock(assetAddress, blockNumber) {
35
+ try {
36
+ return (await this.getUsdPriceAtBlockUnformatted(assetAddress, blockNumber)).mul(ethers_1.BigNumber.from('10000000000'));
37
+ }
38
+ catch (err) {
39
+ this.logger.error(`Error calling getUSDPrice with asset address ${assetAddress}:`, err);
40
+ throw err;
41
+ }
42
+ }
43
+ async getUsdPriceAtBlockUnformatted(assetAddress, blockNumber) {
44
+ try {
45
+ return await this.assetHandlerContract.callStatic['queryPriceFeed'](assetAddress, {
46
+ blockTag: blockNumber,
47
+ });
48
+ }
49
+ catch (err) {
50
+ this.logger.error(`Error calling getUSDPrice with asset address ${assetAddress}:`, err);
51
+ throw err;
52
+ }
53
+ }
54
+ };
55
+ exports.BlockchainPriceService = BlockchainPriceService;
56
+ exports.BlockchainPriceService = BlockchainPriceService = __decorate([
57
+ (0, common_1.Injectable)(),
58
+ __param(1, (0, nestjs_ethers_1.InjectEthersProvider)()),
59
+ __metadata("design:paramtypes", [graph_query_service_1.GraphQueryService,
60
+ providers_1.JsonRpcProvider,
61
+ common_1.Logger])
62
+ ], 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) {
@@ -4,3 +4,5 @@ export * from './error.handler';
4
4
  export * from './notification.service';
5
5
  export * from './blockscan.service';
6
6
  export * from './multichain-config.service';
7
+ export * from './blockchain-price.service';
8
+ export * from './avg-deposit-price.service';
@@ -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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dhedge/backend-flatcoin-core",
3
- "version": "0.2.94",
3
+ "version": "0.2.96",
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",