@gainsnetwork/sdk 0.0.20-rc2 → 0.0.21
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/README.md +11 -11
- package/lib/constants.d.ts +137 -135
- package/lib/constants.js +144 -123
- package/lib/contracts/addresses.d.ts +2 -2
- package/lib/contracts/addresses.js +15 -15
- package/lib/contracts/addresses.json +23 -23
- package/lib/contracts/index.d.ts +6 -6
- package/lib/contracts/index.js +32 -32
- package/lib/contracts/types/generated/GFarmTradingStorageV5.d.ts +1911 -1911
- package/lib/contracts/types/generated/GFarmTradingStorageV5.js +2 -2
- package/lib/contracts/types/generated/GNSNftRewardsV6.d.ts +533 -533
- package/lib/contracts/types/generated/GNSNftRewardsV6.js +2 -2
- package/lib/contracts/types/generated/GNSPairInfosV6_1.d.ts +911 -911
- package/lib/contracts/types/generated/GNSPairInfosV6_1.js +2 -2
- package/lib/contracts/types/generated/GNSPairsStorageV6.d.ts +660 -660
- package/lib/contracts/types/generated/GNSPairsStorageV6.js +2 -2
- package/lib/contracts/types/generated/GTokenOpenPnlFeed.d.ts +557 -557
- package/lib/contracts/types/generated/GTokenOpenPnlFeed.js +2 -2
- package/lib/contracts/types/generated/common.d.ts +22 -22
- package/lib/contracts/types/generated/common.js +2 -2
- package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.d.ts +83 -83
- package/lib/contracts/types/generated/factories/GFarmTradingStorageV5__factory.js +2691 -2691
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.d.ts +100 -100
- package/lib/contracts/types/generated/factories/GNSNftRewardsV6__factory.js +1003 -1003
- package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +98 -98
- package/lib/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +1485 -1485
- package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +117 -117
- package/lib/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +1265 -1265
- package/lib/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.d.ts +59 -59
- package/lib/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.js +765 -765
- package/lib/contracts/types/generated/factories/index.d.ts +5 -5
- package/lib/contracts/types/generated/factories/index.js +16 -16
- package/lib/contracts/types/generated/index.d.ts +11 -11
- package/lib/contracts/types/generated/index.js +37 -37
- package/lib/contracts/types/index.d.ts +16 -16
- package/lib/contracts/types/index.js +2 -2
- package/lib/contracts/utils/index.d.ts +3 -3
- package/lib/contracts/utils/index.js +19 -19
- package/lib/contracts/utils/openLimitOrders.d.ts +8 -8
- package/lib/contracts/utils/openLimitOrders.js +77 -77
- package/lib/contracts/utils/openTrades.d.ts +9 -9
- package/lib/contracts/utils/openTrades.js +169 -169
- package/lib/contracts/utils/pairs.d.ts +6 -6
- package/lib/contracts/utils/pairs.js +102 -102
- package/lib/index.d.ts +4 -5
- package/lib/index.js +20 -21
- package/lib/markets/commodities.d.ts +1 -1
- package/lib/markets/commodities.js +31 -31
- package/lib/markets/crypto.d.ts +1 -1
- package/lib/markets/crypto.js +6 -6
- package/lib/markets/forex.d.ts +2 -2
- package/lib/markets/forex.js +38 -38
- package/lib/markets/index.d.ts +5 -5
- package/lib/markets/index.js +21 -21
- package/lib/markets/indices.d.ts +1 -1
- package/lib/markets/indices.js +6 -6
- package/lib/markets/stocks.d.ts +3 -3
- package/lib/markets/stocks.js +54 -54
- package/lib/trade/fees.d.ts +15 -15
- package/lib/trade/fees.js +45 -45
- package/lib/trade/index.d.ts +2 -2
- package/lib/trade/index.js +18 -18
- package/lib/trade/pnl.d.ts +7 -7
- package/lib/trade/pnl.js +43 -43
- package/lib/trade/types.d.ts +157 -157
- package/lib/trade/types.js +8 -8
- package/package.json +104 -107
- package/lib/contracts/types/GFarmTradingStorageV5.d.ts +0 -1911
- package/lib/contracts/types/GFarmTradingStorageV5.js +0 -2
- package/lib/contracts/types/GNSPairInfosV6_1.d.ts +0 -911
- package/lib/contracts/types/GNSPairInfosV6_1.js +0 -2
- package/lib/contracts/types/GNSPairsStorageV6.d.ts +0 -660
- package/lib/contracts/types/GNSPairsStorageV6.js +0 -2
- package/lib/contracts/types/common.d.ts +0 -22
- package/lib/contracts/types/common.js +0 -2
- package/lib/contracts/types/factories/GFarmTradingStorageV5__factory.d.ts +0 -83
- package/lib/contracts/types/factories/GFarmTradingStorageV5__factory.js +0 -2691
- package/lib/contracts/types/factories/GNSPairInfosV6_1__factory.d.ts +0 -98
- package/lib/contracts/types/factories/GNSPairInfosV6_1__factory.js +0 -1485
- package/lib/contracts/types/factories/GNSPairsStorageV6__factory.d.ts +0 -117
- package/lib/contracts/types/factories/GNSPairsStorageV6__factory.js +0 -1265
- package/lib/contracts/types/factories/index.d.ts +0 -3
- package/lib/contracts/types/factories/index.js +0 -12
- package/lib/contracts/utils/openTradesOriginal.d.ts +0 -3
- package/lib/contracts/utils/openTradesOriginal.js +0 -134
- package/lib/prices/PricingNetworkClient.d.ts +0 -22
- package/lib/prices/PricingNetworkClient.js +0 -179
- package/lib/prices/PricingStreamClient.d.ts +0 -16
- package/lib/prices/PricingStreamClient.js +0 -101
- package/lib/prices/index.d.ts +0 -1
- package/lib/prices/index.js +0 -17
- package/lib/src/contracts/addresses.d.ts +0 -2
- package/lib/src/contracts/addresses.js +0 -15
- package/lib/src/contracts/addresses.json +0 -20
- package/lib/src/contracts/index.d.ts +0 -6
- package/lib/src/contracts/index.js +0 -31
- package/lib/src/contracts/types/generated/GFarmTradingStorageV5.d.ts +0 -1911
- package/lib/src/contracts/types/generated/GFarmTradingStorageV5.js +0 -2
- package/lib/src/contracts/types/generated/GNSPairInfosV6_1.d.ts +0 -911
- package/lib/src/contracts/types/generated/GNSPairInfosV6_1.js +0 -2
- package/lib/src/contracts/types/generated/GNSPairsStorageV6.d.ts +0 -660
- package/lib/src/contracts/types/generated/GNSPairsStorageV6.js +0 -2
- package/lib/src/contracts/types/generated/GTokenOpenPnlFeed.d.ts +0 -557
- package/lib/src/contracts/types/generated/GTokenOpenPnlFeed.js +0 -2
- package/lib/src/contracts/types/generated/common.d.ts +0 -22
- package/lib/src/contracts/types/generated/common.js +0 -2
- package/lib/src/contracts/types/generated/factories/GFarmTradingStorageV5__factory.d.ts +0 -83
- package/lib/src/contracts/types/generated/factories/GFarmTradingStorageV5__factory.js +0 -2691
- package/lib/src/contracts/types/generated/factories/GNSPairInfosV6_1__factory.d.ts +0 -98
- package/lib/src/contracts/types/generated/factories/GNSPairInfosV6_1__factory.js +0 -1485
- package/lib/src/contracts/types/generated/factories/GNSPairsStorageV6__factory.d.ts +0 -117
- package/lib/src/contracts/types/generated/factories/GNSPairsStorageV6__factory.js +0 -1265
- package/lib/src/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.d.ts +0 -59
- package/lib/src/contracts/types/generated/factories/GTokenOpenPnlFeed__factory.js +0 -765
- package/lib/src/contracts/types/generated/factories/index.d.ts +0 -4
- package/lib/src/contracts/types/generated/factories/index.js +0 -14
- package/lib/src/contracts/types/generated/index.d.ts +0 -9
- package/lib/src/contracts/types/generated/index.js +0 -35
- package/lib/src/contracts/types/index.d.ts +0 -13
- package/lib/src/contracts/types/index.js +0 -2
- package/lib/src/contracts/utils/index.d.ts +0 -2
- package/lib/src/contracts/utils/index.js +0 -18
- package/lib/src/contracts/utils/openTrades.d.ts +0 -3
- package/lib/src/contracts/utils/openTrades.js +0 -107
- package/lib/src/contracts/utils/pairs.d.ts +0 -6
- package/lib/src/contracts/utils/pairs.js +0 -102
- package/lib/src/index.d.ts +0 -3
- package/lib/src/index.js +0 -19
- package/lib/src/markets/commodities.d.ts +0 -1
- package/lib/src/markets/commodities.js +0 -31
- package/lib/src/markets/crypto.d.ts +0 -1
- package/lib/src/markets/crypto.js +0 -6
- package/lib/src/markets/forex.d.ts +0 -2
- package/lib/src/markets/forex.js +0 -38
- package/lib/src/markets/index.d.ts +0 -5
- package/lib/src/markets/index.js +0 -21
- package/lib/src/markets/indices.d.ts +0 -1
- package/lib/src/markets/indices.js +0 -6
- package/lib/src/markets/stocks.d.ts +0 -3
- package/lib/src/markets/stocks.js +0 -54
- package/lib/src/trade/fees.d.ts +0 -15
- package/lib/src/trade/fees.js +0 -45
- package/lib/src/trade/index.d.ts +0 -2
- package/lib/src/trade/index.js +0 -18
- package/lib/src/trade/pnl.d.ts +0 -7
- package/lib/src/trade/pnl.js +0 -43
- package/lib/src/trade/types.d.ts +0 -143
- package/lib/src/trade/types.js +0 -8
- package/lib/test/index.d.ts +0 -1
- package/lib/test/index.js +0 -22
- package/lib/test.d.ts +0 -1
- package/lib/test.js +0 -37
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GNSPairsStorageV6__factory = exports.GNSPairInfosV6_1__factory = exports.GFarmTradingStorageV5__factory = void 0;
|
|
4
|
-
/* Autogenerated file. Do not edit manually. */
|
|
5
|
-
/* tslint:disable */
|
|
6
|
-
/* eslint-disable */
|
|
7
|
-
var GFarmTradingStorageV5__factory_1 = require("./GFarmTradingStorageV5__factory");
|
|
8
|
-
Object.defineProperty(exports, "GFarmTradingStorageV5__factory", { enumerable: true, get: function () { return GFarmTradingStorageV5__factory_1.GFarmTradingStorageV5__factory; } });
|
|
9
|
-
var GNSPairInfosV6_1__factory_1 = require("./GNSPairInfosV6_1__factory");
|
|
10
|
-
Object.defineProperty(exports, "GNSPairInfosV6_1__factory", { enumerable: true, get: function () { return GNSPairInfosV6_1__factory_1.GNSPairInfosV6_1__factory; } });
|
|
11
|
-
var GNSPairsStorageV6__factory_1 = require("./GNSPairsStorageV6__factory");
|
|
12
|
-
Object.defineProperty(exports, "GNSPairsStorageV6__factory", { enumerable: true, get: function () { return GNSPairsStorageV6__factory_1.GNSPairsStorageV6__factory; } });
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.fetchOpenPairTradesOriginal = void 0;
|
|
13
|
-
const fetchOpenPairTradesOriginal = (contracts, pairBatchSize = 10) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
-
if (!contracts) {
|
|
15
|
-
return [];
|
|
16
|
-
}
|
|
17
|
-
const { gnsPairsStorageV6: pairsStorageContract } = contracts;
|
|
18
|
-
try {
|
|
19
|
-
const totalPairIndexes = (yield pairsStorageContract.pairsCount()).toNumber() - 1;
|
|
20
|
-
let allOpenPairTrades = [];
|
|
21
|
-
for (let batchStartPairIndex = 0; batchStartPairIndex < totalPairIndexes; batchStartPairIndex += pairBatchSize) {
|
|
22
|
-
const batchEndPairIndex = Math.min(batchStartPairIndex + pairBatchSize - 1, totalPairIndexes);
|
|
23
|
-
const openPairTradesBatch = yield fetchOpenPairTradesBatchOriginal(contracts, batchStartPairIndex, batchEndPairIndex);
|
|
24
|
-
console.log("openPairTradesBatch", openPairTradesBatch.length);
|
|
25
|
-
allOpenPairTrades = allOpenPairTrades.concat(openPairTradesBatch);
|
|
26
|
-
}
|
|
27
|
-
return allOpenPairTrades;
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
console.error(`Unexpected error while fetching open pair trades!`);
|
|
31
|
-
throw error;
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
exports.fetchOpenPairTradesOriginal = fetchOpenPairTradesOriginal;
|
|
35
|
-
const fetchOpenPairTradesBatchOriginal = (contracts, startPairIndex, endPairIndex) => __awaiter(void 0, void 0, void 0, function* () {
|
|
36
|
-
const { gfarmTradingStorageV5: storageContract, gnsPairInfosV6_1: pairInfosContract, } = contracts;
|
|
37
|
-
const maxTradesPerPair = (yield storageContract.maxTradesPerPair()).toNumber();
|
|
38
|
-
const pairIndexesToFetch = Array.from({ length: endPairIndex - startPairIndex + 1 }, (_, i) => i + startPairIndex);
|
|
39
|
-
const rawTrades = yield Promise.all(pairIndexesToFetch.map((pairIndex) => __awaiter(void 0, void 0, void 0, function* () {
|
|
40
|
-
// console.debug(`Fetching pair traders for pairIndex ${pairIndex}...`);
|
|
41
|
-
const pairTradersCallStartTime = performance.now();
|
|
42
|
-
const pairTraderAddresses = yield storageContract.pairTradersArray(pairIndex);
|
|
43
|
-
if (pairTraderAddresses.length === 0) {
|
|
44
|
-
// console.debug(
|
|
45
|
-
// `No pair traders found for pairIndex ${pairIndex}; no processing left to do!`
|
|
46
|
-
// );
|
|
47
|
-
return [];
|
|
48
|
-
}
|
|
49
|
-
// console.debug(
|
|
50
|
-
// `Fetched ${
|
|
51
|
-
// pairTraderAddresses.length
|
|
52
|
-
// } pair traders for pairIndex ${pairIndex} in ${
|
|
53
|
-
// performance.now() - pairTradersCallStartTime
|
|
54
|
-
// }ms; now fetching all open trades...`
|
|
55
|
-
// );
|
|
56
|
-
const openTradesForPairTraders = yield Promise.all(pairTraderAddresses.map((pairTraderAddress) => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
-
const openTradesCalls = new Array(maxTradesPerPair);
|
|
58
|
-
const traderOpenTradesCallsStartTime = performance.now();
|
|
59
|
-
for (let pairTradeIndex = 0; pairTradeIndex < maxTradesPerPair; pairTradeIndex++) {
|
|
60
|
-
openTradesCalls[pairTradeIndex] = storageContract.openTrades(pairTraderAddress, pairIndex, pairTradeIndex);
|
|
61
|
-
}
|
|
62
|
-
/*console.debug(
|
|
63
|
-
`Waiting on ${openTradesCalls.length} StorageContract::openTrades calls for trader ${pairTraderAddress}...`
|
|
64
|
-
);*/
|
|
65
|
-
const openTradesForTraderAddress = yield Promise.all(openTradesCalls);
|
|
66
|
-
// console.debug(
|
|
67
|
-
// `Received all trades for trader ${pairTraderAddress} and pair ${pairIndex} in ${
|
|
68
|
-
// performance.now() - traderOpenTradesCallsStartTime
|
|
69
|
-
// }ms.`
|
|
70
|
-
// );
|
|
71
|
-
// Filter out any of the trades that aren't *really* open (NOTE: these will have an empty trader address, so just test against that)
|
|
72
|
-
const actualOpenTradesForTrader = openTradesForTraderAddress.filter(openTrade => openTrade.trader === pairTraderAddress);
|
|
73
|
-
/*console.debug(
|
|
74
|
-
`Filtered down to ${actualOpenTradesForTrader.length} actual open trades for trader ${pairTraderAddress} and pair ${pairIndex}; fetching corresponding trade info and initial fees...`
|
|
75
|
-
);*/
|
|
76
|
-
const [actualOpenTradesTradeInfos, actualOpenTradesInitialAccFees] = yield Promise.all([
|
|
77
|
-
Promise.all(actualOpenTradesForTrader.map(aot => storageContract.openTradesInfo(aot.trader, aot.pairIndex, aot.index))),
|
|
78
|
-
Promise.all(actualOpenTradesForTrader.map(aot => pairInfosContract.tradeInitialAccFees(aot.trader, aot.pairIndex, aot.index))),
|
|
79
|
-
]);
|
|
80
|
-
const finalOpenTradesForTrader = new Array(actualOpenTradesForTrader.length);
|
|
81
|
-
for (let tradeIndex = 0; tradeIndex < actualOpenTradesForTrader.length; tradeIndex++) {
|
|
82
|
-
const tradeInfo = actualOpenTradesTradeInfos[tradeIndex];
|
|
83
|
-
if (tradeInfo === undefined) {
|
|
84
|
-
// console.error(
|
|
85
|
-
// "No trade info found for open trade while fetching open trades!",
|
|
86
|
-
// { trade: actualOpenTradesForTrader[tradeIndex] }
|
|
87
|
-
// );
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
const tradeInitialAccFees = actualOpenTradesInitialAccFees[tradeIndex];
|
|
91
|
-
if (tradeInitialAccFees === undefined) {
|
|
92
|
-
// console.error(
|
|
93
|
-
// "No initial fees found for open trade while fetching open trades!",
|
|
94
|
-
// { trade: actualOpenTradesForTrader[tradeIndex] }
|
|
95
|
-
// );
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
const trade = actualOpenTradesForTrader[tradeIndex];
|
|
99
|
-
finalOpenTradesForTrader[tradeIndex] = {
|
|
100
|
-
trade: {
|
|
101
|
-
trader: trade.trader,
|
|
102
|
-
pairIndex: parseInt(trade.pairIndex.toString()),
|
|
103
|
-
index: parseInt(trade.index.toString()),
|
|
104
|
-
initialPosToken: parseFloat(trade.initialPosToken.toString()) / 1e18,
|
|
105
|
-
openPrice: parseFloat(trade.openPrice.toString()) / 1e10,
|
|
106
|
-
buy: trade.buy.toString() === "true",
|
|
107
|
-
leverage: parseInt(trade.leverage.toString()),
|
|
108
|
-
tp: parseFloat(trade.tp.toString()) / 1e10,
|
|
109
|
-
sl: parseFloat(trade.sl.toString()) / 1e10,
|
|
110
|
-
},
|
|
111
|
-
tradeInfo: {
|
|
112
|
-
beingMarketClosed: tradeInfo.beingMarketClosed.toString() === "true",
|
|
113
|
-
tokenPriceDai: parseFloat(tradeInfo.tokenPriceDai.toString()) / 1e10,
|
|
114
|
-
openInterestDai: parseFloat(tradeInfo.openInterestDai.toString()) / 1e18,
|
|
115
|
-
tpLastUpdated: tradeInfo.tpLastUpdated,
|
|
116
|
-
slLastUpdated: tradeInfo.slLastUpdated,
|
|
117
|
-
},
|
|
118
|
-
initialAccFees: {
|
|
119
|
-
rollover: parseFloat(tradeInitialAccFees.rollover.toString()) / 1e18,
|
|
120
|
-
funding: parseFloat(tradeInitialAccFees.funding.toString()) / 1e18,
|
|
121
|
-
openedAfterUpdate: tradeInitialAccFees.openedAfterUpdate.toString() === "true",
|
|
122
|
-
},
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
/*console.debug(
|
|
126
|
-
`Trade info and initial fees fetched for ${finalOpenTradesForTrader.length} trades for trader ${pairTraderAddress} and pair ${pairIndex}; done!`
|
|
127
|
-
);*/
|
|
128
|
-
return finalOpenTradesForTrader;
|
|
129
|
-
})));
|
|
130
|
-
return openTradesForPairTraders;
|
|
131
|
-
})));
|
|
132
|
-
const perPairTrades = rawTrades.reduce((a, b) => a.concat(b), []);
|
|
133
|
-
return perPairTrades.reduce((a, b) => a.concat(b), []);
|
|
134
|
-
});
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import WebSocket from "ws";
|
|
2
|
-
export declare class PricingNetworkClient {
|
|
3
|
-
private endpoints;
|
|
4
|
-
private _onPriceMessage;
|
|
5
|
-
private concurrentConnections;
|
|
6
|
-
private bufferTimeoutMs;
|
|
7
|
-
private reconnectTimeoutMs;
|
|
8
|
-
private sockets;
|
|
9
|
-
private latencyMap;
|
|
10
|
-
private priceBuffer;
|
|
11
|
-
private priceBufferLastFlush;
|
|
12
|
-
private stagedPrices;
|
|
13
|
-
private pairsToIndex;
|
|
14
|
-
constructor(endpoints: string[], onPriceMessage: (prices: number[]) => void, concurrentConnections?: number, bufferTimeoutMs?: number, reconnectTimeoutMs?: number);
|
|
15
|
-
connect(): Promise<void>;
|
|
16
|
-
private _connect;
|
|
17
|
-
private fallbackToNextEndpoint;
|
|
18
|
-
private measureLatency;
|
|
19
|
-
private processMessage;
|
|
20
|
-
get activeSockets(): Map<string, WebSocket>;
|
|
21
|
-
set onPriceMessage(callback: (prices: number[]) => void);
|
|
22
|
-
}
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.PricingNetworkClient = void 0;
|
|
16
|
-
/* eslint-disable @typescript-eslint/restrict-template-expressions */
|
|
17
|
-
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
18
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
19
|
-
const ws_1 = __importDefault(require("ws"));
|
|
20
|
-
const __1 = require("..");
|
|
21
|
-
class PricingNetworkClient {
|
|
22
|
-
constructor(endpoints, onPriceMessage, concurrentConnections = 3, bufferTimeoutMs = 500, reconnectTimeoutMs = 1000) {
|
|
23
|
-
this.endpoints = endpoints;
|
|
24
|
-
this._onPriceMessage = onPriceMessage;
|
|
25
|
-
this.concurrentConnections = concurrentConnections;
|
|
26
|
-
this.bufferTimeoutMs = bufferTimeoutMs;
|
|
27
|
-
this.reconnectTimeoutMs = reconnectTimeoutMs;
|
|
28
|
-
this.sockets = new Map();
|
|
29
|
-
this.latencyMap = new Map();
|
|
30
|
-
this.priceBuffer = new Map();
|
|
31
|
-
this.priceBufferLastFlush = new Map();
|
|
32
|
-
this.stagedPrices = [];
|
|
33
|
-
this.pairsToIndex = new Map();
|
|
34
|
-
Object.keys(__1.pairs).forEach((pair, index) => {
|
|
35
|
-
this.pairsToIndex.set(pair, index);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
connect() {
|
|
39
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
-
if (this.sockets.size > 0) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const latencies = yield Promise.all(this.endpoints.map(endpoint => this.measureLatency(endpoint)));
|
|
44
|
-
this.endpoints.forEach((endpoint, index) => this.latencyMap.set(endpoint, latencies[index]));
|
|
45
|
-
this.latencyMap.forEach((latency, endpoint) => console.log(`Latency to ${endpoint}: ${latency}ms`));
|
|
46
|
-
// Sort endpoints by latency
|
|
47
|
-
const sortedEndpoints = [...this.endpoints].sort((a, b) => {
|
|
48
|
-
const aLatency = latencies[this.endpoints.indexOf(a)];
|
|
49
|
-
const bLatency = latencies[this.endpoints.indexOf(b)];
|
|
50
|
-
return aLatency - bLatency;
|
|
51
|
-
});
|
|
52
|
-
for (let i = 0; i < this.concurrentConnections; i++) {
|
|
53
|
-
if (sortedEndpoints[i])
|
|
54
|
-
this._connect(sortedEndpoints[i]);
|
|
55
|
-
}
|
|
56
|
-
// Backstop to flush the buffer in case we don't get any messages
|
|
57
|
-
setInterval(() => {
|
|
58
|
-
const now = Date.now();
|
|
59
|
-
this.priceBuffer.forEach((buffer, pair) => {
|
|
60
|
-
const lastFlush = this.priceBufferLastFlush.get(pair);
|
|
61
|
-
if (buffer.length > 0 &&
|
|
62
|
-
lastFlush &&
|
|
63
|
-
now - lastFlush > this.bufferTimeoutMs) {
|
|
64
|
-
const median = buffer.sort()[Math.floor(buffer.length / 2)];
|
|
65
|
-
this.stagedPrices.push(pair, median);
|
|
66
|
-
buffer.length = 0;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}, this.bufferTimeoutMs);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
_connect(endpoint) {
|
|
73
|
-
const socket = new ws_1.default(endpoint);
|
|
74
|
-
this.sockets.set(endpoint, socket);
|
|
75
|
-
socket.onmessage = message => {
|
|
76
|
-
// Ignore return pong messages
|
|
77
|
-
if (message.data === "pong") {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
this.processMessage(message);
|
|
81
|
-
};
|
|
82
|
-
socket.onclose = () => {
|
|
83
|
-
this.sockets.delete(endpoint);
|
|
84
|
-
setTimeout(() => {
|
|
85
|
-
this.fallbackToNextEndpoint();
|
|
86
|
-
}, this.reconnectTimeoutMs);
|
|
87
|
-
};
|
|
88
|
-
socket.onerror = error => {
|
|
89
|
-
console.error(`WebSocket error: ${error.message}`);
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
fallbackToNextEndpoint() {
|
|
93
|
-
const connectedEndpoints = [...this.sockets.keys()];
|
|
94
|
-
const sortedAvailableEndpoints = [...this.endpoints]
|
|
95
|
-
.sort((a, b) => {
|
|
96
|
-
const aLatency = this.latencyMap.get(a) || Number.MAX_VALUE;
|
|
97
|
-
const bLatency = this.latencyMap.get(b) || Number.MAX_VALUE;
|
|
98
|
-
return aLatency - bLatency;
|
|
99
|
-
})
|
|
100
|
-
.filter(endpoint => !connectedEndpoints.includes(endpoint));
|
|
101
|
-
if (sortedAvailableEndpoints.length > 0) {
|
|
102
|
-
this._connect(sortedAvailableEndpoints[0]);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
measureLatency(endpoint) {
|
|
106
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
-
return new Promise(resolve => {
|
|
108
|
-
const startTime = Date.now();
|
|
109
|
-
const socket = new ws_1.default(endpoint);
|
|
110
|
-
socket.onopen = () => {
|
|
111
|
-
socket.send("ping");
|
|
112
|
-
};
|
|
113
|
-
socket.onmessage = message => {
|
|
114
|
-
if (message.data === "pong") {
|
|
115
|
-
const latency = Date.now() - startTime;
|
|
116
|
-
socket.close();
|
|
117
|
-
resolve(latency);
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
socket.on("error", e => {
|
|
121
|
-
resolve(Number.MAX_VALUE);
|
|
122
|
-
});
|
|
123
|
-
// Backstop so we don't wait forever
|
|
124
|
-
setTimeout(() => {
|
|
125
|
-
socket.close();
|
|
126
|
-
resolve(2000);
|
|
127
|
-
}, 2000);
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
processMessage(message) {
|
|
132
|
-
var _a;
|
|
133
|
-
try {
|
|
134
|
-
const priceUpdates = JSON.parse(message.data.toString());
|
|
135
|
-
if (!priceUpdates) {
|
|
136
|
-
console.log("Invalid price update message received", priceUpdates);
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
const finalMessage = [];
|
|
140
|
-
for (let i = 0; i < priceUpdates.length; i += 1) {
|
|
141
|
-
const pairAndPrice = priceUpdates[i];
|
|
142
|
-
const pair = this.pairsToIndex.get(pairAndPrice[0]);
|
|
143
|
-
if (pair === undefined) {
|
|
144
|
-
console.log("Invalid pair received", pairAndPrice[0]);
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
const price = pairAndPrice[1];
|
|
148
|
-
if (!this.priceBuffer.has(pair)) {
|
|
149
|
-
this.priceBuffer.set(pair, []);
|
|
150
|
-
this.priceBufferLastFlush.set(pair, 0);
|
|
151
|
-
}
|
|
152
|
-
// Checking existence above, so this should be safe
|
|
153
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
154
|
-
const buffer = this.priceBuffer.get(pair);
|
|
155
|
-
if (buffer.length >= this.sockets.size) {
|
|
156
|
-
const median = buffer.sort()[Math.floor(buffer.length / 2)];
|
|
157
|
-
finalMessage.push(pair, median);
|
|
158
|
-
buffer.length = 0;
|
|
159
|
-
}
|
|
160
|
-
buffer.push(price);
|
|
161
|
-
}
|
|
162
|
-
if (finalMessage.length > 0 || this.stagedPrices.length > 0) {
|
|
163
|
-
finalMessage.push(...(this.stagedPrices || []));
|
|
164
|
-
(_a = this._onPriceMessage) === null || _a === void 0 ? void 0 : _a.call(this, finalMessage);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
catch (e) {
|
|
168
|
-
console.error(e);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
get activeSockets() {
|
|
172
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
173
|
-
return this.sockets;
|
|
174
|
-
}
|
|
175
|
-
set onPriceMessage(callback) {
|
|
176
|
-
this._onPriceMessage = callback;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
exports.PricingNetworkClient = PricingNetworkClient;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import WebSocket from "ws";
|
|
2
|
-
export type PriceMessage = WebSocket.MessageEvent;
|
|
3
|
-
export declare class PricingStreamClient {
|
|
4
|
-
private endpoints;
|
|
5
|
-
private _activeSocket;
|
|
6
|
-
private fallbackIndex;
|
|
7
|
-
private reconnectTimeoutMs;
|
|
8
|
-
private _onPriceMessage;
|
|
9
|
-
constructor(endpoints: string[], onPriceMessage: (message: PriceMessage) => void, reconnectTimeoutMs?: number);
|
|
10
|
-
connect(): Promise<void>;
|
|
11
|
-
private _connect;
|
|
12
|
-
private fallbackToNextEndpoint;
|
|
13
|
-
private measureLatency;
|
|
14
|
-
get activeSocket(): WebSocket | null;
|
|
15
|
-
set onPriceMessage(callback: (message: WebSocket.MessageEvent) => void);
|
|
16
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.PricingStreamClient = void 0;
|
|
16
|
-
/* eslint-disable @typescript-eslint/restrict-template-expressions */
|
|
17
|
-
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
18
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
19
|
-
const ws_1 = __importDefault(require("ws"));
|
|
20
|
-
class PricingStreamClient {
|
|
21
|
-
constructor(endpoints, onPriceMessage, reconnectTimeoutMs = 1000) {
|
|
22
|
-
this.endpoints = endpoints;
|
|
23
|
-
this._activeSocket = null;
|
|
24
|
-
this.fallbackIndex = 0;
|
|
25
|
-
this.reconnectTimeoutMs = reconnectTimeoutMs;
|
|
26
|
-
this._onPriceMessage = onPriceMessage;
|
|
27
|
-
}
|
|
28
|
-
connect() {
|
|
29
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
-
if (this._activeSocket) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const latencies = yield Promise.all(this.endpoints.map(endpoint => this.measureLatency(endpoint)));
|
|
34
|
-
// Sort endpoints by latency
|
|
35
|
-
this.endpoints.sort((a, b) => {
|
|
36
|
-
const aLatency = latencies[this.endpoints.indexOf(a)];
|
|
37
|
-
const bLatency = latencies[this.endpoints.indexOf(b)];
|
|
38
|
-
return aLatency - bLatency;
|
|
39
|
-
});
|
|
40
|
-
this._connect(this.endpoints[0]);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
_connect(endpoint) {
|
|
44
|
-
this._activeSocket = new ws_1.default(endpoint);
|
|
45
|
-
this._activeSocket.onmessage = message => {
|
|
46
|
-
var _a;
|
|
47
|
-
// Ignore return pong messages
|
|
48
|
-
if (message.data === "pong") {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
(_a = this._onPriceMessage) === null || _a === void 0 ? void 0 : _a.call(this, message);
|
|
52
|
-
};
|
|
53
|
-
this._activeSocket.onclose = () => {
|
|
54
|
-
setTimeout(() => void this.fallbackToNextEndpoint(), this.reconnectTimeoutMs);
|
|
55
|
-
};
|
|
56
|
-
this._activeSocket.onerror = error => {
|
|
57
|
-
var _a;
|
|
58
|
-
console.error(`WebSocket error: ${error.message}`);
|
|
59
|
-
(_a = this._activeSocket) === null || _a === void 0 ? void 0 : _a.close();
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
fallbackToNextEndpoint() {
|
|
63
|
-
this.fallbackIndex = (this.fallbackIndex + 1) % this.endpoints.length;
|
|
64
|
-
const fallbackEndpoint = this.endpoints[this.fallbackIndex];
|
|
65
|
-
this._connect(fallbackEndpoint);
|
|
66
|
-
}
|
|
67
|
-
measureLatency(endpoint) {
|
|
68
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
-
return new Promise(resolve => {
|
|
70
|
-
const startTime = Date.now();
|
|
71
|
-
const socket = new ws_1.default(endpoint);
|
|
72
|
-
socket.onopen = () => {
|
|
73
|
-
socket.send("ping");
|
|
74
|
-
};
|
|
75
|
-
socket.onmessage = message => {
|
|
76
|
-
if (message.data === "pong") {
|
|
77
|
-
const latency = Date.now() - startTime;
|
|
78
|
-
socket.close();
|
|
79
|
-
resolve(latency);
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
socket.on("error", e => {
|
|
83
|
-
resolve(Number.MAX_VALUE);
|
|
84
|
-
});
|
|
85
|
-
// Backstop so we don't wait forever
|
|
86
|
-
setTimeout(() => {
|
|
87
|
-
socket.close();
|
|
88
|
-
resolve(2000);
|
|
89
|
-
}, 2000);
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
get activeSocket() {
|
|
94
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
95
|
-
return this._activeSocket;
|
|
96
|
-
}
|
|
97
|
-
set onPriceMessage(callback) {
|
|
98
|
-
this._onPriceMessage = callback;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
exports.PricingStreamClient = PricingStreamClient;
|
package/lib/prices/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./PricingNetworkClient";
|
package/lib/prices/index.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./PricingNetworkClient"), exports);
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getContractAddressesForChain = void 0;
|
|
7
|
-
const addresses_json_1 = __importDefault(require("./addresses.json"));
|
|
8
|
-
const getContractAddressesForChain = (chainId) => {
|
|
9
|
-
const _addresses = addresses_json_1.default;
|
|
10
|
-
if (!_addresses[chainId]) {
|
|
11
|
-
throw new Error(`Unknown chain id (${chainId}). No known contracts have been deployed on this chain.`);
|
|
12
|
-
}
|
|
13
|
-
return _addresses[chainId];
|
|
14
|
-
};
|
|
15
|
-
exports.getContractAddressesForChain = getContractAddressesForChain;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"137": {
|
|
3
|
-
"gfarmTradingStorageV5": "0xaee4d11a16B2bc65EDD6416Fb626EB404a6D65BD",
|
|
4
|
-
"gnsPairsStorageV6": "0x6e5326e944F528c243B9Ca5d14fe5C9269a8c922",
|
|
5
|
-
"gnsPairInfosV6_1": "0xEe7442aCcC1C27f2C69423576d3b1D25b563E977",
|
|
6
|
-
"gTokenOpenPnlFeed": "0x8d687276543b92819F2f2B5C3faad4AD27F4440c"
|
|
7
|
-
},
|
|
8
|
-
"42161": {
|
|
9
|
-
"gfarmTradingStorageV5": "0xcFa6ebD475d89dB04cAd5A756fff1cb2BC5bE33c",
|
|
10
|
-
"gnsPairsStorageV6": "0xf67Df2a4339eC1591615d94599081Dd037960d4b",
|
|
11
|
-
"gnsPairInfosV6_1": "0x04a5e3cf21B0080B72fAcDca634349A56982D497",
|
|
12
|
-
"gTokenOpenPnlFeed": "0x990BA9Edd8a9615A23E4c452E63A80e519A4a23D"
|
|
13
|
-
},
|
|
14
|
-
"80001": {
|
|
15
|
-
"gfarmTradingStorageV5": "0x4d2dF485c608aa55A23d8d98dD2B4FA24Ba0f2Cf",
|
|
16
|
-
"gnsPairsStorageV6": "0xF7F324bc1D659f01A9a8d00C40d65568b25b4007",
|
|
17
|
-
"gnsPairInfosV6_1": "0xe780bBf94b0257fEDccF4EAEcBC70722E6F5F574",
|
|
18
|
-
"gTokenOpenPnlFeed": "0xA7C829CB2346E12DC49Fd5ea8002Abaf48E9396C"
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { Signer } from "ethers";
|
|
2
|
-
import type { Provider } from "@ethersproject/providers";
|
|
3
|
-
import { Contracts } from "./types";
|
|
4
|
-
export declare const getContractsForChain: (chainId: number, signerOrProvider?: Signer | Provider) => Contracts;
|
|
5
|
-
export * from "./utils";
|
|
6
|
-
export * from "./addresses";
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.getContractsForChain = void 0;
|
|
18
|
-
const addresses_1 = require("./addresses");
|
|
19
|
-
const factories_1 = require("./types/generated/factories");
|
|
20
|
-
const getContractsForChain = (chainId, signerOrProvider) => {
|
|
21
|
-
const addresses = (0, addresses_1.getContractAddressesForChain)(chainId);
|
|
22
|
-
return {
|
|
23
|
-
gfarmTradingStorageV5: factories_1.GFarmTradingStorageV5__factory.connect(addresses.gfarmTradingStorageV5, signerOrProvider),
|
|
24
|
-
gnsPairInfosV6_1: factories_1.GNSPairInfosV6_1__factory.connect(addresses.gnsPairInfosV6_1, signerOrProvider),
|
|
25
|
-
gnsPairsStorageV6: factories_1.GNSPairsStorageV6__factory.connect(addresses.gnsPairsStorageV6, signerOrProvider),
|
|
26
|
-
gTokenOpenPnlFeed: factories_1.GTokenOpenPnlFeed__factory.connect(addresses.gTokenOpenPnlFeed, signerOrProvider),
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
exports.getContractsForChain = getContractsForChain;
|
|
30
|
-
__exportStar(require("./utils"), exports);
|
|
31
|
-
__exportStar(require("./addresses"), exports);
|