@bananapus/nana-sdk-core 1.10.0 → 1.11.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.
Files changed (55) hide show
  1. package/dist/cjs/v6/index.d.ts +1 -0
  2. package/dist/cjs/v6/index.d.ts.map +1 -1
  3. package/dist/cjs/v6/index.js +1 -0
  4. package/dist/cjs/v6/index.js.map +1 -1
  5. package/dist/cjs/v6/loanMath.d.ts +33 -0
  6. package/dist/cjs/v6/loanMath.d.ts.map +1 -0
  7. package/dist/cjs/v6/loanMath.js +52 -0
  8. package/dist/cjs/v6/loanMath.js.map +1 -0
  9. package/dist/cjs/v6/loans.d.ts +1 -42
  10. package/dist/cjs/v6/loans.d.ts.map +1 -1
  11. package/dist/cjs/v6/loans.js +16 -59
  12. package/dist/cjs/v6/loans.js.map +1 -1
  13. package/dist/cjs/v6/permit2.d.ts.map +1 -1
  14. package/dist/cjs/v6/permit2.js +3 -3
  15. package/dist/cjs/v6/permit2.js.map +1 -1
  16. package/dist/cjs/v6/uniswapV4.d.ts +1 -23
  17. package/dist/cjs/v6/uniswapV4.d.ts.map +1 -1
  18. package/dist/cjs/v6/uniswapV4.js +21 -65
  19. package/dist/cjs/v6/uniswapV4.js.map +1 -1
  20. package/dist/cjs/v6/uniswapV4Deployments.d.ts +28 -0
  21. package/dist/cjs/v6/uniswapV4Deployments.d.ts.map +1 -0
  22. package/dist/cjs/v6/uniswapV4Deployments.js +75 -0
  23. package/dist/cjs/v6/uniswapV4Deployments.js.map +1 -0
  24. package/dist/cjs/v6/uniswapV4Fees.d.ts +76 -0
  25. package/dist/cjs/v6/uniswapV4Fees.d.ts.map +1 -0
  26. package/dist/cjs/v6/uniswapV4Fees.js +167 -0
  27. package/dist/cjs/v6/uniswapV4Fees.js.map +1 -0
  28. package/dist/esm/v6/index.d.ts +1 -0
  29. package/dist/esm/v6/index.d.ts.map +1 -1
  30. package/dist/esm/v6/index.js +1 -0
  31. package/dist/esm/v6/index.js.map +1 -1
  32. package/dist/esm/v6/loanMath.d.ts +33 -0
  33. package/dist/esm/v6/loanMath.d.ts.map +1 -0
  34. package/dist/esm/v6/loanMath.js +47 -0
  35. package/dist/esm/v6/loanMath.js.map +1 -0
  36. package/dist/esm/v6/loans.d.ts +1 -42
  37. package/dist/esm/v6/loans.d.ts.map +1 -1
  38. package/dist/esm/v6/loans.js +1 -56
  39. package/dist/esm/v6/loans.js.map +1 -1
  40. package/dist/esm/v6/permit2.d.ts.map +1 -1
  41. package/dist/esm/v6/permit2.js +1 -1
  42. package/dist/esm/v6/permit2.js.map +1 -1
  43. package/dist/esm/v6/uniswapV4.d.ts +1 -23
  44. package/dist/esm/v6/uniswapV4.d.ts.map +1 -1
  45. package/dist/esm/v6/uniswapV4.js +2 -59
  46. package/dist/esm/v6/uniswapV4.js.map +1 -1
  47. package/dist/esm/v6/uniswapV4Deployments.d.ts +28 -0
  48. package/dist/esm/v6/uniswapV4Deployments.d.ts.map +1 -0
  49. package/dist/esm/v6/uniswapV4Deployments.js +71 -0
  50. package/dist/esm/v6/uniswapV4Deployments.js.map +1 -0
  51. package/dist/esm/v6/uniswapV4Fees.d.ts +76 -0
  52. package/dist/esm/v6/uniswapV4Fees.d.ts.map +1 -0
  53. package/dist/esm/v6/uniswapV4Fees.js +161 -0
  54. package/dist/esm/v6/uniswapV4Fees.js.map +1 -0
  55. package/package.json +37 -1
@@ -0,0 +1,161 @@
1
+ import { encodeAbiParameters, encodeFunctionData, encodePacked, keccak256, } from "viem";
2
+ import { UNISWAP_V4_STATE_VIEW_ADDRESSES } from "./uniswapV4Deployments.js";
3
+ const UINT256_MAX = (1n << 256n) - 1n;
4
+ const Q128 = 1n << 128n;
5
+ const STATE_VIEW_ABI = [
6
+ {
7
+ type: "function",
8
+ name: "getFeeGrowthInside",
9
+ stateMutability: "view",
10
+ inputs: [
11
+ { name: "poolId", type: "bytes32" },
12
+ { name: "tickLower", type: "int24" },
13
+ { name: "tickUpper", type: "int24" },
14
+ ],
15
+ outputs: [
16
+ { name: "feeGrowthInside0X128", type: "uint256" },
17
+ { name: "feeGrowthInside1X128", type: "uint256" },
18
+ ],
19
+ },
20
+ {
21
+ type: "function",
22
+ name: "getPositionInfo",
23
+ stateMutability: "view",
24
+ inputs: [
25
+ { name: "poolId", type: "bytes32" },
26
+ { name: "positionId", type: "bytes32" },
27
+ ],
28
+ outputs: [
29
+ { name: "liquidity", type: "uint128" },
30
+ { name: "feeGrowthInside0LastX128", type: "uint256" },
31
+ { name: "feeGrowthInside1LastX128", type: "uint256" },
32
+ ],
33
+ },
34
+ ];
35
+ const POSITION_MANAGER_ABI = [
36
+ {
37
+ type: "function",
38
+ name: "modifyLiquidities",
39
+ stateMutability: "payable",
40
+ inputs: [
41
+ { name: "unlockData", type: "bytes" },
42
+ { name: "deadline", type: "uint256" },
43
+ ],
44
+ outputs: [],
45
+ },
46
+ ];
47
+ /** v4-periphery `Actions.DECREASE_LIQUIDITY`. */
48
+ const ACTION_DECREASE_LIQUIDITY = 0x01;
49
+ /** v4-periphery `Actions.TAKE_PAIR`. */
50
+ const ACTION_TAKE_PAIR = 0x11;
51
+ /**
52
+ * The PoolManager position key: `keccak256(abi.encodePacked(owner, tickLower,
53
+ * tickUpper, salt))`. For a PositionManager-held position the owner is the
54
+ * PositionManager and the salt is the position's token id.
55
+ */
56
+ export function uniswapV4PositionId({ owner, tickLower, tickUpper, salt, }) {
57
+ return keccak256(encodePacked(["address", "int24", "int24", "bytes32"], [
58
+ owner,
59
+ tickLower,
60
+ tickUpper,
61
+ `0x${salt.toString(16).padStart(64, "0")}`,
62
+ ]));
63
+ }
64
+ /**
65
+ * Fees a position has accrued since its last checkpoint, from the pool's fee
66
+ * growth accumulators.
67
+ *
68
+ * @remarks Fee growth accumulators are unchecked `uint256` in the pool and are
69
+ * expected to wrap; the difference is therefore taken modulo 2^256, exactly as
70
+ * Solidity computes it. A checked subtraction would read a wrapped accumulator
71
+ * as a negative (or enormous) balance.
72
+ */
73
+ export function uniswapV4FeesOwed({ liquidity, feeGrowthInsideLastX128, feeGrowthInsideX128, }) {
74
+ if (liquidity <= 0n)
75
+ return 0n;
76
+ const delta = (feeGrowthInsideX128 - feeGrowthInsideLastX128) & UINT256_MAX;
77
+ return (delta * liquidity) / Q128;
78
+ }
79
+ /**
80
+ * Read a position's unclaimed fees through StateView.
81
+ *
82
+ * This is the fees CLAIMABLE NOW, not the position's lifetime earnings: the
83
+ * pool rewrites `feeGrowthInsideLast` on every collect, so anything already
84
+ * taken is no longer visible here. Reconstructing lifetime earnings means
85
+ * replaying the position's `ModifyLiquidity` events against archive state.
86
+ */
87
+ export async function readUniswapV4PositionFees(client, { chainId, stateView, poolId, positionManager, tokenId, tickLower, tickUpper, }) {
88
+ const lens = stateView ??
89
+ (chainId
90
+ ? UNISWAP_V4_STATE_VIEW_ADDRESSES[chainId]
91
+ : undefined);
92
+ if (!lens) {
93
+ throw new Error(`No Uniswap V4 StateView deployment for chain ${chainId ?? "unknown"}.`);
94
+ }
95
+ const positionId = uniswapV4PositionId({
96
+ owner: positionManager,
97
+ tickLower,
98
+ tickUpper,
99
+ salt: tokenId,
100
+ });
101
+ const [position, inside] = await Promise.all([
102
+ client.readContract({
103
+ address: lens,
104
+ abi: STATE_VIEW_ABI,
105
+ functionName: "getPositionInfo",
106
+ args: [poolId, positionId],
107
+ }),
108
+ client.readContract({
109
+ address: lens,
110
+ abi: STATE_VIEW_ABI,
111
+ functionName: "getFeeGrowthInside",
112
+ args: [poolId, tickLower, tickUpper],
113
+ }),
114
+ ]);
115
+ const [liquidity, feeGrowthInside0Last, feeGrowthInside1Last] = position;
116
+ const [feeGrowthInside0, feeGrowthInside1] = inside;
117
+ return {
118
+ liquidity,
119
+ amount0: uniswapV4FeesOwed({
120
+ liquidity,
121
+ feeGrowthInsideLastX128: feeGrowthInside0Last,
122
+ feeGrowthInsideX128: feeGrowthInside0,
123
+ }),
124
+ amount1: uniswapV4FeesOwed({
125
+ liquidity,
126
+ feeGrowthInsideLastX128: feeGrowthInside1Last,
127
+ feeGrowthInsideX128: feeGrowthInside1,
128
+ }),
129
+ };
130
+ }
131
+ /**
132
+ * Collect a position's fees without touching its liquidity.
133
+ *
134
+ * A V4 "collect" is a zero-liquidity decrease: the pool settles the accrued
135
+ * fees into the position's delta, and TAKE_PAIR pays both currencies out. The
136
+ * minimum-out parameters are 0 because nothing is swapped — the amounts are
137
+ * whatever the pool has already accrued, so a floor could only make a valid
138
+ * claim revert.
139
+ */
140
+ export function buildCollectUniswapV4FeesTx({ positionManager, tokenId, currency0, currency1, recipient, deadline, }) {
141
+ const decreaseParams = encodeAbiParameters([
142
+ { type: "uint256" },
143
+ { type: "uint128" },
144
+ { type: "uint128" },
145
+ { type: "uint128" },
146
+ { type: "bytes" },
147
+ ], [tokenId, 0n, 0n, 0n, "0x"]);
148
+ const takeParams = encodeAbiParameters([{ type: "address" }, { type: "address" }, { type: "address" }], [currency0, currency1, recipient]);
149
+ const actions = encodePacked(["uint8", "uint8"], [ACTION_DECREASE_LIQUIDITY, ACTION_TAKE_PAIR]);
150
+ const unlockData = encodeAbiParameters([{ type: "bytes" }, { type: "bytes[]" }], [actions, [decreaseParams, takeParams]]);
151
+ return {
152
+ to: positionManager,
153
+ data: encodeFunctionData({
154
+ abi: POSITION_MANAGER_ABI,
155
+ functionName: "modifyLiquidities",
156
+ args: [unlockData, deadline],
157
+ }),
158
+ value: 0n,
159
+ };
160
+ }
161
+ //# sourceMappingURL=uniswapV4Fees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswapV4Fees.js","sourceRoot":"","sources":["../../../src/v6/uniswapV4Fees.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@bananapus/nana-sdk-core",
3
- "version": "1.10.0",
3
+ "version": "1.11.0",
4
4
  "type": "module",
5
+ "sideEffects": false,
5
6
  "repository": {
6
7
  "type": "git",
7
8
  "url": "https://github.com/Bananapus/juice-sdk-v4",
@@ -29,6 +30,41 @@
29
30
  "types": "./dist/esm/v6/index.d.ts",
30
31
  "import": "./dist/esm/v6/index.js",
31
32
  "require": "./dist/cjs/v6/index.js"
33
+ },
34
+ "./v6/direct-pay": {
35
+ "types": "./dist/esm/v6/directPay.d.ts",
36
+ "import": "./dist/esm/v6/directPay.js",
37
+ "require": "./dist/cjs/v6/directPay.js"
38
+ },
39
+ "./v6/permit2": {
40
+ "types": "./dist/esm/v6/permit2.d.ts",
41
+ "import": "./dist/esm/v6/permit2.js",
42
+ "require": "./dist/cjs/v6/permit2.js"
43
+ },
44
+ "./v6/loans": {
45
+ "types": "./dist/esm/v6/loans.d.ts",
46
+ "import": "./dist/esm/v6/loans.js",
47
+ "require": "./dist/cjs/v6/loans.js"
48
+ },
49
+ "./v6/loan-math": {
50
+ "types": "./dist/esm/v6/loanMath.d.ts",
51
+ "import": "./dist/esm/v6/loanMath.js",
52
+ "require": "./dist/cjs/v6/loanMath.js"
53
+ },
54
+ "./v6/cash-out": {
55
+ "types": "./dist/esm/v6/cashOut.d.ts",
56
+ "import": "./dist/esm/v6/cashOut.js",
57
+ "require": "./dist/cjs/v6/cashOut.js"
58
+ },
59
+ "./v6/uniswap-v4": {
60
+ "types": "./dist/esm/v6/uniswapV4.d.ts",
61
+ "import": "./dist/esm/v6/uniswapV4.js",
62
+ "require": "./dist/cjs/v6/uniswapV4.js"
63
+ },
64
+ "./v6/uniswap-v4-deployments": {
65
+ "types": "./dist/esm/v6/uniswapV4Deployments.d.ts",
66
+ "import": "./dist/esm/v6/uniswapV4Deployments.js",
67
+ "require": "./dist/cjs/v6/uniswapV4Deployments.js"
32
68
  }
33
69
  },
34
70
  "files": [