@bananapus/nana-sdk-core 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +1 -0
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/ipfs.d.ts +33 -1
- package/dist/cjs/utils/ipfs.d.ts.map +1 -1
- package/dist/cjs/utils/ipfs.js +212 -8
- package/dist/cjs/utils/ipfs.js.map +1 -1
- package/dist/cjs/utils/ipfs.test.js +34 -0
- package/dist/cjs/utils/ipfs.test.js.map +1 -1
- package/dist/cjs/v6/index.d.ts +2 -0
- package/dist/cjs/v6/index.d.ts.map +1 -1
- package/dist/cjs/v6/index.js +2 -0
- package/dist/cjs/v6/index.js.map +1 -1
- package/dist/cjs/v6/launch.d.ts +23 -2
- package/dist/cjs/v6/launch.d.ts.map +1 -1
- package/dist/cjs/v6/launch.js +40 -1
- package/dist/cjs/v6/launch.js.map +1 -1
- package/dist/cjs/v6/launch.test.js +25 -0
- package/dist/cjs/v6/launch.test.js.map +1 -1
- package/dist/cjs/v6/nft.d.ts +67 -0
- package/dist/cjs/v6/nft.d.ts.map +1 -1
- package/dist/cjs/v6/nft.js +192 -2
- package/dist/cjs/v6/nft.js.map +1 -1
- package/dist/cjs/v6/nft.test.js +74 -1
- package/dist/cjs/v6/nft.test.js.map +1 -1
- package/dist/cjs/v6/permissions.d.ts +21 -0
- package/dist/cjs/v6/permissions.d.ts.map +1 -1
- package/dist/cjs/v6/permissions.js +44 -1
- package/dist/cjs/v6/permissions.js.map +1 -1
- package/dist/cjs/v6/permissions.test.js +25 -0
- package/dist/cjs/v6/permissions.test.js.map +1 -1
- package/dist/cjs/v6/projectPayers.d.ts +178 -0
- package/dist/cjs/v6/projectPayers.d.ts.map +1 -0
- package/dist/cjs/v6/projectPayers.js +108 -0
- package/dist/cjs/v6/projectPayers.js.map +1 -0
- package/dist/cjs/v6/projectPayers.test.d.ts +2 -0
- package/dist/cjs/v6/projectPayers.test.d.ts.map +1 -0
- package/dist/cjs/v6/projectPayers.test.js +85 -0
- package/dist/cjs/v6/projectPayers.test.js.map +1 -0
- package/dist/cjs/v6/revnets.d.ts +3 -2
- package/dist/cjs/v6/revnets.d.ts.map +1 -1
- package/dist/cjs/v6/revnets.js +3 -2
- package/dist/cjs/v6/revnets.js.map +1 -1
- package/dist/cjs/v6/rulesets.d.ts +42 -0
- package/dist/cjs/v6/rulesets.d.ts.map +1 -1
- package/dist/cjs/v6/rulesets.js +87 -0
- package/dist/cjs/v6/rulesets.js.map +1 -1
- package/dist/cjs/v6/rulesets.test.js +54 -0
- package/dist/cjs/v6/rulesets.test.js.map +1 -1
- package/dist/cjs/v6/suckers.d.ts +740 -2
- package/dist/cjs/v6/suckers.d.ts.map +1 -1
- package/dist/cjs/v6/suckers.js +647 -8
- package/dist/cjs/v6/suckers.js.map +1 -1
- package/dist/cjs/v6/suckers.test.js +228 -0
- package/dist/cjs/v6/suckers.test.js.map +1 -1
- package/dist/cjs/v6/uniswapV4.d.ts +82 -0
- package/dist/cjs/v6/uniswapV4.d.ts.map +1 -0
- package/dist/cjs/v6/uniswapV4.js +336 -0
- package/dist/cjs/v6/uniswapV4.js.map +1 -0
- package/dist/cjs/v6/uniswapV4.test.d.ts +2 -0
- package/dist/cjs/v6/uniswapV4.test.d.ts.map +1 -0
- package/dist/cjs/v6/uniswapV4.test.js +128 -0
- package/dist/cjs/v6/uniswapV4.test.js.map +1 -0
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/ipfs.d.ts +33 -1
- package/dist/esm/utils/ipfs.d.ts.map +1 -1
- package/dist/esm/utils/ipfs.js +204 -8
- package/dist/esm/utils/ipfs.js.map +1 -1
- package/dist/esm/utils/ipfs.test.js +35 -1
- package/dist/esm/utils/ipfs.test.js.map +1 -1
- package/dist/esm/v6/index.d.ts +2 -0
- package/dist/esm/v6/index.d.ts.map +1 -1
- package/dist/esm/v6/index.js +2 -0
- package/dist/esm/v6/index.js.map +1 -1
- package/dist/esm/v6/launch.d.ts +23 -2
- package/dist/esm/v6/launch.d.ts.map +1 -1
- package/dist/esm/v6/launch.js +39 -2
- package/dist/esm/v6/launch.js.map +1 -1
- package/dist/esm/v6/launch.test.js +27 -2
- package/dist/esm/v6/launch.test.js.map +1 -1
- package/dist/esm/v6/nft.d.ts +67 -0
- package/dist/esm/v6/nft.d.ts.map +1 -1
- package/dist/esm/v6/nft.js +183 -1
- package/dist/esm/v6/nft.js.map +1 -1
- package/dist/esm/v6/nft.test.js +75 -2
- package/dist/esm/v6/nft.test.js.map +1 -1
- package/dist/esm/v6/permissions.d.ts +21 -0
- package/dist/esm/v6/permissions.d.ts.map +1 -1
- package/dist/esm/v6/permissions.js +40 -0
- package/dist/esm/v6/permissions.js.map +1 -1
- package/dist/esm/v6/permissions.test.js +26 -1
- package/dist/esm/v6/permissions.test.js.map +1 -1
- package/dist/esm/v6/projectPayers.d.ts +178 -0
- package/dist/esm/v6/projectPayers.d.ts.map +1 -0
- package/dist/esm/v6/projectPayers.js +101 -0
- package/dist/esm/v6/projectPayers.js.map +1 -0
- package/dist/esm/v6/projectPayers.test.d.ts +2 -0
- package/dist/esm/v6/projectPayers.test.d.ts.map +1 -0
- package/dist/esm/v6/projectPayers.test.js +83 -0
- package/dist/esm/v6/projectPayers.test.js.map +1 -0
- package/dist/esm/v6/revnets.d.ts +3 -2
- package/dist/esm/v6/revnets.d.ts.map +1 -1
- package/dist/esm/v6/revnets.js +3 -2
- package/dist/esm/v6/revnets.js.map +1 -1
- package/dist/esm/v6/rulesets.d.ts +42 -0
- package/dist/esm/v6/rulesets.d.ts.map +1 -1
- package/dist/esm/v6/rulesets.js +83 -0
- package/dist/esm/v6/rulesets.js.map +1 -1
- package/dist/esm/v6/rulesets.test.js +55 -1
- package/dist/esm/v6/rulesets.test.js.map +1 -1
- package/dist/esm/v6/suckers.d.ts +740 -2
- package/dist/esm/v6/suckers.d.ts.map +1 -1
- package/dist/esm/v6/suckers.js +630 -8
- package/dist/esm/v6/suckers.js.map +1 -1
- package/dist/esm/v6/suckers.test.js +230 -2
- package/dist/esm/v6/suckers.test.js.map +1 -1
- package/dist/esm/v6/uniswapV4.d.ts +82 -0
- package/dist/esm/v6/uniswapV4.d.ts.map +1 -0
- package/dist/esm/v6/uniswapV4.js +318 -0
- package/dist/esm/v6/uniswapV4.js.map +1 -0
- package/dist/esm/v6/uniswapV4.test.d.ts +2 -0
- package/dist/esm/v6/uniswapV4.test.d.ts.map +1 -0
- package/dist/esm/v6/uniswapV4.test.js +126 -0
- package/dist/esm/v6/uniswapV4.test.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UNISWAP_V4_MODIFY_LIQUIDITY_TOPIC = exports.UNISWAP_V4_INITIALIZE_TOPIC = exports.UNISWAP_V4_MAX_TICK = exports.UNISWAP_V4_Q96 = exports.UNISWAP_PERMIT2_ADDRESS = exports.UNISWAP_V4_QUOTER_ADDRESSES = exports.UNISWAP_V4_POSITION_MANAGER_ADDRESSES = exports.UNISWAP_V4_POOL_MANAGER_ADDRESSES = void 0;
|
|
4
|
+
exports.uniswapV4Deployment = uniswapV4Deployment;
|
|
5
|
+
exports.uniswapV4PoolId = uniswapV4PoolId;
|
|
6
|
+
exports.uniswapV4PoolStateSlot = uniswapV4PoolStateSlot;
|
|
7
|
+
exports.uniswapV4SqrtPriceX96FromSlot0 = uniswapV4SqrtPriceX96FromSlot0;
|
|
8
|
+
exports.uniswapV4PriceFromSqrtPriceX96 = uniswapV4PriceFromSqrtPriceX96;
|
|
9
|
+
exports.uniswapV4SqrtPriceX96AtTick = uniswapV4SqrtPriceX96AtTick;
|
|
10
|
+
exports.uniswapV4AmountsForLiquidity = uniswapV4AmountsForLiquidity;
|
|
11
|
+
exports.uniswapV4LiquidityForAmounts = uniswapV4LiquidityForAmounts;
|
|
12
|
+
exports.uniswapV4AlignTickDown = uniswapV4AlignTickDown;
|
|
13
|
+
exports.uniswapV4AlignTickUp = uniswapV4AlignTickUp;
|
|
14
|
+
exports.uniswapV4PositionTicks = uniswapV4PositionTicks;
|
|
15
|
+
exports.uniswapV4CounterpartAmount = uniswapV4CounterpartAmount;
|
|
16
|
+
exports.uniswapV4DefaultPriceRange = uniswapV4DefaultPriceRange;
|
|
17
|
+
exports.uniswapV4PositionTokenIdFromLog = uniswapV4PositionTokenIdFromLog;
|
|
18
|
+
exports.isUniswapV4PoolManager = isUniswapV4PoolManager;
|
|
19
|
+
const viem_1 = require("viem");
|
|
20
|
+
/**
|
|
21
|
+
* Canonical Uniswap V4 PoolManager deployments used by Juicebox v6.
|
|
22
|
+
* Optimism Sepolia is intentionally absent: deploy-all skips the Uniswap stack
|
|
23
|
+
* there because Uniswap has not published supported V4 periphery deployments.
|
|
24
|
+
*/
|
|
25
|
+
exports.UNISWAP_V4_POOL_MANAGER_ADDRESSES = {
|
|
26
|
+
1: "0x000000000004444c5dc75cb358380d2e3de08a90",
|
|
27
|
+
10: "0x9a13f98cb987694c9f086b1f5eb990eea8264ec3",
|
|
28
|
+
8453: "0x498581ff718922c3f8e6a244956af099b2652b2b",
|
|
29
|
+
42161: "0x360e68faccca8ca495c1b759fd9eee466db9fb32",
|
|
30
|
+
84532: "0x05e73354cfdd6745c338b50bcfdfa3aa6fa03408",
|
|
31
|
+
421614: "0xfb3e0c6f74eb1a21cc1da29aec80d2dfe6c9a317",
|
|
32
|
+
11155111: "0xe03a1074c86cfedd5c142c4f04f1a1536e203543",
|
|
33
|
+
};
|
|
34
|
+
/** Canonical Uniswap V4 PositionManager deployments used by Juicebox v6. */
|
|
35
|
+
exports.UNISWAP_V4_POSITION_MANAGER_ADDRESSES = {
|
|
36
|
+
1: "0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e",
|
|
37
|
+
10: "0x3c3ea4b57a46241e54610e5f022e5c45859a1017",
|
|
38
|
+
8453: "0x7c5f5a4bbd8fd63184577525326123b519429bdc",
|
|
39
|
+
42161: "0xd88f38f930b7952f2db2432cb002e7abbf3dd869",
|
|
40
|
+
84532: "0x4b2c77d209d3405f41a037ec6c77f7f5b8e2ca80",
|
|
41
|
+
421614: "0xac631556d3d4019c95769033b5e719dd77124bac",
|
|
42
|
+
11155111: "0x429ba70129df741b2ca2a85bc3a2a3328e5c09b4",
|
|
43
|
+
};
|
|
44
|
+
/** Canonical V4Quoter deployments; missing chains must fail closed. */
|
|
45
|
+
exports.UNISWAP_V4_QUOTER_ADDRESSES = {
|
|
46
|
+
1: "0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203",
|
|
47
|
+
10: "0x1f3131a13296fb91c90870043742c3cdbff1a8d7",
|
|
48
|
+
8453: "0x0d5e0f971ed27fbff6c2837bf31316121532048d",
|
|
49
|
+
42161: "0x3972c00f7ed4885e145823eb7c655375d275a1c5",
|
|
50
|
+
84532: "0x4a6513c898fe1b2d0e78d3b0e0a4a151589b1cba",
|
|
51
|
+
421614: "0x7de51022d70a725b508085468052e25e22b5c4c9",
|
|
52
|
+
11155111: "0x61b3f2011a92d183c7dbadbda940a7555ccf9227",
|
|
53
|
+
};
|
|
54
|
+
/** Permit2 is deployed at the same address on supported EVM chains. */
|
|
55
|
+
exports.UNISWAP_PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
56
|
+
/** Resolve the supported V4 surface for a chain without guessing addresses. */
|
|
57
|
+
function uniswapV4Deployment(chainId) {
|
|
58
|
+
const poolManager = exports.UNISWAP_V4_POOL_MANAGER_ADDRESSES[chainId];
|
|
59
|
+
if (!poolManager)
|
|
60
|
+
return null;
|
|
61
|
+
return {
|
|
62
|
+
poolManager,
|
|
63
|
+
positionManager: exports.UNISWAP_V4_POSITION_MANAGER_ADDRESSES[chainId] ?? null,
|
|
64
|
+
quoter: exports.UNISWAP_V4_QUOTER_ADDRESSES[chainId] ?? null,
|
|
65
|
+
permit2: exports.UNISWAP_PERMIT2_ADDRESS,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
exports.UNISWAP_V4_Q96 = 1n << 96n;
|
|
69
|
+
exports.UNISWAP_V4_MAX_TICK = 887_272;
|
|
70
|
+
const POOL_KEY_TUPLE = [
|
|
71
|
+
{
|
|
72
|
+
type: "tuple",
|
|
73
|
+
components: [
|
|
74
|
+
{ type: "address" },
|
|
75
|
+
{ type: "address" },
|
|
76
|
+
{ type: "uint24" },
|
|
77
|
+
{ type: "int24" },
|
|
78
|
+
{ type: "address" },
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
/** `PoolId.unwrap(PoolIdLibrary.toId(key))`. */
|
|
83
|
+
function uniswapV4PoolId(key) {
|
|
84
|
+
return (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)(POOL_KEY_TUPLE, [
|
|
85
|
+
[key.currency0, key.currency1, key.fee, key.tickSpacing, key.hooks],
|
|
86
|
+
]));
|
|
87
|
+
}
|
|
88
|
+
/** Storage slot containing the pool's packed slot0 in PoolManager. */
|
|
89
|
+
function uniswapV4PoolStateSlot(poolId) {
|
|
90
|
+
return (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([{ type: "bytes32" }, { type: "uint256" }], [poolId, 6n]));
|
|
91
|
+
}
|
|
92
|
+
/** Extract slot0's low-160-bit sqrtPriceX96 value. */
|
|
93
|
+
function uniswapV4SqrtPriceX96FromSlot0(slot0) {
|
|
94
|
+
return BigInt(slot0) & ((1n << 160n) - 1n);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Convert a pool sqrt price into human pair-token units per project token.
|
|
98
|
+
* Juicebox project tokens use 18 decimals.
|
|
99
|
+
*/
|
|
100
|
+
function uniswapV4PriceFromSqrtPriceX96(sqrtPriceX96, pairIsCurrency0, pairTokenDecimals) {
|
|
101
|
+
if (sqrtPriceX96 <= 0n)
|
|
102
|
+
return null;
|
|
103
|
+
const sqrtPrice = Number(sqrtPriceX96) / 2 ** 96;
|
|
104
|
+
const rawPrice = sqrtPrice * sqrtPrice;
|
|
105
|
+
const rawRatio = pairIsCurrency0
|
|
106
|
+
? rawPrice > 0
|
|
107
|
+
? 1 / rawPrice
|
|
108
|
+
: null
|
|
109
|
+
: rawPrice;
|
|
110
|
+
if (rawRatio === null)
|
|
111
|
+
return null;
|
|
112
|
+
const price = rawRatio * 10 ** (18 - pairTokenDecimals);
|
|
113
|
+
return Number.isFinite(price) && price > 0 ? price : null;
|
|
114
|
+
}
|
|
115
|
+
/** Exact integer port of Uniswap V4 TickMath.getSqrtPriceAtTick. */
|
|
116
|
+
function uniswapV4SqrtPriceX96AtTick(tick) {
|
|
117
|
+
tick = Math.trunc(tick);
|
|
118
|
+
const absoluteTick = tick < 0 ? -tick : tick;
|
|
119
|
+
if (absoluteTick > exports.UNISWAP_V4_MAX_TICK) {
|
|
120
|
+
throw new Error("Uniswap V4 tick is outside the supported range.");
|
|
121
|
+
}
|
|
122
|
+
let price = absoluteTick & 0x1 ? 0xfffcb933bd6fad37aa2d162d1a594001n : 1n << 128n;
|
|
123
|
+
if (absoluteTick & 0x2)
|
|
124
|
+
price = (price * 0xfff97272373d413259a46990580e213an) >> 128n;
|
|
125
|
+
if (absoluteTick & 0x4)
|
|
126
|
+
price = (price * 0xfff2e50f5f656932ef12357cf3c7fdccn) >> 128n;
|
|
127
|
+
if (absoluteTick & 0x8)
|
|
128
|
+
price = (price * 0xffe5caca7e10e4e61c3624eaa0941cd0n) >> 128n;
|
|
129
|
+
if (absoluteTick & 0x10)
|
|
130
|
+
price = (price * 0xffcb9843d60f6159c9db58835c926644n) >> 128n;
|
|
131
|
+
if (absoluteTick & 0x20)
|
|
132
|
+
price = (price * 0xff973b41fa98c081472e6896dfb254c0n) >> 128n;
|
|
133
|
+
if (absoluteTick & 0x40)
|
|
134
|
+
price = (price * 0xff2ea16466c96a3843ec78b326b52861n) >> 128n;
|
|
135
|
+
if (absoluteTick & 0x80)
|
|
136
|
+
price = (price * 0xfe5dee046a99a2a811c461f1969c3053n) >> 128n;
|
|
137
|
+
if (absoluteTick & 0x100)
|
|
138
|
+
price = (price * 0xfcbe86c7900a88aedcffc83b479aa3a4n) >> 128n;
|
|
139
|
+
if (absoluteTick & 0x200)
|
|
140
|
+
price = (price * 0xf987a7253ac413176f2b074cf7815e54n) >> 128n;
|
|
141
|
+
if (absoluteTick & 0x400)
|
|
142
|
+
price = (price * 0xf3392b0822b70005940c7a398e4b70f3n) >> 128n;
|
|
143
|
+
if (absoluteTick & 0x800)
|
|
144
|
+
price = (price * 0xe7159475a2c29b7443b29c7fa6e889d9n) >> 128n;
|
|
145
|
+
if (absoluteTick & 0x1000)
|
|
146
|
+
price = (price * 0xd097f3bdfd2022b8845ad8f792aa5825n) >> 128n;
|
|
147
|
+
if (absoluteTick & 0x2000)
|
|
148
|
+
price = (price * 0xa9f746462d870fdf8a65dc1f90e061e5n) >> 128n;
|
|
149
|
+
if (absoluteTick & 0x4000)
|
|
150
|
+
price = (price * 0x70d869a156d2a1b890bb3df62baf32f7n) >> 128n;
|
|
151
|
+
if (absoluteTick & 0x8000)
|
|
152
|
+
price = (price * 0x31be135f97d08fd981231505542fcfa6n) >> 128n;
|
|
153
|
+
if (absoluteTick & 0x10000)
|
|
154
|
+
price = (price * 0x9aa508b5b7a84e1c677de54f3e99bc9n) >> 128n;
|
|
155
|
+
if (absoluteTick & 0x20000)
|
|
156
|
+
price = (price * 0x5d6af8dedb81196699c329225ee604n) >> 128n;
|
|
157
|
+
if (absoluteTick & 0x40000)
|
|
158
|
+
price = (price * 0x2216e584f5fa1ea926041bedfe98n) >> 128n;
|
|
159
|
+
if (absoluteTick & 0x80000)
|
|
160
|
+
price = (price * 0x48a170391f7dc42444e8fa2n) >> 128n;
|
|
161
|
+
if (tick > 0)
|
|
162
|
+
price = ((1n << 256n) - 1n) / price;
|
|
163
|
+
return (price + 0xffffffffn) >> 32n;
|
|
164
|
+
}
|
|
165
|
+
function sortSqrtPrices(a, b) {
|
|
166
|
+
return a > b ? [b, a] : [a, b];
|
|
167
|
+
}
|
|
168
|
+
function requireSqrtRange(a, b) {
|
|
169
|
+
if (a <= 0n || b <= 0n || a === b) {
|
|
170
|
+
throw new Error("A Uniswap V4 sqrt-price range must be positive and non-zero.");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function amount0ForLiquidity(sqrtA, sqrtB, liquidity) {
|
|
174
|
+
const [lower, upper] = sortSqrtPrices(sqrtA, sqrtB);
|
|
175
|
+
return ((liquidity << 96n) * (upper - lower)) / upper / lower;
|
|
176
|
+
}
|
|
177
|
+
function amount1ForLiquidity(sqrtA, sqrtB, liquidity) {
|
|
178
|
+
const [lower, upper] = sortSqrtPrices(sqrtA, sqrtB);
|
|
179
|
+
return (liquidity * (upper - lower)) / exports.UNISWAP_V4_Q96;
|
|
180
|
+
}
|
|
181
|
+
/** Currency amounts represented by liquidity at a current sqrt price. */
|
|
182
|
+
function uniswapV4AmountsForLiquidity(currentSqrtPrice, sqrtPriceA, sqrtPriceB, liquidity) {
|
|
183
|
+
requireSqrtRange(sqrtPriceA, sqrtPriceB);
|
|
184
|
+
if (currentSqrtPrice <= 0n || liquidity < 0n) {
|
|
185
|
+
throw new Error("Uniswap V4 prices must be positive and liquidity cannot be negative.");
|
|
186
|
+
}
|
|
187
|
+
const [lower, upper] = sortSqrtPrices(sqrtPriceA, sqrtPriceB);
|
|
188
|
+
if (currentSqrtPrice <= lower) {
|
|
189
|
+
return {
|
|
190
|
+
amount0: amount0ForLiquidity(lower, upper, liquidity),
|
|
191
|
+
amount1: 0n,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
if (currentSqrtPrice < upper) {
|
|
195
|
+
return {
|
|
196
|
+
amount0: amount0ForLiquidity(currentSqrtPrice, upper, liquidity),
|
|
197
|
+
amount1: amount1ForLiquidity(lower, currentSqrtPrice, liquidity),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
amount0: 0n,
|
|
202
|
+
amount1: amount1ForLiquidity(lower, upper, liquidity),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
function liquidityForAmount0(sqrtA, sqrtB, amount0) {
|
|
206
|
+
const [lower, upper] = sortSqrtPrices(sqrtA, sqrtB);
|
|
207
|
+
return (amount0 * ((lower * upper) / exports.UNISWAP_V4_Q96)) / (upper - lower);
|
|
208
|
+
}
|
|
209
|
+
function liquidityForAmount1(sqrtA, sqrtB, amount1) {
|
|
210
|
+
const [lower, upper] = sortSqrtPrices(sqrtA, sqrtB);
|
|
211
|
+
return (amount1 * exports.UNISWAP_V4_Q96) / (upper - lower);
|
|
212
|
+
}
|
|
213
|
+
/** Maximum liquidity supported by two token amounts over a range. */
|
|
214
|
+
function uniswapV4LiquidityForAmounts(currentSqrtPrice, sqrtPriceA, sqrtPriceB, amount0, amount1) {
|
|
215
|
+
requireSqrtRange(sqrtPriceA, sqrtPriceB);
|
|
216
|
+
if (currentSqrtPrice <= 0n || amount0 < 0n || amount1 < 0n) {
|
|
217
|
+
throw new Error("Uniswap V4 prices must be positive and amounts cannot be negative.");
|
|
218
|
+
}
|
|
219
|
+
const [lower, upper] = sortSqrtPrices(sqrtPriceA, sqrtPriceB);
|
|
220
|
+
if (currentSqrtPrice <= lower) {
|
|
221
|
+
return liquidityForAmount0(lower, upper, amount0);
|
|
222
|
+
}
|
|
223
|
+
if (currentSqrtPrice < upper) {
|
|
224
|
+
const liquidity0 = liquidityForAmount0(currentSqrtPrice, upper, amount0);
|
|
225
|
+
const liquidity1 = liquidityForAmount1(lower, currentSqrtPrice, amount1);
|
|
226
|
+
return liquidity0 < liquidity1 ? liquidity0 : liquidity1;
|
|
227
|
+
}
|
|
228
|
+
return liquidityForAmount1(lower, upper, amount1);
|
|
229
|
+
}
|
|
230
|
+
function requireTickSpacing(spacing) {
|
|
231
|
+
if (!Number.isInteger(spacing) || spacing <= 0) {
|
|
232
|
+
throw new Error("Uniswap V4 tick spacing must be a positive integer.");
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function requireIntegerTick(tick) {
|
|
236
|
+
if (!Number.isInteger(tick)) {
|
|
237
|
+
throw new Error("A Uniswap V4 tick must be an integer.");
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/** Align a tick down to its nearest usable tick. */
|
|
241
|
+
function uniswapV4AlignTickDown(tick, spacing) {
|
|
242
|
+
requireTickSpacing(spacing);
|
|
243
|
+
requireIntegerTick(tick);
|
|
244
|
+
let remainder = tick % spacing;
|
|
245
|
+
if (remainder !== 0 && tick < 0)
|
|
246
|
+
remainder += spacing;
|
|
247
|
+
return tick - remainder;
|
|
248
|
+
}
|
|
249
|
+
/** Align a tick up to its nearest usable tick. */
|
|
250
|
+
function uniswapV4AlignTickUp(tick, spacing) {
|
|
251
|
+
requireTickSpacing(spacing);
|
|
252
|
+
requireIntegerTick(tick);
|
|
253
|
+
return uniswapV4AlignTickDown(tick + spacing - 1, spacing);
|
|
254
|
+
}
|
|
255
|
+
function signExtend24(value) {
|
|
256
|
+
return Number(value & 0x800000n ? value - 0x1000000n : value);
|
|
257
|
+
}
|
|
258
|
+
/** Decode PositionManager's packed lower and upper ticks. */
|
|
259
|
+
function uniswapV4PositionTicks(positionInfo) {
|
|
260
|
+
return {
|
|
261
|
+
lower: signExtend24((positionInfo >> 8n) & 0xffffffn),
|
|
262
|
+
upper: signExtend24((positionInfo >> 32n) & 0xffffffn),
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Human-price counterpart amount for a concentrated-liquidity deposit.
|
|
267
|
+
* This float helper is for form auto-fill; transaction amounts should use the
|
|
268
|
+
* exact bigint liquidity helpers above.
|
|
269
|
+
*/
|
|
270
|
+
function uniswapV4CounterpartAmount(amount, inputIsPairToken, currentPrice, minPrice, maxPrice) {
|
|
271
|
+
if (!(amount > 0) ||
|
|
272
|
+
!(currentPrice > 0) ||
|
|
273
|
+
!(minPrice > 0) ||
|
|
274
|
+
!(maxPrice > minPrice)) {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
const currentSqrt = Math.sqrt(currentPrice);
|
|
278
|
+
const minSqrt = Math.sqrt(minPrice);
|
|
279
|
+
const maxSqrt = Math.sqrt(maxPrice);
|
|
280
|
+
if (currentPrice <= minPrice)
|
|
281
|
+
return inputIsPairToken ? null : 0;
|
|
282
|
+
if (currentPrice >= maxPrice)
|
|
283
|
+
return inputIsPairToken ? 0 : null;
|
|
284
|
+
if (inputIsPairToken) {
|
|
285
|
+
const liquidity = amount / (currentSqrt - minSqrt);
|
|
286
|
+
return liquidity * (1 / currentSqrt - 1 / maxSqrt);
|
|
287
|
+
}
|
|
288
|
+
const liquidity = amount / (1 / currentSqrt - 1 / maxSqrt);
|
|
289
|
+
return liquidity * (currentSqrt - minSqrt);
|
|
290
|
+
}
|
|
291
|
+
/** Choose the economic floor/ceiling range when it brackets spot. */
|
|
292
|
+
function uniswapV4DefaultPriceRange(poolPrice, cashOutFloor, issuanceCeiling) {
|
|
293
|
+
const spot = Number.isFinite(poolPrice) && poolPrice > 0 ? poolPrice : 0;
|
|
294
|
+
const floor = Number.isFinite(cashOutFloor) && cashOutFloor > 0 ? cashOutFloor : 0;
|
|
295
|
+
const ceiling = Number.isFinite(issuanceCeiling) && issuanceCeiling > 0
|
|
296
|
+
? issuanceCeiling
|
|
297
|
+
: 0;
|
|
298
|
+
const economic = spot > 0 && floor > 0 && ceiling > floor && floor < spot && spot < ceiling;
|
|
299
|
+
let min = economic ? floor : spot > 0 ? spot / 2 : ceiling / 10;
|
|
300
|
+
let max = economic ? ceiling : spot > 0 ? spot * 2 : ceiling;
|
|
301
|
+
if (spot > 0 && (!(min > 0) || min >= spot))
|
|
302
|
+
min = spot / 2;
|
|
303
|
+
if (spot > 0 && !(max > spot))
|
|
304
|
+
max = spot * 2;
|
|
305
|
+
if (!(min > 0) && max > 0)
|
|
306
|
+
min = max / 10;
|
|
307
|
+
if (!(max > min))
|
|
308
|
+
max = min > 0 ? min * 10 : 0;
|
|
309
|
+
return { min, max, economic };
|
|
310
|
+
}
|
|
311
|
+
exports.UNISWAP_V4_INITIALIZE_TOPIC = (0, viem_1.toEventSelector)("Initialize(bytes32,address,address,uint24,int24,address,uint160,int24)").toLowerCase();
|
|
312
|
+
exports.UNISWAP_V4_MODIFY_LIQUIDITY_TOPIC = (0, viem_1.toEventSelector)("ModifyLiquidity(bytes32,address,int24,int24,int256,bytes32)").toLowerCase();
|
|
313
|
+
/** Extract the PositionManager token id (the position salt) from a pool log. */
|
|
314
|
+
function uniswapV4PositionTokenIdFromLog(log, positionManager) {
|
|
315
|
+
if (String(log.topics?.[0] ?? "").toLowerCase() !==
|
|
316
|
+
exports.UNISWAP_V4_MODIFY_LIQUIDITY_TOPIC) {
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
const sender = String(log.topics?.[2] ?? "")
|
|
320
|
+
.slice(-40)
|
|
321
|
+
.toLowerCase();
|
|
322
|
+
if (sender !== positionManager.slice(2).toLowerCase())
|
|
323
|
+
return null;
|
|
324
|
+
const data = String(log.data ?? "");
|
|
325
|
+
if (!/^0x[0-9a-fA-F]{256}$/.test(data)) {
|
|
326
|
+
throw new Error("Malformed Uniswap V4 ModifyLiquidity log.");
|
|
327
|
+
}
|
|
328
|
+
const tokenId = BigInt(`0x${data.slice(194, 258)}`);
|
|
329
|
+
return tokenId > 0n ? tokenId : null;
|
|
330
|
+
}
|
|
331
|
+
/** Whether an address is one of the canonical PoolManager deployments. */
|
|
332
|
+
function isUniswapV4PoolManager(address) {
|
|
333
|
+
const normalized = address.toLowerCase();
|
|
334
|
+
return Object.values(exports.UNISWAP_V4_POOL_MANAGER_ADDRESSES).some((candidate) => candidate.toLowerCase() === normalized);
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=uniswapV4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uniswapV4.js","sourceRoot":"","sources":["../../../src/v6/uniswapV4.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uniswapV4.test.d.ts","sourceRoot":"","sources":["../../../src/v6/uniswapV4.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const viem_1 = require("viem");
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
const uniswapV4_js_1 = require("./uniswapV4.js");
|
|
6
|
+
const TOKEN = "0x00000000000000000000000000000000000000aa";
|
|
7
|
+
const HOOK = "0x00000000000000000000000000000000000000cc";
|
|
8
|
+
(0, vitest_1.describe)("Uniswap V4 pool primitives", () => {
|
|
9
|
+
(0, vitest_1.test)("derives stable pool ids and storage slots", () => {
|
|
10
|
+
const poolId = (0, uniswapV4_js_1.uniswapV4PoolId)({
|
|
11
|
+
currency0: viem_1.zeroAddress,
|
|
12
|
+
currency1: TOKEN,
|
|
13
|
+
fee: 10_000,
|
|
14
|
+
tickSpacing: 200,
|
|
15
|
+
hooks: HOOK,
|
|
16
|
+
});
|
|
17
|
+
(0, vitest_1.expect)(poolId).toMatch(/^0x[0-9a-f]{64}$/);
|
|
18
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4PoolStateSlot)(poolId)).toMatch(/^0x[0-9a-f]{64}$/);
|
|
19
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4PoolId)({
|
|
20
|
+
currency0: viem_1.zeroAddress,
|
|
21
|
+
currency1: TOKEN,
|
|
22
|
+
fee: 10_000,
|
|
23
|
+
tickSpacing: 200,
|
|
24
|
+
hooks: HOOK,
|
|
25
|
+
})).toBe(poolId);
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.test)("extracts slot0's low 160-bit sqrt price", () => {
|
|
28
|
+
const highBits = 123n << 160n;
|
|
29
|
+
const slot = `0x${(highBits | uniswapV4_js_1.UNISWAP_V4_Q96).toString(16).padStart(64, "0")}`;
|
|
30
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4SqrtPriceX96FromSlot0)(slot)).toBe(uniswapV4_js_1.UNISWAP_V4_Q96);
|
|
31
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4PriceFromSqrtPriceX96)(uniswapV4_js_1.UNISWAP_V4_Q96, false, 18)).toBe(1);
|
|
32
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4PriceFromSqrtPriceX96)(0n, false, 18)).toBeNull();
|
|
33
|
+
});
|
|
34
|
+
(0, vitest_1.test)("fails closed on Optimism Sepolia's unsupported V4 stack", () => {
|
|
35
|
+
(0, vitest_1.expect)(Object.keys(uniswapV4_js_1.UNISWAP_V4_POOL_MANAGER_ADDRESSES)).toHaveLength(7);
|
|
36
|
+
(0, vitest_1.expect)(uniswapV4_js_1.UNISWAP_V4_POOL_MANAGER_ADDRESSES[11155420]).toBeUndefined();
|
|
37
|
+
(0, vitest_1.expect)(uniswapV4_js_1.UNISWAP_V4_POSITION_MANAGER_ADDRESSES[11155420]).toBeUndefined();
|
|
38
|
+
(0, vitest_1.expect)(uniswapV4_js_1.UNISWAP_V4_QUOTER_ADDRESSES[11155420]).toBeUndefined();
|
|
39
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4Deployment)(11155420)).toBeNull();
|
|
40
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4Deployment)(1)).toMatchObject({
|
|
41
|
+
poolManager: uniswapV4_js_1.UNISWAP_V4_POOL_MANAGER_ADDRESSES[1],
|
|
42
|
+
positionManager: uniswapV4_js_1.UNISWAP_V4_POSITION_MANAGER_ADDRESSES[1],
|
|
43
|
+
quoter: uniswapV4_js_1.UNISWAP_V4_QUOTER_ADDRESSES[1],
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.isUniswapV4PoolManager)(uniswapV4_js_1.UNISWAP_V4_POOL_MANAGER_ADDRESSES[1])).toBe(true);
|
|
46
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.isUniswapV4PoolManager)(TOKEN)).toBe(false);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.describe)("Uniswap V4 tick and liquidity math", () => {
|
|
50
|
+
(0, vitest_1.test)("matches TickMath boundaries and is monotonic", () => {
|
|
51
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4SqrtPriceX96AtTick)(0)).toBe(uniswapV4_js_1.UNISWAP_V4_Q96);
|
|
52
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4SqrtPriceX96AtTick)(-uniswapV4_js_1.UNISWAP_V4_MAX_TICK)).toBe(4295128739n);
|
|
53
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4SqrtPriceX96AtTick)(uniswapV4_js_1.UNISWAP_V4_MAX_TICK)).toBe(1461446703485210103287273052203988822378723970342n);
|
|
54
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4SqrtPriceX96AtTick)(-200)).toBeLessThan((0, uniswapV4_js_1.uniswapV4SqrtPriceX96AtTick)(200));
|
|
55
|
+
(0, vitest_1.expect)(() => (0, uniswapV4_js_1.uniswapV4SqrtPriceX96AtTick)(uniswapV4_js_1.UNISWAP_V4_MAX_TICK + 1)).toThrow(/outside/);
|
|
56
|
+
});
|
|
57
|
+
(0, vitest_1.test)("derived liquidity never consumes more than the supplied amounts", () => {
|
|
58
|
+
const current = (0, uniswapV4_js_1.uniswapV4SqrtPriceX96AtTick)(0);
|
|
59
|
+
const lower = (0, uniswapV4_js_1.uniswapV4SqrtPriceX96AtTick)(-6_000);
|
|
60
|
+
const upper = (0, uniswapV4_js_1.uniswapV4SqrtPriceX96AtTick)(6_000);
|
|
61
|
+
const amount0 = 10n ** 18n;
|
|
62
|
+
const amount1 = 10n ** 18n;
|
|
63
|
+
const liquidity = (0, uniswapV4_js_1.uniswapV4LiquidityForAmounts)(current, lower, upper, amount0, amount1);
|
|
64
|
+
const needed = (0, uniswapV4_js_1.uniswapV4AmountsForLiquidity)(current, lower, upper, liquidity);
|
|
65
|
+
(0, vitest_1.expect)(liquidity).toBeGreaterThan(0n);
|
|
66
|
+
(0, vitest_1.expect)(needed.amount0).toBeLessThanOrEqual(amount0);
|
|
67
|
+
(0, vitest_1.expect)(needed.amount1).toBeLessThanOrEqual(amount1);
|
|
68
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4AmountsForLiquidity)(current, upper, lower, liquidity)).toEqual(needed);
|
|
69
|
+
(0, vitest_1.expect)(() => (0, uniswapV4_js_1.uniswapV4AmountsForLiquidity)(current, lower, lower, liquidity)).toThrow(/range/);
|
|
70
|
+
});
|
|
71
|
+
(0, vitest_1.test)("aligns positive and negative ticks in the correct direction", () => {
|
|
72
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4AlignTickDown)(250, 200)).toBe(200);
|
|
73
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4AlignTickDown)(-250, 200)).toBe(-400);
|
|
74
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4AlignTickUp)(250, 200)).toBe(400);
|
|
75
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4AlignTickUp)(-250, 200)).toBe(-200);
|
|
76
|
+
(0, vitest_1.expect)(() => (0, uniswapV4_js_1.uniswapV4AlignTickDown)(1.5, 200)).toThrow(/integer/);
|
|
77
|
+
});
|
|
78
|
+
(0, vitest_1.test)("unpacks signed lower and upper position ticks", () => {
|
|
79
|
+
const lower = -600n & 0xffffffn;
|
|
80
|
+
const upper = 1200n;
|
|
81
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4PositionTicks)((upper << 32n) | (lower << 8n))).toEqual({
|
|
82
|
+
lower: -600,
|
|
83
|
+
upper: 1_200,
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
(0, vitest_1.describe)("Uniswap V4 form projections and logs", () => {
|
|
88
|
+
(0, vitest_1.test)("counterpart amounts round-trip inside a range", () => {
|
|
89
|
+
const counterpart = (0, uniswapV4_js_1.uniswapV4CounterpartAmount)(3, true, 1, 0.5, 2);
|
|
90
|
+
(0, vitest_1.expect)(counterpart).not.toBeNull();
|
|
91
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4CounterpartAmount)(counterpart, false, 1, 0.5, 2)).toBeCloseTo(3);
|
|
92
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4CounterpartAmount)(3, true, 2, 0.5, 2)).toBe(0);
|
|
93
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4CounterpartAmount)(3, false, 2, 0.5, 2)).toBeNull();
|
|
94
|
+
});
|
|
95
|
+
(0, vitest_1.test)("prefers an economic corridor only when it brackets spot", () => {
|
|
96
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4DefaultPriceRange)(1, 0.5, 2)).toEqual({
|
|
97
|
+
min: 0.5,
|
|
98
|
+
max: 2,
|
|
99
|
+
economic: true,
|
|
100
|
+
});
|
|
101
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4DefaultPriceRange)(3, 0.5, 2)).toEqual({
|
|
102
|
+
min: 1.5,
|
|
103
|
+
max: 6,
|
|
104
|
+
economic: false,
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
(0, vitest_1.test)("extracts only PositionManager-issued position salts", () => {
|
|
108
|
+
const positionManager = uniswapV4_js_1.UNISWAP_V4_POSITION_MANAGER_ADDRESSES[1];
|
|
109
|
+
const data = (0, viem_1.encodeAbiParameters)([
|
|
110
|
+
{ type: "int24" },
|
|
111
|
+
{ type: "int24" },
|
|
112
|
+
{ type: "int256" },
|
|
113
|
+
{ type: "bytes32" },
|
|
114
|
+
], [-200, 200, 1n, (0, viem_1.pad)("0x2a", { size: 32 })]);
|
|
115
|
+
const log = {
|
|
116
|
+
topics: [
|
|
117
|
+
uniswapV4_js_1.UNISWAP_V4_MODIFY_LIQUIDITY_TOPIC,
|
|
118
|
+
viem_1.zeroHash,
|
|
119
|
+
(0, viem_1.pad)(positionManager, { size: 32 }),
|
|
120
|
+
],
|
|
121
|
+
data,
|
|
122
|
+
};
|
|
123
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4PositionTokenIdFromLog)(log, positionManager)).toBe(42n);
|
|
124
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4PositionTokenIdFromLog)(log, TOKEN)).toBeNull();
|
|
125
|
+
(0, vitest_1.expect)((0, uniswapV4_js_1.uniswapV4PositionTokenIdFromLog)({ ...log, topics: [viem_1.zeroHash, ...log.topics.slice(1)] }, positionManager)).toBeNull();
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
//# sourceMappingURL=uniswapV4.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uniswapV4.test.js","sourceRoot":"","sources":["../../../src/v6/uniswapV4.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
package/dist/esm/utils/ipfs.d.ts
CHANGED
|
@@ -1,12 +1,44 @@
|
|
|
1
1
|
export declare function ipfsGatewayUrl(cid: string | undefined, gatewayHostname?: string): string;
|
|
2
|
+
/** Return an `ipfs://` URI for a CID and optional path. */
|
|
3
|
+
export declare function ipfsUri(cid: string, path?: string): string;
|
|
4
|
+
/** Whether a value uses the native `ipfs://` URI scheme. */
|
|
5
|
+
export declare function isIpfsUri(value: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Extract the immutable `<cid>[/path]` part of an IPFS URI or HTTP gateway URL.
|
|
8
|
+
*
|
|
9
|
+
* Both path gateways (`https://host/ipfs/<cid>`) and CID subdomain gateways
|
|
10
|
+
* (`https://<cid>.ipfs.host/path`) are recognized. Returns `null` for ordinary
|
|
11
|
+
* HTTP URLs and malformed values.
|
|
12
|
+
*/
|
|
13
|
+
export declare function ipfsAssetPath(value: string): string | null;
|
|
14
|
+
/** Return the CID (without a path) from an IPFS URI or gateway URL. */
|
|
15
|
+
export declare function cidFromIpfsUri(value: string): string | null;
|
|
16
|
+
/** A lightweight CIDv0 / base32 CIDv1 shape check. */
|
|
17
|
+
export declare function isIpfsCid(value: string): boolean;
|
|
2
18
|
/**
|
|
3
19
|
* Return a hex-encoded CID to store on-chain.
|
|
4
20
|
* Hex-encoded CIDs are used to store some CIDs on-chain because they are more gas-efficient.
|
|
5
21
|
*/
|
|
6
|
-
export declare function encodeIpfsUri(cid: string): string
|
|
22
|
+
export declare function encodeIpfsUri(cid: string): `0x${string}`;
|
|
7
23
|
/**
|
|
8
24
|
* Return the IPFS CID from a given hex-endoded string.
|
|
9
25
|
* Hex-encoded CIDs are used to store some CIDs on-chain because they are more gas-efficient.
|
|
10
26
|
*/
|
|
11
27
|
export declare function decodeEncodedIpfsUri(hex: string): string;
|
|
28
|
+
/** Strict alias describing the on-chain representation more explicitly. */
|
|
29
|
+
export declare const cidV0ToBytes32: typeof encodeIpfsUri;
|
|
30
|
+
/**
|
|
31
|
+
* Decode a bytes32 sha2-256 digest into a CIDv0, returning `null` for the zero
|
|
32
|
+
* value or malformed input instead of throwing.
|
|
33
|
+
*/
|
|
34
|
+
export declare function bytes32ToCidV0(value: string): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Decode a stored tier metadata digest into equivalent immutable URI forms.
|
|
37
|
+
*
|
|
38
|
+
* The first candidate is the conventional DAG-PB CIDv0 used by Juicebox 721
|
|
39
|
+
* metadata. The second is a raw-codec CIDv1 over the same multihash, retained
|
|
40
|
+
* as a fallback for content that was pinned with a raw block codec. Legacy
|
|
41
|
+
* 33-byte values with a leading version marker are accepted as well.
|
|
42
|
+
*/
|
|
43
|
+
export declare function decodeEncodedIpfsUriCandidates(value: string | undefined | null): readonly [string, string] | null;
|
|
12
44
|
//# sourceMappingURL=ipfs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipfs.d.ts","sourceRoot":"","sources":["../../../src/utils/ipfs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ipfs.d.ts","sourceRoot":"","sources":["../../../src/utils/ipfs.ts"],"names":[],"mappings":"AAaA,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAIR;AAED,2DAA2D;AAC3D,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwB1D;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG3D;AAED,sDAAsD;AACtD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKhD;AA2GD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,iBAWxC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,UAS/C;AAED,2EAA2E;AAC3E,eAAO,MAAM,cAAc,sBAAgB,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM3D;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC/B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgBlC"}
|