@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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { UniswapCryptoMarketWitness } from './Witness.ts';
|
|
2
|
-
export declare const UniswapCryptoMarketPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<UniswapCryptoMarketWitness<import("
|
|
3
|
-
account?: import("
|
|
2
|
+
export declare const UniswapCryptoMarketPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<UniswapCryptoMarketWitness<import(".store/@xylabs-object-npm-3.6.12-443b813787/package").BaseParamsFields & {
|
|
3
|
+
account?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance | "random";
|
|
4
4
|
addToResolvers?: boolean;
|
|
5
|
-
additionalSigners?: import("
|
|
5
|
+
additionalSigners?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance[];
|
|
6
6
|
allowNameResolution?: boolean;
|
|
7
7
|
config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & {
|
|
8
8
|
schema: "network.xyo.crypto.market.uniswap.witness.config";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { UniswapCryptoMarketWitness } from './Witness.ts';
|
|
2
|
-
export declare const UniswapCryptoMarketPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<UniswapCryptoMarketWitness<import("
|
|
3
|
-
account?: import("
|
|
2
|
+
export declare const UniswapCryptoMarketPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<UniswapCryptoMarketWitness<import(".store/@xylabs-object-npm-3.6.12-443b813787/package").BaseParamsFields & {
|
|
3
|
+
account?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance | "random";
|
|
4
4
|
addToResolvers?: boolean;
|
|
5
|
-
additionalSigners?: import("
|
|
5
|
+
additionalSigners?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance[];
|
|
6
6
|
allowNameResolution?: boolean;
|
|
7
7
|
config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & {
|
|
8
8
|
schema: "network.xyo.crypto.market.uniswap.witness.config";
|
package/dist/browser/Plugin.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { UniswapCryptoMarketWitness } from './Witness.ts';
|
|
2
|
-
export declare const UniswapCryptoMarketPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<UniswapCryptoMarketWitness<import("
|
|
3
|
-
account?: import("
|
|
2
|
+
export declare const UniswapCryptoMarketPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<UniswapCryptoMarketWitness<import(".store/@xylabs-object-npm-3.6.12-443b813787/package").BaseParamsFields & {
|
|
3
|
+
account?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance | "random";
|
|
4
4
|
addToResolvers?: boolean;
|
|
5
|
-
additionalSigners?: import("
|
|
5
|
+
additionalSigners?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance[];
|
|
6
6
|
allowNameResolution?: boolean;
|
|
7
7
|
config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & {
|
|
8
8
|
schema: "network.xyo.crypto.market.uniswap.witness.config";
|
package/dist/browser/index.cjs
CHANGED
|
@@ -3,7 +3,6 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
6
|
var __export = (target, all) => {
|
|
8
7
|
for (var name in all)
|
|
9
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -34,22 +33,22 @@ __export(src_exports, {
|
|
|
34
33
|
module.exports = __toCommonJS(src_exports);
|
|
35
34
|
|
|
36
35
|
// src/lib/logErrors.ts
|
|
37
|
-
var logErrors =
|
|
36
|
+
var logErrors = (func) => {
|
|
38
37
|
try {
|
|
39
38
|
return func();
|
|
40
39
|
} catch (ex) {
|
|
41
40
|
console.error(ex);
|
|
42
41
|
throw ex;
|
|
43
42
|
}
|
|
44
|
-
}
|
|
45
|
-
var logErrorsAsync =
|
|
43
|
+
};
|
|
44
|
+
var logErrorsAsync = async (func) => {
|
|
46
45
|
try {
|
|
47
46
|
return await func();
|
|
48
47
|
} catch (ex) {
|
|
49
48
|
console.error(ex);
|
|
50
49
|
throw ex;
|
|
51
50
|
}
|
|
52
|
-
}
|
|
51
|
+
};
|
|
53
52
|
|
|
54
53
|
// src/lib/Ethers/UniSwap3Pair.ts
|
|
55
54
|
var import_assert = require("@xylabs/assert");
|
|
@@ -61,9 +60,6 @@ var import_uniswap_v3_sdk = require("@xyo-network/uniswap-v3-sdk");
|
|
|
61
60
|
|
|
62
61
|
// src/lib/Ethers/Uniswap3PoolSlot0Wrapper.ts
|
|
63
62
|
var EthersUniswap3PoolSlot0Wrapper = class {
|
|
64
|
-
static {
|
|
65
|
-
__name(this, "EthersUniswap3PoolSlot0Wrapper");
|
|
66
|
-
}
|
|
67
63
|
values;
|
|
68
64
|
constructor(values) {
|
|
69
65
|
this.values = values;
|
|
@@ -92,34 +88,25 @@ var EthersUniswap3PoolSlot0Wrapper = class {
|
|
|
92
88
|
};
|
|
93
89
|
|
|
94
90
|
// src/lib/Ethers/UniSwap3Pair.ts
|
|
95
|
-
var ChainId
|
|
96
|
-
(function(ChainId2) {
|
|
91
|
+
var ChainId = /* @__PURE__ */ ((ChainId2) => {
|
|
97
92
|
ChainId2[ChainId2["MAINNET"] = 1] = "MAINNET";
|
|
98
93
|
ChainId2[ChainId2["ROPSTEN"] = 3] = "ROPSTEN";
|
|
99
94
|
ChainId2[ChainId2["RINKEBY"] = 4] = "RINKEBY";
|
|
100
95
|
ChainId2[ChainId2["G\xD6RLI"] = 5] = "G\xD6RLI";
|
|
101
96
|
ChainId2[ChainId2["KOVAN"] = 42] = "KOVAN";
|
|
102
|
-
|
|
103
|
-
|
|
97
|
+
return ChainId2;
|
|
98
|
+
})(ChainId || {});
|
|
99
|
+
var waitNotNull = async (closure) => {
|
|
104
100
|
while (closure() === null) await (0, import_delay.delay)(10);
|
|
105
|
-
}
|
|
101
|
+
};
|
|
106
102
|
var EthersUniSwap3Pair = class {
|
|
107
|
-
static {
|
|
108
|
-
__name(this, "EthersUniSwap3Pair");
|
|
109
|
-
}
|
|
110
103
|
address;
|
|
111
104
|
provider;
|
|
112
105
|
_pool;
|
|
113
106
|
_poolContract;
|
|
114
107
|
_slot0;
|
|
115
|
-
_tokenContracts = [
|
|
116
|
-
|
|
117
|
-
void 0
|
|
118
|
-
];
|
|
119
|
-
_tokens = [
|
|
120
|
-
void 0,
|
|
121
|
-
void 0
|
|
122
|
-
];
|
|
108
|
+
_tokenContracts = [void 0, void 0];
|
|
109
|
+
_tokens = [void 0, void 0];
|
|
123
110
|
constructor(address, provider) {
|
|
124
111
|
this.address = address;
|
|
125
112
|
this.provider = provider;
|
|
@@ -129,7 +116,14 @@ var EthersUniSwap3Pair = class {
|
|
|
129
116
|
await waitNotNull(() => this._pool);
|
|
130
117
|
this._pool = this._pool || null;
|
|
131
118
|
const slot0 = await this.slot0();
|
|
132
|
-
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;
|
|
133
127
|
return (0, import_assert.assertEx)(this._pool);
|
|
134
128
|
});
|
|
135
129
|
}
|
|
@@ -141,23 +135,18 @@ var EthersUniSwap3Pair = class {
|
|
|
141
135
|
}
|
|
142
136
|
async price() {
|
|
143
137
|
return await logErrorsAsync(async () => {
|
|
144
|
-
const tokenIndexes = [
|
|
145
|
-
0,
|
|
146
|
-
1
|
|
147
|
-
];
|
|
138
|
+
const tokenIndexes = [0, 1];
|
|
148
139
|
const pool = await this.pool();
|
|
149
140
|
const tokens = await Promise.all(tokenIndexes.map((value) => this.token(value)));
|
|
150
141
|
const tokenContracts = await Promise.all(tokenIndexes.map((value) => this.tokenContract(value)));
|
|
151
142
|
const tokenPrices = tokens.map((token) => Number.parseFloat(pool.priceOf(token).toSignificant()));
|
|
152
143
|
const tokenSymbols = tokens.map((token, index) => (0, import_assert.assertEx)(token.symbol, () => `Token[${index}] Missing Symbols`).toLowerCase());
|
|
153
144
|
const result = {
|
|
154
|
-
tokens: await Promise.all(
|
|
155
|
-
|
|
156
|
-
address: await tokenContracts[value].getAddress(),
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
};
|
|
160
|
-
}))
|
|
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
|
+
)
|
|
161
150
|
};
|
|
162
151
|
return result;
|
|
163
152
|
});
|
|
@@ -179,7 +168,13 @@ var EthersUniSwap3Pair = class {
|
|
|
179
168
|
await waitNotNull(() => this._tokens[index]);
|
|
180
169
|
this._tokens[index] = this._tokens[index] || null;
|
|
181
170
|
const tokenContract = await this.tokenContract(index);
|
|
182
|
-
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
|
+
);
|
|
183
178
|
return (0, import_assert.assertEx)(this._tokens[index]);
|
|
184
179
|
});
|
|
185
180
|
}
|
|
@@ -194,23 +189,25 @@ var EthersUniSwap3Pair = class {
|
|
|
194
189
|
};
|
|
195
190
|
|
|
196
191
|
// src/lib/Ethers/createUniswapPoolContracts.ts
|
|
197
|
-
var createUniswapPoolContracts =
|
|
192
|
+
var createUniswapPoolContracts = (provider, contracts) => {
|
|
198
193
|
return logErrors(() => {
|
|
199
194
|
return contracts.map((contract) => new EthersUniSwap3Pair(contract, provider));
|
|
200
195
|
});
|
|
201
|
-
}
|
|
196
|
+
};
|
|
202
197
|
|
|
203
198
|
// src/lib/pricesFromUniswap3.ts
|
|
204
199
|
var import_promise = require("@xylabs/promise");
|
|
205
|
-
var pricesFromUniswap3 =
|
|
200
|
+
var pricesFromUniswap3 = async (pools) => {
|
|
206
201
|
return await logErrorsAsync(async () => {
|
|
207
|
-
const promiseResults = await Promise.allSettled(
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
202
|
+
const promiseResults = await Promise.allSettled(
|
|
203
|
+
pools.map(async (pool) => {
|
|
204
|
+
const result = await pool.price();
|
|
205
|
+
return result;
|
|
206
|
+
})
|
|
207
|
+
);
|
|
211
208
|
return promiseResults.filter(import_promise.fulfilled).map((result) => result.value);
|
|
212
209
|
});
|
|
213
|
-
}
|
|
210
|
+
};
|
|
214
211
|
|
|
215
212
|
// src/lib/UniswapPoolContracts.ts
|
|
216
213
|
var UniswapPoolContracts = [
|
|
@@ -252,13 +249,7 @@ var import_assert2 = require("@xylabs/assert");
|
|
|
252
249
|
var import_abstract_witness = require("@xyo-network/abstract-witness");
|
|
253
250
|
var import_uniswap_crypto_market_payload_plugin = require("@xyo-network/uniswap-crypto-market-payload-plugin");
|
|
254
251
|
var UniswapCryptoMarketWitness = class extends import_abstract_witness.AbstractWitness {
|
|
255
|
-
static
|
|
256
|
-
__name(this, "UniswapCryptoMarketWitness");
|
|
257
|
-
}
|
|
258
|
-
static configSchemas = [
|
|
259
|
-
...super.configSchemas,
|
|
260
|
-
import_uniswap_crypto_market_payload_plugin.UniswapCryptoMarketWitnessConfigSchema
|
|
261
|
-
];
|
|
252
|
+
static configSchemas = [...super.configSchemas, import_uniswap_crypto_market_payload_plugin.UniswapCryptoMarketWitnessConfigSchema];
|
|
262
253
|
static defaultConfigSchema = import_uniswap_crypto_market_payload_plugin.UniswapCryptoMarketWitnessConfigSchema;
|
|
263
254
|
pairs;
|
|
264
255
|
get provider() {
|
|
@@ -273,27 +264,26 @@ var UniswapCryptoMarketWitness = class extends import_abstract_witness.AbstractW
|
|
|
273
264
|
schema: import_uniswap_crypto_market_payload_plugin.UniswapCryptoMarketSchema,
|
|
274
265
|
timestamp
|
|
275
266
|
};
|
|
276
|
-
return [
|
|
277
|
-
payload
|
|
278
|
-
];
|
|
267
|
+
return [payload];
|
|
279
268
|
}
|
|
280
269
|
async startHandler() {
|
|
281
270
|
await super.startHandler();
|
|
282
|
-
this.pairs = createUniswapPoolContracts(
|
|
271
|
+
this.pairs = createUniswapPoolContracts(
|
|
272
|
+
(0, import_assert2.assertEx)(this.provider, () => "Provider Required"),
|
|
273
|
+
this.config?.pools ?? UniswapPoolContracts
|
|
274
|
+
);
|
|
283
275
|
return true;
|
|
284
276
|
}
|
|
285
277
|
};
|
|
286
278
|
|
|
287
279
|
// src/Plugin.ts
|
|
288
|
-
var UniswapCryptoMarketPlugin =
|
|
289
|
-
required: {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
}, "witness")
|
|
298
|
-
}), "UniswapCryptoMarketPlugin");
|
|
280
|
+
var UniswapCryptoMarketPlugin = () => (0, import_payloadset_plugin.createPayloadSetWitnessPlugin)(
|
|
281
|
+
{ required: { [import_uniswap_crypto_market_payload_plugin2.UniswapCryptoMarketSchema]: 1 }, schema: import_payload_model.PayloadSetSchema },
|
|
282
|
+
{
|
|
283
|
+
witness: async (params) => {
|
|
284
|
+
const result = await UniswapCryptoMarketWitness.create(params);
|
|
285
|
+
return result;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
);
|
|
299
289
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -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","configSchemas","UniswapCryptoMarketWitnessConfigSchema","defaultConfigSchema","pairs","provider","params","observeHandler","started","pricesFromUniswap3","assertEx","timestamp","Date","now","payload","schema","UniswapCryptoMarketSchema","startHandler","createUniswapPoolContracts","config","pools","UniswapPoolContracts","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/browser/index.mjs
CHANGED
|
@@ -1,23 +1,20 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
|
|
4
1
|
// src/lib/logErrors.ts
|
|
5
|
-
var logErrors =
|
|
2
|
+
var logErrors = (func) => {
|
|
6
3
|
try {
|
|
7
4
|
return func();
|
|
8
5
|
} catch (ex) {
|
|
9
6
|
console.error(ex);
|
|
10
7
|
throw ex;
|
|
11
8
|
}
|
|
12
|
-
}
|
|
13
|
-
var logErrorsAsync =
|
|
9
|
+
};
|
|
10
|
+
var logErrorsAsync = async (func) => {
|
|
14
11
|
try {
|
|
15
12
|
return await func();
|
|
16
13
|
} catch (ex) {
|
|
17
14
|
console.error(ex);
|
|
18
15
|
throw ex;
|
|
19
16
|
}
|
|
20
|
-
}
|
|
17
|
+
};
|
|
21
18
|
|
|
22
19
|
// src/lib/Ethers/UniSwap3Pair.ts
|
|
23
20
|
import { assertEx } from "@xylabs/assert";
|
|
@@ -29,9 +26,6 @@ import { Pool } from "@xyo-network/uniswap-v3-sdk";
|
|
|
29
26
|
|
|
30
27
|
// src/lib/Ethers/Uniswap3PoolSlot0Wrapper.ts
|
|
31
28
|
var EthersUniswap3PoolSlot0Wrapper = class {
|
|
32
|
-
static {
|
|
33
|
-
__name(this, "EthersUniswap3PoolSlot0Wrapper");
|
|
34
|
-
}
|
|
35
29
|
values;
|
|
36
30
|
constructor(values) {
|
|
37
31
|
this.values = values;
|
|
@@ -60,34 +54,25 @@ var EthersUniswap3PoolSlot0Wrapper = class {
|
|
|
60
54
|
};
|
|
61
55
|
|
|
62
56
|
// src/lib/Ethers/UniSwap3Pair.ts
|
|
63
|
-
var ChainId
|
|
64
|
-
(function(ChainId2) {
|
|
57
|
+
var ChainId = /* @__PURE__ */ ((ChainId2) => {
|
|
65
58
|
ChainId2[ChainId2["MAINNET"] = 1] = "MAINNET";
|
|
66
59
|
ChainId2[ChainId2["ROPSTEN"] = 3] = "ROPSTEN";
|
|
67
60
|
ChainId2[ChainId2["RINKEBY"] = 4] = "RINKEBY";
|
|
68
61
|
ChainId2[ChainId2["G\xD6RLI"] = 5] = "G\xD6RLI";
|
|
69
62
|
ChainId2[ChainId2["KOVAN"] = 42] = "KOVAN";
|
|
70
|
-
|
|
71
|
-
|
|
63
|
+
return ChainId2;
|
|
64
|
+
})(ChainId || {});
|
|
65
|
+
var waitNotNull = async (closure) => {
|
|
72
66
|
while (closure() === null) await delay(10);
|
|
73
|
-
}
|
|
67
|
+
};
|
|
74
68
|
var EthersUniSwap3Pair = class {
|
|
75
|
-
static {
|
|
76
|
-
__name(this, "EthersUniSwap3Pair");
|
|
77
|
-
}
|
|
78
69
|
address;
|
|
79
70
|
provider;
|
|
80
71
|
_pool;
|
|
81
72
|
_poolContract;
|
|
82
73
|
_slot0;
|
|
83
|
-
_tokenContracts = [
|
|
84
|
-
|
|
85
|
-
void 0
|
|
86
|
-
];
|
|
87
|
-
_tokens = [
|
|
88
|
-
void 0,
|
|
89
|
-
void 0
|
|
90
|
-
];
|
|
74
|
+
_tokenContracts = [void 0, void 0];
|
|
75
|
+
_tokens = [void 0, void 0];
|
|
91
76
|
constructor(address, provider) {
|
|
92
77
|
this.address = address;
|
|
93
78
|
this.provider = provider;
|
|
@@ -97,7 +82,14 @@ var EthersUniSwap3Pair = class {
|
|
|
97
82
|
await waitNotNull(() => this._pool);
|
|
98
83
|
this._pool = this._pool || null;
|
|
99
84
|
const slot0 = await this.slot0();
|
|
100
|
-
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;
|
|
101
93
|
return assertEx(this._pool);
|
|
102
94
|
});
|
|
103
95
|
}
|
|
@@ -109,23 +101,18 @@ var EthersUniSwap3Pair = class {
|
|
|
109
101
|
}
|
|
110
102
|
async price() {
|
|
111
103
|
return await logErrorsAsync(async () => {
|
|
112
|
-
const tokenIndexes = [
|
|
113
|
-
0,
|
|
114
|
-
1
|
|
115
|
-
];
|
|
104
|
+
const tokenIndexes = [0, 1];
|
|
116
105
|
const pool = await this.pool();
|
|
117
106
|
const tokens = await Promise.all(tokenIndexes.map((value) => this.token(value)));
|
|
118
107
|
const tokenContracts = await Promise.all(tokenIndexes.map((value) => this.tokenContract(value)));
|
|
119
108
|
const tokenPrices = tokens.map((token) => Number.parseFloat(pool.priceOf(token).toSignificant()));
|
|
120
109
|
const tokenSymbols = tokens.map((token, index) => assertEx(token.symbol, () => `Token[${index}] Missing Symbols`).toLowerCase());
|
|
121
110
|
const result = {
|
|
122
|
-
tokens: await Promise.all(
|
|
123
|
-
|
|
124
|
-
address: await tokenContracts[value].getAddress(),
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
};
|
|
128
|
-
}))
|
|
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
|
+
)
|
|
129
116
|
};
|
|
130
117
|
return result;
|
|
131
118
|
});
|
|
@@ -147,7 +134,13 @@ var EthersUniSwap3Pair = class {
|
|
|
147
134
|
await waitNotNull(() => this._tokens[index]);
|
|
148
135
|
this._tokens[index] = this._tokens[index] || null;
|
|
149
136
|
const tokenContract = await this.tokenContract(index);
|
|
150
|
-
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
|
+
);
|
|
151
144
|
return assertEx(this._tokens[index]);
|
|
152
145
|
});
|
|
153
146
|
}
|
|
@@ -162,23 +155,25 @@ var EthersUniSwap3Pair = class {
|
|
|
162
155
|
};
|
|
163
156
|
|
|
164
157
|
// src/lib/Ethers/createUniswapPoolContracts.ts
|
|
165
|
-
var createUniswapPoolContracts =
|
|
158
|
+
var createUniswapPoolContracts = (provider, contracts) => {
|
|
166
159
|
return logErrors(() => {
|
|
167
160
|
return contracts.map((contract) => new EthersUniSwap3Pair(contract, provider));
|
|
168
161
|
});
|
|
169
|
-
}
|
|
162
|
+
};
|
|
170
163
|
|
|
171
164
|
// src/lib/pricesFromUniswap3.ts
|
|
172
165
|
import { fulfilled } from "@xylabs/promise";
|
|
173
|
-
var pricesFromUniswap3 =
|
|
166
|
+
var pricesFromUniswap3 = async (pools) => {
|
|
174
167
|
return await logErrorsAsync(async () => {
|
|
175
|
-
const promiseResults = await Promise.allSettled(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
168
|
+
const promiseResults = await Promise.allSettled(
|
|
169
|
+
pools.map(async (pool) => {
|
|
170
|
+
const result = await pool.price();
|
|
171
|
+
return result;
|
|
172
|
+
})
|
|
173
|
+
);
|
|
179
174
|
return promiseResults.filter(fulfilled).map((result) => result.value);
|
|
180
175
|
});
|
|
181
|
-
}
|
|
176
|
+
};
|
|
182
177
|
|
|
183
178
|
// src/lib/UniswapPoolContracts.ts
|
|
184
179
|
var UniswapPoolContracts = [
|
|
@@ -218,15 +213,12 @@ import { UniswapCryptoMarketSchema as UniswapCryptoMarketSchema2 } from "@xyo-ne
|
|
|
218
213
|
// src/Witness.ts
|
|
219
214
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
220
215
|
import { AbstractWitness } from "@xyo-network/abstract-witness";
|
|
221
|
-
import {
|
|
216
|
+
import {
|
|
217
|
+
UniswapCryptoMarketSchema,
|
|
218
|
+
UniswapCryptoMarketWitnessConfigSchema
|
|
219
|
+
} from "@xyo-network/uniswap-crypto-market-payload-plugin";
|
|
222
220
|
var UniswapCryptoMarketWitness = class extends AbstractWitness {
|
|
223
|
-
static
|
|
224
|
-
__name(this, "UniswapCryptoMarketWitness");
|
|
225
|
-
}
|
|
226
|
-
static configSchemas = [
|
|
227
|
-
...super.configSchemas,
|
|
228
|
-
UniswapCryptoMarketWitnessConfigSchema
|
|
229
|
-
];
|
|
221
|
+
static configSchemas = [...super.configSchemas, UniswapCryptoMarketWitnessConfigSchema];
|
|
230
222
|
static defaultConfigSchema = UniswapCryptoMarketWitnessConfigSchema;
|
|
231
223
|
pairs;
|
|
232
224
|
get provider() {
|
|
@@ -241,29 +233,28 @@ var UniswapCryptoMarketWitness = class extends AbstractWitness {
|
|
|
241
233
|
schema: UniswapCryptoMarketSchema,
|
|
242
234
|
timestamp
|
|
243
235
|
};
|
|
244
|
-
return [
|
|
245
|
-
payload
|
|
246
|
-
];
|
|
236
|
+
return [payload];
|
|
247
237
|
}
|
|
248
238
|
async startHandler() {
|
|
249
239
|
await super.startHandler();
|
|
250
|
-
this.pairs = createUniswapPoolContracts(
|
|
240
|
+
this.pairs = createUniswapPoolContracts(
|
|
241
|
+
assertEx2(this.provider, () => "Provider Required"),
|
|
242
|
+
this.config?.pools ?? UniswapPoolContracts
|
|
243
|
+
);
|
|
251
244
|
return true;
|
|
252
245
|
}
|
|
253
246
|
};
|
|
254
247
|
|
|
255
248
|
// src/Plugin.ts
|
|
256
|
-
var UniswapCryptoMarketPlugin =
|
|
257
|
-
required: {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}, "witness")
|
|
266
|
-
}), "UniswapCryptoMarketPlugin");
|
|
249
|
+
var UniswapCryptoMarketPlugin = () => createPayloadSetWitnessPlugin(
|
|
250
|
+
{ required: { [UniswapCryptoMarketSchema2]: 1 }, schema: PayloadSetSchema },
|
|
251
|
+
{
|
|
252
|
+
witness: async (params) => {
|
|
253
|
+
const result = await UniswapCryptoMarketWitness.create(params);
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
);
|
|
267
258
|
export {
|
|
268
259
|
ChainId,
|
|
269
260
|
EthersUniSwap3Pair,
|