@nradko/metric-omm-sdk-v1 0.4.1 → 0.4.3
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 +96 -12
- package/dist/abis/MetricOmmSimpleRouter.d.ts +44 -0
- package/dist/abis/MetricOmmSimpleRouter.d.ts.map +1 -1
- package/dist/abis/MetricOmmSimpleRouter.js +58 -0
- package/dist/abis/MetricOmmSimpleRouter.js.map +1 -1
- package/dist/abis/MetricOmmSwapQuoter.d.ts +26 -2
- package/dist/abis/MetricOmmSwapQuoter.d.ts.map +1 -1
- package/dist/abis/MetricOmmSwapQuoter.js +34 -2
- package/dist/abis/MetricOmmSwapQuoter.js.map +1 -1
- package/dist/abis/index.d.ts +0 -1
- package/dist/abis/index.d.ts.map +1 -1
- package/dist/abis/index.js +0 -1
- package/dist/abis/index.js.map +1 -1
- package/dist/addresses.d.ts +0 -2
- package/dist/addresses.d.ts.map +1 -1
- package/dist/addresses.js +8 -9
- package/dist/addresses.js.map +1 -1
- package/dist/dataProvider/index.d.ts +1 -1
- package/dist/dataProvider/index.d.ts.map +1 -1
- package/dist/dataProvider/index.js +1 -1
- package/dist/dataProvider/index.js.map +1 -1
- package/dist/dataProvider/read.d.ts +1 -3
- package/dist/dataProvider/read.d.ts.map +1 -1
- package/dist/dataProvider/read.js +1 -3
- package/dist/dataProvider/read.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/pool/liquidity.d.ts +83 -7
- package/dist/pool/liquidity.d.ts.map +1 -1
- package/dist/pool/liquidity.js +63 -3
- package/dist/pool/liquidity.js.map +1 -1
- package/dist/router/fromRoute.d.ts +93 -0
- package/dist/router/fromRoute.d.ts.map +1 -0
- package/dist/router/fromRoute.js +187 -0
- package/dist/router/fromRoute.js.map +1 -0
- package/dist/router/index.d.ts +8 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +8 -1
- package/dist/router/index.js.map +1 -1
- package/dist/router/nativeSwap.d.ts +47 -0
- package/dist/router/nativeSwap.d.ts.map +1 -0
- package/dist/router/nativeSwap.js +89 -0
- package/dist/router/nativeSwap.js.map +1 -0
- package/dist/router/swap.d.ts +82 -1
- package/dist/router/swap.d.ts.map +1 -1
- package/dist/router/swap.js +51 -1
- package/dist/router/swap.js.map +1 -1
- package/dist/router/swapPath.d.ts +46 -1
- package/dist/router/swapPath.d.ts.map +1 -1
- package/dist/router/swapPath.js +34 -0
- package/dist/router/swapPath.js.map +1 -1
- package/dist/router/utils.d.ts +9 -0
- package/dist/router/utils.d.ts.map +1 -0
- package/dist/router/utils.js +27 -0
- package/dist/router/utils.js.map +1 -0
- package/package.json +2 -2
- package/src/abis/MetricOmmSimpleRouter.ts +58 -0
- package/src/abis/MetricOmmSwapQuoter.ts +34 -2
- package/src/abis/index.ts +0 -1
- package/src/addresses.ts +8 -11
- package/src/dataProvider/index.ts +0 -1
- package/src/dataProvider/read.ts +1 -4
- package/src/index.ts +22 -2
- package/src/pool/liquidity.ts +83 -7
- package/src/router/fromRoute.ts +318 -0
- package/src/router/index.ts +36 -1
- package/src/router/nativeSwap.ts +123 -0
- package/src/router/swap.ts +82 -1
- package/src/router/swapPath.ts +47 -1
- package/src/router/utils.ts +31 -0
- package/dist/abis/MetricOmmPoolStateView.d.ts +0 -238
- package/dist/abis/MetricOmmPoolStateView.d.ts.map +0 -1
- package/dist/abis/MetricOmmPoolStateView.js +0 -315
- package/dist/abis/MetricOmmPoolStateView.js.map +0 -1
- package/src/abis/MetricOmmPoolStateView.ts +0 -314
package/dist/router/swap.d.ts
CHANGED
|
@@ -1,45 +1,80 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* SimpleRouter single-hop swap helpers.
|
|
3
|
+
*
|
|
4
|
+
* Typical ERC-20 flow:
|
|
5
|
+
* 1. `buildExactInputSingleParams` / `buildExactOutputSingleParams` — quote + slippage
|
|
6
|
+
* 2. `encodeExactInputSingleCalldata` — calldata for `walletClient.writeContract` or `sendTransaction`
|
|
7
|
+
* 3. Approve `tokenIn` on the SimpleRouter before sending (not needed for native ETH; see `nativeSwap.ts`)
|
|
3
8
|
*/
|
|
4
9
|
import type { Address, Hex } from "viem";
|
|
5
10
|
import type { PublicClient } from "viem";
|
|
11
|
+
/**
|
|
12
|
+
* Arguments for `MetricOmmSimpleRouter.exactInputSingle`.
|
|
13
|
+
* Pass to `encodeExactInputSingleCalldata` or native prepare helpers when `tokenIn` is WETH.
|
|
14
|
+
*/
|
|
6
15
|
export type ExactInputSingleParams = {
|
|
16
|
+
/** Pool to swap through. */
|
|
7
17
|
pool: Address;
|
|
18
|
+
/** Input token (`addresses.wrappedNative` when swapping from native ETH). */
|
|
8
19
|
tokenIn: Address;
|
|
20
|
+
/** Output token (`addresses.wrappedNative` when unwrapping to ETH in a follow-up call). */
|
|
9
21
|
tokenOut: Address;
|
|
22
|
+
/** `true` when swapping token0 → token1 for this pool. */
|
|
10
23
|
zeroForOne: boolean;
|
|
24
|
+
/** Exact input amount in `tokenIn` native decimals. */
|
|
11
25
|
amountIn: bigint;
|
|
26
|
+
/** Minimum acceptable output; reverts if less is received. */
|
|
12
27
|
amountOutMinimum: bigint;
|
|
28
|
+
/** Address that receives output tokens. */
|
|
13
29
|
recipient: Address;
|
|
30
|
+
/** Unix timestamp after which the swap reverts. */
|
|
14
31
|
deadline: bigint;
|
|
32
|
+
/** Q64.64 price bound; use `0` / `MAX_UINT128` defaults from builders when unsure. */
|
|
15
33
|
priceLimitX64: bigint;
|
|
34
|
+
/** Per-pool extension calldata; omit for pools without extensions. */
|
|
16
35
|
extensionData?: Hex;
|
|
17
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Arguments for `MetricOmmSimpleRouter.exactOutputSingle`.
|
|
39
|
+
*/
|
|
18
40
|
export type ExactOutputSingleParams = {
|
|
19
41
|
pool: Address;
|
|
20
42
|
tokenIn: Address;
|
|
21
43
|
tokenOut: Address;
|
|
22
44
|
zeroForOne: boolean;
|
|
45
|
+
/** Exact output amount in `tokenOut` native decimals. */
|
|
23
46
|
amountOut: bigint;
|
|
47
|
+
/** Maximum input willing to spend (slippage cap). */
|
|
24
48
|
amountInMaximum: bigint;
|
|
25
49
|
recipient: Address;
|
|
26
50
|
deadline: bigint;
|
|
27
51
|
priceLimitX64: bigint;
|
|
28
52
|
extensionData?: Hex;
|
|
29
53
|
};
|
|
54
|
+
/**
|
|
55
|
+
* Inputs for {@link buildExactInputSingleParams}.
|
|
56
|
+
* Quotes live on-chain via the SwapQuoter and applies `slippagePercent` to derive `amountOutMinimum`.
|
|
57
|
+
*/
|
|
30
58
|
export interface BuildExactInputSingleParams {
|
|
31
59
|
publicClient: PublicClient;
|
|
32
60
|
pool: Address;
|
|
33
61
|
tokenIn: Address;
|
|
34
62
|
tokenOut: Address;
|
|
35
63
|
recipient: Address;
|
|
64
|
+
/** Input amount in `tokenIn` decimals (wei for ETH / WETH). */
|
|
36
65
|
amountIn: bigint;
|
|
66
|
+
/** Human-readable slippage tolerance, e.g. `0.5` = 0.5%. */
|
|
37
67
|
slippagePercent: number;
|
|
68
|
+
/** Optional price bound; defaults from quoter direction when omitted. */
|
|
38
69
|
priceLimitX64?: bigint;
|
|
39
70
|
deadline: bigint;
|
|
40
71
|
extensionData?: Hex;
|
|
72
|
+
/** Override when `addresses.quoter` is unset. */
|
|
41
73
|
quoterAddress?: Address;
|
|
74
|
+
/** `addresses.wrappedNative` — required when `tokenIn` or `tokenOut` is native (zero address). */
|
|
75
|
+
wrappedNative?: Address;
|
|
42
76
|
}
|
|
77
|
+
/** Inputs for {@link buildExactOutputSingleParams}. */
|
|
43
78
|
export interface BuildExactOutputSingleParams {
|
|
44
79
|
publicClient: PublicClient;
|
|
45
80
|
pool: Address;
|
|
@@ -52,13 +87,59 @@ export interface BuildExactOutputSingleParams {
|
|
|
52
87
|
deadline: bigint;
|
|
53
88
|
extensionData?: Hex;
|
|
54
89
|
quoterAddress?: Address;
|
|
90
|
+
wrappedNative?: Address;
|
|
55
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Convert a human slippage percent to basis points (1 bp = 0.01%).
|
|
94
|
+
* @example toSlippageBps(0.5) // 50n
|
|
95
|
+
*/
|
|
56
96
|
export declare function toSlippageBps(slippagePercent: number): bigint;
|
|
97
|
+
/** Ceiling division for bigint values. Used when rounding slippage up on exact-output swaps. */
|
|
57
98
|
export declare function ceilDiv(numerator: bigint, denominator: bigint): bigint;
|
|
99
|
+
/**
|
|
100
|
+
* Build single-hop exact-input swap params with live quote and slippage.
|
|
101
|
+
*
|
|
102
|
+
* Resolves `zeroForOne`, quotes `amountOut`, and sets `amountOutMinimum`.
|
|
103
|
+
* For native ETH input, use `prepareExactInputSingleSupportingNativePaymentCalldata` and set `msg.value` on the transaction.
|
|
104
|
+
* (params will contain WETH as `tokenIn`).
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* const params = await buildExactInputSingleParams({
|
|
109
|
+
* publicClient,
|
|
110
|
+
* pool,
|
|
111
|
+
* tokenIn: usdc,
|
|
112
|
+
* tokenOut: weth,
|
|
113
|
+
* recipient: account,
|
|
114
|
+
* amountIn: parseUnits("100", 6),
|
|
115
|
+
* slippagePercent: 0.5,
|
|
116
|
+
* deadline: BigInt(Math.floor(Date.now() / 1000) + 1200),
|
|
117
|
+
* quoterAddress: addresses.quoter,
|
|
118
|
+
* });
|
|
119
|
+
* await walletClient.writeContract({
|
|
120
|
+
* address: addresses.simpleRouter,
|
|
121
|
+
* abi: MetricOmmSimpleRouterAbi,
|
|
122
|
+
* functionName: "exactInputSingle",
|
|
123
|
+
* args: [params],
|
|
124
|
+
* account,
|
|
125
|
+
* });
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
58
128
|
export declare function buildExactInputSingleParams(params: BuildExactInputSingleParams): Promise<ExactInputSingleParams>;
|
|
129
|
+
/**
|
|
130
|
+
* Build single-hop exact-output swap params with live quote and slippage.
|
|
131
|
+
* Sets `amountInMaximum` from quoted input plus `slippagePercent`.
|
|
132
|
+
*/
|
|
59
133
|
export declare function buildExactOutputSingleParams(params: BuildExactOutputSingleParams): Promise<ExactOutputSingleParams>;
|
|
134
|
+
/**
|
|
135
|
+
* Encode `exactInputSingle` calldata for `addresses.simpleRouter`.
|
|
136
|
+
* Approve `tokenIn` on the router before sending (unless using native ETH prepare helpers).
|
|
137
|
+
*/
|
|
60
138
|
export declare function encodeExactInputSingleCalldata(params: ExactInputSingleParams): Hex;
|
|
139
|
+
/** Alias for {@link encodeExactInputSingleCalldata}. */
|
|
61
140
|
export declare const prepareExactInputSingleCalldata: typeof encodeExactInputSingleCalldata;
|
|
141
|
+
/** Encode `exactOutputSingle` calldata for `addresses.simpleRouter`. */
|
|
62
142
|
export declare function encodeExactOutputSingleCalldata(params: ExactOutputSingleParams): Hex;
|
|
143
|
+
/** Alias for {@link encodeExactOutputSingleCalldata}. */
|
|
63
144
|
export declare const prepareExactOutputSingleCalldata: typeof encodeExactOutputSingleCalldata;
|
|
64
145
|
//# sourceMappingURL=swap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../src/router/swap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../src/router/swap.ts"],"names":[],"mappings":"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"}
|
package/dist/router/swap.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* SimpleRouter single-hop swap helpers.
|
|
3
|
+
*
|
|
4
|
+
* Typical ERC-20 flow:
|
|
5
|
+
* 1. `buildExactInputSingleParams` / `buildExactOutputSingleParams` — quote + slippage
|
|
6
|
+
* 2. `encodeExactInputSingleCalldata` — calldata for `walletClient.writeContract` or `sendTransaction`
|
|
7
|
+
* 3. Approve `tokenIn` on the SimpleRouter before sending (not needed for native ETH; see `nativeSwap.ts`)
|
|
3
8
|
*/
|
|
4
9
|
import { encodeFunctionData } from "viem";
|
|
5
10
|
import { defaultPriceLimitX64 } from "../quoter/quotePath.js";
|
|
@@ -8,12 +13,17 @@ import { resolveSwapPath } from "../swap/path.js";
|
|
|
8
13
|
import { SIMPLE_ROUTER_ABI } from "../constants.js";
|
|
9
14
|
import { EMPTY_EXTENSION_DATA } from "../extensions/types.js";
|
|
10
15
|
const BPS_BASE = 10000n;
|
|
16
|
+
/**
|
|
17
|
+
* Convert a human slippage percent to basis points (1 bp = 0.01%).
|
|
18
|
+
* @example toSlippageBps(0.5) // 50n
|
|
19
|
+
*/
|
|
11
20
|
export function toSlippageBps(slippagePercent) {
|
|
12
21
|
if (!Number.isFinite(slippagePercent) || slippagePercent < 0 || slippagePercent > 100) {
|
|
13
22
|
throw new Error("slippagePercent must be a finite number between 0 and 100");
|
|
14
23
|
}
|
|
15
24
|
return BigInt(Math.round(slippagePercent * 100));
|
|
16
25
|
}
|
|
26
|
+
/** Ceiling division for bigint values. Used when rounding slippage up on exact-output swaps. */
|
|
17
27
|
export function ceilDiv(numerator, denominator) {
|
|
18
28
|
if (denominator <= 0n) {
|
|
19
29
|
throw new Error("denominator must be > 0");
|
|
@@ -51,6 +61,35 @@ function toExactOutputSingleStruct(params) {
|
|
|
51
61
|
extensionData: withExtensionData(params.extensionData),
|
|
52
62
|
};
|
|
53
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Build single-hop exact-input swap params with live quote and slippage.
|
|
66
|
+
*
|
|
67
|
+
* Resolves `zeroForOne`, quotes `amountOut`, and sets `amountOutMinimum`.
|
|
68
|
+
* For native ETH input, use `prepareExactInputSingleSupportingNativePaymentCalldata` and set `msg.value` on the transaction.
|
|
69
|
+
* (params will contain WETH as `tokenIn`).
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* const params = await buildExactInputSingleParams({
|
|
74
|
+
* publicClient,
|
|
75
|
+
* pool,
|
|
76
|
+
* tokenIn: usdc,
|
|
77
|
+
* tokenOut: weth,
|
|
78
|
+
* recipient: account,
|
|
79
|
+
* amountIn: parseUnits("100", 6),
|
|
80
|
+
* slippagePercent: 0.5,
|
|
81
|
+
* deadline: BigInt(Math.floor(Date.now() / 1000) + 1200),
|
|
82
|
+
* quoterAddress: addresses.quoter,
|
|
83
|
+
* });
|
|
84
|
+
* await walletClient.writeContract({
|
|
85
|
+
* address: addresses.simpleRouter,
|
|
86
|
+
* abi: MetricOmmSimpleRouterAbi,
|
|
87
|
+
* functionName: "exactInputSingle",
|
|
88
|
+
* args: [params],
|
|
89
|
+
* account,
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
54
93
|
export async function buildExactInputSingleParams(params) {
|
|
55
94
|
const slippageBps = toSlippageBps(params.slippagePercent);
|
|
56
95
|
const { zeroForOnes } = await resolveSwapPath(params.publicClient, params.tokenIn, params.tokenOut, [params.pool], params.extensionData ? [params.extensionData] : undefined);
|
|
@@ -81,6 +120,10 @@ export async function buildExactInputSingleParams(params) {
|
|
|
81
120
|
extensionData: params.extensionData,
|
|
82
121
|
};
|
|
83
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Build single-hop exact-output swap params with live quote and slippage.
|
|
125
|
+
* Sets `amountInMaximum` from quoted input plus `slippagePercent`.
|
|
126
|
+
*/
|
|
84
127
|
export async function buildExactOutputSingleParams(params) {
|
|
85
128
|
const slippageBps = toSlippageBps(params.slippagePercent);
|
|
86
129
|
const { zeroForOnes } = await resolveSwapPath(params.publicClient, params.tokenIn, params.tokenOut, [params.pool], params.extensionData ? [params.extensionData] : undefined);
|
|
@@ -111,6 +154,10 @@ export async function buildExactOutputSingleParams(params) {
|
|
|
111
154
|
extensionData: params.extensionData,
|
|
112
155
|
};
|
|
113
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Encode `exactInputSingle` calldata for `addresses.simpleRouter`.
|
|
159
|
+
* Approve `tokenIn` on the router before sending (unless using native ETH prepare helpers).
|
|
160
|
+
*/
|
|
114
161
|
export function encodeExactInputSingleCalldata(params) {
|
|
115
162
|
return encodeFunctionData({
|
|
116
163
|
abi: SIMPLE_ROUTER_ABI,
|
|
@@ -118,7 +165,9 @@ export function encodeExactInputSingleCalldata(params) {
|
|
|
118
165
|
args: [toExactInputSingleStruct(params)],
|
|
119
166
|
});
|
|
120
167
|
}
|
|
168
|
+
/** Alias for {@link encodeExactInputSingleCalldata}. */
|
|
121
169
|
export const prepareExactInputSingleCalldata = encodeExactInputSingleCalldata;
|
|
170
|
+
/** Encode `exactOutputSingle` calldata for `addresses.simpleRouter`. */
|
|
122
171
|
export function encodeExactOutputSingleCalldata(params) {
|
|
123
172
|
return encodeFunctionData({
|
|
124
173
|
abi: SIMPLE_ROUTER_ABI,
|
|
@@ -126,5 +175,6 @@ export function encodeExactOutputSingleCalldata(params) {
|
|
|
126
175
|
args: [toExactOutputSingleStruct(params)],
|
|
127
176
|
});
|
|
128
177
|
}
|
|
178
|
+
/** Alias for {@link encodeExactOutputSingleCalldata}. */
|
|
129
179
|
export const prepareExactOutputSingleCalldata = encodeExactOutputSingleCalldata;
|
|
130
180
|
//# sourceMappingURL=swap.js.map
|
package/dist/router/swap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/router/swap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/router/swap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* SimpleRouter multihop swap helpers.
|
|
3
|
+
*
|
|
4
|
+
* Multihop swaps walk `pools` in order; intermediate tokens remain on the router between hops.
|
|
5
|
+
* For ERC-20 paths, approve the router for `tokenIn` once before sending the transaction.
|
|
3
6
|
*/
|
|
4
7
|
import type { Address, Hex, PublicClient } from "viem";
|
|
8
|
+
/**
|
|
9
|
+
* Arguments for `MetricOmmSimpleRouter.exactInput` (multihop exact input).
|
|
10
|
+
* `tokens` and `zeroForOneBitMap` are usually produced by {@link buildExactInputParams}.
|
|
11
|
+
*/
|
|
5
12
|
export type ExactInputParams = {
|
|
13
|
+
/** Path tokens, length `pools.length + 1`. */
|
|
6
14
|
tokens: Address[];
|
|
15
|
+
/** One pool per hop, in swap order. */
|
|
7
16
|
pools: Address[];
|
|
17
|
+
/** Extension calldata per hop; use `0x` when a pool has no extension. */
|
|
8
18
|
extensionDatas: Hex[];
|
|
19
|
+
/** Bit `i` set when hop `i` is token0 → token1. */
|
|
9
20
|
zeroForOneBitMap: bigint;
|
|
10
21
|
amountIn: bigint;
|
|
11
22
|
amountOutMinimum: bigint;
|
|
12
23
|
recipient: Address;
|
|
13
24
|
deadline: bigint;
|
|
14
25
|
};
|
|
26
|
+
/** Arguments for `MetricOmmSimpleRouter.exactOutput` (multihop exact output). */
|
|
15
27
|
export type ExactOutputParams = {
|
|
16
28
|
tokens: Address[];
|
|
17
29
|
pools: Address[];
|
|
@@ -22,10 +34,12 @@ export type ExactOutputParams = {
|
|
|
22
34
|
recipient: Address;
|
|
23
35
|
deadline: bigint;
|
|
24
36
|
};
|
|
37
|
+
/** Inputs for {@link buildExactInputParams}. */
|
|
25
38
|
export interface BuildExactInputParams {
|
|
26
39
|
publicClient: PublicClient;
|
|
27
40
|
tokenIn: Address;
|
|
28
41
|
tokenOut: Address;
|
|
42
|
+
/** Ordered pool addresses connecting `tokenIn` → `tokenOut`. */
|
|
29
43
|
pools: readonly Address[];
|
|
30
44
|
extensionDatas?: readonly Hex[];
|
|
31
45
|
recipient: Address;
|
|
@@ -33,7 +47,9 @@ export interface BuildExactInputParams {
|
|
|
33
47
|
slippagePercent: number;
|
|
34
48
|
deadline: bigint;
|
|
35
49
|
quoterAddress?: Address;
|
|
50
|
+
wrappedNative?: Address;
|
|
36
51
|
}
|
|
52
|
+
/** Inputs for {@link buildExactOutputParams}. */
|
|
37
53
|
export interface BuildExactOutputParams {
|
|
38
54
|
publicClient: PublicClient;
|
|
39
55
|
tokenIn: Address;
|
|
@@ -45,12 +61,41 @@ export interface BuildExactOutputParams {
|
|
|
45
61
|
slippagePercent: number;
|
|
46
62
|
deadline: bigint;
|
|
47
63
|
quoterAddress?: Address;
|
|
64
|
+
wrappedNative?: Address;
|
|
48
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Build multihop exact-input params: resolves path, quotes output, applies slippage.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* const pathParams = await buildExactInputParams({
|
|
72
|
+
* publicClient,
|
|
73
|
+
* tokenIn: tokenA,
|
|
74
|
+
* tokenOut: tokenC,
|
|
75
|
+
* pools: [poolAB, poolBC],
|
|
76
|
+
* recipient: account,
|
|
77
|
+
* amountIn: parseUnits("1", 18),
|
|
78
|
+
* slippagePercent: 0.5,
|
|
79
|
+
* deadline,
|
|
80
|
+
* quoterAddress: addresses.quoter,
|
|
81
|
+
* });
|
|
82
|
+
* await walletClient.sendTransaction({
|
|
83
|
+
* to: addresses.simpleRouter,
|
|
84
|
+
* data: encodeExactInputCalldata(pathParams),
|
|
85
|
+
* account,
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
49
89
|
export declare function buildExactInputParams(params: BuildExactInputParams): Promise<ExactInputParams>;
|
|
90
|
+
/** Build multihop exact-output params with live quote and slippage on `amountInMaximum`. */
|
|
50
91
|
export declare function buildExactOutputParams(params: BuildExactOutputParams): Promise<ExactOutputParams>;
|
|
92
|
+
/** Encode `exactInput` multihop calldata. */
|
|
51
93
|
export declare function encodeExactInputCalldata(params: ExactInputParams): Hex;
|
|
94
|
+
/** Alias for {@link encodeExactInputCalldata}. */
|
|
52
95
|
export declare const prepareExactInputCalldata: typeof encodeExactInputCalldata;
|
|
96
|
+
/** Encode `exactOutput` multihop calldata. */
|
|
53
97
|
export declare function encodeExactOutputCalldata(params: ExactOutputParams): Hex;
|
|
98
|
+
/** Alias for {@link encodeExactOutputCalldata}. */
|
|
54
99
|
export declare const prepareExactOutputCalldata: typeof encodeExactOutputCalldata;
|
|
55
100
|
export { encodeZeroForOneBitMap } from "../swap/path.js";
|
|
56
101
|
//# sourceMappingURL=swapPath.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swapPath.d.ts","sourceRoot":"","sources":["../../src/router/swapPath.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"swapPath.d.ts","sourceRoot":"","sources":["../../src/router/swapPath.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AASvD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,8CAA8C;IAC9C,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,uCAAuC;IACvC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,yEAAyE;IACzE,cAAc,EAAE,GAAG,EAAE,CAAC;IACtB,mDAAmD;IACnD,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,cAAc,EAAE,GAAG,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,gEAAgE;IAChE,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA4BD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAiC3B;AAED,4FAA4F;AAC5F,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,CAiC5B;AAED,6CAA6C;AAC7C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,GAAG,CAMtE;AAED,kDAAkD;AAClD,eAAO,MAAM,yBAAyB,iCAA2B,CAAC;AAElE,8CAA8C;AAC9C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,GAAG,GAAG,CAMxE;AAED,mDAAmD;AACnD,eAAO,MAAM,0BAA0B,kCAA4B,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/router/swapPath.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SimpleRouter multihop swap helpers.
|
|
3
|
+
*
|
|
4
|
+
* Multihop swaps walk `pools` in order; intermediate tokens remain on the router between hops.
|
|
5
|
+
* For ERC-20 paths, approve the router for `tokenIn` once before sending the transaction.
|
|
6
|
+
*/
|
|
1
7
|
import { encodeFunctionData } from "viem";
|
|
2
8
|
import { quoteLiveExactIn, quoteLiveExactOut } from "../quoter/quotePath.js";
|
|
3
9
|
import { resolveSwapPath } from "../swap/path.js";
|
|
@@ -28,6 +34,29 @@ function toExactOutputStruct(params) {
|
|
|
28
34
|
deadline: params.deadline,
|
|
29
35
|
};
|
|
30
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Build multihop exact-input params: resolves path, quotes output, applies slippage.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* const pathParams = await buildExactInputParams({
|
|
43
|
+
* publicClient,
|
|
44
|
+
* tokenIn: tokenA,
|
|
45
|
+
* tokenOut: tokenC,
|
|
46
|
+
* pools: [poolAB, poolBC],
|
|
47
|
+
* recipient: account,
|
|
48
|
+
* amountIn: parseUnits("1", 18),
|
|
49
|
+
* slippagePercent: 0.5,
|
|
50
|
+
* deadline,
|
|
51
|
+
* quoterAddress: addresses.quoter,
|
|
52
|
+
* });
|
|
53
|
+
* await walletClient.sendTransaction({
|
|
54
|
+
* to: addresses.simpleRouter,
|
|
55
|
+
* data: encodeExactInputCalldata(pathParams),
|
|
56
|
+
* account,
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
31
60
|
export async function buildExactInputParams(params) {
|
|
32
61
|
const slippageBps = toSlippageBps(params.slippagePercent);
|
|
33
62
|
const { tokens, extensionDatas, zeroForOneBitMap } = await resolveSwapPath(params.publicClient, params.tokenIn, params.tokenOut, params.pools, params.extensionDatas);
|
|
@@ -53,6 +82,7 @@ export async function buildExactInputParams(params) {
|
|
|
53
82
|
deadline: params.deadline,
|
|
54
83
|
};
|
|
55
84
|
}
|
|
85
|
+
/** Build multihop exact-output params with live quote and slippage on `amountInMaximum`. */
|
|
56
86
|
export async function buildExactOutputParams(params) {
|
|
57
87
|
const slippageBps = toSlippageBps(params.slippagePercent);
|
|
58
88
|
const { tokens, extensionDatas, zeroForOneBitMap } = await resolveSwapPath(params.publicClient, params.tokenIn, params.tokenOut, params.pools, params.extensionDatas);
|
|
@@ -78,6 +108,7 @@ export async function buildExactOutputParams(params) {
|
|
|
78
108
|
deadline: params.deadline,
|
|
79
109
|
};
|
|
80
110
|
}
|
|
111
|
+
/** Encode `exactInput` multihop calldata. */
|
|
81
112
|
export function encodeExactInputCalldata(params) {
|
|
82
113
|
return encodeFunctionData({
|
|
83
114
|
abi: SIMPLE_ROUTER_ABI,
|
|
@@ -85,7 +116,9 @@ export function encodeExactInputCalldata(params) {
|
|
|
85
116
|
args: [toExactInputStruct(params)],
|
|
86
117
|
});
|
|
87
118
|
}
|
|
119
|
+
/** Alias for {@link encodeExactInputCalldata}. */
|
|
88
120
|
export const prepareExactInputCalldata = encodeExactInputCalldata;
|
|
121
|
+
/** Encode `exactOutput` multihop calldata. */
|
|
89
122
|
export function encodeExactOutputCalldata(params) {
|
|
90
123
|
return encodeFunctionData({
|
|
91
124
|
abi: SIMPLE_ROUTER_ABI,
|
|
@@ -93,6 +126,7 @@ export function encodeExactOutputCalldata(params) {
|
|
|
93
126
|
args: [toExactOutputStruct(params)],
|
|
94
127
|
});
|
|
95
128
|
}
|
|
129
|
+
/** Alias for {@link encodeExactOutputCalldata}. */
|
|
96
130
|
export const prepareExactOutputCalldata = encodeExactOutputCalldata;
|
|
97
131
|
export { encodeZeroForOneBitMap } from "../swap/path.js";
|
|
98
132
|
//# sourceMappingURL=swapPath.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swapPath.js","sourceRoot":"","sources":["../../src/router/swapPath.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"swapPath.js","sourceRoot":"","sources":["../../src/router/swapPath.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** SimpleRouter multicall and PeripheryPayments calldata encoders. */
|
|
2
|
+
import type { Address, Hex } from "viem";
|
|
3
|
+
/** `multicall(bytes[])`. */
|
|
4
|
+
export declare function encodeMulticallCalldata(calls: readonly Hex[]): Hex;
|
|
5
|
+
/** `refundETH()` — unused native balance on the router back to caller. */
|
|
6
|
+
export declare function encodeRefundETHCalldata(): Hex;
|
|
7
|
+
/** `unwrapWETH9(amountMinimum, recipient)`. */
|
|
8
|
+
export declare function encodeUnwrapWETH9Calldata(amountMinimum: bigint, recipient: Address): Hex;
|
|
9
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/router/utils.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAIzC,4BAA4B;AAC5B,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,CAMlE;AAED,0EAA0E;AAC1E,wBAAgB,uBAAuB,IAAI,GAAG,CAK7C;AAED,+CAA+C;AAC/C,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,GAAG,CAMxF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** SimpleRouter multicall and PeripheryPayments calldata encoders. */
|
|
2
|
+
import { encodeFunctionData } from "viem";
|
|
3
|
+
import { SIMPLE_ROUTER_ABI } from "../constants.js";
|
|
4
|
+
/** `multicall(bytes[])`. */
|
|
5
|
+
export function encodeMulticallCalldata(calls) {
|
|
6
|
+
return encodeFunctionData({
|
|
7
|
+
abi: SIMPLE_ROUTER_ABI,
|
|
8
|
+
functionName: "multicall",
|
|
9
|
+
args: [calls],
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
/** `refundETH()` — unused native balance on the router back to caller. */
|
|
13
|
+
export function encodeRefundETHCalldata() {
|
|
14
|
+
return encodeFunctionData({
|
|
15
|
+
abi: SIMPLE_ROUTER_ABI,
|
|
16
|
+
functionName: "refundETH",
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/** `unwrapWETH9(amountMinimum, recipient)`. */
|
|
20
|
+
export function encodeUnwrapWETH9Calldata(amountMinimum, recipient) {
|
|
21
|
+
return encodeFunctionData({
|
|
22
|
+
abi: SIMPLE_ROUTER_ABI,
|
|
23
|
+
functionName: "unwrapWETH9",
|
|
24
|
+
args: [amountMinimum, recipient],
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/router/utils.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAGtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,4BAA4B;AAC5B,MAAM,UAAU,uBAAuB,CAAC,KAAqB;IAC3D,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,iBAAiB;QACtB,YAAY,EAAE,WAAW;QACzB,IAAI,EAAE,CAAC,KAAK,CAAC;KACd,CAAC,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,uBAAuB;IACrC,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,iBAAiB;QACtB,YAAY,EAAE,WAAW;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,yBAAyB,CAAC,aAAqB,EAAE,SAAkB;IACjF,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,iBAAiB;QACtB,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;KACjC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nradko/metric-omm-sdk-v1",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "Metric AMM SDK — v1 contracts (SimpleRouter, SwapQuoter, LiquidityAdder, extensions, add/removeLiquidity)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"type": "git",
|
|
55
55
|
"url": "https://github.com/Metric-OMM/metric-sdk.git"
|
|
56
56
|
},
|
|
57
|
-
"metricPeripheryRef": "
|
|
57
|
+
"metricPeripheryRef": "e161cb0b1b301395c631197f3c7d5c205a8b4d48",
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"viem": "^2.x"
|
|
60
60
|
},
|
|
@@ -6,6 +6,11 @@ export const MetricOmmSimpleRouterAbi = [
|
|
|
6
6
|
name: "weth",
|
|
7
7
|
type: "address",
|
|
8
8
|
},
|
|
9
|
+
{
|
|
10
|
+
internalType: "address",
|
|
11
|
+
name: "factory",
|
|
12
|
+
type: "address",
|
|
13
|
+
},
|
|
9
14
|
],
|
|
10
15
|
stateMutability: "nonpayable",
|
|
11
16
|
type: "constructor",
|
|
@@ -32,6 +37,17 @@ export const MetricOmmSimpleRouterAbi = [
|
|
|
32
37
|
name: "AmountTooLarge",
|
|
33
38
|
type: "error",
|
|
34
39
|
},
|
|
40
|
+
{
|
|
41
|
+
inputs: [
|
|
42
|
+
{
|
|
43
|
+
internalType: "uint128",
|
|
44
|
+
name: "amount",
|
|
45
|
+
type: "uint128",
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
name: "AmountTooLarge",
|
|
49
|
+
type: "error",
|
|
50
|
+
},
|
|
35
51
|
{
|
|
36
52
|
inputs: [],
|
|
37
53
|
name: "ETHTransferFailed",
|
|
@@ -127,6 +143,11 @@ export const MetricOmmSimpleRouterAbi = [
|
|
|
127
143
|
name: "InvalidCallbackMode",
|
|
128
144
|
type: "error",
|
|
129
145
|
},
|
|
146
|
+
{
|
|
147
|
+
inputs: [],
|
|
148
|
+
name: "InvalidFactory",
|
|
149
|
+
type: "error",
|
|
150
|
+
},
|
|
130
151
|
{
|
|
131
152
|
inputs: [
|
|
132
153
|
{
|
|
@@ -190,6 +211,17 @@ export const MetricOmmSimpleRouterAbi = [
|
|
|
190
211
|
name: "InvalidPath",
|
|
191
212
|
type: "error",
|
|
192
213
|
},
|
|
214
|
+
{
|
|
215
|
+
inputs: [
|
|
216
|
+
{
|
|
217
|
+
internalType: "address",
|
|
218
|
+
name: "pool",
|
|
219
|
+
type: "address",
|
|
220
|
+
},
|
|
221
|
+
],
|
|
222
|
+
name: "InvalidPool",
|
|
223
|
+
type: "error",
|
|
224
|
+
},
|
|
193
225
|
{
|
|
194
226
|
inputs: [
|
|
195
227
|
{
|
|
@@ -206,6 +238,32 @@ export const MetricOmmSimpleRouterAbi = [
|
|
|
206
238
|
name: "InvalidPriceLimitForDirection",
|
|
207
239
|
type: "error",
|
|
208
240
|
},
|
|
241
|
+
{
|
|
242
|
+
inputs: [
|
|
243
|
+
{
|
|
244
|
+
internalType: "bool",
|
|
245
|
+
name: "zeroForOne",
|
|
246
|
+
type: "bool",
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
internalType: "uint128",
|
|
250
|
+
name: "priceLimitX64",
|
|
251
|
+
type: "uint128",
|
|
252
|
+
},
|
|
253
|
+
],
|
|
254
|
+
name: "InvalidPriceLimitForDirection",
|
|
255
|
+
type: "error",
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
inputs: [],
|
|
259
|
+
name: "InvalidSwapDeltas",
|
|
260
|
+
type: "error",
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
inputs: [],
|
|
264
|
+
name: "InvalidSwapDeltas",
|
|
265
|
+
type: "error",
|
|
266
|
+
},
|
|
209
267
|
{
|
|
210
268
|
inputs: [],
|
|
211
269
|
name: "InvalidSwapDeltas",
|