@bananapus/nana-sdk-core 2.41.3 → 3.0.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.
@@ -1,385 +0,0 @@
1
- import { decodeFunctionResult, encodeAbiParameters, encodeFunctionData, encodePacked, zeroAddress, } from "viem";
2
- import { NATIVE_TOKEN } from "../constants.js";
3
- import { chooseBestPayRoute, } from "./pay.js";
4
- import { buildUniswapV4ExactInputSwapTx, quoteUniswapV4ExactInputSingle, uniswapV4Deployment, } from "./uniswapV4.js";
5
- /** Canonical WETH/USDC V3 bridge used by direct-pay swaps on all v6 mainnets. */
6
- export const NATIVE_SWAP_BY_CHAIN = {
7
- 1: {
8
- wrappedNative: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
9
- bridgeToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
10
- v3Quoter: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e",
11
- },
12
- 10: {
13
- wrappedNative: "0x4200000000000000000000000000000000000006",
14
- bridgeToken: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
15
- v3Quoter: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e",
16
- },
17
- 8453: {
18
- wrappedNative: "0x4200000000000000000000000000000000000006",
19
- bridgeToken: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
20
- v3Quoter: "0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a",
21
- },
22
- 42161: {
23
- wrappedNative: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
24
- bridgeToken: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
25
- v3Quoter: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e",
26
- },
27
- };
28
- const V3_FEES = [100, 500, 3_000, 10_000];
29
- const ADDRESS_THIS = "0x0000000000000000000000000000000000000002";
30
- const CONTRACT_BALANCE = 1n << 255n;
31
- const UINT128_MAX = (1n << 128n) - 1n;
32
- const v3QuoterAbi = [
33
- {
34
- type: "function",
35
- name: "quoteExactInputSingle",
36
- stateMutability: "nonpayable",
37
- inputs: [
38
- {
39
- name: "params",
40
- type: "tuple",
41
- components: [
42
- { name: "tokenIn", type: "address" },
43
- { name: "tokenOut", type: "address" },
44
- { name: "amountIn", type: "uint256" },
45
- { name: "fee", type: "uint24" },
46
- { name: "sqrtPriceLimitX96", type: "uint160" },
47
- ],
48
- },
49
- ],
50
- outputs: [
51
- { name: "amountOut", type: "uint256" },
52
- { name: "sqrtPriceX96After", type: "uint160" },
53
- { name: "initializedTicksCrossed", type: "uint32" },
54
- { name: "gasEstimate", type: "uint256" },
55
- ],
56
- },
57
- ];
58
- const universalRouterAbi = [
59
- {
60
- type: "function",
61
- name: "execute",
62
- stateMutability: "payable",
63
- inputs: [
64
- { name: "commands", type: "bytes" },
65
- { name: "inputs", type: "bytes[]" },
66
- { name: "deadline", type: "uint256" },
67
- ],
68
- outputs: [],
69
- },
70
- ];
71
- function isNative(token) {
72
- return token.toLowerCase() === NATIVE_TOKEN.toLowerCase();
73
- }
74
- async function quoteV3ExactInput({ client, config, tokenIn, tokenOut, amountIn, }) {
75
- const quotes = await Promise.all(V3_FEES.map(async (fee) => {
76
- try {
77
- const call = await client.call({
78
- to: config.v3Quoter,
79
- data: encodeFunctionData({
80
- abi: v3QuoterAbi,
81
- functionName: "quoteExactInputSingle",
82
- args: [
83
- {
84
- tokenIn,
85
- tokenOut,
86
- amountIn,
87
- fee,
88
- sqrtPriceLimitX96: 0n,
89
- },
90
- ],
91
- }),
92
- });
93
- if (!call.data)
94
- return null;
95
- const [amountOut] = decodeFunctionResult({
96
- abi: v3QuoterAbi,
97
- functionName: "quoteExactInputSingle",
98
- data: call.data,
99
- });
100
- return amountOut > 0n ? { fee, amountOut } : null;
101
- }
102
- catch {
103
- return null;
104
- }
105
- }));
106
- return quotes.reduce((best, quote) => !quote || (best && best.amountOut >= quote.amountOut) ? best : quote, null);
107
- }
108
- /**
109
- * Quote the best direct pool purchase, including the atomic ETH/USDC V3 bridge
110
- * when the user's payment currency differs from the hooked V4 pool currency.
111
- * Returns null unless its slippage-protected minimum beats terminal payment.
112
- */
113
- export async function quoteDirectPaySwap({ client, chainId, poolKey, pairIsCurrency0, paymentToken, amount, payPreview, paySettlement = "issuance", slippageBps = 100n, }) {
114
- if (!uniswapV4Deployment(chainId)?.universalRouter || amount <= 0n) {
115
- return null;
116
- }
117
- const currencyIn = pairIsCurrency0 ? poolKey.currency0 : poolKey.currency1;
118
- const normalizedPayment = isNative(paymentToken)
119
- ? zeroAddress
120
- : paymentToken.toLowerCase();
121
- let v4AmountIn = amount;
122
- let inputRoute = { kind: "single-v4" };
123
- if (currencyIn.toLowerCase() !== normalizedPayment) {
124
- const config = NATIVE_SWAP_BY_CHAIN[chainId];
125
- const canBridgeNative = !!config &&
126
- isNative(paymentToken) &&
127
- currencyIn.toLowerCase() === config.bridgeToken.toLowerCase();
128
- const canBridgeUsdcToNative = !!config &&
129
- paymentToken.toLowerCase() === config.bridgeToken.toLowerCase() &&
130
- currencyIn.toLowerCase() === zeroAddress;
131
- if (!config || (!canBridgeNative && !canBridgeUsdcToNative))
132
- return null;
133
- const bridgeQuote = await quoteV3ExactInput({
134
- client,
135
- config,
136
- tokenIn: canBridgeNative ? config.wrappedNative : config.bridgeToken,
137
- tokenOut: canBridgeNative ? config.bridgeToken : config.wrappedNative,
138
- amountIn: amount,
139
- });
140
- if (!bridgeQuote)
141
- return null;
142
- v4AmountIn = bridgeQuote.amountOut;
143
- inputRoute = canBridgeNative
144
- ? {
145
- kind: "native-v3-v4",
146
- wrappedNative: config.wrappedNative,
147
- bridgeToken: config.bridgeToken,
148
- bridgeTokenSymbol: "USDC",
149
- bridgeTokenDecimals: 6,
150
- v3Fee: bridgeQuote.fee,
151
- quotedBridgeAmount: bridgeQuote.amountOut,
152
- }
153
- : {
154
- kind: "erc20-v3-native-v4",
155
- inputToken: config.bridgeToken,
156
- wrappedNative: config.wrappedNative,
157
- bridgeTokenSymbol: "ETH",
158
- bridgeTokenDecimals: 18,
159
- v3Fee: bridgeQuote.fee,
160
- quotedBridgeAmount: bridgeQuote.amountOut,
161
- };
162
- }
163
- const quotedTokenCount = await quoteUniswapV4ExactInputSingle(client, {
164
- chainId,
165
- poolKey,
166
- zeroForOne: pairIsCurrency0,
167
- amountIn: v4AmountIn,
168
- });
169
- const best = chooseBestPayRoute({
170
- pay: payPreview,
171
- paySettlement,
172
- directSwapQuote: quotedTokenCount,
173
- slippageBps,
174
- });
175
- if (best.kind !== "direct-swap")
176
- return null;
177
- return {
178
- kind: "direct-swap",
179
- poolKey,
180
- zeroForOne: pairIsCurrency0,
181
- quotedTokenCount,
182
- minimumTokenCount: best.beneficiaryTokenCount,
183
- beneficiaryTokenCount: best.beneficiaryTokenCount,
184
- reservedTokenCount: 0n,
185
- inputRoute,
186
- };
187
- }
188
- function encodeV4SwapFromRouterBalance({ quote, recipient, currencyIn, }) {
189
- const swap = encodeAbiParameters([
190
- {
191
- type: "tuple",
192
- components: [
193
- {
194
- type: "tuple",
195
- components: [
196
- { type: "address" },
197
- { type: "address" },
198
- { type: "uint24" },
199
- { type: "int24" },
200
- { type: "address" },
201
- ],
202
- },
203
- { type: "bool" },
204
- { type: "uint128" },
205
- { type: "uint128" },
206
- { type: "bytes" },
207
- ],
208
- },
209
- ], [
210
- [
211
- [
212
- quote.poolKey.currency0,
213
- quote.poolKey.currency1,
214
- quote.poolKey.fee,
215
- quote.poolKey.tickSpacing,
216
- quote.poolKey.hooks,
217
- ],
218
- quote.zeroForOne,
219
- 0n,
220
- quote.minimumTokenCount,
221
- "0x",
222
- ],
223
- ]);
224
- const settle = encodeAbiParameters([{ type: "address" }, { type: "uint256" }, { type: "bool" }], [currencyIn, CONTRACT_BALANCE, false]);
225
- const currencyOut = quote.zeroForOne
226
- ? quote.poolKey.currency1
227
- : quote.poolKey.currency0;
228
- const take = encodeAbiParameters([{ type: "address" }, { type: "address" }, { type: "uint256" }], [currencyOut, recipient, 0n]);
229
- return encodeAbiParameters([{ type: "bytes" }, { type: "bytes[]" }], ["0x0b060e", [settle, swap, take]]);
230
- }
231
- /** Build the atomic Universal Router transaction for a direct-pay quote. */
232
- export function buildDirectPaySwapTx({ chainId, quote, amount, recipient, deadline, }) {
233
- if (quote.inputRoute.kind === "single-v4") {
234
- return buildUniswapV4ExactInputSwapTx({
235
- chainId,
236
- poolKey: quote.poolKey,
237
- zeroForOne: quote.zeroForOne,
238
- amountIn: amount,
239
- minimumAmountOut: quote.minimumTokenCount,
240
- recipient,
241
- deadline,
242
- });
243
- }
244
- if (amount <= 0n || amount > UINT128_MAX || quote.minimumTokenCount <= 0n) {
245
- throw new Error("Swap amounts are outside the supported range.");
246
- }
247
- const config = NATIVE_SWAP_BY_CHAIN[chainId];
248
- const router = uniswapV4Deployment(chainId)?.universalRouter;
249
- if (!config || !router) {
250
- throw new Error("No supported native bridge route on this chain.");
251
- }
252
- if (quote.inputRoute.kind === "erc20-v3-native-v4") {
253
- if (quote.inputRoute.inputToken.toLowerCase() !==
254
- config.bridgeToken.toLowerCase() ||
255
- quote.inputRoute.wrappedNative.toLowerCase() !==
256
- config.wrappedNative.toLowerCase()) {
257
- throw new Error("This ERC-20 bridge route is not supported on this chain.");
258
- }
259
- const v3Input = encodeAbiParameters([
260
- { type: "address" },
261
- { type: "uint256" },
262
- { type: "uint256" },
263
- { type: "bytes" },
264
- { type: "bool" },
265
- ], [
266
- ADDRESS_THIS,
267
- amount,
268
- 0n,
269
- encodePacked(["address", "uint24", "address"], [
270
- quote.inputRoute.inputToken,
271
- quote.inputRoute.v3Fee,
272
- quote.inputRoute.wrappedNative,
273
- ]),
274
- true,
275
- ]);
276
- const unwrapInput = encodeAbiParameters([{ type: "address" }, { type: "uint256" }], [ADDRESS_THIS, 0n]);
277
- const v4Input = encodeV4SwapFromRouterBalance({
278
- quote,
279
- recipient,
280
- currencyIn: zeroAddress,
281
- });
282
- return {
283
- chainId,
284
- address: router,
285
- abi: universalRouterAbi,
286
- functionName: "execute",
287
- args: [
288
- "0x000c10",
289
- [v3Input, unwrapInput, v4Input],
290
- deadline,
291
- ],
292
- value: 0n,
293
- };
294
- }
295
- if (quote.inputRoute.bridgeToken.toLowerCase() !==
296
- config.bridgeToken.toLowerCase() ||
297
- quote.inputRoute.wrappedNative.toLowerCase() !==
298
- config.wrappedNative.toLowerCase()) {
299
- throw new Error("This native bridge route is not supported on this chain.");
300
- }
301
- const wrapInput = encodeAbiParameters([{ type: "address" }, { type: "uint256" }], [ADDRESS_THIS, amount]);
302
- const v3Input = encodeAbiParameters([
303
- { type: "address" },
304
- { type: "uint256" },
305
- { type: "uint256" },
306
- { type: "bytes" },
307
- { type: "bool" },
308
- ], [
309
- ADDRESS_THIS,
310
- amount,
311
- 0n,
312
- encodePacked(["address", "uint24", "address"], [
313
- quote.inputRoute.wrappedNative,
314
- quote.inputRoute.v3Fee,
315
- quote.inputRoute.bridgeToken,
316
- ]),
317
- false,
318
- ]);
319
- const v4Input = encodeV4SwapFromRouterBalance({
320
- quote,
321
- recipient,
322
- currencyIn: quote.inputRoute.bridgeToken,
323
- });
324
- return {
325
- chainId,
326
- address: router,
327
- abi: universalRouterAbi,
328
- functionName: "execute",
329
- args: ["0x0b0010", [wrapInput, v3Input, v4Input], deadline],
330
- value: amount,
331
- };
332
- }
333
- /** Prepend Universal Router's PERMIT2_PERMIT command to a reviewed swap. */
334
- export function addPermit2SignatureToDirectPaySwap(request, authorization, signature) {
335
- if (request.address.toLowerCase() !== authorization.spender.toLowerCase()) {
336
- throw new Error("The reviewed Permit2 authorization does not match the swap.");
337
- }
338
- const [commands, inputs, deadline] = request.args;
339
- const commandShape = commands.toLowerCase();
340
- const supportedShape = (commandShape === "0x10" && inputs.length === 1) ||
341
- (commandShape === "0x000c10" && inputs.length === 3);
342
- if (!supportedShape) {
343
- throw new Error("The reviewed swap has an unsupported Universal Router shape.");
344
- }
345
- const permitInput = encodeAbiParameters([
346
- {
347
- type: "tuple",
348
- components: [
349
- {
350
- type: "tuple",
351
- components: [
352
- { type: "address" },
353
- { type: "uint160" },
354
- { type: "uint48" },
355
- { type: "uint48" },
356
- ],
357
- },
358
- { type: "address" },
359
- { type: "uint256" },
360
- ],
361
- },
362
- { type: "bytes" },
363
- ], [
364
- [
365
- [
366
- authorization.token,
367
- authorization.amount,
368
- authorization.expiration,
369
- authorization.nonce,
370
- ],
371
- authorization.spender,
372
- authorization.sigDeadline,
373
- ],
374
- signature,
375
- ]);
376
- return {
377
- ...request,
378
- args: [
379
- `0x0a${commands.slice(2)}`,
380
- [permitInput, ...inputs],
381
- deadline,
382
- ],
383
- };
384
- }
385
- //# sourceMappingURL=directPay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"directPay.js","sourceRoot":"","sources":["../../../src/v6/directPay.ts"],"names":[],"mappings":"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"}