@xyo-network/uniswap-crypto-market-plugin 2.99.5 → 2.99.6
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/browser/Plugin.d.cts +3 -3
- package/dist/browser/Plugin.d.mts +3 -3
- package/dist/browser/Plugin.d.ts +3 -3
- package/dist/browser/index.cjs +57 -67
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.mjs +61 -70
- package/dist/browser/index.mjs.map +1 -1
- package/dist/browser/lib/Ethers/UniSwap3Pair.d.cts +3 -2
- package/dist/browser/lib/Ethers/UniSwap3Pair.d.cts.map +1 -1
- package/dist/browser/lib/Ethers/UniSwap3Pair.d.mts +3 -2
- package/dist/browser/lib/Ethers/UniSwap3Pair.d.mts.map +1 -1
- package/dist/browser/lib/Ethers/UniSwap3Pair.d.ts +3 -2
- package/dist/browser/lib/Ethers/UniSwap3Pair.d.ts.map +1 -1
- package/dist/neutral/Plugin.d.cts +3 -3
- package/dist/neutral/Plugin.d.mts +3 -3
- package/dist/neutral/Plugin.d.ts +3 -3
- package/dist/neutral/index.cjs +57 -67
- package/dist/neutral/index.cjs.map +1 -1
- package/dist/neutral/index.mjs +61 -70
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/lib/Ethers/UniSwap3Pair.d.cts +3 -2
- package/dist/neutral/lib/Ethers/UniSwap3Pair.d.cts.map +1 -1
- package/dist/neutral/lib/Ethers/UniSwap3Pair.d.mts +3 -2
- package/dist/neutral/lib/Ethers/UniSwap3Pair.d.mts.map +1 -1
- package/dist/neutral/lib/Ethers/UniSwap3Pair.d.ts +3 -2
- package/dist/neutral/lib/Ethers/UniSwap3Pair.d.ts.map +1 -1
- package/dist/node/Plugin.d.cts +3 -3
- package/dist/node/Plugin.d.mts +3 -3
- package/dist/node/Plugin.d.ts +3 -3
- package/dist/node/index.cjs +61 -73
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.mjs +65 -76
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/lib/Ethers/UniSwap3Pair.d.cts +3 -2
- package/dist/node/lib/Ethers/UniSwap3Pair.d.cts.map +1 -1
- package/dist/node/lib/Ethers/UniSwap3Pair.d.mts +3 -2
- package/dist/node/lib/Ethers/UniSwap3Pair.d.mts.map +1 -1
- package/dist/node/lib/Ethers/UniSwap3Pair.d.ts +3 -2
- package/dist/node/lib/Ethers/UniSwap3Pair.d.ts.map +1 -1
- package/package.json +17 -17
package/dist/node/index.cjs
CHANGED
|
@@ -2,11 +2,7 @@
|
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __reflectGet = Reflect.get;
|
|
8
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
10
6
|
var __export = (target, all) => {
|
|
11
7
|
for (var name in all)
|
|
12
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -20,8 +16,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
20
16
|
return to;
|
|
21
17
|
};
|
|
22
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
23
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
24
|
-
var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
|
|
25
19
|
|
|
26
20
|
// src/index.ts
|
|
27
21
|
var src_exports = {};
|
|
@@ -39,22 +33,22 @@ __export(src_exports, {
|
|
|
39
33
|
module.exports = __toCommonJS(src_exports);
|
|
40
34
|
|
|
41
35
|
// src/lib/logErrors.ts
|
|
42
|
-
var logErrors =
|
|
36
|
+
var logErrors = (func) => {
|
|
43
37
|
try {
|
|
44
38
|
return func();
|
|
45
39
|
} catch (ex) {
|
|
46
40
|
console.error(ex);
|
|
47
41
|
throw ex;
|
|
48
42
|
}
|
|
49
|
-
}
|
|
50
|
-
var logErrorsAsync =
|
|
43
|
+
};
|
|
44
|
+
var logErrorsAsync = async (func) => {
|
|
51
45
|
try {
|
|
52
46
|
return await func();
|
|
53
47
|
} catch (ex) {
|
|
54
48
|
console.error(ex);
|
|
55
49
|
throw ex;
|
|
56
50
|
}
|
|
57
|
-
}
|
|
51
|
+
};
|
|
58
52
|
|
|
59
53
|
// src/lib/Ethers/UniSwap3Pair.ts
|
|
60
54
|
var import_assert = require("@xylabs/assert");
|
|
@@ -65,7 +59,7 @@ var import_uniswap_typechain = require("@xyo-network/uniswap-typechain");
|
|
|
65
59
|
var import_uniswap_v3_sdk = require("@xyo-network/uniswap-v3-sdk");
|
|
66
60
|
|
|
67
61
|
// src/lib/Ethers/Uniswap3PoolSlot0Wrapper.ts
|
|
68
|
-
var
|
|
62
|
+
var EthersUniswap3PoolSlot0Wrapper = class {
|
|
69
63
|
values;
|
|
70
64
|
constructor(values) {
|
|
71
65
|
this.values = values;
|
|
@@ -92,35 +86,27 @@ var _EthersUniswap3PoolSlot0Wrapper = class _EthersUniswap3PoolSlot0Wrapper {
|
|
|
92
86
|
return this.values[6];
|
|
93
87
|
}
|
|
94
88
|
};
|
|
95
|
-
__name(_EthersUniswap3PoolSlot0Wrapper, "EthersUniswap3PoolSlot0Wrapper");
|
|
96
|
-
var EthersUniswap3PoolSlot0Wrapper = _EthersUniswap3PoolSlot0Wrapper;
|
|
97
89
|
|
|
98
90
|
// src/lib/Ethers/UniSwap3Pair.ts
|
|
99
|
-
var ChainId
|
|
100
|
-
(function(ChainId2) {
|
|
91
|
+
var ChainId = /* @__PURE__ */ ((ChainId2) => {
|
|
101
92
|
ChainId2[ChainId2["MAINNET"] = 1] = "MAINNET";
|
|
102
93
|
ChainId2[ChainId2["ROPSTEN"] = 3] = "ROPSTEN";
|
|
103
94
|
ChainId2[ChainId2["RINKEBY"] = 4] = "RINKEBY";
|
|
104
95
|
ChainId2[ChainId2["G\xD6RLI"] = 5] = "G\xD6RLI";
|
|
105
96
|
ChainId2[ChainId2["KOVAN"] = 42] = "KOVAN";
|
|
106
|
-
|
|
107
|
-
|
|
97
|
+
return ChainId2;
|
|
98
|
+
})(ChainId || {});
|
|
99
|
+
var waitNotNull = async (closure) => {
|
|
108
100
|
while (closure() === null) await (0, import_delay.delay)(10);
|
|
109
|
-
}
|
|
110
|
-
var
|
|
101
|
+
};
|
|
102
|
+
var EthersUniSwap3Pair = class {
|
|
111
103
|
address;
|
|
112
104
|
provider;
|
|
113
105
|
_pool;
|
|
114
106
|
_poolContract;
|
|
115
107
|
_slot0;
|
|
116
|
-
_tokenContracts = [
|
|
117
|
-
|
|
118
|
-
void 0
|
|
119
|
-
];
|
|
120
|
-
_tokens = [
|
|
121
|
-
void 0,
|
|
122
|
-
void 0
|
|
123
|
-
];
|
|
108
|
+
_tokenContracts = [void 0, void 0];
|
|
109
|
+
_tokens = [void 0, void 0];
|
|
124
110
|
constructor(address, provider) {
|
|
125
111
|
this.address = address;
|
|
126
112
|
this.provider = provider;
|
|
@@ -130,7 +116,14 @@ var _EthersUniSwap3Pair = class _EthersUniSwap3Pair {
|
|
|
130
116
|
await waitNotNull(() => this._pool);
|
|
131
117
|
this._pool = this._pool || null;
|
|
132
118
|
const slot0 = await this.slot0();
|
|
133
|
-
this._pool = this._pool === null ? new import_uniswap_v3_sdk.Pool(
|
|
119
|
+
this._pool = this._pool === null ? new import_uniswap_v3_sdk.Pool(
|
|
120
|
+
await this.token(0),
|
|
121
|
+
await this.token(1),
|
|
122
|
+
Number(slot0.feeProtocol),
|
|
123
|
+
`0x${slot0.sqrtPriceX96.toString(16)}`,
|
|
124
|
+
`0x${(await this.poolContract().liquidity()).toString(16)}`,
|
|
125
|
+
Number(slot0.tick)
|
|
126
|
+
) : this._pool;
|
|
134
127
|
return (0, import_assert.assertEx)(this._pool);
|
|
135
128
|
});
|
|
136
129
|
}
|
|
@@ -142,23 +135,18 @@ var _EthersUniSwap3Pair = class _EthersUniSwap3Pair {
|
|
|
142
135
|
}
|
|
143
136
|
async price() {
|
|
144
137
|
return await logErrorsAsync(async () => {
|
|
145
|
-
const tokenIndexes = [
|
|
146
|
-
0,
|
|
147
|
-
1
|
|
148
|
-
];
|
|
138
|
+
const tokenIndexes = [0, 1];
|
|
149
139
|
const pool = await this.pool();
|
|
150
140
|
const tokens = await Promise.all(tokenIndexes.map((value) => this.token(value)));
|
|
151
141
|
const tokenContracts = await Promise.all(tokenIndexes.map((value) => this.tokenContract(value)));
|
|
152
142
|
const tokenPrices = tokens.map((token) => Number.parseFloat(pool.priceOf(token).toSignificant()));
|
|
153
143
|
const tokenSymbols = tokens.map((token, index) => (0, import_assert.assertEx)(token.symbol, () => `Token[${index}] Missing Symbols`).toLowerCase());
|
|
154
144
|
const result = {
|
|
155
|
-
tokens: await Promise.all(
|
|
156
|
-
|
|
157
|
-
address: await tokenContracts[value].getAddress(),
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
};
|
|
161
|
-
}))
|
|
145
|
+
tokens: await Promise.all(
|
|
146
|
+
tokenIndexes.map(async (value) => {
|
|
147
|
+
return { address: await tokenContracts[value].getAddress(), symbol: tokenSymbols[value], value: tokenPrices[value] };
|
|
148
|
+
})
|
|
149
|
+
)
|
|
162
150
|
};
|
|
163
151
|
return result;
|
|
164
152
|
});
|
|
@@ -180,7 +168,13 @@ var _EthersUniSwap3Pair = class _EthersUniSwap3Pair {
|
|
|
180
168
|
await waitNotNull(() => this._tokens[index]);
|
|
181
169
|
this._tokens[index] = this._tokens[index] || null;
|
|
182
170
|
const tokenContract = await this.tokenContract(index);
|
|
183
|
-
this._tokens[index] = this._tokens[index] ?? new import_uniswap_sdk_core.Token(
|
|
171
|
+
this._tokens[index] = this._tokens[index] ?? new import_uniswap_sdk_core.Token(
|
|
172
|
+
1 /* MAINNET */,
|
|
173
|
+
await tokenContract.getAddress(),
|
|
174
|
+
Number(await tokenContract.decimals()),
|
|
175
|
+
await tokenContract.symbol(),
|
|
176
|
+
await tokenContract.name()
|
|
177
|
+
);
|
|
184
178
|
return (0, import_assert.assertEx)(this._tokens[index]);
|
|
185
179
|
});
|
|
186
180
|
}
|
|
@@ -193,27 +187,27 @@ var _EthersUniSwap3Pair = class _EthersUniSwap3Pair {
|
|
|
193
187
|
});
|
|
194
188
|
}
|
|
195
189
|
};
|
|
196
|
-
__name(_EthersUniSwap3Pair, "EthersUniSwap3Pair");
|
|
197
|
-
var EthersUniSwap3Pair = _EthersUniSwap3Pair;
|
|
198
190
|
|
|
199
191
|
// src/lib/Ethers/createUniswapPoolContracts.ts
|
|
200
|
-
var createUniswapPoolContracts =
|
|
192
|
+
var createUniswapPoolContracts = (provider, contracts) => {
|
|
201
193
|
return logErrors(() => {
|
|
202
194
|
return contracts.map((contract) => new EthersUniSwap3Pair(contract, provider));
|
|
203
195
|
});
|
|
204
|
-
}
|
|
196
|
+
};
|
|
205
197
|
|
|
206
198
|
// src/lib/pricesFromUniswap3.ts
|
|
207
199
|
var import_promise = require("@xylabs/promise");
|
|
208
|
-
var pricesFromUniswap3 =
|
|
200
|
+
var pricesFromUniswap3 = async (pools) => {
|
|
209
201
|
return await logErrorsAsync(async () => {
|
|
210
|
-
const promiseResults = await Promise.allSettled(
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
202
|
+
const promiseResults = await Promise.allSettled(
|
|
203
|
+
pools.map(async (pool) => {
|
|
204
|
+
const result = await pool.price();
|
|
205
|
+
return result;
|
|
206
|
+
})
|
|
207
|
+
);
|
|
214
208
|
return promiseResults.filter(import_promise.fulfilled).map((result) => result.value);
|
|
215
209
|
});
|
|
216
|
-
}
|
|
210
|
+
};
|
|
217
211
|
|
|
218
212
|
// src/lib/UniswapPoolContracts.ts
|
|
219
213
|
var UniswapPoolContracts = [
|
|
@@ -254,7 +248,9 @@ var import_uniswap_crypto_market_payload_plugin2 = require("@xyo-network/uniswap
|
|
|
254
248
|
var import_assert2 = require("@xylabs/assert");
|
|
255
249
|
var import_abstract_witness = require("@xyo-network/abstract-witness");
|
|
256
250
|
var import_uniswap_crypto_market_payload_plugin = require("@xyo-network/uniswap-crypto-market-payload-plugin");
|
|
257
|
-
var
|
|
251
|
+
var UniswapCryptoMarketWitness = class extends import_abstract_witness.AbstractWitness {
|
|
252
|
+
static configSchemas = [...super.configSchemas, import_uniswap_crypto_market_payload_plugin.UniswapCryptoMarketWitnessConfigSchema];
|
|
253
|
+
static defaultConfigSchema = import_uniswap_crypto_market_payload_plugin.UniswapCryptoMarketWitnessConfigSchema;
|
|
258
254
|
pairs;
|
|
259
255
|
get provider() {
|
|
260
256
|
return this.params.provider;
|
|
@@ -268,37 +264,29 @@ var _UniswapCryptoMarketWitness = class _UniswapCryptoMarketWitness extends impo
|
|
|
268
264
|
schema: import_uniswap_crypto_market_payload_plugin.UniswapCryptoMarketSchema,
|
|
269
265
|
timestamp
|
|
270
266
|
};
|
|
271
|
-
return [
|
|
272
|
-
payload
|
|
273
|
-
];
|
|
267
|
+
return [payload];
|
|
274
268
|
}
|
|
275
269
|
async startHandler() {
|
|
276
270
|
var _a;
|
|
277
271
|
await super.startHandler();
|
|
278
|
-
this.pairs = createUniswapPoolContracts(
|
|
272
|
+
this.pairs = createUniswapPoolContracts(
|
|
273
|
+
(0, import_assert2.assertEx)(this.provider, () => "Provider Required"),
|
|
274
|
+
((_a = this.config) == null ? void 0 : _a.pools) ?? UniswapPoolContracts
|
|
275
|
+
);
|
|
279
276
|
return true;
|
|
280
277
|
}
|
|
281
278
|
};
|
|
282
|
-
__name(_UniswapCryptoMarketWitness, "UniswapCryptoMarketWitness");
|
|
283
|
-
__publicField(_UniswapCryptoMarketWitness, "configSchemas", [
|
|
284
|
-
...__superGet(_UniswapCryptoMarketWitness, _UniswapCryptoMarketWitness, "configSchemas"),
|
|
285
|
-
import_uniswap_crypto_market_payload_plugin.UniswapCryptoMarketWitnessConfigSchema
|
|
286
|
-
]);
|
|
287
|
-
__publicField(_UniswapCryptoMarketWitness, "defaultConfigSchema", import_uniswap_crypto_market_payload_plugin.UniswapCryptoMarketWitnessConfigSchema);
|
|
288
|
-
var UniswapCryptoMarketWitness = _UniswapCryptoMarketWitness;
|
|
289
279
|
|
|
290
280
|
// src/Plugin.ts
|
|
291
|
-
var UniswapCryptoMarketPlugin =
|
|
292
|
-
required: {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}, "witness")
|
|
301
|
-
}), "UniswapCryptoMarketPlugin");
|
|
281
|
+
var UniswapCryptoMarketPlugin = () => (0, import_payloadset_plugin.createPayloadSetWitnessPlugin)(
|
|
282
|
+
{ required: { [import_uniswap_crypto_market_payload_plugin2.UniswapCryptoMarketSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
|
|
283
|
+
{
|
|
284
|
+
witness: async (params) => {
|
|
285
|
+
const result = await UniswapCryptoMarketWitness.create(params);
|
|
286
|
+
return result;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
);
|
|
302
290
|
// Annotate the CommonJS export names for ESM import in node:
|
|
303
291
|
0 && (module.exports = {
|
|
304
292
|
ChainId,
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/lib/logErrors.ts","../../src/lib/Ethers/UniSwap3Pair.ts","../../src/lib/Ethers/Uniswap3PoolSlot0Wrapper.ts","../../src/lib/Ethers/createUniswapPoolContracts.ts","../../src/lib/pricesFromUniswap3.ts","../../src/lib/UniswapPoolContracts.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["export * from './Config.ts'\nexport * from './lib/index.ts'\n// eslint-disable-next-line import/no-default-export\nexport { UniswapCryptoMarketPlugin as default, UniswapCryptoMarketPlugin } from './Plugin.ts'\nexport * from './Witness.ts'\n","export const logErrors = <T>(func: () => T) => {\n try {\n return func()\n } catch (ex) {\n console.error(ex)\n throw ex\n }\n}\n\nexport const logErrorsAsync = async <T>(func: () => Promise<T>) => {\n try {\n return await func()\n } catch (ex) {\n console.error(ex)\n throw ex\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport { IERC20Metadata, IERC20Metadata__factory } from '@xyo-network/typechain'\nimport { Token } from '@xyo-network/uniswap-sdk-core'\nimport { IUniswapV3Pool, IUniswapV3Pool__factory } from '@xyo-network/uniswap-typechain'\nimport { Pool } from '@xyo-network/uniswap-v3-sdk'\nimport { Provider } from 'ethers'\n\nimport { logErrors, logErrorsAsync } from '../logErrors.ts'\nimport { EthersUniswap3PoolSlot0Wrapper } from './Uniswap3PoolSlot0Wrapper.ts'\n\nexport enum ChainId {\n MAINNET = 1,\n ROPSTEN = 3,\n RINKEBY = 4,\n GÖRLI = 5,\n KOVAN = 42,\n}\n\n// null is used as 'in-progress'\nconst waitNotNull = async (closure: () => unknown) => {\n while (closure() === null) await delay(10)\n}\n\nexport class EthersUniSwap3Pair {\n protected address: string\n protected provider: Provider\n\n private _pool?: Pool | null\n private _poolContract?: IUniswapV3Pool\n private _slot0?: EthersUniswap3PoolSlot0Wrapper | null\n private _tokenContracts: (IERC20Metadata | null | undefined)[] = [undefined, undefined]\n private _tokens: (Token | null | undefined)[] = [undefined, undefined]\n\n constructor(address: string, provider: Provider) {\n this.address = address\n this.provider = provider\n }\n\n async pool(): Promise<Pool> {\n return await logErrorsAsync(async () => {\n await waitNotNull(() => this._pool)\n this._pool = this._pool || null\n const slot0 = await this.slot0()\n this._pool\n = this._pool === null\n ? new Pool(\n await this.token(0),\n await this.token(1),\n Number(slot0.feeProtocol),\n `0x${slot0.sqrtPriceX96.toString(16)}`,\n `0x${(await this.poolContract().liquidity()).toString(16)}`,\n Number(slot0.tick),\n )\n : this._pool\n return assertEx(this._pool)\n })\n }\n\n poolContract() {\n return logErrors(() => {\n this._poolContract = this._poolContract ?? IUniswapV3Pool__factory.connect(this.address, this.provider)\n return assertEx(this._poolContract)\n })\n }\n\n async price() {\n return await logErrorsAsync(async () => {\n const tokenIndexes: (0 | 1)[] = [0, 1]\n const pool = await this.pool()\n const tokens = await Promise.all(tokenIndexes.map(value => this.token(value)))\n const tokenContracts = await Promise.all(tokenIndexes.map(value => this.tokenContract(value)))\n const tokenPrices = tokens.map(token => Number.parseFloat(pool.priceOf(token).toSignificant()))\n const tokenSymbols = tokens.map((token, index) => assertEx(token.symbol, () => `Token[${index}] Missing Symbols`).toLowerCase())\n const result = {\n tokens: await Promise.all(\n tokenIndexes.map(async (value) => {\n return { address: await tokenContracts[value].getAddress(), symbol: tokenSymbols[value], value: tokenPrices[value] }\n }),\n ),\n }\n return result\n })\n }\n\n async slot0(): Promise<EthersUniswap3PoolSlot0Wrapper> {\n return await logErrorsAsync(async () => {\n await waitNotNull(() => this._slot0)\n this._slot0 = this._slot0 || null\n if (this._slot0 === null) {\n const poolContract = this.poolContract()\n const slot = await poolContract.slot0()\n this._slot0 = this._slot0 ?? new EthersUniswap3PoolSlot0Wrapper(slot)\n }\n return assertEx(this._slot0)\n })\n }\n\n async token(index: 0 | 1): Promise<Token> {\n return await logErrorsAsync(async () => {\n await waitNotNull(() => this._tokens[index])\n this._tokens[index] = this._tokens[index] || null\n const tokenContract = await this.tokenContract(index)\n this._tokens[index]\n = this._tokens[index]\n ?? new Token(\n ChainId.MAINNET,\n await tokenContract.getAddress(),\n Number(await tokenContract.decimals()),\n await tokenContract.symbol(),\n await tokenContract.name(),\n )\n return assertEx(this._tokens[index])\n })\n }\n\n async tokenContract(index: 0 | 1): Promise<IERC20Metadata> {\n return await logErrorsAsync(async () => {\n await waitNotNull(() => this._tokenContracts[index])\n this._tokenContracts[index] = this._tokenContracts[index] || null\n this._tokenContracts[index]\n = this._tokenContracts[index]\n ?? IERC20Metadata__factory.connect(await (index === 0 ? this.poolContract().token0() : this.poolContract().token1()), this.provider)\n return assertEx(this._tokenContracts[index])\n })\n }\n}\n","import { EthersUniswapV3Slot0Fields } from './UniswapV3Slot0Fields.ts'\n\nexport class EthersUniswap3PoolSlot0Wrapper {\n protected values: EthersUniswapV3Slot0Fields\n constructor(values: EthersUniswapV3Slot0Fields) {\n this.values = values\n }\n\n get feeProtocol() {\n return this.values[5]\n }\n\n get observationCardinality() {\n return this.values[3]\n }\n\n get observationCardinalityNext() {\n return this.values[4]\n }\n\n get observationIndex() {\n return this.values[2]\n }\n\n get sqrtPriceX96() {\n return this.values[0]\n }\n\n get tick() {\n return this.values[1]\n }\n\n get unlocked() {\n return this.values[6]\n }\n}\n","import { Provider } from 'ethers'\n\nimport { logErrors } from '../logErrors.ts'\nimport { EthersUniSwap3Pair } from './UniSwap3Pair.ts'\n\nexport const createUniswapPoolContracts = (provider: Provider, contracts: string[]) => {\n return logErrors(() => {\n return contracts.map(contract => new EthersUniSwap3Pair(contract, provider))\n })\n}\n","import { fulfilled } from '@xylabs/promise'\nimport { UniswapCryptoPair } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { EthersUniSwap3Pair } from './Ethers/index.ts'\nimport { logErrorsAsync } from './logErrors.ts'\n\nexport const pricesFromUniswap3 = async (pools: EthersUniSwap3Pair[]): Promise<UniswapCryptoPair[]> => {\n return await logErrorsAsync(async () => {\n const promiseResults = await Promise.allSettled(\n pools.map(async (pool): Promise<UniswapCryptoPair> => {\n const result = await pool.price()\n return result\n }),\n )\n return promiseResults.filter(fulfilled).map(result => result.value)\n })\n}\n","export const UniswapPoolContracts = [\n /* xyo/weth */ '0xE331DE28cd81B768C19A366b0e4e4675c45eC2dA',\n /* xyo/usdt */ '0xd0AF1981f52146a6939385451dAeA0726e13a484',\n /* xyo/dai */ '0x9D7e5647CE3c7C2d835F2F5e82C8fDb36B0BB0fe',\n /* wbtc/xyo */ '0x0cF7494c9dE661467403aBeE8454b3BBf0179a84',\n /* link/xyo */ '0x4693456599a8a4975862A0E720C5de7E1D09A1e4',\n /* wbtc/weth */ '0xCBCdF9626bC03E24f779434178A73a0B4bad62eD',\n /* dai/usdc */ '0x5777d92f208679DB4b9778590Fa3CAB3aC9e2168',\n /* usdc/weth */ '0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8',\n /* usdc/weth */ '0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640',\n /* dai/usdc */ '0x6c6Bc977E13Df9b0de53b251522280BB72383700',\n /* frax/usdc */ '0xc63B0708E2F7e69CB8A1df0e1389A98C35A76D52',\n /* wbtc/usdc */ '0x99ac8cA7087fA4A2A1FB6357269965A2014ABc35',\n /* usdc/usdt */ '0x3416cF6C708Da44DB2624D63ea0AAef7113527C6',\n]\n","import { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\nimport { UniswapCryptoMarketSchema } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { UniswapCryptoMarketWitness } from './Witness.ts'\n\nexport const UniswapCryptoMarketPlugin = () =>\n createPayloadSetWitnessPlugin<UniswapCryptoMarketWitness>(\n { required: { [UniswapCryptoMarketSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await UniswapCryptoMarketWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport {\n UniswapCryptoMarketPayload,\n UniswapCryptoMarketSchema,\n UniswapCryptoMarketWitnessConfigSchema,\n} from '@xyo-network/uniswap-crypto-market-payload-plugin'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { Provider } from 'ethers'\n\nimport { UniswapCryptoMarketWitnessConfig } from './Config.ts'\nimport { createUniswapPoolContracts, EthersUniSwap3Pair, pricesFromUniswap3, UniswapPoolContracts } from './lib/index.ts'\n\nexport type UniswapCryptoMarketWitnessParams = WitnessParams<\n AnyConfigSchema<UniswapCryptoMarketWitnessConfig>,\n {\n provider?: Provider\n }\n>\n\nexport class UniswapCryptoMarketWitness<\n TParams extends UniswapCryptoMarketWitnessParams = UniswapCryptoMarketWitnessParams,\n> extends AbstractWitness<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, UniswapCryptoMarketWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = UniswapCryptoMarketWitnessConfigSchema\n\n protected pairs?: EthersUniSwap3Pair[]\n protected get provider() {\n return this.params.provider\n }\n\n protected override async observeHandler(): Promise<Payload[]> {\n await this.started('throw')\n const pairs = await pricesFromUniswap3(assertEx(this.pairs))\n const timestamp = Date.now()\n\n const payload: UniswapCryptoMarketPayload = {\n pairs,\n schema: UniswapCryptoMarketSchema,\n timestamp,\n }\n\n return [payload]\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.pairs = createUniswapPoolContracts(\n assertEx(this.provider, () => 'Provider Required'),\n this.config?.pools ?? UniswapPoolContracts,\n )\n return true\n }\n}\n"],"mappings":"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","names":["logErrors","func","ex","console","error","logErrorsAsync","EthersUniswap3PoolSlot0Wrapper","values","constructor","feeProtocol","observationCardinality","observationCardinalityNext","observationIndex","sqrtPriceX96","tick","unlocked","ChainId","waitNotNull","closure","delay","EthersUniSwap3Pair","address","provider","_pool","_poolContract","_slot0","_tokenContracts","undefined","_tokens","constructor","pool","logErrorsAsync","slot0","Pool","token","Number","feeProtocol","sqrtPriceX96","toString","poolContract","liquidity","tick","assertEx","logErrors","IUniswapV3Pool__factory","connect","price","tokenIndexes","tokens","Promise","all","map","value","tokenContracts","tokenContract","tokenPrices","parseFloat","priceOf","toSignificant","tokenSymbols","index","symbol","toLowerCase","result","getAddress","slot","EthersUniswap3PoolSlot0Wrapper","Token","decimals","name","IERC20Metadata__factory","token0","token1","createUniswapPoolContracts","provider","contracts","logErrors","map","contract","EthersUniSwap3Pair","pricesFromUniswap3","pools","logErrorsAsync","promiseResults","Promise","allSettled","map","pool","result","price","filter","fulfilled","value","UniswapPoolContracts","import_uniswap_crypto_market_payload_plugin","import_assert","UniswapCryptoMarketWitness","AbstractWitness","pairs","provider","params","observeHandler","started","pricesFromUniswap3","assertEx","timestamp","Date","now","payload","schema","UniswapCryptoMarketSchema","startHandler","createUniswapPoolContracts","config","pools","UniswapPoolContracts","configSchemas","UniswapCryptoMarketWitnessConfigSchema","defaultConfigSchema","UniswapCryptoMarketPlugin","createPayloadSetWitnessPlugin","required","UniswapCryptoMarketSchema","schema","PayloadSetSchema","witness","params","result","UniswapCryptoMarketWitness","create"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/lib/logErrors.ts","../../src/lib/Ethers/UniSwap3Pair.ts","../../src/lib/Ethers/Uniswap3PoolSlot0Wrapper.ts","../../src/lib/Ethers/createUniswapPoolContracts.ts","../../src/lib/pricesFromUniswap3.ts","../../src/lib/UniswapPoolContracts.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["export * from './Config.ts'\nexport * from './lib/index.ts'\n// eslint-disable-next-line import/no-default-export\nexport { UniswapCryptoMarketPlugin as default, UniswapCryptoMarketPlugin } from './Plugin.ts'\nexport * from './Witness.ts'\n","export const logErrors = <T>(func: () => T) => {\n try {\n return func()\n } catch (ex) {\n console.error(ex)\n throw ex\n }\n}\n\nexport const logErrorsAsync = async <T>(func: () => Promise<T>) => {\n try {\n return await func()\n } catch (ex) {\n console.error(ex)\n throw ex\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { delay } from '@xylabs/delay'\nimport { IERC20Metadata, IERC20Metadata__factory } from '@xyo-network/typechain'\nimport { Token } from '@xyo-network/uniswap-sdk-core'\nimport { IUniswapV3Pool, IUniswapV3Pool__factory } from '@xyo-network/uniswap-typechain'\nimport { Pool } from '@xyo-network/uniswap-v3-sdk'\nimport { Provider } from 'ethers'\n\nimport { logErrors, logErrorsAsync } from '../logErrors.ts'\nimport { EthersUniswap3PoolSlot0Wrapper } from './Uniswap3PoolSlot0Wrapper.ts'\n\nexport enum ChainId {\n MAINNET = 1,\n ROPSTEN = 3,\n RINKEBY = 4,\n GÖRLI = 5,\n KOVAN = 42,\n}\n\n// null is used as 'in-progress'\nconst waitNotNull = async (closure: () => unknown) => {\n while (closure() === null) await delay(10)\n}\n\nexport class EthersUniSwap3Pair {\n protected address: string\n protected provider: Provider\n\n private _pool?: Pool | null\n private _poolContract?: IUniswapV3Pool\n private _slot0?: EthersUniswap3PoolSlot0Wrapper | null\n private _tokenContracts: (IERC20Metadata | null | undefined)[] = [undefined, undefined]\n private _tokens: (Token | null | undefined)[] = [undefined, undefined]\n\n constructor(address: string, provider: Provider) {\n this.address = address\n this.provider = provider\n }\n\n async pool(): Promise<Pool> {\n return await logErrorsAsync(async () => {\n await waitNotNull(() => this._pool)\n this._pool = this._pool || null\n const slot0 = await this.slot0()\n this._pool\n = this._pool === null\n ? new Pool(\n await this.token(0),\n await this.token(1),\n Number(slot0.feeProtocol),\n `0x${slot0.sqrtPriceX96.toString(16)}`,\n `0x${(await this.poolContract().liquidity()).toString(16)}`,\n Number(slot0.tick),\n )\n : this._pool\n return assertEx(this._pool)\n })\n }\n\n poolContract() {\n return logErrors(() => {\n this._poolContract = this._poolContract ?? IUniswapV3Pool__factory.connect(this.address, this.provider)\n return assertEx(this._poolContract)\n })\n }\n\n async price() {\n return await logErrorsAsync(async () => {\n const tokenIndexes: (0 | 1)[] = [0, 1]\n const pool = await this.pool()\n const tokens = await Promise.all(tokenIndexes.map(value => this.token(value)))\n const tokenContracts = await Promise.all(tokenIndexes.map(value => this.tokenContract(value)))\n const tokenPrices = tokens.map(token => Number.parseFloat(pool.priceOf(token).toSignificant()))\n const tokenSymbols = tokens.map((token, index) => assertEx(token.symbol, () => `Token[${index}] Missing Symbols`).toLowerCase())\n const result = {\n tokens: await Promise.all(\n tokenIndexes.map(async (value) => {\n return { address: await tokenContracts[value].getAddress(), symbol: tokenSymbols[value], value: tokenPrices[value] }\n }),\n ),\n }\n return result\n })\n }\n\n async slot0(): Promise<EthersUniswap3PoolSlot0Wrapper> {\n return await logErrorsAsync(async () => {\n await waitNotNull(() => this._slot0)\n this._slot0 = this._slot0 || null\n if (this._slot0 === null) {\n const poolContract = this.poolContract()\n const slot = await poolContract.slot0()\n this._slot0 = this._slot0 ?? new EthersUniswap3PoolSlot0Wrapper(slot)\n }\n return assertEx(this._slot0)\n })\n }\n\n async token(index: 0 | 1): Promise<Token> {\n return await logErrorsAsync(async () => {\n await waitNotNull(() => this._tokens[index])\n this._tokens[index] = this._tokens[index] || null\n const tokenContract = await this.tokenContract(index)\n this._tokens[index]\n = this._tokens[index]\n ?? new Token(\n ChainId.MAINNET,\n await tokenContract.getAddress(),\n Number(await tokenContract.decimals()),\n await tokenContract.symbol(),\n await tokenContract.name(),\n )\n return assertEx(this._tokens[index])\n })\n }\n\n async tokenContract(index: 0 | 1): Promise<IERC20Metadata> {\n return await logErrorsAsync(async () => {\n await waitNotNull(() => this._tokenContracts[index])\n this._tokenContracts[index] = this._tokenContracts[index] || null\n this._tokenContracts[index]\n = this._tokenContracts[index]\n ?? IERC20Metadata__factory.connect(await (index === 0 ? this.poolContract().token0() : this.poolContract().token1()), this.provider)\n return assertEx(this._tokenContracts[index])\n })\n }\n}\n","import { EthersUniswapV3Slot0Fields } from './UniswapV3Slot0Fields.ts'\n\nexport class EthersUniswap3PoolSlot0Wrapper {\n protected values: EthersUniswapV3Slot0Fields\n constructor(values: EthersUniswapV3Slot0Fields) {\n this.values = values\n }\n\n get feeProtocol() {\n return this.values[5]\n }\n\n get observationCardinality() {\n return this.values[3]\n }\n\n get observationCardinalityNext() {\n return this.values[4]\n }\n\n get observationIndex() {\n return this.values[2]\n }\n\n get sqrtPriceX96() {\n return this.values[0]\n }\n\n get tick() {\n return this.values[1]\n }\n\n get unlocked() {\n return this.values[6]\n }\n}\n","import { Provider } from 'ethers'\n\nimport { logErrors } from '../logErrors.ts'\nimport { EthersUniSwap3Pair } from './UniSwap3Pair.ts'\n\nexport const createUniswapPoolContracts = (provider: Provider, contracts: string[]) => {\n return logErrors(() => {\n return contracts.map(contract => new EthersUniSwap3Pair(contract, provider))\n })\n}\n","import { fulfilled } from '@xylabs/promise'\nimport { UniswapCryptoPair } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { EthersUniSwap3Pair } from './Ethers/index.ts'\nimport { logErrorsAsync } from './logErrors.ts'\n\nexport const pricesFromUniswap3 = async (pools: EthersUniSwap3Pair[]): Promise<UniswapCryptoPair[]> => {\n return await logErrorsAsync(async () => {\n const promiseResults = await Promise.allSettled(\n pools.map(async (pool): Promise<UniswapCryptoPair> => {\n const result = await pool.price()\n return result\n }),\n )\n return promiseResults.filter(fulfilled).map(result => result.value)\n })\n}\n","export const UniswapPoolContracts = [\n /* xyo/weth */ '0xE331DE28cd81B768C19A366b0e4e4675c45eC2dA',\n /* xyo/usdt */ '0xd0AF1981f52146a6939385451dAeA0726e13a484',\n /* xyo/dai */ '0x9D7e5647CE3c7C2d835F2F5e82C8fDb36B0BB0fe',\n /* wbtc/xyo */ '0x0cF7494c9dE661467403aBeE8454b3BBf0179a84',\n /* link/xyo */ '0x4693456599a8a4975862A0E720C5de7E1D09A1e4',\n /* wbtc/weth */ '0xCBCdF9626bC03E24f779434178A73a0B4bad62eD',\n /* dai/usdc */ '0x5777d92f208679DB4b9778590Fa3CAB3aC9e2168',\n /* usdc/weth */ '0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8',\n /* usdc/weth */ '0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640',\n /* dai/usdc */ '0x6c6Bc977E13Df9b0de53b251522280BB72383700',\n /* frax/usdc */ '0xc63B0708E2F7e69CB8A1df0e1389A98C35A76D52',\n /* wbtc/usdc */ '0x99ac8cA7087fA4A2A1FB6357269965A2014ABc35',\n /* usdc/usdt */ '0x3416cF6C708Da44DB2624D63ea0AAef7113527C6',\n]\n","import { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\nimport { UniswapCryptoMarketSchema } from '@xyo-network/uniswap-crypto-market-payload-plugin'\n\nimport { UniswapCryptoMarketWitness } from './Witness.ts'\n\nexport const UniswapCryptoMarketPlugin = () =>\n createPayloadSetWitnessPlugin<UniswapCryptoMarketWitness>(\n { required: { [UniswapCryptoMarketSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await UniswapCryptoMarketWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload, Schema } from '@xyo-network/payload-model'\nimport {\n UniswapCryptoMarketPayload,\n UniswapCryptoMarketSchema,\n UniswapCryptoMarketWitnessConfigSchema,\n} from '@xyo-network/uniswap-crypto-market-payload-plugin'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { Provider } from 'ethers'\n\nimport { UniswapCryptoMarketWitnessConfig } from './Config.ts'\nimport { createUniswapPoolContracts, EthersUniSwap3Pair, pricesFromUniswap3, UniswapPoolContracts } from './lib/index.ts'\n\nexport type UniswapCryptoMarketWitnessParams = WitnessParams<\n AnyConfigSchema<UniswapCryptoMarketWitnessConfig>,\n {\n provider?: Provider\n }\n>\n\nexport class UniswapCryptoMarketWitness<\n TParams extends UniswapCryptoMarketWitnessParams = UniswapCryptoMarketWitnessParams,\n> extends AbstractWitness<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, UniswapCryptoMarketWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = UniswapCryptoMarketWitnessConfigSchema\n\n protected pairs?: EthersUniSwap3Pair[]\n protected get provider() {\n return this.params.provider\n }\n\n protected override async observeHandler(): Promise<Payload[]> {\n await this.started('throw')\n const pairs = await pricesFromUniswap3(assertEx(this.pairs))\n const timestamp = Date.now()\n\n const payload: UniswapCryptoMarketPayload = {\n pairs,\n schema: UniswapCryptoMarketSchema,\n timestamp,\n }\n\n return [payload]\n }\n\n protected override async startHandler() {\n await super.startHandler()\n this.pairs = createUniswapPoolContracts(\n assertEx(this.provider, () => 'Provider Required'),\n this.config?.pools ?? UniswapPoolContracts,\n )\n return true\n }\n}\n"],"mappings":"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","names":["ChainId","import_uniswap_crypto_market_payload_plugin","import_assert"]}
|
package/dist/node/index.mjs
CHANGED
|
@@ -1,28 +1,20 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
3
|
-
var __reflectGet = Reflect.get;
|
|
4
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
5
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
7
|
-
var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
|
|
8
|
-
|
|
9
1
|
// src/lib/logErrors.ts
|
|
10
|
-
var logErrors =
|
|
2
|
+
var logErrors = (func) => {
|
|
11
3
|
try {
|
|
12
4
|
return func();
|
|
13
5
|
} catch (ex) {
|
|
14
6
|
console.error(ex);
|
|
15
7
|
throw ex;
|
|
16
8
|
}
|
|
17
|
-
}
|
|
18
|
-
var logErrorsAsync =
|
|
9
|
+
};
|
|
10
|
+
var logErrorsAsync = async (func) => {
|
|
19
11
|
try {
|
|
20
12
|
return await func();
|
|
21
13
|
} catch (ex) {
|
|
22
14
|
console.error(ex);
|
|
23
15
|
throw ex;
|
|
24
16
|
}
|
|
25
|
-
}
|
|
17
|
+
};
|
|
26
18
|
|
|
27
19
|
// src/lib/Ethers/UniSwap3Pair.ts
|
|
28
20
|
import { assertEx } from "@xylabs/assert";
|
|
@@ -33,7 +25,7 @@ import { IUniswapV3Pool__factory } from "@xyo-network/uniswap-typechain";
|
|
|
33
25
|
import { Pool } from "@xyo-network/uniswap-v3-sdk";
|
|
34
26
|
|
|
35
27
|
// src/lib/Ethers/Uniswap3PoolSlot0Wrapper.ts
|
|
36
|
-
var
|
|
28
|
+
var EthersUniswap3PoolSlot0Wrapper = class {
|
|
37
29
|
values;
|
|
38
30
|
constructor(values) {
|
|
39
31
|
this.values = values;
|
|
@@ -60,35 +52,27 @@ var _EthersUniswap3PoolSlot0Wrapper = class _EthersUniswap3PoolSlot0Wrapper {
|
|
|
60
52
|
return this.values[6];
|
|
61
53
|
}
|
|
62
54
|
};
|
|
63
|
-
__name(_EthersUniswap3PoolSlot0Wrapper, "EthersUniswap3PoolSlot0Wrapper");
|
|
64
|
-
var EthersUniswap3PoolSlot0Wrapper = _EthersUniswap3PoolSlot0Wrapper;
|
|
65
55
|
|
|
66
56
|
// src/lib/Ethers/UniSwap3Pair.ts
|
|
67
|
-
var ChainId
|
|
68
|
-
(function(ChainId2) {
|
|
57
|
+
var ChainId = /* @__PURE__ */ ((ChainId2) => {
|
|
69
58
|
ChainId2[ChainId2["MAINNET"] = 1] = "MAINNET";
|
|
70
59
|
ChainId2[ChainId2["ROPSTEN"] = 3] = "ROPSTEN";
|
|
71
60
|
ChainId2[ChainId2["RINKEBY"] = 4] = "RINKEBY";
|
|
72
61
|
ChainId2[ChainId2["G\xD6RLI"] = 5] = "G\xD6RLI";
|
|
73
62
|
ChainId2[ChainId2["KOVAN"] = 42] = "KOVAN";
|
|
74
|
-
|
|
75
|
-
|
|
63
|
+
return ChainId2;
|
|
64
|
+
})(ChainId || {});
|
|
65
|
+
var waitNotNull = async (closure) => {
|
|
76
66
|
while (closure() === null) await delay(10);
|
|
77
|
-
}
|
|
78
|
-
var
|
|
67
|
+
};
|
|
68
|
+
var EthersUniSwap3Pair = class {
|
|
79
69
|
address;
|
|
80
70
|
provider;
|
|
81
71
|
_pool;
|
|
82
72
|
_poolContract;
|
|
83
73
|
_slot0;
|
|
84
|
-
_tokenContracts = [
|
|
85
|
-
|
|
86
|
-
void 0
|
|
87
|
-
];
|
|
88
|
-
_tokens = [
|
|
89
|
-
void 0,
|
|
90
|
-
void 0
|
|
91
|
-
];
|
|
74
|
+
_tokenContracts = [void 0, void 0];
|
|
75
|
+
_tokens = [void 0, void 0];
|
|
92
76
|
constructor(address, provider) {
|
|
93
77
|
this.address = address;
|
|
94
78
|
this.provider = provider;
|
|
@@ -98,7 +82,14 @@ var _EthersUniSwap3Pair = class _EthersUniSwap3Pair {
|
|
|
98
82
|
await waitNotNull(() => this._pool);
|
|
99
83
|
this._pool = this._pool || null;
|
|
100
84
|
const slot0 = await this.slot0();
|
|
101
|
-
this._pool = this._pool === null ? new Pool(
|
|
85
|
+
this._pool = this._pool === null ? new Pool(
|
|
86
|
+
await this.token(0),
|
|
87
|
+
await this.token(1),
|
|
88
|
+
Number(slot0.feeProtocol),
|
|
89
|
+
`0x${slot0.sqrtPriceX96.toString(16)}`,
|
|
90
|
+
`0x${(await this.poolContract().liquidity()).toString(16)}`,
|
|
91
|
+
Number(slot0.tick)
|
|
92
|
+
) : this._pool;
|
|
102
93
|
return assertEx(this._pool);
|
|
103
94
|
});
|
|
104
95
|
}
|
|
@@ -110,23 +101,18 @@ var _EthersUniSwap3Pair = class _EthersUniSwap3Pair {
|
|
|
110
101
|
}
|
|
111
102
|
async price() {
|
|
112
103
|
return await logErrorsAsync(async () => {
|
|
113
|
-
const tokenIndexes = [
|
|
114
|
-
0,
|
|
115
|
-
1
|
|
116
|
-
];
|
|
104
|
+
const tokenIndexes = [0, 1];
|
|
117
105
|
const pool = await this.pool();
|
|
118
106
|
const tokens = await Promise.all(tokenIndexes.map((value) => this.token(value)));
|
|
119
107
|
const tokenContracts = await Promise.all(tokenIndexes.map((value) => this.tokenContract(value)));
|
|
120
108
|
const tokenPrices = tokens.map((token) => Number.parseFloat(pool.priceOf(token).toSignificant()));
|
|
121
109
|
const tokenSymbols = tokens.map((token, index) => assertEx(token.symbol, () => `Token[${index}] Missing Symbols`).toLowerCase());
|
|
122
110
|
const result = {
|
|
123
|
-
tokens: await Promise.all(
|
|
124
|
-
|
|
125
|
-
address: await tokenContracts[value].getAddress(),
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
};
|
|
129
|
-
}))
|
|
111
|
+
tokens: await Promise.all(
|
|
112
|
+
tokenIndexes.map(async (value) => {
|
|
113
|
+
return { address: await tokenContracts[value].getAddress(), symbol: tokenSymbols[value], value: tokenPrices[value] };
|
|
114
|
+
})
|
|
115
|
+
)
|
|
130
116
|
};
|
|
131
117
|
return result;
|
|
132
118
|
});
|
|
@@ -148,7 +134,13 @@ var _EthersUniSwap3Pair = class _EthersUniSwap3Pair {
|
|
|
148
134
|
await waitNotNull(() => this._tokens[index]);
|
|
149
135
|
this._tokens[index] = this._tokens[index] || null;
|
|
150
136
|
const tokenContract = await this.tokenContract(index);
|
|
151
|
-
this._tokens[index] = this._tokens[index] ?? new Token(
|
|
137
|
+
this._tokens[index] = this._tokens[index] ?? new Token(
|
|
138
|
+
1 /* MAINNET */,
|
|
139
|
+
await tokenContract.getAddress(),
|
|
140
|
+
Number(await tokenContract.decimals()),
|
|
141
|
+
await tokenContract.symbol(),
|
|
142
|
+
await tokenContract.name()
|
|
143
|
+
);
|
|
152
144
|
return assertEx(this._tokens[index]);
|
|
153
145
|
});
|
|
154
146
|
}
|
|
@@ -161,27 +153,27 @@ var _EthersUniSwap3Pair = class _EthersUniSwap3Pair {
|
|
|
161
153
|
});
|
|
162
154
|
}
|
|
163
155
|
};
|
|
164
|
-
__name(_EthersUniSwap3Pair, "EthersUniSwap3Pair");
|
|
165
|
-
var EthersUniSwap3Pair = _EthersUniSwap3Pair;
|
|
166
156
|
|
|
167
157
|
// src/lib/Ethers/createUniswapPoolContracts.ts
|
|
168
|
-
var createUniswapPoolContracts =
|
|
158
|
+
var createUniswapPoolContracts = (provider, contracts) => {
|
|
169
159
|
return logErrors(() => {
|
|
170
160
|
return contracts.map((contract) => new EthersUniSwap3Pair(contract, provider));
|
|
171
161
|
});
|
|
172
|
-
}
|
|
162
|
+
};
|
|
173
163
|
|
|
174
164
|
// src/lib/pricesFromUniswap3.ts
|
|
175
165
|
import { fulfilled } from "@xylabs/promise";
|
|
176
|
-
var pricesFromUniswap3 =
|
|
166
|
+
var pricesFromUniswap3 = async (pools) => {
|
|
177
167
|
return await logErrorsAsync(async () => {
|
|
178
|
-
const promiseResults = await Promise.allSettled(
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
168
|
+
const promiseResults = await Promise.allSettled(
|
|
169
|
+
pools.map(async (pool) => {
|
|
170
|
+
const result = await pool.price();
|
|
171
|
+
return result;
|
|
172
|
+
})
|
|
173
|
+
);
|
|
182
174
|
return promiseResults.filter(fulfilled).map((result) => result.value);
|
|
183
175
|
});
|
|
184
|
-
}
|
|
176
|
+
};
|
|
185
177
|
|
|
186
178
|
// src/lib/UniswapPoolContracts.ts
|
|
187
179
|
var UniswapPoolContracts = [
|
|
@@ -221,8 +213,13 @@ import { UniswapCryptoMarketSchema as UniswapCryptoMarketSchema2 } from "@xyo-ne
|
|
|
221
213
|
// src/Witness.ts
|
|
222
214
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
223
215
|
import { AbstractWitness } from "@xyo-network/abstract-witness";
|
|
224
|
-
import {
|
|
225
|
-
|
|
216
|
+
import {
|
|
217
|
+
UniswapCryptoMarketSchema,
|
|
218
|
+
UniswapCryptoMarketWitnessConfigSchema
|
|
219
|
+
} from "@xyo-network/uniswap-crypto-market-payload-plugin";
|
|
220
|
+
var UniswapCryptoMarketWitness = class extends AbstractWitness {
|
|
221
|
+
static configSchemas = [...super.configSchemas, UniswapCryptoMarketWitnessConfigSchema];
|
|
222
|
+
static defaultConfigSchema = UniswapCryptoMarketWitnessConfigSchema;
|
|
226
223
|
pairs;
|
|
227
224
|
get provider() {
|
|
228
225
|
return this.params.provider;
|
|
@@ -236,37 +233,29 @@ var _UniswapCryptoMarketWitness = class _UniswapCryptoMarketWitness extends Abst
|
|
|
236
233
|
schema: UniswapCryptoMarketSchema,
|
|
237
234
|
timestamp
|
|
238
235
|
};
|
|
239
|
-
return [
|
|
240
|
-
payload
|
|
241
|
-
];
|
|
236
|
+
return [payload];
|
|
242
237
|
}
|
|
243
238
|
async startHandler() {
|
|
244
239
|
var _a;
|
|
245
240
|
await super.startHandler();
|
|
246
|
-
this.pairs = createUniswapPoolContracts(
|
|
241
|
+
this.pairs = createUniswapPoolContracts(
|
|
242
|
+
assertEx2(this.provider, () => "Provider Required"),
|
|
243
|
+
((_a = this.config) == null ? void 0 : _a.pools) ?? UniswapPoolContracts
|
|
244
|
+
);
|
|
247
245
|
return true;
|
|
248
246
|
}
|
|
249
247
|
};
|
|
250
|
-
__name(_UniswapCryptoMarketWitness, "UniswapCryptoMarketWitness");
|
|
251
|
-
__publicField(_UniswapCryptoMarketWitness, "configSchemas", [
|
|
252
|
-
...__superGet(_UniswapCryptoMarketWitness, _UniswapCryptoMarketWitness, "configSchemas"),
|
|
253
|
-
UniswapCryptoMarketWitnessConfigSchema
|
|
254
|
-
]);
|
|
255
|
-
__publicField(_UniswapCryptoMarketWitness, "defaultConfigSchema", UniswapCryptoMarketWitnessConfigSchema);
|
|
256
|
-
var UniswapCryptoMarketWitness = _UniswapCryptoMarketWitness;
|
|
257
248
|
|
|
258
249
|
// src/Plugin.ts
|
|
259
|
-
var UniswapCryptoMarketPlugin =
|
|
260
|
-
required: {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
}, "witness")
|
|
269
|
-
}), "UniswapCryptoMarketPlugin");
|
|
250
|
+
var UniswapCryptoMarketPlugin = () => createPayloadSetWitnessPlugin(
|
|
251
|
+
{ required: { [UniswapCryptoMarketSchema2]: 1 }, schema: PayloadSetSchema },
|
|
252
|
+
{
|
|
253
|
+
witness: async (params) => {
|
|
254
|
+
const result = await UniswapCryptoMarketWitness.create(params);
|
|
255
|
+
return result;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
);
|
|
270
259
|
export {
|
|
271
260
|
ChainId,
|
|
272
261
|
EthersUniSwap3Pair,
|