@sun-protocol/sun-sdk-sunswap-v4 0.1.0-beta.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/address.ts","../src/actions.ts","../src/planner.ts","../src/pool-key.ts","../src/parameters.ts","../src/pool-id.ts","../src/reads.ts"],"sourcesContent":["import { sha256 } from '@noble/hashes/sha256'\nimport { SDK_ERROR_CODES, sdkInvariant, type TronAddress } from '@sun-protocol/sun-sdk-core'\n\nconst BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\nconst TRON_ADDRESS_BYTES = 21\nconst TRON_ADDRESS_PAYLOAD_BYTES = 25\n\nfunction decodeBase58(value: string): Uint8Array {\n let decoded = 0n\n\n for (const char of value) {\n const index = BASE58_ALPHABET.indexOf(char)\n sdkInvariant(index >= 0, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'Invalid base58 character', { value, char })\n decoded = decoded * 58n + BigInt(index)\n }\n\n const bytes: number[] = []\n while (decoded > 0n) {\n bytes.unshift(Number(decoded & 0xffn))\n decoded >>= 8n\n }\n\n for (const char of value) {\n if (char !== '1') break\n bytes.unshift(0)\n }\n\n return Uint8Array.from(bytes)\n}\n\nexport function tronAddressToEvmHex(address: TronAddress | string): `0x${string}` {\n const decoded = decodeBase58(address)\n sdkInvariant(\n decoded.length === TRON_ADDRESS_PAYLOAD_BYTES,\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n 'TRON address payload must be 25 bytes',\n { address, length: decoded.length },\n )\n\n const body = decoded.slice(0, TRON_ADDRESS_BYTES)\n sdkInvariant(body[0] === 0x41, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'TRON address must use 0x41 prefix', {\n address,\n })\n\n const expectedChecksum = sha256(sha256(body)).slice(0, 4)\n const actualChecksum = decoded.slice(TRON_ADDRESS_BYTES)\n sdkInvariant(\n expectedChecksum.every((byte, index) => byte === actualChecksum[index]),\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n 'TRON address has invalid base58 checksum',\n { address },\n )\n\n return `0x${Array.from(body.slice(1))\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('')}`\n}\n","import { getContractAddress } from '@sun-protocol/sun-sdk-chains'\nimport { keccak256 } from '@ethersproject/keccak256'\nimport {\n SDK_ERROR_CODES,\n TRON_ZERO_ADDRESS,\n createContractCallAction,\n sdkInvariant,\n type BigintIsh,\n type ContractCallAction,\n type Network,\n type TokenRequirement,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport {\n encodeV4DecreaseLiquidityPlannerPayload,\n encodeV4IncreaseLiquidityPlannerPayload,\n encodeV4MintPositionPlannerPayload,\n type V4BigintIsh,\n type V4PositionConfig,\n} from './planner.js'\nimport { tronAddressToEvmHex } from './address.js'\nimport { normalizeV4PoolKey, toV4PoolKeyTuple } from './pool-key.js'\nimport type { V4PoolKey } from './types.js'\n\nexport const V4_POSITION_MANAGER_SELECTORS = {\n initializePool: 'initializePool((address,address,address,uint24,bytes32),uint160)',\n modifyLiquidities: 'modifyLiquidities(bytes,uint256)',\n multicall: 'multicall(bytes[])',\n} as const\n\nexport interface V4ActionOptions {\n readonly network: Network\n readonly positionManager?: TronAddress\n readonly feeLimit?: number\n readonly callValue?: bigint\n readonly id?: string\n readonly metadata?: Record<string, unknown>\n readonly tokenRequirements?: readonly TokenRequirement[]\n}\n\nexport interface BuildV4InitializePoolActionParams extends V4ActionOptions {\n readonly poolKey: V4PoolKey\n readonly sqrtPriceX96: BigintIsh\n}\n\nexport interface BuildV4ModifyLiquiditiesActionParams extends V4ActionOptions {\n readonly payload: string\n readonly deadline: V4BigintIsh\n}\n\nexport interface BuildV4MulticallActionParams extends V4ActionOptions {\n readonly calls: readonly string[]\n}\n\n/** A signed Permit2 allowance to be forwarded by the V4 PositionManager multicall. */\nexport interface V4Permit2Signature {\n readonly details: {\n readonly token: TronAddress | string\n readonly amount: BigintIsh\n readonly expiration: BigintIsh\n readonly nonce: BigintIsh\n }\n readonly spender: TronAddress | string\n readonly sigDeadline: BigintIsh\n readonly signature: string\n}\n\nexport interface BuildV4MintPositionActionParams extends V4ActionOptions {\n readonly positionConfig: V4PositionConfig\n readonly liquidity: V4BigintIsh\n readonly amount0Max: V4BigintIsh\n readonly amount1Max: V4BigintIsh\n readonly owner: TronAddress\n readonly deadline: V4BigintIsh\n readonly sweepRecipient?: TronAddress\n readonly hookData?: string\n}\n\nexport interface BuildV4IncreaseLiquidityActionParams extends V4ActionOptions {\n readonly poolKey: V4PoolKey\n readonly tokenId: V4BigintIsh\n readonly liquidity: V4BigintIsh\n readonly amount0Max: V4BigintIsh\n readonly amount1Max: V4BigintIsh\n readonly deadline: V4BigintIsh\n readonly sweepRecipient?: TronAddress\n readonly hookData?: string\n}\n\nexport interface BuildV4DecreaseLiquidityActionParams extends V4ActionOptions {\n readonly poolKey: V4PoolKey\n readonly tokenId: V4BigintIsh\n readonly liquidity: V4BigintIsh\n readonly amount0Min: V4BigintIsh\n readonly amount1Min: V4BigintIsh\n readonly recipient: TronAddress\n readonly deadline: V4BigintIsh\n readonly hookData?: string\n readonly settlementMode?: 'take-pair' | 'close-currency'\n}\n\nexport interface BuildV4CollectActionParams extends V4ActionOptions {\n readonly poolKey: V4PoolKey\n readonly tokenId: V4BigintIsh\n readonly recipient: TronAddress\n readonly deadline: V4BigintIsh\n readonly hookData?: string\n readonly settlementMode?: 'take-pair' | 'close-currency'\n}\n\nexport type V4TokenRequirement = TokenRequirement\n\nconst HEX_BYTES_PATTERN = /^0x(?:[a-fA-F0-9]{2})*$/\n\nfunction calldataWord(value: bigint): string {\n sdkInvariant(value >= 0n && value < (1n << 256n), SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'calldata word is out of range', {\n value: value.toString(),\n })\n return value.toString(16).padStart(64, '0')\n}\n\nfunction calldataAddress(value: unknown): string {\n const address = String(value)\n const hex = address.startsWith('0x')\n ? assertHexBytes(address, 'address').slice(2)\n : tronAddressToEvmHex(address).slice(2)\n sdkInvariant(hex.length === 40, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'address must be a 20-byte address', {\n value: address,\n })\n return hex.toLowerCase().padStart(64, '0')\n}\n\nfunction calldataBytes32(value: unknown): string {\n const normalized = assertHexBytes(String(value), 'bytes32').slice(2)\n sdkInvariant(normalized.length === 64, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'bytes32 must contain exactly 32 bytes')\n return normalized\n}\n\nfunction functionSelector(signature: string): string {\n return keccak256(new TextEncoder().encode(signature)).slice(2, 10)\n}\n\nfunction dynamicBytes(value: unknown): string {\n const bytes = assertHexBytes(String(value), 'bytes').slice(2)\n const padding = (64 - (bytes.length % 64)) % 64\n return `${calldataWord(BigInt(bytes.length / 2))}${bytes}${'0'.repeat(padding)}`\n}\n\nfunction calldataUint(value: BigintIsh, bits: number, label: string): string {\n const integer = BigInt(value.toString())\n const maximum = 1n << BigInt(bits)\n sdkInvariant(integer >= 0n && integer < maximum, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} is out of uint${bits} range`, {\n value: integer.toString(),\n })\n return calldataWord(integer)\n}\n\n/**\n * Encodes the PositionManager's Permit2Forward.permit call for use as one item\n * in PositionManager.multicall(bytes[]). This matches the legacy V4 add flow:\n * typed-data signing happens off-chain, then the signed permit is forwarded in\n * the final liquidity transaction.\n */\nexport function encodeV4Permit2ForwardCall(input: {\n readonly owner: TronAddress | string\n readonly permit: V4Permit2Signature\n}): `0x${string}` {\n const signature = input.permit.signature.startsWith('0x') ? input.permit.signature : `0x${input.permit.signature}`\n const selector = functionSelector('permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)')\n const signatureOffset = calldataWord(256n)\n return `0x${selector}${calldataAddress(input.owner)}${calldataAddress(input.permit.details.token)}${calldataUint(input.permit.details.amount, 160, 'permit amount')}${calldataUint(input.permit.details.expiration, 48, 'permit expiration')}${calldataUint(input.permit.details.nonce, 48, 'permit nonce')}${calldataAddress(input.permit.spender)}${calldataUint(input.permit.sigDeadline, 256, 'permit sigDeadline')}${signatureOffset}${dynamicBytes(signature)}`\n}\n\n/** Encodes the two V4 position-manager actions that may be nested in multicall(bytes[]). */\nexport function encodeV4ContractCallAction(action: ContractCallAction): `0x${string}` {\n if (action.functionSelector === V4_POSITION_MANAGER_SELECTORS.initializePool) {\n const poolKey = action.parameters?.[0]?.value\n const sqrtPriceX96 = action.parameters?.[1]?.value\n sdkInvariant(\n typeof poolKey === 'object' && poolKey !== null && sqrtPriceX96 !== undefined,\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n 'initializePool action parameters are malformed',\n )\n const key = poolKey as Record<string, unknown>\n return `0x${functionSelector(action.functionSelector)}${calldataAddress(key.currency0)}${calldataAddress(key.currency1)}${calldataAddress(key.hooks)}${calldataWord(BigInt(String(key.fee)))}${calldataBytes32(key.parameters)}${calldataWord(BigInt(String(sqrtPriceX96)))}`\n }\n\n if (action.functionSelector === V4_POSITION_MANAGER_SELECTORS.modifyLiquidities) {\n const payload = action.parameters?.[0]?.value\n const deadline = action.parameters?.[1]?.value\n sdkInvariant(payload !== undefined && deadline !== undefined, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'modifyLiquidities action parameters are malformed')\n return `0x${functionSelector(action.functionSelector)}${calldataWord(64n)}${calldataWord(BigInt(String(deadline)))}${dynamicBytes(payload)}`\n }\n\n sdkInvariant(false, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'V4 action cannot be encoded for multicall', {\n functionSelector: action.functionSelector,\n })\n throw new Error('Unsupported V4 multicall action')\n}\n\nfunction valueOf(value: BigintIsh | bigint): string {\n return BigInt(value.toString()).toString()\n}\n\nfunction positionManagerTarget(params: V4ActionOptions): TronAddress {\n return params.positionManager ?? getContractAddress(params.network, 'sunswapV4PositionManager')\n}\n\nfunction actionId(params: V4ActionOptions, suffix: string): string {\n return params.id ?? `sunswap-v4-${suffix}-${params.network}`\n}\n\nfunction assertHexBytes(value: string, label: string): string {\n sdkInvariant(HEX_BYTES_PATTERN.test(value), SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} must be 0x-prefixed hex bytes`, {\n label,\n value,\n })\n return value.toLowerCase()\n}\n\nfunction nativeCallValue(poolKey: V4PoolKey, amount0: V4BigintIsh, amount1: V4BigintIsh): bigint {\n let value = 0n\n if (poolKey.currency0 === TRON_ZERO_ADDRESS) value += BigInt(amount0.toString())\n if (poolKey.currency1 === TRON_ZERO_ADDRESS) value += BigInt(amount1.toString())\n return value\n}\n\nfunction tokenRequirements(\n poolKey: V4PoolKey,\n amount0: V4BigintIsh,\n amount1: V4BigintIsh,\n spender: TronAddress,\n): readonly V4TokenRequirement[] {\n const requirements: V4TokenRequirement[] = []\n const normalizedAmount0 = valueOf(amount0)\n const normalizedAmount1 = valueOf(amount1)\n if (poolKey.currency0 !== TRON_ZERO_ADDRESS && BigInt(normalizedAmount0) > 0n) {\n requirements.push({\n token: poolKey.currency0,\n amount: normalizedAmount0,\n spender,\n approval: 'approve-or-permit2',\n })\n }\n if (poolKey.currency1 !== TRON_ZERO_ADDRESS && BigInt(normalizedAmount1) > 0n) {\n requirements.push({\n token: poolKey.currency1,\n amount: normalizedAmount1,\n spender,\n approval: 'approve-or-permit2',\n })\n }\n return requirements\n}\n\nexport function buildV4InitializePoolAction(params: BuildV4InitializePoolActionParams): ContractCallAction {\n const poolKey = normalizeV4PoolKey(params.poolKey)\n\n return createContractCallAction({\n id: actionId(params, 'initialize-pool'),\n target: positionManagerTarget(params),\n functionSelector: V4_POSITION_MANAGER_SELECTORS.initializePool,\n parameters: [toV4PoolKeyTuple(poolKey), { type: 'uint160', value: valueOf(params.sqrtPriceX96) }],\n ...(params.callValue !== undefined ? { callValue: params.callValue } : {}),\n ...(params.feeLimit !== undefined ? { feeLimit: params.feeLimit } : {}),\n ...(params.metadata !== undefined ? { metadata: params.metadata } : {}),\n })\n}\n\nexport function buildV4ModifyLiquiditiesAction(params: BuildV4ModifyLiquiditiesActionParams): ContractCallAction {\n return createContractCallAction({\n id: actionId(params, 'modify-liquidities'),\n target: positionManagerTarget(params),\n functionSelector: V4_POSITION_MANAGER_SELECTORS.modifyLiquidities,\n parameters: [\n { type: 'bytes', value: assertHexBytes(params.payload, 'payload') },\n { type: 'uint256', value: valueOf(params.deadline) },\n ],\n ...(params.callValue !== undefined ? { callValue: params.callValue } : {}),\n ...(params.feeLimit !== undefined ? { feeLimit: params.feeLimit } : {}),\n ...(params.tokenRequirements !== undefined ? { tokenRequirements: params.tokenRequirements } : {}),\n ...(params.metadata !== undefined ? { metadata: params.metadata } : {}),\n })\n}\n\nexport function buildV4MulticallAction(params: BuildV4MulticallActionParams): ContractCallAction {\n return createContractCallAction({\n id: actionId(params, 'multicall'),\n target: positionManagerTarget(params),\n functionSelector: V4_POSITION_MANAGER_SELECTORS.multicall,\n parameters: [{ type: 'bytes[]', value: params.calls.map((call, index) => assertHexBytes(call, `calls[${index}]`)) }],\n ...(params.callValue !== undefined ? { callValue: params.callValue } : {}),\n ...(params.feeLimit !== undefined ? { feeLimit: params.feeLimit } : {}),\n ...(params.tokenRequirements !== undefined ? { tokenRequirements: params.tokenRequirements } : {}),\n ...(params.metadata !== undefined ? { metadata: params.metadata } : {}),\n })\n}\n\nexport function buildV4MintPositionAction(params: BuildV4MintPositionActionParams): ContractCallAction {\n const poolKey = normalizeV4PoolKey(params.positionConfig.poolKey)\n const target = positionManagerTarget(params)\n const payload = encodeV4MintPositionPlannerPayload({\n positionConfig: { ...params.positionConfig, poolKey },\n liquidity: params.liquidity,\n amount0Max: params.amount0Max,\n amount1Max: params.amount1Max,\n owner: params.owner,\n ...(params.sweepRecipient !== undefined ? { sweepRecipient: params.sweepRecipient } : {}),\n ...(params.hookData !== undefined ? { hookData: params.hookData } : {}),\n })\n const computedCallValue = nativeCallValue(poolKey, params.amount0Max, params.amount1Max)\n\n return buildV4ModifyLiquiditiesAction({\n ...params,\n id: actionId(params, 'mint-position'),\n payload,\n deadline: params.deadline,\n callValue: params.callValue ?? computedCallValue,\n tokenRequirements: tokenRequirements(poolKey, params.amount0Max, params.amount1Max, target),\n })\n}\n\nexport function buildV4IncreaseLiquidityAction(params: BuildV4IncreaseLiquidityActionParams): ContractCallAction {\n const poolKey = normalizeV4PoolKey(params.poolKey)\n const target = positionManagerTarget(params)\n const payload = encodeV4IncreaseLiquidityPlannerPayload({\n poolKey,\n tokenId: params.tokenId,\n liquidity: params.liquidity,\n amount0Max: params.amount0Max,\n amount1Max: params.amount1Max,\n ...(params.sweepRecipient !== undefined ? { sweepRecipient: params.sweepRecipient } : {}),\n ...(params.hookData !== undefined ? { hookData: params.hookData } : {}),\n })\n const computedCallValue = nativeCallValue(poolKey, params.amount0Max, params.amount1Max)\n\n return buildV4ModifyLiquiditiesAction({\n ...params,\n id: actionId(params, 'increase-liquidity'),\n payload,\n deadline: params.deadline,\n callValue: params.callValue ?? computedCallValue,\n tokenRequirements: tokenRequirements(poolKey, params.amount0Max, params.amount1Max, target),\n })\n}\n\nexport function buildV4DecreaseLiquidityAction(params: BuildV4DecreaseLiquidityActionParams): ContractCallAction {\n const poolKey = normalizeV4PoolKey(params.poolKey)\n const payload = encodeV4DecreaseLiquidityPlannerPayload({\n poolKey,\n tokenId: params.tokenId,\n liquidity: params.liquidity,\n amount0Min: params.amount0Min,\n amount1Min: params.amount1Min,\n recipient: params.recipient,\n ...(params.settlementMode !== undefined ? { settlementMode: params.settlementMode } : {}),\n ...(params.hookData !== undefined ? { hookData: params.hookData } : {}),\n })\n\n return buildV4ModifyLiquiditiesAction({\n ...params,\n id: actionId(params, 'decrease-liquidity'),\n payload,\n deadline: params.deadline,\n callValue: params.callValue ?? 0n,\n })\n}\n\nexport function buildV4CollectAction(params: BuildV4CollectActionParams): ContractCallAction {\n const poolKey = normalizeV4PoolKey(params.poolKey)\n const payload = encodeV4DecreaseLiquidityPlannerPayload({\n poolKey,\n tokenId: params.tokenId,\n liquidity: 0n,\n amount0Min: 0n,\n amount1Min: 0n,\n recipient: params.recipient,\n ...(params.settlementMode !== undefined ? { settlementMode: params.settlementMode } : {}),\n ...(params.hookData !== undefined ? { hookData: params.hookData } : {}),\n })\n\n return buildV4ModifyLiquiditiesAction({\n ...params,\n id: actionId(params, 'collect'),\n payload,\n deadline: params.deadline,\n callValue: params.callValue ?? 0n,\n })\n}\n","import { SDK_ERROR_CODES, TRON_ZERO_ADDRESS, assertTronAddress, sdkInvariant, type BigintIsh, type TronAddress } from '@sun-protocol/sun-sdk-core'\nimport { tronAddressToEvmHex } from './address.js'\nimport { normalizeV4PoolKey } from './pool-key.js'\nimport type { V4PoolKey } from './types.js'\n\nexport const V4_ACTIONS = {\n CL_INCREASE_LIQUIDITY: 0x00,\n CL_DECREASE_LIQUIDITY: 0x01,\n CL_MINT_POSITION: 0x02,\n SETTLE: 0x0b,\n SETTLE_PAIR: 0x0d,\n TAKE_PAIR: 0x11,\n CLOSE_CURRENCY: 0x12,\n SWEEP: 0x14,\n} as const\n\nexport const V4_ACTION_CONSTANTS = {\n OPEN_DELTA: 0n,\n MSG_SENDER: '0x0000000000000000000000000000000000000001',\n ADDRESS_THIS: '0x0000000000000000000000000000000000000002',\n} as const\n\nexport type V4Action = (typeof V4_ACTIONS)[keyof typeof V4_ACTIONS]\nexport type V4BigintIsh = BigintIsh | bigint\n\nexport interface V4PositionConfig {\n readonly poolKey: V4PoolKey\n readonly tickLower: number\n readonly tickUpper: number\n}\n\nexport interface V4PlannerPlan {\n readonly action: V4Action\n readonly params: readonly V4PlannerParam[]\n}\n\nexport type V4PlannerParam =\n | V4PositionConfig\n | TronAddress\n | `0x${string}`\n | V4BigintIsh\n | number\n | boolean\n\nexport interface EncodeV4MintPositionPayloadParams {\n readonly positionConfig: V4PositionConfig\n readonly liquidity: V4BigintIsh\n readonly amount0Max: V4BigintIsh\n readonly amount1Max: V4BigintIsh\n readonly owner: TronAddress\n readonly sweepRecipient?: TronAddress\n readonly hookData?: string\n}\n\nexport interface EncodeV4IncreaseLiquidityPayloadParams {\n readonly poolKey: V4PoolKey\n readonly tokenId: V4BigintIsh\n readonly liquidity: V4BigintIsh\n readonly amount0Max: V4BigintIsh\n readonly amount1Max: V4BigintIsh\n readonly sweepRecipient?: TronAddress\n readonly hookData?: string\n}\n\nexport interface EncodeV4DecreaseLiquidityPayloadParams {\n readonly poolKey: V4PoolKey\n readonly tokenId: V4BigintIsh\n readonly liquidity: V4BigintIsh\n readonly amount0Min: V4BigintIsh\n readonly amount1Min: V4BigintIsh\n readonly recipient: TronAddress\n readonly hookData?: string\n readonly settlementMode?: 'take-pair' | 'close-currency'\n}\n\nexport interface EncodeV4CollectPayloadParams {\n readonly poolKey: V4PoolKey\n readonly recipient: TronAddress\n}\n\nconst WORD_BYTES = 32\nconst WORD_HEX_LENGTH = WORD_BYTES * 2\nconst HEX_BYTES_PATTERN = /^0x(?:[a-fA-F0-9]{2})*$/\n\nconst V4_ACTION_NAMES: Record<V4Action, string> = {\n [V4_ACTIONS.CL_INCREASE_LIQUIDITY]: 'CL_INCREASE_LIQUIDITY',\n [V4_ACTIONS.CL_DECREASE_LIQUIDITY]: 'CL_DECREASE_LIQUIDITY',\n [V4_ACTIONS.CL_MINT_POSITION]: 'CL_MINT_POSITION',\n [V4_ACTIONS.SETTLE]: 'SETTLE',\n [V4_ACTIONS.SETTLE_PAIR]: 'SETTLE_PAIR',\n [V4_ACTIONS.TAKE_PAIR]: 'TAKE_PAIR',\n [V4_ACTIONS.CLOSE_CURRENCY]: 'CLOSE_CURRENCY',\n [V4_ACTIONS.SWEEP]: 'SWEEP',\n}\n\nfunction assertHexBytes(value: string, label: string): `0x${string}` {\n sdkInvariant(HEX_BYTES_PATTERN.test(value), SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} must be 0x-prefixed hex bytes`, {\n label,\n value,\n })\n return value.toLowerCase() as `0x${string}`\n}\n\nfunction strip0x(value: string): string {\n return value.startsWith('0x') ? value.slice(2) : value\n}\n\nfunction word(value: bigint): string {\n sdkInvariant(value >= 0n, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'ABI word cannot encode a negative uint', {\n value: value.toString(),\n })\n return value.toString(16).padStart(WORD_HEX_LENGTH, '0')\n}\n\nfunction encodeUint(value: V4BigintIsh, bits: number, label: string): string {\n const uint = BigInt(value.toString())\n const max = 1n << BigInt(bits)\n sdkInvariant(uint >= 0n && uint < max, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} is out of uint${bits} range`, {\n label,\n value: uint.toString(),\n })\n return word(uint)\n}\n\nfunction encodeInt(value: number, bits: number, label: string): string {\n sdkInvariant(Number.isInteger(value), SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} must be an integer`, { label, value })\n const int = BigInt(value)\n const min = -(1n << BigInt(bits - 1))\n const max = 1n << BigInt(bits - 1)\n sdkInvariant(int >= min && int < max, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} is out of int${bits} range`, {\n label,\n value,\n })\n return word(int >= 0n ? int : (1n << BigInt(WORD_BYTES * 8)) + int)\n}\n\nfunction encodeBool(value: boolean): string {\n return word(value ? 1n : 0n)\n}\n\nfunction encodeAddress(value: TronAddress | string, label: string): string {\n const address = value.startsWith('0x') ? assertHexBytes(value, label) : tronAddressToEvmHex(assertTronAddress(value, label))\n const hex = strip0x(address)\n sdkInvariant(hex.length === 40, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} must be a 20-byte address`, {\n label,\n value,\n })\n return hex.padStart(WORD_HEX_LENGTH, '0')\n}\n\nfunction encodeBytes(value: string, label: string): string {\n const bytes = strip0x(assertHexBytes(value, label))\n const length = bytes.length / 2\n const paddedLength = Math.ceil(length / WORD_BYTES) * WORD_HEX_LENGTH\n return `${word(BigInt(length))}${bytes.padEnd(paddedLength, '0')}`\n}\n\nfunction concatHex(parts: readonly string[]): `0x${string}` {\n return `0x${parts.join('')}`\n}\n\nfunction encodePoolKeyFields(poolKey: V4PoolKey): readonly string[] {\n const normalized = normalizeV4PoolKey(poolKey)\n return [\n encodeAddress(normalized.currency0, 'poolKey.currency0'),\n encodeAddress(normalized.currency1, 'poolKey.currency1'),\n encodeAddress(normalized.hooks, 'poolKey.hooks'),\n encodeUint(normalized.fee, 24, 'poolKey.fee'),\n strip0x(assertHexBytes(normalized.parameters, 'poolKey.parameters')),\n ]\n}\n\nfunction encodePositionConfig(config: V4PositionConfig): readonly string[] {\n return [\n ...encodePoolKeyFields(config.poolKey),\n encodeInt(config.tickLower, 24, 'tickLower'),\n encodeInt(config.tickUpper, 24, 'tickUpper'),\n ]\n}\n\nfunction encodeWithTrailingBytes(staticParts: readonly string[], bytesValue: string): `0x${string}` {\n return concatHex([...staticParts, word(BigInt((staticParts.length + 1) * WORD_BYTES)), encodeBytes(bytesValue, 'hookData')])\n}\n\nfunction assertParamCount(plan: V4PlannerPlan, expected: number): void {\n sdkInvariant(\n plan.params.length === expected,\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n `V4 action ${V4_ACTION_NAMES[plan.action]} expects ${expected} params`,\n { action: plan.action, expected, actual: plan.params.length },\n )\n}\n\nfunction paramAt(plan: V4PlannerPlan, index: number): V4PlannerParam {\n const value = plan.params[index]\n sdkInvariant(value !== undefined, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `Missing V4 action param at index ${index}`, {\n action: plan.action,\n index,\n })\n return value\n}\n\nfunction asPositionConfig(value: V4PlannerParam, label: string): V4PositionConfig {\n sdkInvariant(typeof value === 'object' && value !== null && 'poolKey' in value, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} must be a V4 position config`, {\n label,\n })\n return value\n}\n\nfunction encodePlanParam(plan: V4PlannerPlan): `0x${string}` {\n switch (plan.action) {\n case V4_ACTIONS.CL_MINT_POSITION:\n assertParamCount(plan, 6)\n return encodeWithTrailingBytes(\n [\n ...encodePositionConfig(asPositionConfig(paramAt(plan, 0), 'positionConfig')),\n encodeUint(paramAt(plan, 1) as V4BigintIsh, 128, 'liquidity'),\n encodeUint(paramAt(plan, 2) as V4BigintIsh, 128, 'amount0Max'),\n encodeUint(paramAt(plan, 3) as V4BigintIsh, 128, 'amount1Max'),\n encodeAddress(paramAt(plan, 4) as TronAddress | string, 'owner'),\n ],\n paramAt(plan, 5) as string,\n )\n case V4_ACTIONS.CL_INCREASE_LIQUIDITY:\n assertParamCount(plan, 5)\n return encodeWithTrailingBytes(\n [\n encodeUint(paramAt(plan, 0) as V4BigintIsh, 256, 'tokenId'),\n encodeUint(paramAt(plan, 1) as V4BigintIsh, 128, 'liquidity'),\n encodeUint(paramAt(plan, 2) as V4BigintIsh, 128, 'amount0Max'),\n encodeUint(paramAt(plan, 3) as V4BigintIsh, 128, 'amount1Max'),\n ],\n paramAt(plan, 4) as string,\n )\n case V4_ACTIONS.CL_DECREASE_LIQUIDITY:\n assertParamCount(plan, 5)\n return encodeWithTrailingBytes(\n [\n encodeUint(paramAt(plan, 0) as V4BigintIsh, 256, 'tokenId'),\n encodeUint(paramAt(plan, 1) as V4BigintIsh, 128, 'liquidity'),\n encodeUint(paramAt(plan, 2) as V4BigintIsh, 128, 'amount0Min'),\n encodeUint(paramAt(plan, 3) as V4BigintIsh, 128, 'amount1Min'),\n ],\n paramAt(plan, 4) as string,\n )\n case V4_ACTIONS.SETTLE:\n assertParamCount(plan, 3)\n return concatHex([\n encodeAddress(paramAt(plan, 0) as TronAddress | string, 'currency'),\n encodeUint(paramAt(plan, 1) as V4BigintIsh, 256, 'amount'),\n encodeBool(paramAt(plan, 2) as boolean),\n ])\n case V4_ACTIONS.SETTLE_PAIR:\n assertParamCount(plan, 2)\n return concatHex([\n encodeAddress(paramAt(plan, 0) as TronAddress | string, 'currency0'),\n encodeAddress(paramAt(plan, 1) as TronAddress | string, 'currency1'),\n ])\n case V4_ACTIONS.TAKE_PAIR:\n assertParamCount(plan, 3)\n return concatHex([\n encodeAddress(paramAt(plan, 0) as TronAddress | string, 'currency0'),\n encodeAddress(paramAt(plan, 1) as TronAddress | string, 'currency1'),\n encodeAddress(paramAt(plan, 2) as TronAddress | string, 'recipient'),\n ])\n case V4_ACTIONS.CLOSE_CURRENCY:\n assertParamCount(plan, 1)\n return concatHex([encodeAddress(paramAt(plan, 0) as TronAddress | string, 'currency')])\n case V4_ACTIONS.SWEEP:\n assertParamCount(plan, 2)\n return concatHex([\n encodeAddress(paramAt(plan, 0) as TronAddress | string, 'currency'),\n encodeAddress(paramAt(plan, 1) as TronAddress | string, 'recipient'),\n ])\n default:\n sdkInvariant(false, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'Unsupported V4 action', { action: plan.action })\n throw new Error('Unsupported V4 action')\n }\n}\n\nfunction encodeDynamicBytesArray(values: readonly `0x${string}`[]): string {\n const encodedValues = values.map((value, index) => encodeBytes(value, `params[${index}]`))\n const offsets: string[] = []\n let tailOffset = BigInt(values.length * WORD_BYTES)\n for (const encodedValue of encodedValues) {\n offsets.push(word(tailOffset))\n tailOffset += BigInt(encodedValue.length / 2)\n }\n return `${word(BigInt(values.length))}${offsets.join('')}${encodedValues.join('')}`\n}\n\nexport function encodeV4Actions(plans: readonly V4PlannerPlan[]): `0x${string}` {\n const actions = plans.map((plan) => {\n sdkInvariant(V4_ACTION_NAMES[plan.action] !== undefined, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'Unsupported V4 action', {\n action: plan.action,\n })\n return plan.action.toString(16).padStart(2, '0')\n })\n return concatHex(actions)\n}\n\nexport function encodeV4ActionParams(plans: readonly V4PlannerPlan[]): readonly `0x${string}`[] {\n return plans.map((plan) => encodePlanParam(plan))\n}\n\nexport function encodeV4ActionsPlanner(plans: readonly V4PlannerPlan[]): `0x${string}` {\n const actions = encodeV4Actions(plans)\n const params = encodeV4ActionParams(plans)\n const encodedActions = encodeBytes(actions, 'actions')\n const encodedParams = encodeDynamicBytesArray(params)\n return concatHex([word(64n), word(BigInt(64 + encodedActions.length / 2)), encodedActions, encodedParams])\n}\n\nexport function encodeV4MintPositionPlannerPayload(params: EncodeV4MintPositionPayloadParams): `0x${string}` {\n const poolKey = normalizeV4PoolKey(params.positionConfig.poolKey)\n const owner = assertTronAddress(params.owner, 'owner')\n const sweepRecipient = params.sweepRecipient ? assertTronAddress(params.sweepRecipient, 'sweepRecipient') : owner\n const hookData = params.hookData ?? '0x'\n const plans: V4PlannerPlan[] = [\n {\n action: V4_ACTIONS.CL_MINT_POSITION,\n params: [{ ...params.positionConfig, poolKey }, params.liquidity, params.amount0Max, params.amount1Max, owner, hookData],\n },\n { action: V4_ACTIONS.SETTLE, params: [poolKey.currency0, V4_ACTION_CONSTANTS.OPEN_DELTA, poolKey.currency0 !== TRON_ZERO_ADDRESS] },\n { action: V4_ACTIONS.SETTLE, params: [poolKey.currency1, V4_ACTION_CONSTANTS.OPEN_DELTA, poolKey.currency1 !== TRON_ZERO_ADDRESS] },\n ]\n\n if (poolKey.currency0 === TRON_ZERO_ADDRESS) {\n plans.push({ action: V4_ACTIONS.SWEEP, params: [poolKey.currency0, sweepRecipient] })\n }\n if (poolKey.currency1 === TRON_ZERO_ADDRESS) {\n plans.push({ action: V4_ACTIONS.SWEEP, params: [poolKey.currency1, sweepRecipient] })\n }\n\n return encodeV4ActionsPlanner(plans)\n}\n\nexport function encodeV4IncreaseLiquidityPlannerPayload(params: EncodeV4IncreaseLiquidityPayloadParams): `0x${string}` {\n const poolKey = normalizeV4PoolKey(params.poolKey)\n const hasNativeCurrency = poolKey.currency0 === TRON_ZERO_ADDRESS || poolKey.currency1 === TRON_ZERO_ADDRESS\n sdkInvariant(\n !hasNativeCurrency || params.sweepRecipient !== undefined,\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n 'sweepRecipient is required when increasing liquidity with native currency',\n )\n const sweepRecipient = params.sweepRecipient !== undefined\n ? assertTronAddress(params.sweepRecipient, 'sweepRecipient')\n : undefined\n const plans: V4PlannerPlan[] = [\n {\n action: V4_ACTIONS.CL_INCREASE_LIQUIDITY,\n params: [params.tokenId, params.liquidity, params.amount0Max, params.amount1Max, params.hookData ?? '0x'],\n },\n { action: V4_ACTIONS.SETTLE, params: [poolKey.currency0, V4_ACTION_CONSTANTS.OPEN_DELTA, poolKey.currency0 !== TRON_ZERO_ADDRESS] },\n { action: V4_ACTIONS.SETTLE, params: [poolKey.currency1, V4_ACTION_CONSTANTS.OPEN_DELTA, poolKey.currency1 !== TRON_ZERO_ADDRESS] },\n ]\n\n if (sweepRecipient && poolKey.currency0 === TRON_ZERO_ADDRESS) {\n plans.push({ action: V4_ACTIONS.SWEEP, params: [poolKey.currency0, sweepRecipient] })\n }\n if (sweepRecipient && poolKey.currency1 === TRON_ZERO_ADDRESS) {\n plans.push({ action: V4_ACTIONS.SWEEP, params: [poolKey.currency1, sweepRecipient] })\n }\n\n return encodeV4ActionsPlanner(plans)\n}\n\nexport function encodeV4DecreaseLiquidityPlannerPayload(params: EncodeV4DecreaseLiquidityPayloadParams): `0x${string}` {\n const poolKey = normalizeV4PoolKey(params.poolKey)\n const recipient = assertTronAddress(params.recipient, 'recipient')\n const plans: V4PlannerPlan[] = [\n {\n action: V4_ACTIONS.CL_DECREASE_LIQUIDITY,\n params: [params.tokenId, params.liquidity, params.amount0Min, params.amount1Min, params.hookData ?? '0x'],\n },\n ]\n if (params.settlementMode === 'close-currency') {\n plans.push(\n { action: V4_ACTIONS.CLOSE_CURRENCY, params: [poolKey.currency0] },\n { action: V4_ACTIONS.CLOSE_CURRENCY, params: [poolKey.currency1] },\n )\n } else {\n plans.push({ action: V4_ACTIONS.TAKE_PAIR, params: [poolKey.currency0, poolKey.currency1, recipient] })\n }\n return encodeV4ActionsPlanner(plans)\n}\n\nexport function encodeV4CollectPlannerPayload(params: EncodeV4CollectPayloadParams): `0x${string}` {\n const poolKey = normalizeV4PoolKey(params.poolKey)\n const recipient = assertTronAddress(params.recipient, 'recipient')\n return encodeV4ActionsPlanner([{ action: V4_ACTIONS.TAKE_PAIR, params: [poolKey.currency0, poolKey.currency1, recipient] }])\n}\n","import {\n SDK_ERROR_CODES,\n TRON_ZERO_ADDRESS,\n assertTronAddress,\n sdkInvariant,\n type Network,\n type TronAddress,\n} from '@sun-protocol/sun-sdk-core'\nimport type { ContractParameter } from '@sun-protocol/sun-sdk-core'\nimport { tronAddressToEvmHex } from './address.js'\nimport type { V4PoolId, V4PoolKey, V4PoolParameters } from './types.js'\n\nexport const V4_DYNAMIC_FEE_FLAG = 0x800000\nexport const V4_UINT24_MAX = 0xffffff\nexport const V4_MAX_STATIC_FEE = 1_000_000\nexport const V4_EMPTY_PARAMETERS = `0x${'0'.repeat(64)}` as V4PoolParameters\n\nconst BYTES32_PATTERN = /^0x[a-fA-F0-9]{64}$/\n\nexport interface CreateV4PoolKeyInput {\n readonly network: Network\n readonly currencyA: TronAddress | string\n readonly currencyB: TronAddress | string\n readonly hooks?: TronAddress | string\n readonly fee: number\n readonly parameters?: V4PoolParameters | string\n}\n\nfunction sortCurrencies(currencyA: TronAddress, currencyB: TronAddress): readonly [TronAddress, TronAddress] {\n sdkInvariant(\n currencyA !== currencyB,\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n 'V4 pool currencies must be different',\n { currencyA, currencyB },\n )\n return tronAddressToEvmHex(currencyA) < tronAddressToEvmHex(currencyB) ? [currencyA, currencyB] : [currencyB, currencyA]\n}\n\nexport function isV4DynamicFee(fee: number): boolean {\n return (fee & V4_DYNAMIC_FEE_FLAG) !== 0\n}\n\nexport function getV4StaticFee(fee: number): number {\n return fee & ~V4_DYNAMIC_FEE_FLAG\n}\n\nexport function assertV4PoolParameters(value: string, label = 'parameters'): V4PoolParameters {\n sdkInvariant(BYTES32_PATTERN.test(value), SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} must be bytes32 hex`, {\n label,\n value,\n })\n return value.toLowerCase() as V4PoolParameters\n}\n\nexport function assertV4PoolId(value: string, label = 'poolId'): V4PoolId {\n sdkInvariant(BYTES32_PATTERN.test(value), SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} must be bytes32 hex`, {\n label,\n value,\n })\n return value.toLowerCase() as V4PoolId\n}\n\nexport function assertV4Fee(fee: number): number {\n sdkInvariant(Number.isInteger(fee), SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'V4 fee must be an integer', { fee })\n sdkInvariant(fee >= 0 && fee <= V4_UINT24_MAX, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'V4 fee must fit uint24', {\n fee,\n })\n\n const staticFee = getV4StaticFee(fee)\n sdkInvariant(\n isV4DynamicFee(fee) || staticFee <= V4_MAX_STATIC_FEE,\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n 'V4 static fee cannot exceed 100%',\n { fee, staticFee },\n )\n return fee\n}\n\nexport function assertV4HookFeeCombination(hooks: TronAddress, fee: number): void {\n sdkInvariant(\n !(hooks === TRON_ZERO_ADDRESS && isV4DynamicFee(fee)),\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n 'V4 dynamic fee requires a non-empty hook address',\n { hooks, fee },\n )\n}\n\nexport function normalizeV4PoolKey(input: V4PoolKey): V4PoolKey {\n const currency0 = assertTronAddress(input.currency0, 'currency0')\n const currency1 = assertTronAddress(input.currency1, 'currency1')\n const hooks = assertTronAddress(input.hooks, 'hooks')\n const [sorted0, sorted1] = sortCurrencies(currency0, currency1)\n const fee = assertV4Fee(input.fee)\n assertV4HookFeeCombination(hooks, fee)\n\n return {\n network: input.network,\n currency0: sorted0,\n currency1: sorted1,\n hooks,\n fee,\n parameters: assertV4PoolParameters(input.parameters),\n }\n}\n\nexport function createV4PoolKey(input: CreateV4PoolKeyInput): V4PoolKey {\n const currencyA = assertTronAddress(input.currencyA, 'currencyA')\n const currencyB = assertTronAddress(input.currencyB, 'currencyB')\n const [currency0, currency1] = sortCurrencies(currencyA, currencyB)\n const hooks = assertTronAddress(input.hooks ?? TRON_ZERO_ADDRESS, 'hooks')\n const fee = assertV4Fee(input.fee)\n assertV4HookFeeCombination(hooks, fee)\n\n return {\n network: input.network,\n currency0,\n currency1,\n hooks,\n fee,\n parameters: assertV4PoolParameters(input.parameters ?? V4_EMPTY_PARAMETERS),\n }\n}\n\nexport function toV4PoolKeyTuple(poolKey: V4PoolKey): ContractParameter {\n const normalized = normalizeV4PoolKey(poolKey)\n return {\n type: 'tuple',\n value: {\n currency0: normalized.currency0,\n currency1: normalized.currency1,\n hooks: normalized.hooks,\n fee: normalized.fee,\n parameters: normalized.parameters,\n },\n }\n}\n","import { SDK_ERROR_CODES, sdkInvariant } from '@sun-protocol/sun-sdk-core'\nimport type { V4HooksRegistration, V4PoolParameterConfig, V4PoolParameters } from './types.js'\nimport { assertV4PoolParameters } from './pool-key.js'\n\nexport const V4_HOOKS_REGISTRATION_OFFSET: Record<keyof V4HooksRegistration, number> = {\n beforeInitialize: 0,\n afterInitialize: 1,\n beforeAddLiquidity: 2,\n afterAddLiquidity: 3,\n beforeRemoveLiquidity: 4,\n afterRemoveLiquidity: 5,\n beforeSwap: 6,\n afterSwap: 7,\n beforeDonate: 8,\n afterDonate: 9,\n beforeSwapReturnsDelta: 10,\n afterSwapReturnsDelta: 11,\n afterAddLiquidityReturnsDelta: 12,\n afterRemoveLiquidityReturnsDelta: 13,\n}\n\nconst INT24_MIN = -0x800000\nconst INT24_MAX = 0x7fffff\nconst UINT16_MAX = 0xffff\nconst HOOKS_REGISTRATION_MAX = 0x3fff\nconst BYTES32_HEX_LENGTH = 64\ntype MutableHooksRegistration = {\n -readonly [Key in keyof V4HooksRegistration]?: V4HooksRegistration[Key]\n}\n\nfunction assertInt24(value: number, label: string): number {\n sdkInvariant(Number.isInteger(value), SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} must be an integer`, {\n label,\n value,\n })\n sdkInvariant(value >= INT24_MIN && value <= INT24_MAX, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} must fit int24`, {\n label,\n value,\n })\n return value\n}\n\nfunction signedInt24ToHex(value: number): string {\n const int24 = assertInt24(value, 'tickSpacing')\n const encoded = int24 < 0 ? 0x1000000 + int24 : int24\n return encoded.toString(16).padStart(6, '0')\n}\n\nfunction hexToSignedInt24(hex: string): number {\n const value = Number.parseInt(hex, 16)\n return value >= 0x800000 ? value - 0x1000000 : value\n}\n\nexport function encodeV4HooksRegistration(hooksRegistration: V4HooksRegistration = {}): number {\n let registration = 0\n\n for (const key of Object.keys(V4_HOOKS_REGISTRATION_OFFSET) as Array<keyof V4HooksRegistration>) {\n if (hooksRegistration[key]) {\n registration |= 1 << V4_HOOKS_REGISTRATION_OFFSET[key]\n }\n }\n\n return registration\n}\n\nexport function decodeV4HooksRegistration(registration: number): V4HooksRegistration {\n sdkInvariant(\n Number.isInteger(registration) && registration >= 0 && registration <= HOOKS_REGISTRATION_MAX,\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n 'V4 hooks registration must fit the known 14-bit bitmap',\n { registration },\n )\n\n const decoded: MutableHooksRegistration = {}\n for (const key of Object.keys(V4_HOOKS_REGISTRATION_OFFSET) as Array<keyof V4HooksRegistration>) {\n if ((registration & (1 << V4_HOOKS_REGISTRATION_OFFSET[key])) !== 0) {\n decoded[key] = true\n }\n }\n\n return decoded\n}\n\nexport function encodeV4PoolParameters(params: V4PoolParameterConfig): V4PoolParameters {\n const tickSpacing = signedInt24ToHex(params.tickSpacing)\n const hooksRegistration = encodeV4HooksRegistration(params.hooksRegistration)\n\n sdkInvariant(\n hooksRegistration <= UINT16_MAX,\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n 'V4 hooks registration must fit uint16',\n { hooksRegistration },\n )\n\n const hooksHex = hooksRegistration.toString(16).padStart(4, '0')\n return assertV4PoolParameters(`0x${`${tickSpacing}${hooksHex}`.padStart(BYTES32_HEX_LENGTH, '0')}`)\n}\n\nexport function decodeV4PoolParameters(encoded: V4PoolParameters | string): V4PoolParameterConfig {\n const parameters = assertV4PoolParameters(encoded)\n const hex = parameters.slice(2)\n const tickSpacingHex = hex.slice(-10, -4)\n const hooksHex = hex.slice(-4)\n const hooksRegistration = Number.parseInt(hooksHex, 16)\n\n return {\n tickSpacing: hexToSignedInt24(tickSpacingHex),\n hooksRegistration: decodeV4HooksRegistration(hooksRegistration),\n }\n}\n","import { SDK_ERROR_CODES, sdkInvariant, type TronAddress } from '@sun-protocol/sun-sdk-core'\nimport { keccak256 } from '@ethersproject/keccak256'\nimport { tronAddressToEvmHex } from './address.js'\nimport { normalizeV4PoolKey } from './pool-key.js'\nimport type { V4PoolId, V4PoolKey } from './types.js'\n\nconst EVM_ADDRESS_HEX_LENGTH = 40\nconst BYTES32_HEX_LENGTH = 64\n\nfunction assertHex(value: string, label: string): string {\n sdkInvariant(/^0x[a-fA-F0-9]*$/.test(value), SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, `${label} must be hex`, {\n label,\n value,\n })\n return value.toLowerCase()\n}\n\nfunction encodeAbiAddress(value: TronAddress | string): string {\n const address = tronAddressToEvmHex(value).slice(2)\n sdkInvariant(\n address.length === EVM_ADDRESS_HEX_LENGTH,\n SDK_ERROR_CODES.SDK_INVALID_ARGUMENT,\n 'Encoded EVM address must be 20 bytes',\n { value },\n )\n return address.padStart(BYTES32_HEX_LENGTH, '0')\n}\n\nfunction encodeAbiUint24(value: number): string {\n sdkInvariant(Number.isInteger(value) && value >= 0 && value <= 0xffffff, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'uint24 value is out of range', {\n value,\n })\n return value.toString(16).padStart(BYTES32_HEX_LENGTH, '0')\n}\n\nfunction encodeAbiBytes32(value: string): string {\n const bytes32 = assertHex(value, 'bytes32').slice(2)\n sdkInvariant(bytes32.length === BYTES32_HEX_LENGTH, SDK_ERROR_CODES.SDK_INVALID_ARGUMENT, 'bytes32 must be 32 bytes', {\n value,\n })\n return bytes32\n}\n\nexport function encodeV4PoolKey(poolKey: V4PoolKey): `0x${string}` {\n const normalized = normalizeV4PoolKey(poolKey)\n return `0x${[\n encodeAbiAddress(normalized.currency0),\n encodeAbiAddress(normalized.currency1),\n encodeAbiAddress(normalized.hooks),\n encodeAbiUint24(normalized.fee),\n encodeAbiBytes32(normalized.parameters),\n ].join('')}`\n}\n\nexport function computeV4PoolId(poolKey: V4PoolKey): V4PoolId {\n return keccak256(encodeV4PoolKey(poolKey)) as V4PoolId\n}\n","import { getContractAddress } from '@sun-protocol/sun-sdk-chains'\nimport type { BigintIsh, ContractParameter, Network, TronAddress } from '@sun-protocol/sun-sdk-core'\nimport { assertV4PoolId } from './pool-key.js'\nimport type { V4PoolId } from './types.js'\n\nexport interface V4ContractReadSpec {\n readonly target: TronAddress\n readonly functionSelector: string\n readonly parameters?: readonly ContractParameter[]\n readonly abiFunction?: V4ReadAbiFunction\n readonly metadata?: Record<string, unknown>\n}\n\ninterface V4ReadAbiParameter {\n readonly name?: string\n readonly type: string\n readonly components?: readonly V4ReadAbiParameter[]\n}\n\ninterface V4ReadAbiFunction {\n readonly type: 'function'\n readonly name: string\n readonly stateMutability: 'view'\n readonly inputs: readonly V4ReadAbiParameter[]\n readonly outputs: readonly V4ReadAbiParameter[]\n}\n\nconst V4_POOL_KEY_ABI_COMPONENTS = [\n { name: 'currency0', type: 'address' },\n { name: 'currency1', type: 'address' },\n { name: 'hooks', type: 'address' },\n { name: 'fee', type: 'uint24' },\n { name: 'parameters', type: 'bytes32' },\n] as const\n\nfunction positionReadAbi(\n name: string,\n inputs: readonly V4ReadAbiParameter[],\n outputs: readonly V4ReadAbiParameter[],\n): V4ReadAbiFunction {\n return { type: 'function', name, stateMutability: 'view', inputs, outputs }\n}\n\nexport const V4_POSITION_MANAGER_READ_SELECTORS = {\n ownerOf: 'ownerOf(uint256)',\n getApproved: 'getApproved(uint256)',\n isApprovedForAll: 'isApprovedForAll(address,address)',\n getPoolAndPositionInfo: 'getPoolAndPositionInfo(uint256)',\n getPositionLiquidity: 'getPositionLiquidity(uint256)',\n} as const\n\nexport const V4_POOL_MANAGER_READ_SELECTORS = {\n getSlot0: 'getSlot0(bytes32)',\n getLiquidity: 'getLiquidity(bytes32)',\n poolIdToPoolKey: 'poolIdToPoolKey(bytes32)',\n getFeeGrowthGlobals: 'getFeeGrowthGlobals(bytes32)',\n} as const\n\nexport interface V4ReadOptions {\n readonly network: Network\n readonly positionManager?: TronAddress\n readonly poolManager?: TronAddress\n}\n\nexport interface BuildV4PositionReadParams extends V4ReadOptions {\n readonly tokenId: BigintIsh\n}\n\nexport interface BuildV4PoolReadParams extends V4ReadOptions {\n readonly poolId: V4PoolId | string\n}\n\nexport interface BuildV4PositionFeesReadParams extends V4ReadOptions {\n readonly tokenId: BigintIsh\n readonly poolId: V4PoolId | string\n readonly tickLower: number\n readonly tickUpper: number\n readonly lpFeeHelper?: TronAddress\n}\n\nexport interface BuildV4PositionApprovalReadParams extends V4ReadOptions {\n readonly owner: TronAddress\n readonly operator: TronAddress\n}\n\nexport interface BuildV4HookRegistrationBitmapReadParams {\n readonly network: Network\n readonly hooks: TronAddress\n}\n\nfunction valueOf(value: BigintIsh): string {\n return BigInt(value.toString()).toString()\n}\n\nfunction bytes32ValueOf(value: BigintIsh): string {\n const normalized = BigInt(value.toString())\n if (normalized < 0n || normalized >= (1n << 256n)) {\n throw new RangeError('tokenId must fit in an unsigned 256-bit value')\n }\n return `0x${normalized.toString(16).padStart(64, '0')}`\n}\n\nfunction positionManagerTarget(params: V4ReadOptions): TronAddress {\n return params.positionManager ?? getContractAddress(params.network, 'sunswapV4PositionManager')\n}\n\nfunction poolManagerTarget(params: V4ReadOptions): TronAddress {\n return params.poolManager ?? getContractAddress(params.network, 'sunswapV4PoolManager')\n}\n\nfunction positionManagerRead(\n params: V4ReadOptions,\n functionSelector: string,\n parameters: readonly ContractParameter[],\n action: string,\n abiFunction: V4ReadAbiFunction,\n): V4ContractReadSpec {\n return {\n target: positionManagerTarget(params),\n functionSelector,\n parameters,\n abiFunction,\n metadata: { protocol: 'sunswap-v4', contract: 'position-manager', action, network: params.network },\n }\n}\n\nfunction poolReadAbi(functionSelector: string): V4ReadAbiFunction {\n const name = functionSelector.slice(0, functionSelector.indexOf('('))\n const outputs: Record<string, readonly V4ReadAbiParameter[]> = {\n getSlot0: [\n { name: 'sqrtPriceX96', type: 'uint160' },\n { name: 'tick', type: 'int24' },\n { name: 'protocolFee', type: 'uint24' },\n { name: 'lpFee', type: 'uint24' },\n ],\n getLiquidity: [{ name: 'liquidity', type: 'uint128' }],\n poolIdToPoolKey: V4_POOL_KEY_ABI_COMPONENTS,\n getFeeGrowthGlobals: [\n { name: 'feeGrowthGlobal0X128', type: 'uint256' },\n { name: 'feeGrowthGlobal1X128', type: 'uint256' },\n ],\n }\n return positionReadAbi(name, [{ name: 'id', type: 'bytes32' }], outputs[name] ?? [])\n}\n\nfunction poolManagerRead(params: V4ReadOptions, functionSelector: string, poolId: V4PoolId | string): V4ContractReadSpec {\n return {\n target: poolManagerTarget(params),\n functionSelector,\n parameters: [{ type: 'bytes32', value: assertV4PoolId(poolId) }],\n abiFunction: poolReadAbi(functionSelector),\n metadata: { protocol: 'sunswap-v4', contract: 'pool-manager', network: params.network },\n }\n}\n\nexport function buildV4PoolSlot0Read(params: BuildV4PoolReadParams): V4ContractReadSpec {\n return poolManagerRead(params, V4_POOL_MANAGER_READ_SELECTORS.getSlot0, params.poolId)\n}\n\nexport function buildV4PoolLiquidityRead(params: BuildV4PoolReadParams): V4ContractReadSpec {\n return poolManagerRead(params, V4_POOL_MANAGER_READ_SELECTORS.getLiquidity, params.poolId)\n}\n\nexport function buildV4PoolKeyRead(params: BuildV4PoolReadParams): V4ContractReadSpec {\n return poolManagerRead(params, V4_POOL_MANAGER_READ_SELECTORS.poolIdToPoolKey, params.poolId)\n}\n\nexport function buildV4PoolFeeGrowthGlobalsRead(params: BuildV4PoolReadParams): V4ContractReadSpec {\n return poolManagerRead(params, V4_POOL_MANAGER_READ_SELECTORS.getFeeGrowthGlobals, params.poolId)\n}\n\nexport function buildV4HookRegistrationBitmapRead(\n params: BuildV4HookRegistrationBitmapReadParams,\n): V4ContractReadSpec {\n return {\n target: params.hooks,\n functionSelector: 'getHooksRegistrationBitmap()',\n abiFunction: positionReadAbi(\n 'getHooksRegistrationBitmap',\n [],\n [{ name: 'permissions', type: 'uint16' }],\n ),\n metadata: {\n protocol: 'sunswap-v4',\n contract: 'hooks',\n action: 'get-registration-bitmap',\n network: params.network,\n },\n }\n}\n\nexport function buildV4PoolStateReads(params: BuildV4PoolReadParams): readonly V4ContractReadSpec[] {\n return [buildV4PoolSlot0Read(params), buildV4PoolLiquidityRead(params)]\n}\n\nexport function buildV4PositionOwnerRead(params: BuildV4PositionReadParams): V4ContractReadSpec {\n return positionManagerRead(\n params,\n V4_POSITION_MANAGER_READ_SELECTORS.ownerOf,\n [{ type: 'uint256', value: valueOf(params.tokenId) }],\n 'owner-of',\n positionReadAbi('ownerOf', [{ name: 'id', type: 'uint256' }], [{ name: 'owner', type: 'address' }]),\n )\n}\n\nexport function buildV4PositionApprovedRead(params: BuildV4PositionReadParams): V4ContractReadSpec {\n return positionManagerRead(\n params,\n V4_POSITION_MANAGER_READ_SELECTORS.getApproved,\n [{ type: 'uint256', value: valueOf(params.tokenId) }],\n 'get-approved',\n positionReadAbi('getApproved', [{ name: 'tokenId', type: 'uint256' }], [{ name: 'approved', type: 'address' }]),\n )\n}\n\nexport function buildV4PoolAndPositionInfoRead(params: BuildV4PositionReadParams): V4ContractReadSpec {\n return positionManagerRead(\n params,\n V4_POSITION_MANAGER_READ_SELECTORS.getPoolAndPositionInfo,\n [{ type: 'uint256', value: valueOf(params.tokenId) }],\n 'get-pool-and-position-info',\n positionReadAbi(\n 'getPoolAndPositionInfo',\n [{ name: 'tokenId', type: 'uint256' }],\n [\n { name: 'poolKey', type: 'tuple', components: V4_POOL_KEY_ABI_COMPONENTS },\n { name: 'info', type: 'uint256' },\n ],\n ),\n )\n}\n\nexport function buildV4PositionLiquidityRead(params: BuildV4PositionReadParams): V4ContractReadSpec {\n return positionManagerRead(\n params,\n V4_POSITION_MANAGER_READ_SELECTORS.getPositionLiquidity,\n [{ type: 'uint256', value: valueOf(params.tokenId) }],\n 'get-position-liquidity',\n positionReadAbi('getPositionLiquidity', [{ name: 'tokenId', type: 'uint256' }], [{ name: 'liquidity', type: 'uint128' }]),\n )\n}\n\nexport function buildV4PositionApprovalForAllRead(params: BuildV4PositionApprovalReadParams): V4ContractReadSpec {\n return positionManagerRead(\n params,\n V4_POSITION_MANAGER_READ_SELECTORS.isApprovedForAll,\n [\n { type: 'address', value: params.owner },\n { type: 'address', value: params.operator },\n ],\n 'is-approved-for-all',\n positionReadAbi(\n 'isApprovedForAll',\n [{ name: 'owner', type: 'address' }, { name: 'operator', type: 'address' }],\n [{ name: 'approved', type: 'bool' }],\n ),\n )\n}\n\nexport function buildV4PositionFeesRead(params: BuildV4PositionFeesReadParams): V4ContractReadSpec {\n return {\n target: params.lpFeeHelper ?? getContractAddress(params.network, 'sunswapV4LpFeeHelper'),\n functionSelector: 'getLPFees(address,bytes32,address,int24,int24,bytes32)',\n parameters: [\n { type: 'address', value: poolManagerTarget(params) },\n { type: 'bytes32', value: assertV4PoolId(params.poolId) },\n { type: 'address', value: positionManagerTarget(params) },\n { type: 'int24', value: params.tickLower },\n { type: 'int24', value: params.tickUpper },\n { type: 'bytes32', value: bytes32ValueOf(params.tokenId) },\n ],\n abiFunction: positionReadAbi(\n 'getLPFees',\n [\n { name: 'poolManager', type: 'address' },\n { name: 'poolId', type: 'bytes32' },\n { name: 'owner', type: 'address' },\n { name: 'tickLower', type: 'int24' },\n { name: 'tickUpper', type: 'int24' },\n { name: 'salt', type: 'bytes32' },\n ],\n [\n { name: 'feesOwed0', type: 'uint256' },\n { name: 'feesOwed1', type: 'uint256' },\n ],\n ),\n metadata: {\n protocol: 'sunswap-v4',\n contract: 'lp-fee-helper',\n action: 'get-position-fees',\n network: params.network,\n },\n }\n}\n\nexport function buildV4PositionReads(params: BuildV4PositionReadParams): readonly V4ContractReadSpec[] {\n return [\n buildV4PoolAndPositionInfoRead(params),\n buildV4PositionLiquidityRead(params),\n buildV4PositionOwnerRead(params),\n buildV4PositionApprovedRead(params),\n ]\n}\n"],"mappings":"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","names":["SDK_ERROR_CODES","TRON_ZERO_ADDRESS","sdkInvariant","SDK_ERROR_CODES","TRON_ZERO_ADDRESS","assertTronAddress","sdkInvariant","SDK_ERROR_CODES","sdkInvariant","sdkInvariant","SDK_ERROR_CODES","sdkInvariant","SDK_ERROR_CODES","assertTronAddress","TRON_ZERO_ADDRESS","HEX_BYTES_PATTERN","sdkInvariant","SDK_ERROR_CODES","assertHexBytes","TRON_ZERO_ADDRESS","SDK_ERROR_CODES","sdkInvariant","sdkInvariant","SDK_ERROR_CODES","SDK_ERROR_CODES","sdkInvariant","keccak256","BYTES32_HEX_LENGTH","sdkInvariant","SDK_ERROR_CODES","keccak256","getContractAddress","valueOf","positionManagerTarget","getContractAddress","functionSelector"]}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@sun-protocol/sun-sdk-sunswap-v4",
3
+ "version": "0.1.0-beta.0",
4
+ "description": "SunSwap V4 pool keys, planners, contract reads, and position transaction action builders.",
5
+ "keywords": [
6
+ "sun",
7
+ "tron",
8
+ "sunswap",
9
+ "hooks",
10
+ "defi"
11
+ ],
12
+ "homepage": "https://github.com/sun-protocol/sun-sdk#readme",
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/sun-protocol/sun-sdk.git",
16
+ "directory": "packages/sunswap-v4"
17
+ },
18
+ "private": false,
19
+ "type": "module",
20
+ "engines": {
21
+ "node": ">=20"
22
+ },
23
+ "main": "./dist/index.cjs",
24
+ "module": "./dist/index.js",
25
+ "types": "./dist/index.d.ts",
26
+ "sideEffects": false,
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "import": "./dist/index.js",
34
+ "require": "./dist/index.cjs"
35
+ }
36
+ },
37
+ "dependencies": {
38
+ "@ethersproject/keccak256": "5.7.0",
39
+ "@noble/hashes": "1.4.0",
40
+ "@sun-protocol/sun-sdk-chains": "0.1.0-beta.0",
41
+ "@sun-protocol/sun-sdk-core": "0.1.0-beta.0"
42
+ },
43
+ "scripts": {
44
+ "build": "tsup src/index.ts --format esm,cjs --dts --sourcemap --clean --tsconfig ../../tsconfig.base.json",
45
+ "typecheck": "tsc -p tsconfig.json --noEmit",
46
+ "test": "vitest run"
47
+ }
48
+ }