agentwallet-sdk 3.2.1 → 3.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/README.md +2 -536
- package/dist/bridge/abis.d.ts +48 -171
- package/dist/bridge/abis.d.ts.map +1 -1
- package/dist/bridge/abis.js.map +1 -1
- package/dist/bridge/client.d.ts +2 -41
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/client.js +35 -168
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/index.d.ts +2 -4
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +1 -8
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/types.d.ts +15 -134
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/bridge/types.js +16 -170
- package/dist/bridge/types.js.map +1 -1
- package/dist/identity/erc8004.d.ts +2 -240
- package/dist/identity/erc8004.d.ts.map +1 -1
- package/dist/identity/erc8004.js +58 -334
- package/dist/identity/erc8004.js.map +1 -1
- package/dist/index.d.ts +313 -134
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -56
- package/dist/index.js.map +1 -1
- package/dist/swap/SwapModule.d.ts +6 -50
- package/dist/swap/SwapModule.d.ts.map +1 -1
- package/dist/swap/SwapModule.js +25 -153
- package/dist/swap/SwapModule.js.map +1 -1
- package/dist/swap/abi.d.ts +47 -165
- package/dist/swap/abi.d.ts.map +1 -1
- package/dist/swap/abi.js.map +1 -1
- package/dist/swap/index.d.ts +2 -3
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +1 -4
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/types.d.ts +6 -36
- package/dist/swap/types.d.ts.map +1 -1
- package/dist/swap/types.js +0 -1
- package/dist/swap/types.js.map +1 -1
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/dist/x402/__tests__/budget.test.d.ts +2 -0
- package/dist/x402/__tests__/budget.test.d.ts.map +1 -0
- package/dist/x402/__tests__/budget.test.js +114 -0
- package/dist/x402/__tests__/budget.test.js.map +1 -0
- package/dist/x402/__tests__/client.test.d.ts +2 -0
- package/dist/x402/__tests__/client.test.d.ts.map +1 -0
- package/dist/x402/__tests__/client.test.js +107 -0
- package/dist/x402/__tests__/client.test.js.map +1 -0
- package/dist/x402/chains/abstract/index.d.ts +135 -0
- package/dist/x402/chains/abstract/index.d.ts.map +1 -0
- package/dist/x402/chains/abstract/index.js +190 -0
- package/dist/x402/chains/abstract/index.js.map +1 -0
- package/dist/x402/client.d.ts.map +1 -1
- package/dist/x402/client.js +1 -2
- package/dist/x402/client.js.map +1 -1
- package/dist/x402/index.d.ts +3 -1
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +3 -1
- package/dist/x402/index.js.map +1 -1
- package/dist/x402/types.d.ts +3 -5
- package/dist/x402/types.d.ts.map +1 -1
- package/dist/x402/types.js +2 -17
- package/dist/x402/types.js.map +1 -1
- package/package.json +12 -32
- package/dist/ap2/index.d.ts +0 -185
- package/dist/ap2/index.d.ts.map +0 -1
- package/dist/ap2/index.js +0 -255
- package/dist/ap2/index.js.map +0 -1
- package/dist/bridge/unified.d.ts +0 -101
- package/dist/bridge/unified.d.ts.map +0 -1
- package/dist/bridge/unified.js +0 -284
- package/dist/bridge/unified.js.map +0 -1
- package/dist/chains.d.ts +0 -62
- package/dist/chains.d.ts.map +0 -1
- package/dist/chains.js +0 -108
- package/dist/chains.js.map +0 -1
- package/dist/fiat/index.d.ts +0 -10
- package/dist/fiat/index.d.ts.map +0 -1
- package/dist/fiat/index.js +0 -9
- package/dist/fiat/index.js.map +0 -1
- package/dist/fiat/onramp.d.ts +0 -101
- package/dist/fiat/onramp.d.ts.map +0 -1
- package/dist/fiat/onramp.js +0 -155
- package/dist/fiat/onramp.js.map +0 -1
- package/dist/fiat/providers/index.d.ts +0 -16
- package/dist/fiat/providers/index.d.ts.map +0 -1
- package/dist/fiat/providers/index.js +0 -30
- package/dist/fiat/providers/index.js.map +0 -1
- package/dist/fiat/providers/moonpay.d.ts +0 -22
- package/dist/fiat/providers/moonpay.d.ts.map +0 -1
- package/dist/fiat/providers/moonpay.js +0 -107
- package/dist/fiat/providers/moonpay.js.map +0 -1
- package/dist/fiat/providers/stripe.d.ts +0 -26
- package/dist/fiat/providers/stripe.d.ts.map +0 -1
- package/dist/fiat/providers/stripe.js +0 -135
- package/dist/fiat/providers/stripe.js.map +0 -1
- package/dist/fiat/providers/transak.d.ts +0 -26
- package/dist/fiat/providers/transak.d.ts.map +0 -1
- package/dist/fiat/providers/transak.js +0 -119
- package/dist/fiat/providers/transak.js.map +0 -1
- package/dist/fiat/types.d.ts +0 -106
- package/dist/fiat/types.d.ts.map +0 -1
- package/dist/fiat/types.js +0 -13
- package/dist/fiat/types.js.map +0 -1
- package/dist/flash/executor.d.ts +0 -119
- package/dist/flash/executor.d.ts.map +0 -1
- package/dist/flash/executor.js +0 -195
- package/dist/flash/executor.js.map +0 -1
- package/dist/flash/index.d.ts +0 -28
- package/dist/flash/index.d.ts.map +0 -1
- package/dist/flash/index.js +0 -25
- package/dist/flash/index.js.map +0 -1
- package/dist/flash/scanner.d.ts +0 -133
- package/dist/flash/scanner.d.ts.map +0 -1
- package/dist/flash/scanner.js +0 -212
- package/dist/flash/scanner.js.map +0 -1
- package/dist/flash/types.d.ts +0 -136
- package/dist/flash/types.d.ts.map +0 -1
- package/dist/flash/types.js +0 -23
- package/dist/flash/types.js.map +0 -1
- package/dist/gas/index.d.ts +0 -4
- package/dist/gas/index.d.ts.map +0 -1
- package/dist/gas/index.js +0 -3
- package/dist/gas/index.js.map +0 -1
- package/dist/gas/sponsor.d.ts +0 -70
- package/dist/gas/sponsor.d.ts.map +0 -1
- package/dist/gas/sponsor.js +0 -193
- package/dist/gas/sponsor.js.map +0 -1
- package/dist/gas/types.d.ts +0 -76
- package/dist/gas/types.d.ts.map +0 -1
- package/dist/gas/types.js +0 -21
- package/dist/gas/types.js.map +0 -1
- package/dist/identity/agent-identity.d.ts +0 -276
- package/dist/identity/agent-identity.d.ts.map +0 -1
- package/dist/identity/agent-identity.js +0 -300
- package/dist/identity/agent-identity.js.map +0 -1
- package/dist/identity/erc6551.d.ts +0 -441
- package/dist/identity/erc6551.d.ts.map +0 -1
- package/dist/identity/erc6551.js +0 -517
- package/dist/identity/erc6551.js.map +0 -1
- package/dist/mev/index.d.ts +0 -4
- package/dist/mev/index.d.ts.map +0 -1
- package/dist/mev/index.js +0 -4
- package/dist/mev/index.js.map +0 -1
- package/dist/mev/protection.d.ts +0 -54
- package/dist/mev/protection.d.ts.map +0 -1
- package/dist/mev/protection.js +0 -185
- package/dist/mev/protection.js.map +0 -1
- package/dist/mev/risk.d.ts +0 -19
- package/dist/mev/risk.d.ts.map +0 -1
- package/dist/mev/risk.js +0 -95
- package/dist/mev/risk.js.map +0 -1
- package/dist/mev/types.d.ts +0 -49
- package/dist/mev/types.d.ts.map +0 -1
- package/dist/mev/types.js +0 -2
- package/dist/mev/types.js.map +0 -1
- package/dist/settlement/index.d.ts +0 -4
- package/dist/settlement/index.d.ts.map +0 -1
- package/dist/settlement/index.js +0 -3
- package/dist/settlement/index.js.map +0 -1
- package/dist/settlement/types.d.ts +0 -66
- package/dist/settlement/types.d.ts.map +0 -1
- package/dist/settlement/types.js +0 -37
- package/dist/settlement/types.js.map +0 -1
- package/dist/settlement/verifier.d.ts +0 -75
- package/dist/settlement/verifier.d.ts.map +0 -1
- package/dist/settlement/verifier.js +0 -354
- package/dist/settlement/verifier.js.map +0 -1
- package/dist/solana/bridge.d.ts +0 -144
- package/dist/solana/bridge.d.ts.map +0 -1
- package/dist/solana/bridge.js +0 -352
- package/dist/solana/bridge.js.map +0 -1
- package/dist/solana/index.d.ts +0 -8
- package/dist/solana/index.d.ts.map +0 -1
- package/dist/solana/index.js +0 -6
- package/dist/solana/index.js.map +0 -1
- package/dist/solana/swap.d.ts +0 -85
- package/dist/solana/swap.d.ts.map +0 -1
- package/dist/solana/swap.js +0 -173
- package/dist/solana/swap.js.map +0 -1
- package/dist/solana/types.d.ts +0 -126
- package/dist/solana/types.d.ts.map +0 -1
- package/dist/solana/types.js +0 -10
- package/dist/solana/types.js.map +0 -1
- package/dist/solana/wallet.d.ts +0 -83
- package/dist/solana/wallet.d.ts.map +0 -1
- package/dist/solana/wallet.js +0 -164
- package/dist/solana/wallet.js.map +0 -1
- package/dist/solana/x402.d.ts +0 -69
- package/dist/solana/x402.d.ts.map +0 -1
- package/dist/solana/x402.js +0 -154
- package/dist/solana/x402.js.map +0 -1
- package/dist/solver/adapter.d.ts +0 -47
- package/dist/solver/adapter.d.ts.map +0 -1
- package/dist/solver/adapter.js +0 -138
- package/dist/solver/adapter.js.map +0 -1
- package/dist/solver/analyzer.d.ts +0 -48
- package/dist/solver/analyzer.d.ts.map +0 -1
- package/dist/solver/analyzer.js +0 -89
- package/dist/solver/analyzer.js.map +0 -1
- package/dist/solver/builder.d.ts +0 -31
- package/dist/solver/builder.d.ts.map +0 -1
- package/dist/solver/builder.js +0 -60
- package/dist/solver/builder.js.map +0 -1
- package/dist/solver/index.d.ts +0 -22
- package/dist/solver/index.d.ts.map +0 -1
- package/dist/solver/index.js +0 -21
- package/dist/solver/index.js.map +0 -1
- package/dist/solver/types.d.ts +0 -115
- package/dist/solver/types.d.ts.map +0 -1
- package/dist/solver/types.js +0 -10
- package/dist/solver/types.js.map +0 -1
- package/dist/swap/router/cache.d.ts +0 -13
- package/dist/swap/router/cache.d.ts.map +0 -1
- package/dist/swap/router/cache.js +0 -30
- package/dist/swap/router/cache.js.map +0 -1
- package/dist/swap/router/flashbots.d.ts +0 -10
- package/dist/swap/router/flashbots.d.ts.map +0 -1
- package/dist/swap/router/flashbots.js +0 -43
- package/dist/swap/router/flashbots.js.map +0 -1
- package/dist/swap/router/health.d.ts +0 -17
- package/dist/swap/router/health.d.ts.map +0 -1
- package/dist/swap/router/health.js +0 -38
- package/dist/swap/router/health.js.map +0 -1
- package/dist/swap/router/index.d.ts +0 -10
- package/dist/swap/router/index.d.ts.map +0 -1
- package/dist/swap/router/index.js +0 -10
- package/dist/swap/router/index.js.map +0 -1
- package/dist/swap/router/providers/cowswap.d.ts +0 -11
- package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
- package/dist/swap/router/providers/cowswap.js +0 -79
- package/dist/swap/router/providers/cowswap.js.map +0 -1
- package/dist/swap/router/providers/index.d.ts +0 -20
- package/dist/swap/router/providers/index.d.ts.map +0 -1
- package/dist/swap/router/providers/index.js +0 -32
- package/dist/swap/router/providers/index.js.map +0 -1
- package/dist/swap/router/providers/jupiter.d.ts +0 -12
- package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
- package/dist/swap/router/providers/jupiter.js +0 -73
- package/dist/swap/router/providers/jupiter.js.map +0 -1
- package/dist/swap/router/providers/lifi.d.ts +0 -11
- package/dist/swap/router/providers/lifi.d.ts.map +0 -1
- package/dist/swap/router/providers/lifi.js +0 -123
- package/dist/swap/router/providers/lifi.js.map +0 -1
- package/dist/swap/router/providers/oneinch.d.ts +0 -13
- package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
- package/dist/swap/router/providers/oneinch.js +0 -71
- package/dist/swap/router/providers/oneinch.js.map +0 -1
- package/dist/swap/router/providers/paraswap.d.ts +0 -11
- package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
- package/dist/swap/router/providers/paraswap.js +0 -73
- package/dist/swap/router/providers/paraswap.js.map +0 -1
- package/dist/swap/router/providers/uniswap.d.ts +0 -31
- package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
- package/dist/swap/router/providers/uniswap.js +0 -116
- package/dist/swap/router/providers/uniswap.js.map +0 -1
- package/dist/swap/router/providers/zerox.d.ts +0 -13
- package/dist/swap/router/providers/zerox.d.ts.map +0 -1
- package/dist/swap/router/providers/zerox.js +0 -94
- package/dist/swap/router/providers/zerox.js.map +0 -1
- package/dist/swap/router/router.d.ts +0 -86
- package/dist/swap/router/router.d.ts.map +0 -1
- package/dist/swap/router/router.js +0 -224
- package/dist/swap/router/router.js.map +0 -1
- package/dist/swap/router/rsi/engine.d.ts +0 -60
- package/dist/swap/router/rsi/engine.d.ts.map +0 -1
- package/dist/swap/router/rsi/engine.js +0 -483
- package/dist/swap/router/rsi/engine.js.map +0 -1
- package/dist/swap/router/rsi/index.d.ts +0 -3
- package/dist/swap/router/rsi/index.d.ts.map +0 -1
- package/dist/swap/router/rsi/index.js +0 -3
- package/dist/swap/router/rsi/index.js.map +0 -1
- package/dist/swap/router/rsi/types.d.ts +0 -106
- package/dist/swap/router/rsi/types.d.ts.map +0 -1
- package/dist/swap/router/rsi/types.js +0 -3
- package/dist/swap/router/rsi/types.js.map +0 -1
- package/dist/swap/router/types.d.ts +0 -120
- package/dist/swap/router/types.d.ts.map +0 -1
- package/dist/swap/router/types.js +0 -16
- package/dist/swap/router/types.js.map +0 -1
- package/dist/tax/engine.d.ts +0 -131
- package/dist/tax/engine.d.ts.map +0 -1
- package/dist/tax/engine.js +0 -307
- package/dist/tax/engine.js.map +0 -1
- package/dist/tax/index.d.ts +0 -9
- package/dist/tax/index.d.ts.map +0 -1
- package/dist/tax/index.js +0 -8
- package/dist/tax/index.js.map +0 -1
- package/dist/tax/lots.d.ts +0 -60
- package/dist/tax/lots.d.ts.map +0 -1
- package/dist/tax/lots.js +0 -129
- package/dist/tax/lots.js.map +0 -1
- package/dist/tax/types.d.ts +0 -113
- package/dist/tax/types.d.ts.map +0 -1
- package/dist/tax/types.js +0 -18
- package/dist/tax/types.js.map +0 -1
- package/dist/yield/index.d.ts +0 -26
- package/dist/yield/index.d.ts.map +0 -1
- package/dist/yield/index.js +0 -25
- package/dist/yield/index.js.map +0 -1
- package/dist/yield/rates.d.ts +0 -114
- package/dist/yield/rates.d.ts.map +0 -1
- package/dist/yield/rates.js +0 -351
- package/dist/yield/rates.js.map +0 -1
- package/dist/yield/types.d.ts +0 -134
- package/dist/yield/types.d.ts.map +0 -1
- package/dist/yield/types.js +0 -24
- package/dist/yield/types.js.map +0 -1
- package/dist/yield/vault.d.ts +0 -112
- package/dist/yield/vault.d.ts.map +0 -1
- package/dist/yield/vault.js +0 -264
- package/dist/yield/vault.js.map +0 -1
package/dist/swap/SwapModule.js
CHANGED
|
@@ -1,21 +1,7 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Integrates cleanly with AgentWallet (createWallet) on Base Mainnet.
|
|
3
|
-
//
|
|
4
|
-
// Architecture:
|
|
5
|
-
// 1. getQuote() — try all fee tiers via QuoterV2, pick best amountOut
|
|
6
|
-
// 2. ensureApproval() — ERC-20 approve if allowance insufficient
|
|
7
|
-
// 3. swap() — deduct 0.875% fee, transfer to feeWallet, execute swap via Router
|
|
8
|
-
//
|
|
9
|
-
// Fee mechanics:
|
|
10
|
-
// - Protocol fee = amountIn * 875 / 100_000 (0.875%)
|
|
11
|
-
// - Fee is SUBTRACTED from amountIn before swapping (fee-on-input model)
|
|
12
|
-
// - Remaining amountInNet = amountIn - feeAmount ← what actually gets swapped
|
|
13
|
-
// - feeAmount transferred to feeWallet via ERC-20 transfer (inline with swap tx)
|
|
1
|
+
// SwapModule — Uniswap V3 token swap aggregator with 0.875% protocol fee
|
|
14
2
|
import { encodeFunctionData, } from 'viem';
|
|
15
|
-
import { UniswapV3RouterAbi, UniswapV3QuoterV2Abi, ERC20Abi
|
|
3
|
+
import { UniswapV3RouterAbi, UniswapV3QuoterV2Abi, ERC20Abi } from './abi.js';
|
|
16
4
|
import { PROTOCOL_FEE_BPS, DEFAULT_SLIPPAGE_BPS, UNISWAP_V3_BASE, } from './types.js';
|
|
17
|
-
import { CHAIN_CONFIG } from '../chains.js';
|
|
18
|
-
// ─── Internal Helpers ────────────────────────────────────────────────────────
|
|
19
5
|
const FEE_TIERS = [100, 500, 3000, 10000];
|
|
20
6
|
/** Calculate protocol fee: floor(amount * feeBps / 100_000) */
|
|
21
7
|
export function calcProtocolFee(amount, feeBps) {
|
|
@@ -29,37 +15,22 @@ export function applySlippage(amount, slippageBps) {
|
|
|
29
15
|
export function calcDeadline(deadlineSecs) {
|
|
30
16
|
return BigInt(Math.floor(Date.now() / 1000) + deadlineSecs);
|
|
31
17
|
}
|
|
32
|
-
// ─── SwapModule ──────────────────────────────────────────────────────────────
|
|
33
18
|
export class SwapModule {
|
|
34
19
|
constructor(publicClient, walletClient, accountAddress, config) {
|
|
35
20
|
this.publicClient = publicClient;
|
|
36
21
|
this.walletClient = walletClient;
|
|
37
22
|
this.accountAddress = accountAddress;
|
|
38
|
-
// Resolve defaults from chain config if a chain is specified
|
|
39
|
-
const chain = config?.chain ?? 'base';
|
|
40
|
-
const chainCfg = CHAIN_CONFIG[chain];
|
|
41
23
|
this.config = {
|
|
42
|
-
routerAddress:
|
|
43
|
-
quoterAddress:
|
|
24
|
+
routerAddress: UNISWAP_V3_BASE.ROUTER,
|
|
25
|
+
quoterAddress: UNISWAP_V3_BASE.QUOTER_V2,
|
|
44
26
|
feeBps: PROTOCOL_FEE_BPS,
|
|
45
|
-
feeWallet: accountAddress,
|
|
46
|
-
chain,
|
|
27
|
+
feeWallet: accountAddress,
|
|
47
28
|
...config,
|
|
48
29
|
};
|
|
49
30
|
}
|
|
50
|
-
// ─── Quote ─────────────────────────────────────────────────────────────────
|
|
51
|
-
/**
|
|
52
|
-
* Fetch the best Uniswap V3 quote across all pool fee tiers.
|
|
53
|
-
* Tries 100, 500, 3000, 10000 bps pools and returns the one with
|
|
54
|
-
* the highest amountOut (best price for the trader).
|
|
55
|
-
*
|
|
56
|
-
* NOTE: Protocol fee is deducted from amountIn before quoting, so the
|
|
57
|
-
* quote reflects the real net amount that will be swapped.
|
|
58
|
-
*/
|
|
59
31
|
async getQuote(tokenIn, tokenOut, amountIn, options = {}) {
|
|
60
32
|
const slippageBps = options.slippageBps ?? DEFAULT_SLIPPAGE_BPS;
|
|
61
33
|
const tiersToTry = options.feeTiers ?? FEE_TIERS;
|
|
62
|
-
// Deduct protocol fee first
|
|
63
34
|
const feeAmount = calcProtocolFee(amountIn, this.config.feeBps);
|
|
64
35
|
const amountInNet = amountIn - feeAmount;
|
|
65
36
|
if (amountInNet <= 0n) {
|
|
@@ -72,15 +43,7 @@ export class SwapModule {
|
|
|
72
43
|
address: this.config.quoterAddress,
|
|
73
44
|
abi: UniswapV3QuoterV2Abi,
|
|
74
45
|
functionName: 'quoteExactInputSingle',
|
|
75
|
-
args: [
|
|
76
|
-
{
|
|
77
|
-
tokenIn,
|
|
78
|
-
tokenOut,
|
|
79
|
-
amount: amountInNet,
|
|
80
|
-
fee,
|
|
81
|
-
sqrtPriceLimitX96: 0n,
|
|
82
|
-
},
|
|
83
|
-
],
|
|
46
|
+
args: [{ tokenIn, tokenOut, amount: amountInNet, fee, sqrtPriceLimitX96: 0n }],
|
|
84
47
|
});
|
|
85
48
|
const [amountOut, , , gasEstimate] = result;
|
|
86
49
|
if (!bestQuote || amountOut > bestQuote.amountOut) {
|
|
@@ -88,123 +51,63 @@ export class SwapModule {
|
|
|
88
51
|
}
|
|
89
52
|
}
|
|
90
53
|
catch {
|
|
91
|
-
// Pool doesn't exist for this fee tier
|
|
54
|
+
// Pool doesn't exist for this fee tier
|
|
92
55
|
}
|
|
93
56
|
}
|
|
94
57
|
if (!bestQuote) {
|
|
95
|
-
throw new Error(`SwapModule: No Uniswap V3 pool found for ${tokenIn} → ${tokenOut} on Base
|
|
96
|
-
`Tried fee tiers: ${tiersToTry.join(', ')}`);
|
|
58
|
+
throw new Error(`SwapModule: No Uniswap V3 pool found for ${tokenIn} → ${tokenOut} on Base.`);
|
|
97
59
|
}
|
|
98
60
|
const amountOutMinimum = applySlippage(bestQuote.amountOut, slippageBps);
|
|
99
|
-
const effectiveRate = amountInNet > 0n
|
|
100
|
-
? Number(bestQuote.amountOut) / Number(amountInNet)
|
|
101
|
-
: 0;
|
|
61
|
+
const effectiveRate = amountInNet > 0n ? Number(bestQuote.amountOut) / Number(amountInNet) : 0;
|
|
102
62
|
return {
|
|
103
|
-
tokenIn,
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
amountInNet,
|
|
107
|
-
feeAmount,
|
|
108
|
-
amountOut: bestQuote.amountOut,
|
|
109
|
-
amountOutMinimum,
|
|
110
|
-
poolFeeTier: bestQuote.feeTier,
|
|
111
|
-
effectiveRate,
|
|
112
|
-
gasEstimate: bestQuote.gasEstimate,
|
|
63
|
+
tokenIn, tokenOut, amountInRaw: amountIn, amountInNet, feeAmount,
|
|
64
|
+
amountOut: bestQuote.amountOut, amountOutMinimum,
|
|
65
|
+
poolFeeTier: bestQuote.feeTier, effectiveRate, gasEstimate: bestQuote.gasEstimate,
|
|
113
66
|
};
|
|
114
67
|
}
|
|
115
|
-
// ─── Approval ──────────────────────────────────────────────────────────────
|
|
116
|
-
/**
|
|
117
|
-
* Check ERC-20 allowance and approve if needed.
|
|
118
|
-
* Returns the approval tx hash if an approval was submitted, or undefined.
|
|
119
|
-
*/
|
|
120
68
|
async ensureApproval(token, spender, amount) {
|
|
121
69
|
const currentAllowance = (await this.publicClient.readContract({
|
|
122
|
-
address: token,
|
|
123
|
-
abi: ERC20Abi,
|
|
124
|
-
functionName: 'allowance',
|
|
70
|
+
address: token, abi: ERC20Abi, functionName: 'allowance',
|
|
125
71
|
args: [this.accountAddress, spender],
|
|
126
72
|
}));
|
|
127
73
|
if (currentAllowance >= amount)
|
|
128
74
|
return undefined;
|
|
129
|
-
// Use max uint256 to avoid repeated approvals (standard UX pattern)
|
|
130
75
|
const MAX_UINT256 = 115792089237316195423570985008687907853269984665640564039457584007913129639935n;
|
|
131
76
|
const account = this.walletClient.account;
|
|
132
77
|
if (!account)
|
|
133
78
|
throw new Error('SwapModule: walletClient has no account');
|
|
134
79
|
const approveData = encodeFunctionData({
|
|
135
|
-
abi: ERC20Abi,
|
|
136
|
-
functionName: 'approve',
|
|
137
|
-
args: [spender, MAX_UINT256],
|
|
80
|
+
abi: ERC20Abi, functionName: 'approve', args: [spender, MAX_UINT256],
|
|
138
81
|
});
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
account,
|
|
142
|
-
to: token,
|
|
143
|
-
data: approveData,
|
|
144
|
-
chain: this.walletClient.chain ?? null,
|
|
82
|
+
return this.walletClient.sendTransaction({
|
|
83
|
+
account, to: token, data: approveData, chain: this.walletClient.chain ?? null,
|
|
145
84
|
});
|
|
146
|
-
return hash;
|
|
147
85
|
}
|
|
148
|
-
// ─── Fee Transfer ──────────────────────────────────────────────────────────
|
|
149
|
-
/**
|
|
150
|
-
* Transfer protocol fee to the fee wallet via ERC-20 transfer.
|
|
151
|
-
* Called internally before the swap.
|
|
152
|
-
*/
|
|
153
86
|
async transferFee(token, feeAmount, feeWallet) {
|
|
154
87
|
const account = this.walletClient.account;
|
|
155
88
|
if (!account)
|
|
156
89
|
throw new Error('SwapModule: walletClient has no account');
|
|
157
90
|
const transferData = encodeFunctionData({
|
|
158
|
-
abi: ERC20Abi,
|
|
159
|
-
functionName: 'transfer',
|
|
160
|
-
args: [feeWallet, feeAmount],
|
|
91
|
+
abi: ERC20Abi, functionName: 'transfer', args: [feeWallet, feeAmount],
|
|
161
92
|
});
|
|
162
93
|
return this.walletClient.sendTransaction({
|
|
163
|
-
account,
|
|
164
|
-
to: token,
|
|
165
|
-
data: transferData,
|
|
166
|
-
chain: this.walletClient.chain ?? null,
|
|
94
|
+
account, to: token, data: transferData, chain: this.walletClient.chain ?? null,
|
|
167
95
|
});
|
|
168
96
|
}
|
|
169
|
-
// ─── Swap ──────────────────────────────────────────────────────────────────
|
|
170
|
-
/**
|
|
171
|
-
* Execute a token swap via Uniswap V3 with automatic protocol fee collection.
|
|
172
|
-
*
|
|
173
|
-
* Flow:
|
|
174
|
-
* 1. Get best quote across all fee tiers (post-fee amount)
|
|
175
|
-
* 2. Ensure ERC-20 approval for tokenIn (full amountIn including fee)
|
|
176
|
-
* 3. Transfer 0.875% protocol fee to feeWallet
|
|
177
|
-
* 4. Execute exactInputSingle swap with amountInNet
|
|
178
|
-
*
|
|
179
|
-
* @param tokenIn ERC-20 address of input token
|
|
180
|
-
* @param tokenOut ERC-20 address of output token
|
|
181
|
-
* @param amountIn Raw input amount (protocol fee deducted from this)
|
|
182
|
-
* @param options Optional: slippageBps, feeTiers, deadlineSecs, feeWallet override
|
|
183
|
-
* @returns SwapResult with txHash, feeTxHash, quote, approval info
|
|
184
|
-
*/
|
|
185
97
|
async swap(tokenIn, tokenOut, amountIn, options = {}) {
|
|
186
98
|
const slippageBps = options.slippageBps ?? DEFAULT_SLIPPAGE_BPS;
|
|
187
99
|
const deadlineSecs = options.deadlineSecs ?? 300;
|
|
188
100
|
const feeWallet = options.feeWallet ?? this.config.feeWallet;
|
|
189
|
-
|
|
190
|
-
const quote = await this.getQuote(tokenIn, tokenOut, amountIn, {
|
|
191
|
-
slippageBps,
|
|
192
|
-
feeTiers: options.feeTiers,
|
|
193
|
-
});
|
|
194
|
-
// 2. Gas estimate check (informational — actual gas set by client)
|
|
195
|
-
// We log the estimate from the quoter; a very high gas estimate is a warning sign.
|
|
101
|
+
const quote = await this.getQuote(tokenIn, tokenOut, amountIn, { slippageBps, feeTiers: options.feeTiers });
|
|
196
102
|
if (quote.gasEstimate > 2000000n) {
|
|
197
103
|
console.warn(`SwapModule: High gas estimate (${quote.gasEstimate}). Pool may be illiquid.`);
|
|
198
104
|
}
|
|
199
|
-
// 3. Ensure approval for full amountIn (fee + net amount both need allowance)
|
|
200
105
|
const approvalTxHash = await this.ensureApproval(tokenIn, this.config.routerAddress, amountIn);
|
|
201
106
|
const approvalRequired = approvalTxHash !== undefined;
|
|
202
|
-
// 4. Transfer protocol fee to feeWallet (only if feeWallet != self or fee > 0)
|
|
203
107
|
let feeTxHash;
|
|
204
108
|
if (quote.feeAmount > 0n && feeWallet !== this.accountAddress) {
|
|
205
109
|
feeTxHash = await this.transferFee(tokenIn, quote.feeAmount, feeWallet);
|
|
206
110
|
}
|
|
207
|
-
// 5. Execute swap: exactInputSingle via Uniswap V3 Router
|
|
208
111
|
const account = this.walletClient.account;
|
|
209
112
|
if (!account)
|
|
210
113
|
throw new Error('SwapModule: walletClient has no account');
|
|
@@ -212,54 +115,23 @@ export class SwapModule {
|
|
|
212
115
|
const swapData = encodeFunctionData({
|
|
213
116
|
abi: UniswapV3RouterAbi,
|
|
214
117
|
functionName: 'exactInputSingle',
|
|
215
|
-
args: [
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
fee: quote.poolFeeTier,
|
|
220
|
-
recipient: this.accountAddress, // output goes to the agent wallet
|
|
221
|
-
amountIn: quote.amountInNet,
|
|
222
|
-
amountOutMinimum: quote.amountOutMinimum,
|
|
223
|
-
sqrtPriceLimitX96: 0n,
|
|
224
|
-
},
|
|
225
|
-
],
|
|
118
|
+
args: [{
|
|
119
|
+
tokenIn, tokenOut, fee: quote.poolFeeTier, recipient: this.accountAddress,
|
|
120
|
+
amountIn: quote.amountInNet, amountOutMinimum: quote.amountOutMinimum, sqrtPriceLimitX96: 0n,
|
|
121
|
+
}],
|
|
226
122
|
});
|
|
227
123
|
const txHash = await this.walletClient.sendTransaction({
|
|
228
|
-
account,
|
|
229
|
-
to: this.config.routerAddress,
|
|
230
|
-
data: swapData,
|
|
231
|
-
chain: this.walletClient.chain ?? null,
|
|
124
|
+
account, to: this.config.routerAddress, data: swapData, chain: this.walletClient.chain ?? null,
|
|
232
125
|
});
|
|
233
|
-
return {
|
|
234
|
-
txHash,
|
|
235
|
-
feeTxHash,
|
|
236
|
-
quote,
|
|
237
|
-
approvalRequired,
|
|
238
|
-
approvalTxHash,
|
|
239
|
-
};
|
|
126
|
+
return { txHash, feeTxHash, quote, approvalRequired, approvalTxHash };
|
|
240
127
|
}
|
|
241
|
-
// ─── Config Accessors ──────────────────────────────────────────────────────
|
|
242
128
|
getConfig() {
|
|
243
129
|
return { ...this.config };
|
|
244
130
|
}
|
|
245
|
-
/**
|
|
246
|
-
* Set the fee wallet address (only owner should call this).
|
|
247
|
-
* In production the owner configures this to the team multisig.
|
|
248
|
-
*/
|
|
249
131
|
setFeeWallet(address) {
|
|
250
132
|
this.config.feeWallet = address;
|
|
251
133
|
}
|
|
252
134
|
}
|
|
253
|
-
// ─── Factory / Attachment ────────────────────────────────────────────────────
|
|
254
|
-
/**
|
|
255
|
-
* Attach a SwapModule to an existing wallet object (from createWallet()).
|
|
256
|
-
* Returns the wallet enriched with a `.swap()` method and full SwapModule access.
|
|
257
|
-
*
|
|
258
|
-
* @example
|
|
259
|
-
* const wallet = createWallet(config);
|
|
260
|
-
* const swapWallet = attachSwap(wallet, { feeWallet: '0xYourFeeAddress' });
|
|
261
|
-
* const result = await swapWallet.swap(USDC, WETH, parseUnits('100', 6));
|
|
262
|
-
*/
|
|
263
135
|
export function attachSwap(wallet, config) {
|
|
264
136
|
const swapModule = new SwapModule(wallet.publicClient, wallet.walletClient, wallet.address, config);
|
|
265
137
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwapModule.js","sourceRoot":"","sources":["../../src/swap/SwapModule.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"SwapModule.js","sourceRoot":"","sources":["../../src/swap/SwapModule.ts"],"names":[],"mappings":"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"}
|
package/dist/swap/abi.d.ts
CHANGED
|
@@ -1,169 +1,51 @@
|
|
|
1
1
|
/** Uniswap V3 SwapRouter02 ABI — exactInputSingle */
|
|
2
|
-
export declare const UniswapV3RouterAbi:
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
readonly name: "recipient";
|
|
20
|
-
readonly type: "address";
|
|
21
|
-
}, {
|
|
22
|
-
readonly name: "amountIn";
|
|
23
|
-
readonly type: "uint256";
|
|
24
|
-
}, {
|
|
25
|
-
readonly name: "amountOutMinimum";
|
|
26
|
-
readonly type: "uint256";
|
|
27
|
-
}, {
|
|
28
|
-
readonly name: "sqrtPriceLimitX96";
|
|
29
|
-
readonly type: "uint160";
|
|
30
|
-
}];
|
|
31
|
-
}];
|
|
32
|
-
readonly outputs: readonly [{
|
|
33
|
-
readonly name: "amountOut";
|
|
34
|
-
readonly type: "uint256";
|
|
35
|
-
}];
|
|
36
|
-
}, {
|
|
37
|
-
readonly name: "exactInput";
|
|
38
|
-
readonly type: "function";
|
|
39
|
-
readonly stateMutability: "payable";
|
|
40
|
-
readonly inputs: readonly [{
|
|
41
|
-
readonly name: "params";
|
|
42
|
-
readonly type: "tuple";
|
|
43
|
-
readonly components: readonly [{
|
|
44
|
-
readonly name: "path";
|
|
45
|
-
readonly type: "bytes";
|
|
46
|
-
}, {
|
|
47
|
-
readonly name: "recipient";
|
|
48
|
-
readonly type: "address";
|
|
49
|
-
}, {
|
|
50
|
-
readonly name: "amountIn";
|
|
51
|
-
readonly type: "uint256";
|
|
52
|
-
}, {
|
|
53
|
-
readonly name: "amountOutMinimum";
|
|
54
|
-
readonly type: "uint256";
|
|
55
|
-
}];
|
|
56
|
-
}];
|
|
57
|
-
readonly outputs: readonly [{
|
|
58
|
-
readonly name: "amountOut";
|
|
59
|
-
readonly type: "uint256";
|
|
60
|
-
}];
|
|
61
|
-
}];
|
|
2
|
+
export declare const UniswapV3RouterAbi: {
|
|
3
|
+
name: string;
|
|
4
|
+
type: string;
|
|
5
|
+
stateMutability: string;
|
|
6
|
+
inputs: {
|
|
7
|
+
name: string;
|
|
8
|
+
type: string;
|
|
9
|
+
components: {
|
|
10
|
+
name: string;
|
|
11
|
+
type: string;
|
|
12
|
+
}[];
|
|
13
|
+
}[];
|
|
14
|
+
outputs: {
|
|
15
|
+
name: string;
|
|
16
|
+
type: string;
|
|
17
|
+
}[];
|
|
18
|
+
}[];
|
|
62
19
|
/** Uniswap V3 QuoterV2 ABI — quoteExactInputSingle */
|
|
63
|
-
export declare const UniswapV3QuoterV2Abi:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
readonly name: "fee";
|
|
81
|
-
readonly type: "uint24";
|
|
82
|
-
}, {
|
|
83
|
-
readonly name: "sqrtPriceLimitX96";
|
|
84
|
-
readonly type: "uint160";
|
|
85
|
-
}];
|
|
86
|
-
}];
|
|
87
|
-
readonly outputs: readonly [{
|
|
88
|
-
readonly name: "amountOut";
|
|
89
|
-
readonly type: "uint256";
|
|
90
|
-
}, {
|
|
91
|
-
readonly name: "sqrtPriceX96After";
|
|
92
|
-
readonly type: "uint160";
|
|
93
|
-
}, {
|
|
94
|
-
readonly name: "initializedTicksCrossed";
|
|
95
|
-
readonly type: "uint32";
|
|
96
|
-
}, {
|
|
97
|
-
readonly name: "gasEstimate";
|
|
98
|
-
readonly type: "uint256";
|
|
99
|
-
}];
|
|
100
|
-
}];
|
|
20
|
+
export declare const UniswapV3QuoterV2Abi: {
|
|
21
|
+
name: string;
|
|
22
|
+
type: string;
|
|
23
|
+
stateMutability: string;
|
|
24
|
+
inputs: {
|
|
25
|
+
name: string;
|
|
26
|
+
type: string;
|
|
27
|
+
components: {
|
|
28
|
+
name: string;
|
|
29
|
+
type: string;
|
|
30
|
+
}[];
|
|
31
|
+
}[];
|
|
32
|
+
outputs: {
|
|
33
|
+
name: string;
|
|
34
|
+
type: string;
|
|
35
|
+
}[];
|
|
36
|
+
}[];
|
|
101
37
|
/** Minimal ERC-20 ABI for allowance, approve, transferFrom */
|
|
102
|
-
export declare const ERC20Abi:
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
readonly type: "uint256";
|
|
116
|
-
}];
|
|
117
|
-
}, {
|
|
118
|
-
readonly name: "approve";
|
|
119
|
-
readonly type: "function";
|
|
120
|
-
readonly stateMutability: "nonpayable";
|
|
121
|
-
readonly inputs: readonly [{
|
|
122
|
-
readonly name: "spender";
|
|
123
|
-
readonly type: "address";
|
|
124
|
-
}, {
|
|
125
|
-
readonly name: "amount";
|
|
126
|
-
readonly type: "uint256";
|
|
127
|
-
}];
|
|
128
|
-
readonly outputs: readonly [{
|
|
129
|
-
readonly name: "";
|
|
130
|
-
readonly type: "bool";
|
|
131
|
-
}];
|
|
132
|
-
}, {
|
|
133
|
-
readonly name: "transfer";
|
|
134
|
-
readonly type: "function";
|
|
135
|
-
readonly stateMutability: "nonpayable";
|
|
136
|
-
readonly inputs: readonly [{
|
|
137
|
-
readonly name: "to";
|
|
138
|
-
readonly type: "address";
|
|
139
|
-
}, {
|
|
140
|
-
readonly name: "amount";
|
|
141
|
-
readonly type: "uint256";
|
|
142
|
-
}];
|
|
143
|
-
readonly outputs: readonly [{
|
|
144
|
-
readonly name: "";
|
|
145
|
-
readonly type: "bool";
|
|
146
|
-
}];
|
|
147
|
-
}, {
|
|
148
|
-
readonly name: "balanceOf";
|
|
149
|
-
readonly type: "function";
|
|
150
|
-
readonly stateMutability: "view";
|
|
151
|
-
readonly inputs: readonly [{
|
|
152
|
-
readonly name: "account";
|
|
153
|
-
readonly type: "address";
|
|
154
|
-
}];
|
|
155
|
-
readonly outputs: readonly [{
|
|
156
|
-
readonly name: "";
|
|
157
|
-
readonly type: "uint256";
|
|
158
|
-
}];
|
|
159
|
-
}, {
|
|
160
|
-
readonly name: "decimals";
|
|
161
|
-
readonly type: "function";
|
|
162
|
-
readonly stateMutability: "view";
|
|
163
|
-
readonly inputs: readonly [];
|
|
164
|
-
readonly outputs: readonly [{
|
|
165
|
-
readonly name: "";
|
|
166
|
-
readonly type: "uint8";
|
|
167
|
-
}];
|
|
168
|
-
}];
|
|
38
|
+
export declare const ERC20Abi: {
|
|
39
|
+
name: string;
|
|
40
|
+
type: string;
|
|
41
|
+
stateMutability: string;
|
|
42
|
+
inputs: {
|
|
43
|
+
name: string;
|
|
44
|
+
type: string;
|
|
45
|
+
}[];
|
|
46
|
+
outputs: {
|
|
47
|
+
name: string;
|
|
48
|
+
type: string;
|
|
49
|
+
}[];
|
|
50
|
+
}[];
|
|
169
51
|
//# sourceMappingURL=abi.d.ts.map
|
package/dist/swap/abi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../../src/swap/abi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../../src/swap/abi.ts"],"names":[],"mappings":"AACA,qDAAqD;AACrD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;GAwC9B,CAAC;AACF,sDAAsD;AACtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;GAyBhC,CAAC;AACF,8DAA8D;AAC9D,eAAO,MAAM,QAAQ;;;;;;;;;;;;GA6CpB,CAAC"}
|
package/dist/swap/abi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../../src/swap/abi.ts"],"names":[],"mappings":"AAAA,4EAA4E;
|
|
1
|
+
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../../src/swap/abi.ts"],"names":[],"mappings":"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"}
|
package/dist/swap/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export * from './router/index.js';
|
|
2
1
|
export { SwapModule, attachSwap, calcProtocolFee, applySlippage, calcDeadline } from './SwapModule.js';
|
|
3
2
|
export { UniswapV3RouterAbi, UniswapV3QuoterV2Abi, ERC20Abi } from './abi.js';
|
|
4
|
-
export { BASE_TOKENS, UNISWAP_V3_BASE, PROTOCOL_FEE_BPS, DEFAULT_SLIPPAGE_BPS
|
|
5
|
-
export type { UniswapFeeTier, SwapQuote, SwapOptions, SwapResult, SwapModuleConfig
|
|
3
|
+
export { BASE_TOKENS, UNISWAP_V3_BASE, PROTOCOL_FEE_BPS, DEFAULT_SLIPPAGE_BPS } from './types.js';
|
|
4
|
+
export type { UniswapFeeTier, SwapQuote, SwapOptions, SwapResult, SwapModuleConfig } from './types.js';
|
|
6
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/swap/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swap/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClG,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/swap/index.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
// [MAX-ADDED] SwapModule public API — Uniswap V3 aggregator with 0.875% protocol fee
|
|
2
|
-
// SmartSwapRouter — multi-DEX meta-aggregation
|
|
3
|
-
export * from './router/index.js';
|
|
4
1
|
export { SwapModule, attachSwap, calcProtocolFee, applySlippage, calcDeadline } from './SwapModule.js';
|
|
5
2
|
export { UniswapV3RouterAbi, UniswapV3QuoterV2Abi, ERC20Abi } from './abi.js';
|
|
6
|
-
export { BASE_TOKENS, UNISWAP_V3_BASE, PROTOCOL_FEE_BPS, DEFAULT_SLIPPAGE_BPS
|
|
3
|
+
export { BASE_TOKENS, UNISWAP_V3_BASE, PROTOCOL_FEE_BPS, DEFAULT_SLIPPAGE_BPS } from './types.js';
|
|
7
4
|
//# sourceMappingURL=index.js.map
|
package/dist/swap/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swap/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
|