@xyo-network/uniswap-v4-crypto-market-plugin 3.6.1 → 4.1.0
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/neutral/Plugin.d.ts +3 -0
- package/dist/{types → neutral}/Plugin.d.ts.map +1 -1
- package/dist/{types → neutral}/Witness.d.ts +4 -4
- package/dist/neutral/Witness.d.ts.map +1 -0
- package/dist/neutral/index.d.ts +82 -0
- package/dist/neutral/index.mjs +22 -3
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/lib/spec/priceFromUniswapV4.spec.d.ts +2 -0
- package/dist/neutral/lib/spec/priceFromUniswapV4.spec.d.ts.map +1 -0
- package/dist/neutral/spec/Plugin.spec.d.ts +2 -0
- package/dist/neutral/spec/Plugin.spec.d.ts.map +1 -0
- package/dist/neutral/spec/Witness.spec.d.ts +2 -0
- package/dist/neutral/spec/Witness.spec.d.ts.map +1 -0
- package/package.json +19 -19
- package/src/Witness.ts +7 -8
- package/dist/types/Plugin.d.ts +0 -13
- package/dist/types/Witness.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -5
- /package/dist/{types → neutral}/Config.d.ts +0 -0
- /package/dist/{types → neutral}/Config.d.ts.map +0 -0
- /package/dist/{types → neutral}/index.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/UniswapV4ContractAddresses.d.ts +0 -0
- /package/dist/{types → neutral}/lib/UniswapV4ContractAddresses.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/UniswapV4DefaultPools.d.ts +0 -0
- /package/dist/{types → neutral}/lib/UniswapV4DefaultPools.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/UniswapV4TokenIdentifier.d.ts +0 -0
- /package/dist/{types → neutral}/lib/UniswapV4TokenIdentifier.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/getExchangeRate.d.ts +0 -0
- /package/dist/{types → neutral}/lib/getExchangeRate.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/getPoolId.d.ts +0 -0
- /package/dist/{types → neutral}/lib/getPoolId.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/getPriceFromSqrtX96.d.ts +0 -0
- /package/dist/{types → neutral}/lib/getPriceFromSqrtX96.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/index.d.ts +0 -0
- /package/dist/{types → neutral}/lib/index.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/priceFromUniswapV4.d.ts +0 -0
- /package/dist/{types → neutral}/lib/priceFromUniswapV4.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/pricesFromUniswapV4.d.ts +0 -0
- /package/dist/{types → neutral}/lib/pricesFromUniswapV4.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/sortTokens.d.ts +0 -0
- /package/dist/{types → neutral}/lib/sortTokens.d.ts.map +0 -0
- /package/dist/{types → neutral}/lib/tokenRegistryValueToToken.d.ts +0 -0
- /package/dist/{types → neutral}/lib/tokenRegistryValueToToken.d.ts.map +0 -0
- /package/dist/{types → neutral}/types/TokenPairPoolKey.d.ts +0 -0
- /package/dist/{types → neutral}/types/TokenPairPoolKey.d.ts.map +0 -0
- /package/dist/{types → neutral}/types/TokenParameters.d.ts +0 -0
- /package/dist/{types → neutral}/types/TokenParameters.d.ts.map +0 -0
- /package/dist/{types → neutral}/types/index.d.ts +0 -0
- /package/dist/{types → neutral}/types/index.d.ts.map +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { UniswapV4CryptoMarketWitness } from './Witness.ts';
|
|
2
|
+
export declare const UniswapV4CryptoMarketPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<UniswapV4CryptoMarketWitness<import("./Witness.ts").UniswapV4CryptoMarketWitnessParams>>;
|
|
3
|
+
//# sourceMappingURL=Plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAE3D,eAAO,MAAM,2BAA2B
|
|
1
|
+
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/Plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAE3D,eAAO,MAAM,2BAA2B,iKASrC,CAAA"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
2
|
-
import type
|
|
2
|
+
import { type AnyConfigSchema } from '@xyo-network/module-model';
|
|
3
3
|
import type { Payload, Schema } from '@xyo-network/payload-model';
|
|
4
4
|
import type { WitnessParams } from '@xyo-network/witness-model';
|
|
5
5
|
import type { Provider } from 'ethers';
|
|
6
6
|
import type { UniswapV4CryptoMarketWitnessConfig } from './Config.ts';
|
|
7
7
|
import type { TokenPairPoolKey } from './types/index.ts';
|
|
8
|
-
export
|
|
8
|
+
export interface UniswapV4CryptoMarketWitnessParams extends WitnessParams<AnyConfigSchema<UniswapV4CryptoMarketWitnessConfig>> {
|
|
9
9
|
provider?: Provider;
|
|
10
|
-
}
|
|
10
|
+
}
|
|
11
11
|
export declare class UniswapV4CryptoMarketWitness<TParams extends UniswapV4CryptoMarketWitnessParams = UniswapV4CryptoMarketWitnessParams> extends AbstractWitness<TParams> {
|
|
12
12
|
static readonly configSchemas: Schema[];
|
|
13
13
|
static readonly defaultConfigSchema: Schema;
|
|
14
14
|
protected get pools(): TokenPairPoolKey[];
|
|
15
15
|
protected get provider(): Provider;
|
|
16
16
|
protected observeHandler(): Promise<Payload[]>;
|
|
17
|
-
protected startHandler(): Promise<
|
|
17
|
+
protected startHandler(): Promise<void>;
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=Witness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,2BAA2B,CAAA;AACjF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAA;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,WAAW,kCAAmC,SAAQ,aAAa,CACvE,eAAe,CAAC,kCAAkC,CAAC,CAAC;IAEpD,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED,qBACa,4BAA4B,CACvC,OAAO,SAAS,kCAAkC,GAAG,kCAAkC,CACvF,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAqE;IACrH,gBAAyB,mBAAmB,EAAE,MAAM,CAA2C;IAE/F,SAAS,KAAK,KAAK,IAAI,gBAAgB,EAAE,CAExC;IAED,SAAS,KAAK,QAAQ,aAErB;cAEwB,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;cAUpC,YAAY;CAGtC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { UniswapV4CryptoMarketWitnessConfigSchema, UniswapCryptoPair } from '@xyo-network/uniswap-crypto-market-payload-plugin';
|
|
2
|
+
import { WitnessConfig, WitnessParams } from '@xyo-network/witness-model';
|
|
3
|
+
import { Provider } from 'ethers';
|
|
4
|
+
import { Token } from '@uniswap/sdk-core';
|
|
5
|
+
import * as _xyo_network_payloadset_plugin from '@xyo-network/payloadset-plugin';
|
|
6
|
+
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
7
|
+
import { AnyConfigSchema } from '@xyo-network/module-model';
|
|
8
|
+
import { Schema, Payload } from '@xyo-network/payload-model';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Represents the minimal metadata required to define an ERC-20 token
|
|
12
|
+
* in the context of Uniswap pool interactions, token registries, or
|
|
13
|
+
* off-chain utilities.
|
|
14
|
+
*
|
|
15
|
+
* This structure is designed to be lightweight but expressive enough
|
|
16
|
+
* to support pool ID generation, token sorting, and on-chain lookups.
|
|
17
|
+
*/
|
|
18
|
+
type TokenParameters = {
|
|
19
|
+
/**
|
|
20
|
+
* The Ethereum address of the token contract.
|
|
21
|
+
*/
|
|
22
|
+
address: string;
|
|
23
|
+
/**
|
|
24
|
+
* The chain ID where this token is deployed.
|
|
25
|
+
* This enables multi-chain compatibility and avoids collisions between
|
|
26
|
+
* tokens with the same address on different networks (e.g. mainnet vs testnet).
|
|
27
|
+
*/
|
|
28
|
+
chainId: number;
|
|
29
|
+
/**
|
|
30
|
+
* The number of decimals used by the token.
|
|
31
|
+
* This is required for correct price calculations and amount formatting.
|
|
32
|
+
*/
|
|
33
|
+
decimals: number;
|
|
34
|
+
/**
|
|
35
|
+
* A short uppercase identifier for the token (e.g. 'USDT', 'WETH').
|
|
36
|
+
* Used for display, logging, and lookup convenience.
|
|
37
|
+
*/
|
|
38
|
+
symbol: string;
|
|
39
|
+
/**
|
|
40
|
+
* (Optional) The full human-readable name of the token (e.g. 'Tether USD').
|
|
41
|
+
* Useful for UIs or token metadata enrichment.
|
|
42
|
+
*/
|
|
43
|
+
name?: string;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
type TokenPairPoolKey = {
|
|
47
|
+
fee: number;
|
|
48
|
+
hookAddress: string;
|
|
49
|
+
tickSpacing: number;
|
|
50
|
+
tokens: [TokenParameters, TokenParameters];
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
type UniswapV4CryptoMarketWitnessConfig = WitnessConfig<{
|
|
54
|
+
poolKeys?: TokenPairPoolKey[];
|
|
55
|
+
schema: UniswapV4CryptoMarketWitnessConfigSchema;
|
|
56
|
+
}>;
|
|
57
|
+
|
|
58
|
+
declare const priceFromUniswapV4: (poolId: TokenPairPoolKey, provider: Provider) => Promise<UniswapCryptoPair>;
|
|
59
|
+
|
|
60
|
+
declare const pricesFromUniswapV4: (poolId: TokenPairPoolKey[], provider: Provider) => Promise<UniswapCryptoPair[]>;
|
|
61
|
+
|
|
62
|
+
declare const tokenRegistryValueToToken: (value: TokenParameters) => Token;
|
|
63
|
+
|
|
64
|
+
declare const TokenRegistry: Record<string, TokenParameters>;
|
|
65
|
+
declare const UniswapV4DefaultPools: Record<string, TokenPairPoolKey>;
|
|
66
|
+
|
|
67
|
+
interface UniswapV4CryptoMarketWitnessParams extends WitnessParams<AnyConfigSchema<UniswapV4CryptoMarketWitnessConfig>> {
|
|
68
|
+
provider?: Provider;
|
|
69
|
+
}
|
|
70
|
+
declare class UniswapV4CryptoMarketWitness<TParams extends UniswapV4CryptoMarketWitnessParams = UniswapV4CryptoMarketWitnessParams> extends AbstractWitness<TParams> {
|
|
71
|
+
static readonly configSchemas: Schema[];
|
|
72
|
+
static readonly defaultConfigSchema: Schema;
|
|
73
|
+
protected get pools(): TokenPairPoolKey[];
|
|
74
|
+
protected get provider(): Provider;
|
|
75
|
+
protected observeHandler(): Promise<Payload[]>;
|
|
76
|
+
protected startHandler(): Promise<void>;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
declare const UniswapV4CryptoMarketPlugin: () => _xyo_network_payloadset_plugin.PayloadSetWitnessPlugin<UniswapV4CryptoMarketWitness<UniswapV4CryptoMarketWitnessParams>>;
|
|
80
|
+
|
|
81
|
+
export { TokenRegistry, UniswapV4CryptoMarketPlugin, UniswapV4CryptoMarketWitness, UniswapV4DefaultPools, UniswapV4CryptoMarketPlugin as default, priceFromUniswapV4, pricesFromUniswapV4, tokenRegistryValueToToken };
|
|
82
|
+
export type { UniswapV4CryptoMarketWitnessConfig, UniswapV4CryptoMarketWitnessParams };
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __reflectGet = Reflect.get;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
7
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
8
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
9
|
+
if (decorator = decorators[i])
|
|
10
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
11
|
+
if (kind && result) __defProp(target, key, result);
|
|
12
|
+
return result;
|
|
13
|
+
};
|
|
14
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
15
|
+
var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
|
|
16
|
+
|
|
1
17
|
// src/lib/priceFromUniswapV4.ts
|
|
2
18
|
import { ZeroAddress as ZeroAddress3 } from "ethers";
|
|
3
19
|
|
|
@@ -144,10 +160,9 @@ import { UniswapCryptoMarketSchema as UniswapCryptoMarketSchema2 } from "@xyo-ne
|
|
|
144
160
|
// src/Witness.ts
|
|
145
161
|
import { assertEx } from "@xylabs/assert";
|
|
146
162
|
import { AbstractWitness } from "@xyo-network/abstract-witness";
|
|
163
|
+
import { creatableModule } from "@xyo-network/module-model";
|
|
147
164
|
import { UniswapCryptoMarketSchema, UniswapV4CryptoMarketWitnessConfigSchema } from "@xyo-network/uniswap-crypto-market-payload-plugin";
|
|
148
165
|
var UniswapV4CryptoMarketWitness = class extends AbstractWitness {
|
|
149
|
-
static configSchemas = [...super.configSchemas, UniswapV4CryptoMarketWitnessConfigSchema];
|
|
150
|
-
static defaultConfigSchema = UniswapV4CryptoMarketWitnessConfigSchema;
|
|
151
166
|
get pools() {
|
|
152
167
|
return this.config?.poolKeys ?? Object.values(UniswapV4DefaultPools);
|
|
153
168
|
}
|
|
@@ -167,9 +182,13 @@ var UniswapV4CryptoMarketWitness = class extends AbstractWitness {
|
|
|
167
182
|
}
|
|
168
183
|
async startHandler() {
|
|
169
184
|
await super.startHandler();
|
|
170
|
-
return true;
|
|
171
185
|
}
|
|
172
186
|
};
|
|
187
|
+
__publicField(UniswapV4CryptoMarketWitness, "configSchemas", [...__superGet(UniswapV4CryptoMarketWitness, UniswapV4CryptoMarketWitness, "configSchemas"), UniswapV4CryptoMarketWitnessConfigSchema]);
|
|
188
|
+
__publicField(UniswapV4CryptoMarketWitness, "defaultConfigSchema", UniswapV4CryptoMarketWitnessConfigSchema);
|
|
189
|
+
UniswapV4CryptoMarketWitness = __decorateClass([
|
|
190
|
+
creatableModule()
|
|
191
|
+
], UniswapV4CryptoMarketWitness);
|
|
173
192
|
|
|
174
193
|
// src/Plugin.ts
|
|
175
194
|
var UniswapV4CryptoMarketPlugin = () => createPayloadSetWitnessPlugin(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/priceFromUniswapV4.ts","../../src/lib/getExchangeRate.ts","../../src/lib/getPoolId.ts","../../src/lib/sortTokens.ts","../../src/lib/getPriceFromSqrtX96.ts","../../src/lib/UniswapV4ContractAddresses.ts","../../src/lib/tokenRegistryValueToToken.ts","../../src/lib/pricesFromUniswapV4.ts","../../src/lib/UniswapV4DefaultPools.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["import type { UniswapCryptoPair, UniswapCryptoToken } from '@xyo-network/uniswap-crypto-market-payload-plugin'\nimport type { Provider } from 'ethers'\nimport { ZeroAddress } from 'ethers'\n\nimport type { TokenPairPoolKey } from '../types/index.ts'\nimport { getExchangeRate } from './getExchangeRate.ts'\nimport { tokenRegistryValueToToken } from './tokenRegistryValueToToken.ts'\n\nexport const priceFromUniswapV4 = async (poolId: TokenPairPoolKey, provider: Provider): Promise<UniswapCryptoPair> => {\n const {\n tokens, fee, hookAddress = ZeroAddress,\n } = poolId\n const tokenA = tokenRegistryValueToToken(tokens[0])\n const tokenB = tokenRegistryValueToToken(tokens[1])\n const rate = await getExchangeRate(tokenA, tokenB, fee, hookAddress, provider)\n const token0: UniswapCryptoToken = {\n address: tokenA.address,\n symbol: tokenA.symbol || '',\n value: Math.max(rate, 0),\n }\n const token1: UniswapCryptoToken = {\n address: tokenB.address,\n symbol: tokenB.symbol || '',\n value: rate > 0 ? Number((1 / rate).toPrecision(6)) : 0,\n }\n const pair: UniswapCryptoPair = { tokens: [token0, token1] }\n return pair\n}\n","import type { Token } from '@uniswap/sdk-core'\nimport { IStateView__factory } from '@xyo-network/uniswap-typechain/v4-periphery'\nimport { ZeroAddress } from 'ethers/constants'\nimport type { Provider } from 'ethers/providers'\n\nimport { getPoolId } from './getPoolId.ts'\nimport { getPriceFromSqrtX96 } from './getPriceFromSqrtX96.ts'\nimport { sortTokens } from './sortTokens.ts'\nimport { UniswapV4ContractAddresses } from './UniswapV4ContractAddresses.ts'\n\n/**\n * Returns the price of the token pair in the Uniswap V4 pool.\n * @param tokenA The first token in the pair.\n * @param tokenB The second token in the pair.\n * @param fee The fee tier for the pool.\n * @param hookAddress The address of the hook contract. Default is ZeroAddress.\n * @param provider The EVM provider to use for the transaction.\n * @returns The price of the token pair.\n */\nexport const getExchangeRate = async (\n tokenA: Token,\n tokenB: Token,\n fee: number,\n hookAddress: string | undefined,\n provider: Provider,\n): Promise<number> => {\n const hooks = hookAddress || ZeroAddress\n const stateView = IStateView__factory.connect(UniswapV4ContractAddresses.Ethereum.StateView, provider)\n const [token0, token1] = sortTokens(tokenA, tokenB)\n const poolId: string = getPoolId(token0, token1, fee, 60, hooks)\n if (poolId === ZeroAddress) throw new Error('Invalid poolId')\n const response = await stateView.getSlot0(poolId)\n const price = getPriceFromSqrtX96(response.sqrtPriceX96, token1.decimals, token0.decimals)\n return price\n}\n","import type { Token } from '@uniswap/sdk-core'\nimport { AbiCoder } from 'ethers/abi'\nimport { ZeroAddress } from 'ethers/constants'\nimport { keccak256 } from 'ethers/crypto'\n\nimport { sortTokens } from './sortTokens.ts'\n\n/**\n * Computes the pool address for a given pair of tokens, fee, tick spacing, and hooks which\n * is used to identify the pool on the Uniswap V4 protocol.\n * @param tokenA - The first token in the pair.\n * @param tokenB - The second token in the pair.\n * @param fee - The fee tier for the pool.\n * @param tickSpacing - The tick spacing for the pool.\n * @param hooks - The hooks associated with the pool.\n * @returns The computed pool address as a string.\n */\nexport const getPoolId = (tokenA: Token, tokenB: Token, fee: number, tickSpacing: number, hooks: string): string => {\n const [currency0, currency1] = sortTokens(tokenA, tokenB)\n const currency0Addr = currency0.isNative ? ZeroAddress : currency0.wrapped.address\n const currency1Addr = currency1.isNative ? ZeroAddress : currency1.wrapped.address\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n ['address', 'address', 'uint24', 'int24', 'address'],\n [currency0Addr, currency1Addr, fee, tickSpacing, hooks],\n ),\n )\n}\n","import type { Token } from '@uniswap/sdk-core'\n\n/**\n * Sorts two tokens in ascending order by address to ensure consistent ordering.\n *\n * In Uniswap v2, v3, and v4, pool addresses are deterministically derived using\n * `CREATE2` with a hash of the pool's initialization parameters. One critical\n * part of this hash is the `token0` and `token1` addresses. To ensure uniqueness\n * and prevent duplicate pools (e.g., USDC/WETH and WETH/USDC being treated as different),\n * Uniswap requires that token pairs be ordered **lexicographically by address**.\n *\n * This method ensures that tokens are sorted according to that rule.\n *\n * This is required any time you:\n * - Derive a pool address\n * - Generate a pool ID\n * - Call a function that expects a PoolKey or token pair in sorted order\n *\n * @param tokenA - The first token to compare\n * @param tokenB - The second token to compare\n * @returns A tuple `[token0, token1]` sorted by address in ascending order\n */\nexport const sortTokens = (tokenA: Token, tokenB: Token): [Token, Token] => {\n return tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA]\n}\n","/**\n * Calculates the price from the square root price in Q96 format.\n * @param sqrtPriceX96 The square root price in Q96 format.\n * @param decimalsA The number of decimals for the first token.\n * @param decimalsB The number of decimals for the second token.\n * @returns The price as a number.\n */\nexport const getPriceFromSqrtX96 = (sqrtPriceX96: bigint, decimalsA: number, decimalsB: number): number => {\n const Q96 = 2n ** 96n\n\n // Scale to avoid floating point math by using a 1e18 factor\n const numerator = sqrtPriceX96 * sqrtPriceX96 * 10n ** 18n\n const denominator = Q96 * Q96\n\n let price = numerator / denominator\n\n // Adjust for decimal differences\n const decimalAdjustment = decimalsB - decimalsA\n if (decimalAdjustment > 0) {\n price *= 10n ** BigInt(decimalAdjustment)\n } else if (decimalAdjustment < 0) {\n price /= 10n ** BigInt(-decimalAdjustment)\n }\n\n return Number(price) / 1e18\n}\n","// https://docs.uniswap.org/contracts/v4/deployments#mainnet-deployments\nexport const UniswapV4ContractAddresses = {\n Ethereum: {\n PoolManager: '0x000000000004444c5dc75cB358380D2e3dE08A90',\n PositionDescriptor: '0xd1428ba554f4c8450b763a0b2040a4935c63f06c',\n PositionManager: '0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e',\n Quoter: '0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203',\n StateView: '0x7ffe42c4a5deea5b0fec41c94c136cf115597227',\n UniversalRouter: '0x66a9893cc07d91d95644aedd05d03f95e1dba8af',\n },\n}\n","import { Token } from '@uniswap/sdk-core'\nimport { getAddress } from 'ethers/address'\n\nimport type { TokenParameters } from '../types/index.ts'\n\nexport const tokenRegistryValueToToken = (value: TokenParameters): Token => {\n const {\n address, chainId, decimals, symbol, name,\n } = value\n const normalizedAddress = getAddress(address.toLowerCase())\n return new Token(chainId, normalizedAddress, decimals, symbol, name)\n}\n","import type { UniswapCryptoPair } from '@xyo-network/uniswap-crypto-market-payload-plugin'\nimport type { Provider } from 'ethers'\n\nimport type { TokenPairPoolKey } from '../types/index.ts'\nimport { priceFromUniswapV4 } from './priceFromUniswapV4.ts'\n\nexport const pricesFromUniswapV4 = async (poolId: TokenPairPoolKey[], provider: Provider): Promise<UniswapCryptoPair[]> => {\n return await Promise.all(poolId.map(pool => priceFromUniswapV4(pool, provider)))\n}\n","import { ZeroAddress } from 'ethers'\n\nimport type { TokenPairPoolKey, TokenParameters } from '../types/index.ts'\n\nexport const TokenRegistry: Record<string, TokenParameters> = {\n USDT: {\n address: '0xdac17f958d2ee523a2206206994597c13d831ec7',\n chainId: 1,\n decimals: 6,\n symbol: 'USDT',\n },\n XYO: {\n address: '0x55296f69f40ea6d20e478533c15a6b08b654e758',\n chainId: 1,\n decimals: 18,\n symbol: 'XYO',\n },\n} as const\n\nexport const UniswapV4DefaultPools: Record<string, TokenPairPoolKey> = {\n 'XYO:USDT': {\n fee: 3000,\n hookAddress: ZeroAddress,\n tickSpacing: 60,\n tokens: [TokenRegistry.XYO, TokenRegistry.USDT],\n },\n} as const\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 { UniswapV4CryptoMarketWitness } from './Witness.ts'\n\nexport const UniswapV4CryptoMarketPlugin = () =>\n createPayloadSetWitnessPlugin<UniswapV4CryptoMarketWitness>(\n { required: { [UniswapCryptoMarketSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await UniswapV4CryptoMarketWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport type { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin'\nimport { UniswapCryptoMarketSchema, UniswapV4CryptoMarketWitnessConfigSchema } from '@xyo-network/uniswap-crypto-market-payload-plugin'\nimport type { WitnessParams } from '@xyo-network/witness-model'\nimport type { Provider } from 'ethers'\n\nimport type { UniswapV4CryptoMarketWitnessConfig } from './Config.ts'\nimport { pricesFromUniswapV4, UniswapV4DefaultPools } from './lib/index.ts'\nimport type { TokenPairPoolKey } from './types/index.ts'\n\nexport type UniswapV4CryptoMarketWitnessParams = WitnessParams<\n AnyConfigSchema<UniswapV4CryptoMarketWitnessConfig>,\n {\n provider?: Provider\n }\n>\n\nexport class UniswapV4CryptoMarketWitness<\n TParams extends UniswapV4CryptoMarketWitnessParams = UniswapV4CryptoMarketWitnessParams,\n> extends AbstractWitness<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, UniswapV4CryptoMarketWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = UniswapV4CryptoMarketWitnessConfigSchema\n\n protected get pools(): TokenPairPoolKey[] {\n return this.config?.poolKeys ?? Object.values(UniswapV4DefaultPools)\n }\n\n protected get provider() {\n return assertEx(this.params.provider, () => 'Provider Required')\n }\n\n protected override async observeHandler(): Promise<Payload[]> {\n await this.started('throw')\n const pairs = await pricesFromUniswapV4(this.pools, this.provider)\n const timestamp = Date.now()\n const payload: UniswapCryptoMarketPayload = {\n pairs, schema: UniswapCryptoMarketSchema, timestamp,\n }\n return [payload]\n }\n\n protected override async startHandler() {\n await super.startHandler()\n return true\n }\n}\n"],"mappings":"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","names":["ZeroAddress","ZeroAddress","ZeroAddress","ZeroAddress","ZeroAddress","UniswapCryptoMarketSchema","UniswapCryptoMarketSchema"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/priceFromUniswapV4.ts","../../src/lib/getExchangeRate.ts","../../src/lib/getPoolId.ts","../../src/lib/sortTokens.ts","../../src/lib/getPriceFromSqrtX96.ts","../../src/lib/UniswapV4ContractAddresses.ts","../../src/lib/tokenRegistryValueToToken.ts","../../src/lib/pricesFromUniswapV4.ts","../../src/lib/UniswapV4DefaultPools.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["import type { UniswapCryptoPair, UniswapCryptoToken } from '@xyo-network/uniswap-crypto-market-payload-plugin'\nimport type { Provider } from 'ethers'\nimport { ZeroAddress } from 'ethers'\n\nimport type { TokenPairPoolKey } from '../types/index.ts'\nimport { getExchangeRate } from './getExchangeRate.ts'\nimport { tokenRegistryValueToToken } from './tokenRegistryValueToToken.ts'\n\nexport const priceFromUniswapV4 = async (poolId: TokenPairPoolKey, provider: Provider): Promise<UniswapCryptoPair> => {\n const {\n tokens, fee, hookAddress = ZeroAddress,\n } = poolId\n const tokenA = tokenRegistryValueToToken(tokens[0])\n const tokenB = tokenRegistryValueToToken(tokens[1])\n const rate = await getExchangeRate(tokenA, tokenB, fee, hookAddress, provider)\n const token0: UniswapCryptoToken = {\n address: tokenA.address,\n symbol: tokenA.symbol || '',\n value: Math.max(rate, 0),\n }\n const token1: UniswapCryptoToken = {\n address: tokenB.address,\n symbol: tokenB.symbol || '',\n value: rate > 0 ? Number((1 / rate).toPrecision(6)) : 0,\n }\n const pair: UniswapCryptoPair = { tokens: [token0, token1] }\n return pair\n}\n","import type { Token } from '@uniswap/sdk-core'\nimport { IStateView__factory } from '@xyo-network/uniswap-typechain/v4-periphery'\nimport { ZeroAddress } from 'ethers/constants'\nimport type { Provider } from 'ethers/providers'\n\nimport { getPoolId } from './getPoolId.ts'\nimport { getPriceFromSqrtX96 } from './getPriceFromSqrtX96.ts'\nimport { sortTokens } from './sortTokens.ts'\nimport { UniswapV4ContractAddresses } from './UniswapV4ContractAddresses.ts'\n\n/**\n * Returns the price of the token pair in the Uniswap V4 pool.\n * @param tokenA The first token in the pair.\n * @param tokenB The second token in the pair.\n * @param fee The fee tier for the pool.\n * @param hookAddress The address of the hook contract. Default is ZeroAddress.\n * @param provider The EVM provider to use for the transaction.\n * @returns The price of the token pair.\n */\nexport const getExchangeRate = async (\n tokenA: Token,\n tokenB: Token,\n fee: number,\n hookAddress: string | undefined,\n provider: Provider,\n): Promise<number> => {\n const hooks = hookAddress || ZeroAddress\n const stateView = IStateView__factory.connect(UniswapV4ContractAddresses.Ethereum.StateView, provider)\n const [token0, token1] = sortTokens(tokenA, tokenB)\n const poolId: string = getPoolId(token0, token1, fee, 60, hooks)\n if (poolId === ZeroAddress) throw new Error('Invalid poolId')\n const response = await stateView.getSlot0(poolId)\n const price = getPriceFromSqrtX96(response.sqrtPriceX96, token1.decimals, token0.decimals)\n return price\n}\n","import type { Token } from '@uniswap/sdk-core'\nimport { AbiCoder } from 'ethers/abi'\nimport { ZeroAddress } from 'ethers/constants'\nimport { keccak256 } from 'ethers/crypto'\n\nimport { sortTokens } from './sortTokens.ts'\n\n/**\n * Computes the pool address for a given pair of tokens, fee, tick spacing, and hooks which\n * is used to identify the pool on the Uniswap V4 protocol.\n * @param tokenA - The first token in the pair.\n * @param tokenB - The second token in the pair.\n * @param fee - The fee tier for the pool.\n * @param tickSpacing - The tick spacing for the pool.\n * @param hooks - The hooks associated with the pool.\n * @returns The computed pool address as a string.\n */\nexport const getPoolId = (tokenA: Token, tokenB: Token, fee: number, tickSpacing: number, hooks: string): string => {\n const [currency0, currency1] = sortTokens(tokenA, tokenB)\n const currency0Addr = currency0.isNative ? ZeroAddress : currency0.wrapped.address\n const currency1Addr = currency1.isNative ? ZeroAddress : currency1.wrapped.address\n return keccak256(\n AbiCoder.defaultAbiCoder().encode(\n ['address', 'address', 'uint24', 'int24', 'address'],\n [currency0Addr, currency1Addr, fee, tickSpacing, hooks],\n ),\n )\n}\n","import type { Token } from '@uniswap/sdk-core'\n\n/**\n * Sorts two tokens in ascending order by address to ensure consistent ordering.\n *\n * In Uniswap v2, v3, and v4, pool addresses are deterministically derived using\n * `CREATE2` with a hash of the pool's initialization parameters. One critical\n * part of this hash is the `token0` and `token1` addresses. To ensure uniqueness\n * and prevent duplicate pools (e.g., USDC/WETH and WETH/USDC being treated as different),\n * Uniswap requires that token pairs be ordered **lexicographically by address**.\n *\n * This method ensures that tokens are sorted according to that rule.\n *\n * This is required any time you:\n * - Derive a pool address\n * - Generate a pool ID\n * - Call a function that expects a PoolKey or token pair in sorted order\n *\n * @param tokenA - The first token to compare\n * @param tokenB - The second token to compare\n * @returns A tuple `[token0, token1]` sorted by address in ascending order\n */\nexport const sortTokens = (tokenA: Token, tokenB: Token): [Token, Token] => {\n return tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA]\n}\n","/**\n * Calculates the price from the square root price in Q96 format.\n * @param sqrtPriceX96 The square root price in Q96 format.\n * @param decimalsA The number of decimals for the first token.\n * @param decimalsB The number of decimals for the second token.\n * @returns The price as a number.\n */\nexport const getPriceFromSqrtX96 = (sqrtPriceX96: bigint, decimalsA: number, decimalsB: number): number => {\n const Q96 = 2n ** 96n\n\n // Scale to avoid floating point math by using a 1e18 factor\n const numerator = sqrtPriceX96 * sqrtPriceX96 * 10n ** 18n\n const denominator = Q96 * Q96\n\n let price = numerator / denominator\n\n // Adjust for decimal differences\n const decimalAdjustment = decimalsB - decimalsA\n if (decimalAdjustment > 0) {\n price *= 10n ** BigInt(decimalAdjustment)\n } else if (decimalAdjustment < 0) {\n price /= 10n ** BigInt(-decimalAdjustment)\n }\n\n return Number(price) / 1e18\n}\n","// https://docs.uniswap.org/contracts/v4/deployments#mainnet-deployments\nexport const UniswapV4ContractAddresses = {\n Ethereum: {\n PoolManager: '0x000000000004444c5dc75cB358380D2e3dE08A90',\n PositionDescriptor: '0xd1428ba554f4c8450b763a0b2040a4935c63f06c',\n PositionManager: '0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e',\n Quoter: '0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203',\n StateView: '0x7ffe42c4a5deea5b0fec41c94c136cf115597227',\n UniversalRouter: '0x66a9893cc07d91d95644aedd05d03f95e1dba8af',\n },\n}\n","import { Token } from '@uniswap/sdk-core'\nimport { getAddress } from 'ethers/address'\n\nimport type { TokenParameters } from '../types/index.ts'\n\nexport const tokenRegistryValueToToken = (value: TokenParameters): Token => {\n const {\n address, chainId, decimals, symbol, name,\n } = value\n const normalizedAddress = getAddress(address.toLowerCase())\n return new Token(chainId, normalizedAddress, decimals, symbol, name)\n}\n","import type { UniswapCryptoPair } from '@xyo-network/uniswap-crypto-market-payload-plugin'\nimport type { Provider } from 'ethers'\n\nimport type { TokenPairPoolKey } from '../types/index.ts'\nimport { priceFromUniswapV4 } from './priceFromUniswapV4.ts'\n\nexport const pricesFromUniswapV4 = async (poolId: TokenPairPoolKey[], provider: Provider): Promise<UniswapCryptoPair[]> => {\n return await Promise.all(poolId.map(pool => priceFromUniswapV4(pool, provider)))\n}\n","import { ZeroAddress } from 'ethers'\n\nimport type { TokenPairPoolKey, TokenParameters } from '../types/index.ts'\n\nexport const TokenRegistry: Record<string, TokenParameters> = {\n USDT: {\n address: '0xdac17f958d2ee523a2206206994597c13d831ec7',\n chainId: 1,\n decimals: 6,\n symbol: 'USDT',\n },\n XYO: {\n address: '0x55296f69f40ea6d20e478533c15a6b08b654e758',\n chainId: 1,\n decimals: 18,\n symbol: 'XYO',\n },\n} as const\n\nexport const UniswapV4DefaultPools: Record<string, TokenPairPoolKey> = {\n 'XYO:USDT': {\n fee: 3000,\n hookAddress: ZeroAddress,\n tickSpacing: 60,\n tokens: [TokenRegistry.XYO, TokenRegistry.USDT],\n },\n} as const\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 { UniswapV4CryptoMarketWitness } from './Witness.ts'\n\nexport const UniswapV4CryptoMarketPlugin = () =>\n createPayloadSetWitnessPlugin<UniswapV4CryptoMarketWitness>(\n { required: { [UniswapCryptoMarketSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await UniswapV4CryptoMarketWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { type AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\nimport type { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin'\nimport { UniswapCryptoMarketSchema, UniswapV4CryptoMarketWitnessConfigSchema } from '@xyo-network/uniswap-crypto-market-payload-plugin'\nimport type { WitnessParams } from '@xyo-network/witness-model'\nimport type { Provider } from 'ethers'\n\nimport type { UniswapV4CryptoMarketWitnessConfig } from './Config.ts'\nimport { pricesFromUniswapV4, UniswapV4DefaultPools } from './lib/index.ts'\nimport type { TokenPairPoolKey } from './types/index.ts'\n\nexport interface UniswapV4CryptoMarketWitnessParams extends WitnessParams<\n AnyConfigSchema<UniswapV4CryptoMarketWitnessConfig>>\n{\n provider?: Provider\n}\n\n@creatableModule()\nexport class UniswapV4CryptoMarketWitness<\n TParams extends UniswapV4CryptoMarketWitnessParams = UniswapV4CryptoMarketWitnessParams,\n> extends AbstractWitness<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, UniswapV4CryptoMarketWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = UniswapV4CryptoMarketWitnessConfigSchema\n\n protected get pools(): TokenPairPoolKey[] {\n return this.config?.poolKeys ?? Object.values(UniswapV4DefaultPools)\n }\n\n protected get provider() {\n return assertEx(this.params.provider, () => 'Provider Required')\n }\n\n protected override async observeHandler(): Promise<Payload[]> {\n await this.started('throw')\n const pairs = await pricesFromUniswapV4(this.pools, this.provider)\n const timestamp = Date.now()\n const payload: UniswapCryptoMarketPayload = {\n pairs, schema: UniswapCryptoMarketSchema, timestamp,\n }\n return [payload]\n }\n\n protected override async startHandler() {\n await super.startHandler()\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA,SAAS,eAAAA,oBAAmB;;;ACD5B,SAAS,2BAA2B;AACpC,SAAS,eAAAC,oBAAmB;;;ACD5B,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;;;ACmBnB,IAAM,aAAa,CAAC,QAAe,WAAkC;AAC1E,SAAO,OAAO,YAAY,MAAM,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,QAAQ,MAAM;AACxE;;;ADPO,IAAM,YAAY,CAAC,QAAe,QAAe,KAAa,aAAqB,UAA0B;AAClH,QAAM,CAAC,WAAW,SAAS,IAAI,WAAW,QAAQ,MAAM;AACxD,QAAM,gBAAgB,UAAU,WAAW,cAAc,UAAU,QAAQ;AAC3E,QAAM,gBAAgB,UAAU,WAAW,cAAc,UAAU,QAAQ;AAC3E,SAAO;AAAA,IACL,SAAS,gBAAgB,EAAE;AAAA,MACzB,CAAC,WAAW,WAAW,UAAU,SAAS,SAAS;AAAA,MACnD,CAAC,eAAe,eAAe,KAAK,aAAa,KAAK;AAAA,IACxD;AAAA,EACF;AACF;;;AEpBO,IAAM,sBAAsB,CAAC,cAAsB,WAAmB,cAA8B;AACzG,QAAM,MAAM,MAAM;AAGlB,QAAM,YAAY,eAAe,eAAe,OAAO;AACvD,QAAM,cAAc,MAAM;AAE1B,MAAI,QAAQ,YAAY;AAGxB,QAAM,oBAAoB,YAAY;AACtC,MAAI,oBAAoB,GAAG;AACzB,aAAS,OAAO,OAAO,iBAAiB;AAAA,EAC1C,WAAW,oBAAoB,GAAG;AAChC,aAAS,OAAO,OAAO,CAAC,iBAAiB;AAAA,EAC3C;AAEA,SAAO,OAAO,KAAK,IAAI;AACzB;;;ACxBO,IAAM,6BAA6B;AAAA,EACxC,UAAU;AAAA,IACR,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,iBAAiB;AAAA,EACnB;AACF;;;AJSO,IAAM,kBAAkB,OAC7B,QACA,QACA,KACA,aACA,aACoB;AACpB,QAAM,QAAQ,eAAeC;AAC7B,QAAM,YAAY,oBAAoB,QAAQ,2BAA2B,SAAS,WAAW,QAAQ;AACrG,QAAM,CAAC,QAAQ,MAAM,IAAI,WAAW,QAAQ,MAAM;AAClD,QAAM,SAAiB,UAAU,QAAQ,QAAQ,KAAK,IAAI,KAAK;AAC/D,MAAI,WAAWA,aAAa,OAAM,IAAI,MAAM,gBAAgB;AAC5D,QAAM,WAAW,MAAM,UAAU,SAAS,MAAM;AAChD,QAAM,QAAQ,oBAAoB,SAAS,cAAc,OAAO,UAAU,OAAO,QAAQ;AACzF,SAAO;AACT;;;AKlCA,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAIpB,IAAM,4BAA4B,CAAC,UAAkC;AAC1E,QAAM;AAAA,IACJ;AAAA,IAAS;AAAA,IAAS;AAAA,IAAU;AAAA,IAAQ;AAAA,EACtC,IAAI;AACJ,QAAM,oBAAoB,WAAW,QAAQ,YAAY,CAAC;AAC1D,SAAO,IAAI,MAAM,SAAS,mBAAmB,UAAU,QAAQ,IAAI;AACrE;;;ANHO,IAAM,qBAAqB,OAAO,QAA0B,aAAmD;AACpH,QAAM;AAAA,IACJ;AAAA,IAAQ;AAAA,IAAK,cAAcC;AAAA,EAC7B,IAAI;AACJ,QAAM,SAAS,0BAA0B,OAAO,CAAC,CAAC;AAClD,QAAM,SAAS,0BAA0B,OAAO,CAAC,CAAC;AAClD,QAAM,OAAO,MAAM,gBAAgB,QAAQ,QAAQ,KAAK,aAAa,QAAQ;AAC7E,QAAM,SAA6B;AAAA,IACjC,SAAS,OAAO;AAAA,IAChB,QAAQ,OAAO,UAAU;AAAA,IACzB,OAAO,KAAK,IAAI,MAAM,CAAC;AAAA,EACzB;AACA,QAAM,SAA6B;AAAA,IACjC,SAAS,OAAO;AAAA,IAChB,QAAQ,OAAO,UAAU;AAAA,IACzB,OAAO,OAAO,IAAI,QAAQ,IAAI,MAAM,YAAY,CAAC,CAAC,IAAI;AAAA,EACxD;AACA,QAAM,OAA0B,EAAE,QAAQ,CAAC,QAAQ,MAAM,EAAE;AAC3D,SAAO;AACT;;;AOrBO,IAAM,sBAAsB,OAAO,QAA4B,aAAqD;AACzH,SAAO,MAAM,QAAQ,IAAI,OAAO,IAAI,UAAQ,mBAAmB,MAAM,QAAQ,CAAC,CAAC;AACjF;;;ACRA,SAAS,eAAAC,oBAAmB;AAIrB,IAAM,gBAAiD;AAAA,EAC5D,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,wBAA0D;AAAA,EACrE,YAAY;AAAA,IACV,KAAK;AAAA,IACL,aAAaA;AAAA,IACb,aAAa;AAAA,IACb,QAAQ,CAAC,cAAc,KAAK,cAAc,IAAI;AAAA,EAChD;AACF;;;AC1BA,SAAS,wBAAwB;AACjC,SAAS,qCAAqC;AAC9C,SAAS,6BAAAC,kCAAiC;;;ACF1C,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAChC,SAA+B,uBAAuB;AAGtD,SAAS,2BAA2B,gDAAgD;AAe7E,IAAM,+BAAN,cAEG,gBAAyB;AAAA,EAIjC,IAAc,QAA4B;AACxC,WAAO,KAAK,QAAQ,YAAY,OAAO,OAAO,qBAAqB;AAAA,EACrE;AAAA,EAEA,IAAc,WAAW;AACvB,WAAO,SAAS,KAAK,OAAO,UAAU,MAAM,mBAAmB;AAAA,EACjE;AAAA,EAEA,MAAyB,iBAAqC;AAC5D,UAAM,KAAK,QAAQ,OAAO;AAC1B,UAAM,QAAQ,MAAM,oBAAoB,KAAK,OAAO,KAAK,QAAQ;AACjE,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,UAAsC;AAAA,MAC1C;AAAA,MAAO,QAAQ;AAAA,MAA2B;AAAA,IAC5C;AACA,WAAO,CAAC,OAAO;AAAA,EACjB;AAAA,EAEA,MAAyB,eAAe;AACtC,UAAM,MAAM,aAAa;AAAA,EAC3B;AACF;AAxBE,cAHW,8BAGc,iBAA0B,CAAC,GAAG,uEAAM,kBAAe,wCAAwC;AACpH,cAJW,8BAIc,uBAA8B;AAJ5C,+BAAN;AAAA,EADN,gBAAgB;AAAA,GACJ;;;ADdN,IAAM,8BAA8B,MACzC;AAAA,EACE,EAAE,UAAU,EAAE,CAACC,0BAAyB,GAAG,EAAE,GAAG,QAAQ,iBAAiB;AAAA,EACzE;AAAA,IACE,SAAS,OAAO,WAAW;AACzB,YAAM,SAAS,MAAM,6BAA6B,OAAO,MAAM;AAC/D,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["ZeroAddress","ZeroAddress","ZeroAddress","ZeroAddress","ZeroAddress","UniswapCryptoMarketSchema","UniswapCryptoMarketSchema"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priceFromUniswapV4.spec.d.ts","sourceRoot":"","sources":["../../../../src/lib/spec/priceFromUniswapV4.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Plugin.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Plugin.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Witness.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/Witness.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/uniswap-v4-crypto-market-plugin",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "Typescript/Javascript Plugins for XYO Platform",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -21,34 +21,34 @@
|
|
|
21
21
|
"type": "module",
|
|
22
22
|
"exports": {
|
|
23
23
|
".": {
|
|
24
|
-
"types": "./dist/
|
|
24
|
+
"types": "./dist/neutral/index.d.ts",
|
|
25
25
|
"default": "./dist/neutral/index.mjs"
|
|
26
26
|
},
|
|
27
27
|
"./package.json": "./package.json"
|
|
28
28
|
},
|
|
29
29
|
"module": "dist/neutral/index.mjs",
|
|
30
|
-
"types": "dist/
|
|
30
|
+
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@uniswap/sdk-core": "^7.7.2",
|
|
33
|
-
"@xylabs/assert": "^4.
|
|
34
|
-
"@xyo-network/abstract-witness": "^
|
|
35
|
-
"@xyo-network/module-model": "^
|
|
36
|
-
"@xyo-network/payload-model": "^
|
|
37
|
-
"@xyo-network/payloadset-plugin": "^
|
|
38
|
-
"@xyo-network/uniswap-crypto-market-payload-plugin": "^
|
|
39
|
-
"@xyo-network/uniswap-typechain": "^3.5.
|
|
40
|
-
"@xyo-network/witness-model": "^
|
|
41
|
-
"ethers": "^6.
|
|
33
|
+
"@xylabs/assert": "^4.13.15",
|
|
34
|
+
"@xyo-network/abstract-witness": "^4.1.1",
|
|
35
|
+
"@xyo-network/module-model": "^4.1.1",
|
|
36
|
+
"@xyo-network/payload-model": "^4.1.1",
|
|
37
|
+
"@xyo-network/payloadset-plugin": "^4.1.1",
|
|
38
|
+
"@xyo-network/uniswap-crypto-market-payload-plugin": "^4.1.0",
|
|
39
|
+
"@xyo-network/uniswap-typechain": "^3.5.4",
|
|
40
|
+
"@xyo-network/witness-model": "^4.1.1",
|
|
41
|
+
"ethers": "^6.15.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@xylabs/ts-scripts-yarn3": "^
|
|
45
|
-
"@xylabs/tsconfig": "^
|
|
46
|
-
"@xylabs/vitest-extended": "^4.
|
|
47
|
-
"@xyo-network/payload-wrapper": "^
|
|
48
|
-
"@xyo-network/witness-blockchain-abstract": "^
|
|
49
|
-
"knip": "^5.
|
|
44
|
+
"@xylabs/ts-scripts-yarn3": "^7.0.0-rc.24",
|
|
45
|
+
"@xylabs/tsconfig": "^7.0.0-rc.24",
|
|
46
|
+
"@xylabs/vitest-extended": "^4.13.15",
|
|
47
|
+
"@xyo-network/payload-wrapper": "^4.1.1",
|
|
48
|
+
"@xyo-network/witness-blockchain-abstract": "^4.1.1",
|
|
49
|
+
"knip": "^5.61.3",
|
|
50
50
|
"typescript": "^5.8.3",
|
|
51
|
-
"vitest": "^3.
|
|
51
|
+
"vitest": "^3.2.4"
|
|
52
52
|
},
|
|
53
53
|
"publishConfig": {
|
|
54
54
|
"access": "public"
|
package/src/Witness.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import { AbstractWitness } from '@xyo-network/abstract-witness'
|
|
3
|
-
import type
|
|
3
|
+
import { type AnyConfigSchema, creatableModule } from '@xyo-network/module-model'
|
|
4
4
|
import type { Payload, Schema } from '@xyo-network/payload-model'
|
|
5
5
|
import type { UniswapCryptoMarketPayload } from '@xyo-network/uniswap-crypto-market-payload-plugin'
|
|
6
6
|
import { UniswapCryptoMarketSchema, UniswapV4CryptoMarketWitnessConfigSchema } from '@xyo-network/uniswap-crypto-market-payload-plugin'
|
|
@@ -11,13 +11,13 @@ import type { UniswapV4CryptoMarketWitnessConfig } from './Config.ts'
|
|
|
11
11
|
import { pricesFromUniswapV4, UniswapV4DefaultPools } from './lib/index.ts'
|
|
12
12
|
import type { TokenPairPoolKey } from './types/index.ts'
|
|
13
13
|
|
|
14
|
-
export
|
|
15
|
-
AnyConfigSchema<UniswapV4CryptoMarketWitnessConfig
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
>
|
|
14
|
+
export interface UniswapV4CryptoMarketWitnessParams extends WitnessParams<
|
|
15
|
+
AnyConfigSchema<UniswapV4CryptoMarketWitnessConfig>>
|
|
16
|
+
{
|
|
17
|
+
provider?: Provider
|
|
18
|
+
}
|
|
20
19
|
|
|
20
|
+
@creatableModule()
|
|
21
21
|
export class UniswapV4CryptoMarketWitness<
|
|
22
22
|
TParams extends UniswapV4CryptoMarketWitnessParams = UniswapV4CryptoMarketWitnessParams,
|
|
23
23
|
> extends AbstractWitness<TParams> {
|
|
@@ -44,6 +44,5 @@ export class UniswapV4CryptoMarketWitness<
|
|
|
44
44
|
|
|
45
45
|
protected override async startHandler() {
|
|
46
46
|
await super.startHandler()
|
|
47
|
-
return true
|
|
48
47
|
}
|
|
49
48
|
}
|
package/dist/types/Plugin.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { UniswapV4CryptoMarketWitness } from './Witness.ts';
|
|
2
|
-
export declare const UniswapV4CryptoMarketPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<UniswapV4CryptoMarketWitness<import(".store/@xylabs-base-npm-4.11.2-29ff43002f/package").BaseParamsFields & {
|
|
3
|
-
account?: import(".store/@xyo-network-account-model-npm-3.17.1-d1c40ed920/package").AccountInstance | "random";
|
|
4
|
-
addToResolvers?: boolean;
|
|
5
|
-
additionalSigners?: import(".store/@xyo-network-account-model-npm-3.17.1-d1c40ed920/package").AccountInstance[];
|
|
6
|
-
allowNameResolution?: boolean;
|
|
7
|
-
config: import("@xyo-network/module-model").AnyConfigSchema<import("./Config.ts").UniswapV4CryptoMarketWitnessConfig>;
|
|
8
|
-
ephemeralQueryAccountEnabled?: boolean;
|
|
9
|
-
moduleIdentifierTransformers?: import("@xyo-network/module-model").ModuleIdentifierTransformer[];
|
|
10
|
-
} & import("@xyo-network/module-model").ModuleChildrenParams & {
|
|
11
|
-
provider?: import("ethers").Provider;
|
|
12
|
-
}>>;
|
|
13
|
-
//# sourceMappingURL=Plugin.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEtC,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,aAAa,CAAA;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,MAAM,kCAAkC,GAAG,aAAa,CAC5D,eAAe,CAAC,kCAAkC,CAAC,EACnD;IACE,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB,CACF,CAAA;AAED,qBAAa,4BAA4B,CACvC,OAAO,SAAS,kCAAkC,GAAG,kCAAkC,CACvF,SAAQ,eAAe,CAAC,OAAO,CAAC;IAChC,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAqE;IACrH,gBAAyB,mBAAmB,EAAE,MAAM,CAA2C;IAE/F,SAAS,KAAK,KAAK,IAAI,gBAAgB,EAAE,CAExC;IAED,SAAS,KAAK,QAAQ,aAErB;cAEwB,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;cAUpC,YAAY;CAItC"}
|
package/dist/types/index.d.ts
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|