@xyo-network/uniswap-v4-crypto-market-plugin 5.1.4 → 5.1.5

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.
@@ -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 XL1: {\n address: '0xf72ae3e0da743033abd7a407557d684c1ae66aed',\n chainId: 1,\n decimals: 18,\n symbol: 'XL1',\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 'XL1:USDT': {\n fee: 3000,\n hookAddress: ZeroAddress,\n tickSpacing: 60,\n tokens: [TokenRegistry.XL1, 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":"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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'\n// eslint-disable-next-line import-x/no-internal-modules\nimport { ZeroAddress } from 'ethers/constants'\n// eslint-disable-next-line import-x/no-internal-modules\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'\n// eslint-disable-next-line import-x/no-internal-modules\nimport { AbiCoder } from 'ethers/abi'\n// eslint-disable-next-line import-x/no-internal-modules\nimport { ZeroAddress } from 'ethers/constants'\n// eslint-disable-next-line import-x/no-internal-modules\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'\n// eslint-disable-next-line import-x/no-internal-modules\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 XL1: {\n address: '0xf72ae3e0da743033abd7a407557d684c1ae66aed',\n chainId: 1,\n decimals: 18,\n symbol: 'XL1',\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 'XL1:USDT': {\n fee: 3000,\n hookAddress: ZeroAddress,\n tickSpacing: 60,\n tokens: [TokenRegistry.XL1, 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":"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","names":["ZeroAddress","ZeroAddress","ZeroAddress","ZeroAddress","ZeroAddress","UniswapCryptoMarketSchema","UniswapCryptoMarketSchema"]}
@@ -1,8 +1,8 @@
1
1
  export interface UniswapV4TokenIdentifier {
2
- chainId: number;
3
2
  address: string;
3
+ chainId: number;
4
4
  decimals: number;
5
- symbol?: string;
6
5
  name?: string;
6
+ symbol?: string;
7
7
  }
8
8
  //# sourceMappingURL=UniswapV4TokenIdentifier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UniswapV4TokenIdentifier.d.ts","sourceRoot":"","sources":["../../../src/lib/UniswapV4TokenIdentifier.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd"}
1
+ {"version":3,"file":"UniswapV4TokenIdentifier.d.ts","sourceRoot":"","sources":["../../../src/lib/UniswapV4TokenIdentifier.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"getExchangeRate.d.ts","sourceRoot":"","sources":["../../../src/lib/getExchangeRate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAOhD;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,KAAK,EACb,QAAQ,KAAK,EACb,KAAK,MAAM,EACX,aAAa,MAAM,GAAG,SAAS,EAC/B,UAAU,QAAQ,KACjB,OAAO,CAAC,MAAM,CAShB,CAAA"}
1
+ {"version":3,"file":"getExchangeRate.d.ts","sourceRoot":"","sources":["../../../src/lib/getExchangeRate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAK9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAOhD;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,KAAK,EACb,QAAQ,KAAK,EACb,KAAK,MAAM,EACX,aAAa,MAAM,GAAG,SAAS,EAC/B,UAAU,QAAQ,KACjB,OAAO,CAAC,MAAM,CAShB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getPoolId.d.ts","sourceRoot":"","sources":["../../../src/lib/getPoolId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAO9C;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,KAAK,EAAE,QAAQ,KAAK,EAAE,KAAK,MAAM,EAAE,aAAa,MAAM,EAAE,OAAO,MAAM,KAAG,MAUzG,CAAA"}
1
+ {"version":3,"file":"getPoolId.d.ts","sourceRoot":"","sources":["../../../src/lib/getPoolId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAU9C;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,KAAK,EAAE,QAAQ,KAAK,EAAE,KAAK,MAAM,EAAE,aAAa,MAAM,EAAE,OAAO,MAAM,KAAG,MAUzG,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"tokenRegistryValueToToken.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenRegistryValueToToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAGzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD,eAAO,MAAM,yBAAyB,GAAI,OAAO,eAAe,KAAG,KAMlE,CAAA"}
1
+ {"version":3,"file":"tokenRegistryValueToToken.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenRegistryValueToToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAIzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD,eAAO,MAAM,yBAAyB,GAAI,OAAO,eAAe,KAAG,KAMlE,CAAA"}
@@ -22,15 +22,15 @@ export type TokenParameters = {
22
22
  * This is required for correct price calculations and amount formatting.
23
23
  */
24
24
  decimals: number;
25
- /**
26
- * A short uppercase identifier for the token (e.g. 'USDT', 'WETH').
27
- * Used for display, logging, and lookup convenience.
28
- */
29
- symbol: string;
30
25
  /**
31
26
  * (Optional) The full human-readable name of the token (e.g. 'Tether USD').
32
27
  * Useful for UIs or token metadata enrichment.
33
28
  */
34
29
  name?: string;
30
+ /**
31
+ * A short uppercase identifier for the token (e.g. 'USDT', 'WETH').
32
+ * Used for display, logging, and lookup convenience.
33
+ */
34
+ symbol: string;
35
35
  };
36
36
  //# sourceMappingURL=TokenParameters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TokenParameters.d.ts","sourceRoot":"","sources":["../../../src/types/TokenParameters.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA"}
1
+ {"version":3,"file":"TokenParameters.d.ts","sourceRoot":"","sources":["../../../src/types/TokenParameters.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAA;CACf,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/uniswap-v4-crypto-market-plugin",
3
- "version": "5.1.4",
3
+ "version": "5.1.5",
4
4
  "description": "Typescript/Javascript Plugins for XYO Platform",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -36,13 +36,13 @@
36
36
  "!**/*.test.*"
37
37
  ],
38
38
  "dependencies": {
39
- "@uniswap/sdk-core": "~7.7.3",
40
- "@xylabs/assert": "~5.0.33",
39
+ "@uniswap/sdk-core": "~7.9.0",
40
+ "@xylabs/assert": "~5.0.37",
41
41
  "@xyo-network/abstract-witness": "~5.1.23",
42
42
  "@xyo-network/module-model": "~5.1.23",
43
43
  "@xyo-network/payload-model": "~5.1.23",
44
44
  "@xyo-network/payloadset-plugin": "~5.1.23",
45
- "@xyo-network/uniswap-crypto-market-payload-plugin": "~5.1.4",
45
+ "@xyo-network/uniswap-crypto-market-payload-plugin": "~5.1.5",
46
46
  "@xyo-network/uniswap-typechain": "~4.0.10",
47
47
  "@xyo-network/witness-model": "~5.1.23",
48
48
  "ethers": "~6.15.0"
@@ -50,11 +50,11 @@
50
50
  "devDependencies": {
51
51
  "@xylabs/ts-scripts-yarn3": "~7.2.8",
52
52
  "@xylabs/tsconfig": "~7.2.8",
53
- "@xylabs/vitest-extended": "~5.0.33",
53
+ "@xylabs/vitest-extended": "~5.0.37",
54
54
  "@xyo-network/payload-wrapper": "~5.1.23",
55
55
  "@xyo-network/witness-blockchain-abstract": "~5.1.23",
56
- "typescript": "~5.9.2",
57
- "vitest": "~3.2.4"
56
+ "typescript": "~5.9.3",
57
+ "vitest": "~4.0.10"
58
58
  },
59
59
  "publishConfig": {
60
60
  "access": "public"
@@ -1,7 +1,7 @@
1
1
  export interface UniswapV4TokenIdentifier {
2
- chainId: number
3
2
  address: string
3
+ chainId: number
4
4
  decimals: number
5
- symbol?: string
6
5
  name?: string
6
+ symbol?: string
7
7
  }
@@ -1,6 +1,8 @@
1
1
  import type { Token } from '@uniswap/sdk-core'
2
2
  import { IStateView__factory } from '@xyo-network/uniswap-typechain/v4-periphery'
3
+ // eslint-disable-next-line import-x/no-internal-modules
3
4
  import { ZeroAddress } from 'ethers/constants'
5
+ // eslint-disable-next-line import-x/no-internal-modules
4
6
  import type { Provider } from 'ethers/providers'
5
7
 
6
8
  import { getPoolId } from './getPoolId.ts'
@@ -1,6 +1,9 @@
1
1
  import type { Token } from '@uniswap/sdk-core'
2
+ // eslint-disable-next-line import-x/no-internal-modules
2
3
  import { AbiCoder } from 'ethers/abi'
4
+ // eslint-disable-next-line import-x/no-internal-modules
3
5
  import { ZeroAddress } from 'ethers/constants'
6
+ // eslint-disable-next-line import-x/no-internal-modules
4
7
  import { keccak256 } from 'ethers/crypto'
5
8
 
6
9
  import { sortTokens } from './sortTokens.ts'
@@ -1,4 +1,5 @@
1
1
  import { Token } from '@uniswap/sdk-core'
2
+ // eslint-disable-next-line import-x/no-internal-modules
2
3
  import { getAddress } from 'ethers/address'
3
4
 
4
5
  import type { TokenParameters } from '../types/index.ts'
@@ -1,6 +1,6 @@
1
1
  import type { TokenParameters } from './TokenParameters.ts'
2
2
 
3
- // NOTE: We could import this type from @uniswap/v4-core, but
3
+ // TODO: We could import this type from @uniswap/v4-core, but
4
4
  // they are currently hardcoded the ethers v5 which
5
5
  // causes many issues since we are using ethers v6. Moreover,
6
6
  // we would have to hit the ERC20 contract to get the decimals
@@ -25,15 +25,15 @@ export type TokenParameters = {
25
25
  */
26
26
  decimals: number
27
27
 
28
- /**
29
- * A short uppercase identifier for the token (e.g. 'USDT', 'WETH').
30
- * Used for display, logging, and lookup convenience.
31
- */
32
- symbol: string
33
-
34
28
  /**
35
29
  * (Optional) The full human-readable name of the token (e.g. 'Tether USD').
36
30
  * Useful for UIs or token metadata enrichment.
37
31
  */
38
32
  name?: string
33
+
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
39
  }