@metric.xyz/metric-omm-sdk-v1 0.4.5
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 +330 -0
- package/dist/abis/DepositAllowlistExtension.d.ts +483 -0
- package/dist/abis/DepositAllowlistExtension.d.ts.map +1 -0
- package/dist/abis/DepositAllowlistExtension.js +628 -0
- package/dist/abis/DepositAllowlistExtension.js.map +1 -0
- package/dist/abis/MetricOmmPool.d.ts +1001 -0
- package/dist/abis/MetricOmmPool.d.ts.map +1 -0
- package/dist/abis/MetricOmmPool.js +1283 -0
- package/dist/abis/MetricOmmPool.js.map +1 -0
- package/dist/abis/MetricOmmPoolDataProvider.d.ts +365 -0
- package/dist/abis/MetricOmmPoolDataProvider.d.ts.map +1 -0
- package/dist/abis/MetricOmmPoolDataProvider.js +479 -0
- package/dist/abis/MetricOmmPoolDataProvider.js.map +1 -0
- package/dist/abis/MetricOmmPoolFactory.d.ts +1329 -0
- package/dist/abis/MetricOmmPoolFactory.d.ts.map +1 -0
- package/dist/abis/MetricOmmPoolFactory.js +1707 -0
- package/dist/abis/MetricOmmPoolFactory.js.map +1 -0
- package/dist/abis/MetricOmmPoolLiquidityAdder.d.ts +487 -0
- package/dist/abis/MetricOmmPoolLiquidityAdder.d.ts.map +1 -0
- package/dist/abis/MetricOmmPoolLiquidityAdder.js +631 -0
- package/dist/abis/MetricOmmPoolLiquidityAdder.js.map +1 -0
- package/dist/abis/MetricOmmSimpleRouter.d.ts +651 -0
- package/dist/abis/MetricOmmSimpleRouter.d.ts.map +1 -0
- package/dist/abis/MetricOmmSimpleRouter.js +847 -0
- package/dist/abis/MetricOmmSimpleRouter.js.map +1 -0
- package/dist/abis/MetricOmmSwapQuoter.d.ts +588 -0
- package/dist/abis/MetricOmmSwapQuoter.d.ts.map +1 -0
- package/dist/abis/MetricOmmSwapQuoter.js +764 -0
- package/dist/abis/MetricOmmSwapQuoter.js.map +1 -0
- package/dist/abis/Multicall3.d.ts +333 -0
- package/dist/abis/Multicall3.d.ts.map +1 -0
- package/dist/abis/Multicall3.js +441 -0
- package/dist/abis/Multicall3.js.map +1 -0
- package/dist/abis/OracleProvider.d.ts +106 -0
- package/dist/abis/OracleProvider.d.ts.map +1 -0
- package/dist/abis/OracleProvider.js +62 -0
- package/dist/abis/OracleProvider.js.map +1 -0
- package/dist/abis/OracleValueStopLossExtension.d.ts +936 -0
- package/dist/abis/OracleValueStopLossExtension.d.ts.map +1 -0
- package/dist/abis/OracleValueStopLossExtension.js +1214 -0
- package/dist/abis/OracleValueStopLossExtension.js.map +1 -0
- package/dist/abis/PriceProvider.d.ts +36 -0
- package/dist/abis/PriceProvider.d.ts.map +1 -0
- package/dist/abis/PriceProvider.js +47 -0
- package/dist/abis/PriceProvider.js.map +1 -0
- package/dist/abis/PriceVelocityGuardExtension.d.ts +454 -0
- package/dist/abis/PriceVelocityGuardExtension.d.ts.map +1 -0
- package/dist/abis/PriceVelocityGuardExtension.js +590 -0
- package/dist/abis/PriceVelocityGuardExtension.js.map +1 -0
- package/dist/abis/SwapAllowlistExtension.d.ts +483 -0
- package/dist/abis/SwapAllowlistExtension.d.ts.map +1 -0
- package/dist/abis/SwapAllowlistExtension.js +628 -0
- package/dist/abis/SwapAllowlistExtension.js.map +1 -0
- package/dist/abis/index.d.ts +16 -0
- package/dist/abis/index.d.ts.map +1 -0
- package/dist/abis/index.js +16 -0
- package/dist/abis/index.js.map +1 -0
- package/dist/addresses.d.ts +55 -0
- package/dist/addresses.d.ts.map +1 -0
- package/dist/addresses.js +97 -0
- package/dist/addresses.js.map +1 -0
- package/dist/constants.d.ts +24 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +32 -0
- package/dist/constants.js.map +1 -0
- package/dist/dataProvider/index.d.ts +5 -0
- package/dist/dataProvider/index.d.ts.map +1 -0
- package/dist/dataProvider/index.js +5 -0
- package/dist/dataProvider/index.js.map +1 -0
- package/dist/dataProvider/read.d.ts +37 -0
- package/dist/dataProvider/read.d.ts.map +1 -0
- package/dist/dataProvider/read.js +216 -0
- package/dist/dataProvider/read.js.map +1 -0
- package/dist/extensions/admin/depositAllowlist.d.ts +8 -0
- package/dist/extensions/admin/depositAllowlist.d.ts.map +1 -0
- package/dist/extensions/admin/depositAllowlist.js +10 -0
- package/dist/extensions/admin/depositAllowlist.js.map +1 -0
- package/dist/extensions/admin/oracleStopLoss.d.ts +56 -0
- package/dist/extensions/admin/oracleStopLoss.d.ts.map +1 -0
- package/dist/extensions/admin/oracleStopLoss.js +87 -0
- package/dist/extensions/admin/oracleStopLoss.js.map +1 -0
- package/dist/extensions/admin/priceVelocityGuard.d.ts +12 -0
- package/dist/extensions/admin/priceVelocityGuard.d.ts.map +1 -0
- package/dist/extensions/admin/priceVelocityGuard.js +17 -0
- package/dist/extensions/admin/priceVelocityGuard.js.map +1 -0
- package/dist/extensions/admin/swapAllowlist.d.ts +8 -0
- package/dist/extensions/admin/swapAllowlist.d.ts.map +1 -0
- package/dist/extensions/admin/swapAllowlist.js +10 -0
- package/dist/extensions/admin/swapAllowlist.js.map +1 -0
- package/dist/extensions/index.d.ts +8 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +8 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/init/index.d.ts +13 -0
- package/dist/extensions/init/index.d.ts.map +1 -0
- package/dist/extensions/init/index.js +12 -0
- package/dist/extensions/init/index.js.map +1 -0
- package/dist/extensions/orders.d.ts +7 -0
- package/dist/extensions/orders.d.ts.map +1 -0
- package/dist/extensions/orders.js +24 -0
- package/dist/extensions/orders.js.map +1 -0
- package/dist/extensions/types.d.ts +23 -0
- package/dist/extensions/types.d.ts.map +1 -0
- package/dist/extensions/types.js +10 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/factory/collectFees.d.ts +41 -0
- package/dist/factory/collectFees.d.ts.map +1 -0
- package/dist/factory/collectFees.js +120 -0
- package/dist/factory/collectFees.js.map +1 -0
- package/dist/factory/index.d.ts +5 -0
- package/dist/factory/index.d.ts.map +1 -0
- package/dist/factory/index.js +5 -0
- package/dist/factory/index.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/oracle/index.d.ts +5 -0
- package/dist/oracle/index.d.ts.map +1 -0
- package/dist/oracle/index.js +5 -0
- package/dist/oracle/index.js.map +1 -0
- package/dist/oracle/registry.d.ts +53 -0
- package/dist/oracle/registry.d.ts.map +1 -0
- package/dist/oracle/registry.js +70 -0
- package/dist/oracle/registry.js.map +1 -0
- package/dist/peripheryPayments/index.d.ts +2 -0
- package/dist/peripheryPayments/index.d.ts.map +1 -0
- package/dist/peripheryPayments/index.js +2 -0
- package/dist/peripheryPayments/index.js.map +1 -0
- package/dist/peripheryPayments/simpleRouter.d.ts +9 -0
- package/dist/peripheryPayments/simpleRouter.d.ts.map +1 -0
- package/dist/peripheryPayments/simpleRouter.js +27 -0
- package/dist/peripheryPayments/simpleRouter.js.map +1 -0
- package/dist/pool/create.d.ts +83 -0
- package/dist/pool/create.d.ts.map +1 -0
- package/dist/pool/create.js +81 -0
- package/dist/pool/create.js.map +1 -0
- package/dist/pool/cursorBounds.d.ts +29 -0
- package/dist/pool/cursorBounds.d.ts.map +1 -0
- package/dist/pool/cursorBounds.js +82 -0
- package/dist/pool/cursorBounds.js.map +1 -0
- package/dist/pool/index.d.ts +9 -0
- package/dist/pool/index.d.ts.map +1 -0
- package/dist/pool/index.js +12 -0
- package/dist/pool/index.js.map +1 -0
- package/dist/pool/liquidity.d.ts +291 -0
- package/dist/pool/liquidity.d.ts.map +1 -0
- package/dist/pool/liquidity.js +618 -0
- package/dist/pool/liquidity.js.map +1 -0
- package/dist/pool/nativeLiquidity.d.ts +32 -0
- package/dist/pool/nativeLiquidity.d.ts.map +1 -0
- package/dist/pool/nativeLiquidity.js +47 -0
- package/dist/pool/nativeLiquidity.js.map +1 -0
- package/dist/pool/read.d.ts +18 -0
- package/dist/pool/read.d.ts.map +1 -0
- package/dist/pool/read.js +112 -0
- package/dist/pool/read.js.map +1 -0
- package/dist/quoter/index.d.ts +6 -0
- package/dist/quoter/index.d.ts.map +1 -0
- package/dist/quoter/index.js +6 -0
- package/dist/quoter/index.js.map +1 -0
- package/dist/quoter/quote.d.ts +58 -0
- package/dist/quoter/quote.d.ts.map +1 -0
- package/dist/quoter/quote.js +74 -0
- package/dist/quoter/quote.js.map +1 -0
- package/dist/quoter/quotePath.d.ts +65 -0
- package/dist/quoter/quotePath.d.ts.map +1 -0
- package/dist/quoter/quotePath.js +108 -0
- package/dist/quoter/quotePath.js.map +1 -0
- 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 +13 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +13 -0
- package/dist/router/index.js.map +1 -0
- 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 +145 -0
- package/dist/router/swap.d.ts.map +1 -0
- package/dist/router/swap.js +180 -0
- package/dist/router/swap.js.map +1 -0
- package/dist/router/swapPath.d.ts +101 -0
- package/dist/router/swapPath.d.ts.map +1 -0
- package/dist/router/swapPath.js +132 -0
- package/dist/router/swapPath.js.map +1 -0
- package/dist/swap/path.d.ts +13 -0
- package/dist/swap/path.d.ts.map +1 -0
- package/dist/swap/path.js +74 -0
- package/dist/swap/path.js.map +1 -0
- package/dist/types.d.ts +137 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/binData.d.ts +65 -0
- package/dist/utils/binData.d.ts.map +1 -0
- package/dist/utils/binData.js +109 -0
- package/dist/utils/binData.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/liquidityMath.d.ts +12 -0
- package/dist/utils/liquidityMath.d.ts.map +1 -0
- package/dist/utils/liquidityMath.js +43 -0
- package/dist/utils/liquidityMath.js.map +1 -0
- package/dist/utils/poolState.d.ts +21 -0
- package/dist/utils/poolState.d.ts.map +1 -0
- package/dist/utils/poolState.js +46 -0
- package/dist/utils/poolState.js.map +1 -0
- package/dist/utils/price.d.ts +13 -0
- package/dist/utils/price.d.ts.map +1 -0
- package/dist/utils/price.js +21 -0
- package/dist/utils/price.js.map +1 -0
- package/package.json +76 -0
- package/src/abis/DepositAllowlistExtension.ts +627 -0
- package/src/abis/MetricOmmPool.ts +1282 -0
- package/src/abis/MetricOmmPoolDataProvider.ts +478 -0
- package/src/abis/MetricOmmPoolFactory.ts +1706 -0
- package/src/abis/MetricOmmPoolLiquidityAdder.ts +630 -0
- package/src/abis/MetricOmmSimpleRouter.ts +846 -0
- package/src/abis/MetricOmmSwapQuoter.ts +763 -0
- package/src/abis/Multicall3.ts +440 -0
- package/src/abis/OracleProvider.ts +61 -0
- package/src/abis/OracleValueStopLossExtension.ts +1213 -0
- package/src/abis/PriceProvider.ts +46 -0
- package/src/abis/PriceVelocityGuardExtension.ts +589 -0
- package/src/abis/SwapAllowlistExtension.ts +627 -0
- package/src/abis/index.ts +16 -0
- package/src/addresses.ts +145 -0
- package/src/constants.ts +41 -0
- package/src/dataProvider/index.ts +16 -0
- package/src/dataProvider/read.ts +343 -0
- package/src/extensions/admin/depositAllowlist.ts +16 -0
- package/src/extensions/admin/oracleStopLoss.ts +141 -0
- package/src/extensions/admin/priceVelocityGuard.ts +27 -0
- package/src/extensions/admin/swapAllowlist.ts +16 -0
- package/src/extensions/index.ts +31 -0
- package/src/extensions/init/index.ts +21 -0
- package/src/extensions/orders.ts +33 -0
- package/src/extensions/types.ts +33 -0
- package/src/factory/collectFees.ts +197 -0
- package/src/factory/index.ts +12 -0
- package/src/index.ts +267 -0
- package/src/oracle/index.ts +14 -0
- package/src/oracle/registry.ts +146 -0
- package/src/peripheryPayments/index.ts +5 -0
- package/src/peripheryPayments/simpleRouter.ts +31 -0
- package/src/pool/create.ts +160 -0
- package/src/pool/cursorBounds.ts +115 -0
- package/src/pool/index.ts +69 -0
- package/src/pool/liquidity.ts +998 -0
- package/src/pool/nativeLiquidity.ts +71 -0
- package/src/pool/read.ts +172 -0
- package/src/quoter/index.ts +28 -0
- package/src/quoter/quote.ts +193 -0
- package/src/quoter/quotePath.ts +240 -0
- package/src/router/fromRoute.ts +318 -0
- package/src/router/index.ts +65 -0
- package/src/router/nativeSwap.ts +123 -0
- package/src/router/swap.ts +301 -0
- package/src/router/swapPath.ts +227 -0
- package/src/swap/path.ts +107 -0
- package/src/types.ts +165 -0
- package/src/utils/binData.ts +127 -0
- package/src/utils/index.ts +38 -0
- package/src/utils/liquidityMath.ts +61 -0
- package/src/utils/poolState.ts +64 -0
- package/src/utils/price.ts +23 -0
package/README.md
ADDED
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# @metric.xyz/metric-omm-sdk-v1
|
|
2
|
+
|
|
3
|
+
TypeScript SDK for **v1** Metric OMM contracts: **SimpleRouter**, **SwapQuoter**, **LiquidityAdder**, pool `addLiquidity` / `removeLiquidity`, **extensions**, and factory-backed reads.
|
|
4
|
+
|
|
5
|
+
Pinned **metric-periphery** `d210a84daf694c52a591d371ceb9b82cece0f79f` (core via periphery `lib/metric-core`).
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @metric.xyz/metric-omm-sdk-v1 viem
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Or via the combined package:
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { v1 } from "@metric.xyz/metric-omm-sdk";
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Ethereum, Base, Robinhood, and HyperEVM addresses
|
|
20
|
+
|
|
21
|
+
Protocol contracts use the **same addresses** on Ethereum, Base, Robinhood (4663), and HyperEVM (CREATE2). Wrapped native differs per chain.
|
|
22
|
+
|
|
23
|
+
| Contract | Address |
|
|
24
|
+
| -------- | ------- |
|
|
25
|
+
| MetricOmmPoolFactory | `0x622911384e7973439b8be305f5e3Fc3c5736EDe4` |
|
|
26
|
+
| MetricOmmPoolDeployer | `0x47D5C9df5e3419217471A9D12D932Dbed7B0B7f1` |
|
|
27
|
+
| MetricOmmPoolLiquidityAdder | `0x9aA238a8319D20F6D8C3bcca45CA2F5e27C1e00f` |
|
|
28
|
+
| MetricOmmPoolDataProvider | `0x19f85Eb0a450b429C9a700bE867CF284e7e685eC` |
|
|
29
|
+
| MetricOmmSimpleRouter | `0x292DecA668291262341f92B840830f78dB35b6E5` |
|
|
30
|
+
| MetricOmmSwapQuoter | `0xaB6C48D981B943F62A23bb4EB2db125182E6753c` |
|
|
31
|
+
| DepositAllowlistExtension | `0x2229c48864d9aC877d23591fE99C3718Ef992F66` |
|
|
32
|
+
| SwapAllowlistExtension | `0xAC6BA2d77279a7B26db57Be6f8bF234932547eEd` |
|
|
33
|
+
| OracleValueStopLossExtension | `0x7D5D12aa06A025Fa37410F522F166070bA998e11` |
|
|
34
|
+
| PriceVelocityGuardExtension | `0x225c402B55c63d081821aA9260179C0d35e25091` |
|
|
35
|
+
| WETH (Ethereum) | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` |
|
|
36
|
+
| WETH (Base) | `0x4200000000000000000000000000000000000006` |
|
|
37
|
+
| WETH (Robinhood) | `0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73` |
|
|
38
|
+
| WHYPE (HyperEVM) | `0x5555555555555555555555555555555555555555` |
|
|
39
|
+
|
|
40
|
+
`MetricOmmPoolDataProvider` is the deployed lens: pool reads (`slot0`, `binStates`, `positionBinShares`, …). Pass `addresses.dataProvider` to read helpers and liquidity builders (`dataProviderAddress` param). There is no separate StateView deployment — use `dataProvider` for all lens reads.
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
import { getAddressesOrThrow, ChainId, isChainSupported } from "@metric.xyz/metric-omm-sdk-v1";
|
|
44
|
+
|
|
45
|
+
const a = getAddressesOrThrow(ChainId.ETHEREUM);
|
|
46
|
+
// getAddressesOrThrow(ChainId.BASE) — same protocol addresses as Ethereum
|
|
47
|
+
// getAddressesOrThrow(ChainId.ROBINHOOD) / ChainId.HYPEREVM — same protocol addresses
|
|
48
|
+
// isChainSupported(ChainId.ARBITRUM) === false — use DeployedChainId / getSupportedChainIds()
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`ChainId` lists future chain IDs for typing; **Ethereum, Base, Robinhood, and HyperEVM** have entries in `ADDRESSES` for this release.
|
|
52
|
+
|
|
53
|
+
## Swaps (SimpleRouter)
|
|
54
|
+
|
|
55
|
+
### Single hop
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
import {
|
|
59
|
+
buildExactInputSingleParams,
|
|
60
|
+
getAddressesOrThrow,
|
|
61
|
+
ChainId,
|
|
62
|
+
} from "@metric.xyz/metric-omm-sdk-v1";
|
|
63
|
+
import { MetricOmmSimpleRouterAbi } from "@metric.xyz/metric-omm-sdk-v1/abis";
|
|
64
|
+
|
|
65
|
+
const addresses = getAddressesOrThrow(ChainId.ETHEREUM);
|
|
66
|
+
|
|
67
|
+
const params = await buildExactInputSingleParams({
|
|
68
|
+
publicClient,
|
|
69
|
+
pool: poolAddress,
|
|
70
|
+
tokenIn,
|
|
71
|
+
tokenOut,
|
|
72
|
+
recipient: account,
|
|
73
|
+
amountIn: 1_000_000_000_000_000_000n,
|
|
74
|
+
slippagePercent: 0.5,
|
|
75
|
+
deadline: BigInt(Math.floor(Date.now() / 1000) + 1200),
|
|
76
|
+
quoterAddress, // pass deployed MetricOmmSwapQuoter address
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
await walletClient.writeContract({
|
|
80
|
+
address: addresses.simpleRouter,
|
|
81
|
+
abi: MetricOmmSimpleRouterAbi,
|
|
82
|
+
functionName: "exactInputSingle",
|
|
83
|
+
args: [params],
|
|
84
|
+
account,
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Multihop
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import { buildExactInputParams, encodeExactInputCalldata } from "@metric.xyz/metric-omm-sdk-v1";
|
|
92
|
+
|
|
93
|
+
const pathParams = await buildExactInputParams({
|
|
94
|
+
publicClient,
|
|
95
|
+
tokenIn,
|
|
96
|
+
tokenOut,
|
|
97
|
+
pools: [poolA, poolB],
|
|
98
|
+
recipient: account,
|
|
99
|
+
amountIn,
|
|
100
|
+
slippagePercent: 0.5,
|
|
101
|
+
deadline,
|
|
102
|
+
quoterAddress,
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
await walletClient.sendTransaction({
|
|
106
|
+
to: addresses.simpleRouter,
|
|
107
|
+
data: encodeExactInputCalldata(pathParams),
|
|
108
|
+
account,
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Approve the **SimpleRouter** for input tokens (ERC-20 path). Swap allowlist extensions gate the **router contract address**, not the end-user EOA.
|
|
113
|
+
|
|
114
|
+
### Native ETH
|
|
115
|
+
|
|
116
|
+
**Exact input + native payment:** use `prepareExactInputSingleSupportingNativePaymentCalldata` / `prepareExactInputSupportingNativePaymentCalldata` (multicall + `refundETH`). Set `msg.value` on the transaction yourself.
|
|
117
|
+
|
|
118
|
+
**Exact output + native payment:** use `prepareExactOutputSingleSupportingNativePaymentCalldata` / `prepareExactOutputSupportingNativePaymentCalldata` (multicall + `refundETH`). Set `msg.value` on the transaction yourself.
|
|
119
|
+
|
|
120
|
+
**ETH output (unwrap):** use `prepareExactInputSingleAndUnwrapCalldata` / `prepareExactInputAndUnwrapCalldata` (or exact-output variants).
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
import {
|
|
124
|
+
buildExactInputSingleParams,
|
|
125
|
+
prepareExactInputSingleSupportingNativePaymentCalldata,
|
|
126
|
+
prepareExactInputSingleAndUnwrapCalldata,
|
|
127
|
+
} from "@metric.xyz/metric-omm-sdk-v1";
|
|
128
|
+
|
|
129
|
+
// ETH → ERC-20: build params with tokenIn = addresses.wrappedNative, then:
|
|
130
|
+
const params = await buildExactInputSingleParams({ /* … */, quoterAddress });
|
|
131
|
+
const swapData = prepareExactInputSingleSupportingNativePaymentCalldata(params);
|
|
132
|
+
await walletClient.sendTransaction({ to: addresses.simpleRouter, data: swapData, value: params.amountIn, account });
|
|
133
|
+
|
|
134
|
+
// ERC-20 → ETH: tokenOut = wrappedNative, then unwrap via multicall:
|
|
135
|
+
const unwrapData = prepareExactInputSingleAndUnwrapCalldata(params, addresses.simpleRouter);
|
|
136
|
+
await walletClient.sendTransaction({ to: addresses.simpleRouter, data: unwrapData, account });
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Exact input + native payment:** pass any `msg.value` ≤ `amountIn`; the router uses native ETH first and pulls the rest from wrappedNative (approve the router). Unused native ETH is refunded.
|
|
140
|
+
|
|
141
|
+
**Exact output + native payment:** pass any `msg.value`; if it is less than the `amountIn` calculated during the swap, the remainder is charged from WETH (reverts if insufficient). Unused native ETH is refunded.
|
|
142
|
+
|
|
143
|
+
### Route API → swap
|
|
144
|
+
|
|
145
|
+
When routing comes from `POST /public/v1/evm/:chain_id/route`, convert the JSON response into swap params without re-quoting. Request `maxRoutes: 1` for single-path execution (split routes are rejected by the SDK mappers).
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
import {
|
|
149
|
+
prepareExactInputFromRoute,
|
|
150
|
+
prepareExactOutputFromRoute,
|
|
151
|
+
encodeExactInputSingleCalldata,
|
|
152
|
+
encodeExactInputCalldata,
|
|
153
|
+
encodeExactOutputSingleCalldata,
|
|
154
|
+
encodeExactOutputCalldata,
|
|
155
|
+
} from "@metric.xyz/metric-omm-sdk-v1";
|
|
156
|
+
|
|
157
|
+
const route = await fetch(`${routeApiBase}/public/v1/evm/${chainId}/route`, {
|
|
158
|
+
method: "POST",
|
|
159
|
+
headers: { "Content-Type": "application/json" },
|
|
160
|
+
body: JSON.stringify({
|
|
161
|
+
tokenIn,
|
|
162
|
+
tokenOut,
|
|
163
|
+
amountIn: amountIn.toString(),
|
|
164
|
+
maxRoutes: 1,
|
|
165
|
+
}),
|
|
166
|
+
}).then((r) => r.json());
|
|
167
|
+
|
|
168
|
+
const prepared =
|
|
169
|
+
route.tradeType === "exact_out"
|
|
170
|
+
? await prepareExactOutputFromRoute({
|
|
171
|
+
publicClient,
|
|
172
|
+
route,
|
|
173
|
+
recipient: account,
|
|
174
|
+
deadline: BigInt(Math.floor(Date.now() / 1000) + 1200),
|
|
175
|
+
slippagePercent: 0.5,
|
|
176
|
+
})
|
|
177
|
+
: await prepareExactInputFromRoute({
|
|
178
|
+
publicClient,
|
|
179
|
+
route,
|
|
180
|
+
recipient: account,
|
|
181
|
+
deadline: BigInt(Math.floor(Date.now() / 1000) + 1200),
|
|
182
|
+
slippagePercent: 0.5,
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
const data =
|
|
186
|
+
prepared.kind === "single"
|
|
187
|
+
? route.tradeType === "exact_out"
|
|
188
|
+
? encodeExactOutputSingleCalldata(prepared.params)
|
|
189
|
+
: encodeExactInputSingleCalldata(prepared.params)
|
|
190
|
+
: route.tradeType === "exact_out"
|
|
191
|
+
? encodeExactOutputCalldata(prepared.params)
|
|
192
|
+
: encodeExactInputCalldata(prepared.params);
|
|
193
|
+
|
|
194
|
+
await walletClient.sendTransaction({ to: addresses.simpleRouter, data, account });
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Pair with `prepareExactInputSingleSupportingNativePaymentCalldata` and set `msg.value` when `tokenIn` is native ETH (route `tokenIn` should be wrapped native).
|
|
198
|
+
|
|
199
|
+
## Quotes (SwapQuoter)
|
|
200
|
+
|
|
201
|
+
Live quotes simulate the quoter contract (eth_call). Pass `quoterAddress` with the deployed **MetricOmmSwapQuoter** address.
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
import { quoteLiveExactInSingle, quoteLiveExactIn } from "@metric.xyz/metric-omm-sdk-v1";
|
|
205
|
+
|
|
206
|
+
const single = await quoteLiveExactInSingle({
|
|
207
|
+
publicClient,
|
|
208
|
+
pool: poolAddress,
|
|
209
|
+
tokenIn,
|
|
210
|
+
tokenOut,
|
|
211
|
+
recipient: account,
|
|
212
|
+
amountIn,
|
|
213
|
+
quoterAddress,
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
const path = await quoteLiveExactIn({
|
|
217
|
+
publicClient,
|
|
218
|
+
tokenIn,
|
|
219
|
+
tokenOut,
|
|
220
|
+
pools: [poolA, poolB],
|
|
221
|
+
recipient: account,
|
|
222
|
+
amountIn,
|
|
223
|
+
quoterAddress,
|
|
224
|
+
});
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Hypothetical quotes: `quoteHypotheticalExactInputSingle`, `quoteHypotheticalExactInput`, and exact-output variants with per-pool bid/ask prices.
|
|
228
|
+
|
|
229
|
+
## Liquidity (LiquidityAdder)
|
|
230
|
+
|
|
231
|
+
- **Add (EOA):** approve **LiquidityAdder** (`addresses.liquidityAdder`), then `addLiquidityExactShares` / `addLiquidityWeighted` on the adder (see `encodeAddLiquidity*` helpers).
|
|
232
|
+
- **Remove:** `removeLiquidity` on the pool — build deltas with `buildModifyLiquidityArgsForRemoval` / `encodeRemoveLiquidityCalldata`. There is no native-ETH remove path.
|
|
233
|
+
|
|
234
|
+
### Native ETH (add only)
|
|
235
|
+
|
|
236
|
+
Same multicall pattern as SimpleRouter: `prepareAddLiquidity*SupportingNativePaymentCalldata` wraps `[addLiquidity…, refundETH]`. Set `msg.value` for the WETH pool leg; unused ETH is refunded.
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
import {
|
|
240
|
+
prepareAddLiquidityExactSharesSelfSupportingNativePaymentCalldata,
|
|
241
|
+
getAddressesOrThrow,
|
|
242
|
+
ChainId,
|
|
243
|
+
} from "@metric.xyz/metric-omm-sdk-v1";
|
|
244
|
+
|
|
245
|
+
const { liquidityAdder } = getAddressesOrThrow(ChainId.ETHEREUM);
|
|
246
|
+
|
|
247
|
+
const data = prepareAddLiquidityExactSharesSelfSupportingNativePaymentCalldata({
|
|
248
|
+
pool,
|
|
249
|
+
salt,
|
|
250
|
+
deltas,
|
|
251
|
+
maxAmountToken0,
|
|
252
|
+
maxAmountToken1,
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
await walletClient.sendTransaction({
|
|
256
|
+
to: liquidityAdder,
|
|
257
|
+
data,
|
|
258
|
+
value: ethAmount,
|
|
259
|
+
account,
|
|
260
|
+
});
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Weighted adds: `prepareAddLiquidityWeightedSelfSupportingNativePaymentCalldata` / `prepareAddLiquidityWeightedWithOwnerSupportingNativePaymentCalldata`.
|
|
264
|
+
|
|
265
|
+
## Extensions
|
|
266
|
+
|
|
267
|
+
Pools support up to seven **extensions** (periphery contracts) configured at creation via `extensions`, `extensionOrders`, and `extensionInitData`. Swap and liquidity encoders forward optional **`extensionData`** (defaults to `0x`).
|
|
268
|
+
|
|
269
|
+
See extension admin encoders (`encodeSetAllowedToDepositCalldata`, `encodeSetAllowedToSwapCalldata`, …) and [HOW_TO.md](../metric-omm-sdk/HOW_TO.md) for pool-creation examples.
|
|
270
|
+
|
|
271
|
+
## Oracle registration
|
|
272
|
+
|
|
273
|
+
For providers-oracle price feeds, register pools before attributed reads:
|
|
274
|
+
|
|
275
|
+
```typescript
|
|
276
|
+
import { getPoolOracleStatus, registerPool } from "@metric.xyz/metric-omm-sdk-v1";
|
|
277
|
+
|
|
278
|
+
const status = await getPoolOracleStatus(publicClient, oracleAddress, feedId, poolAddress);
|
|
279
|
+
await registerPool({ publicClient, walletClient, oracleAddress, feedId, pool: poolAddress, factory, account });
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Pool reads
|
|
283
|
+
|
|
284
|
+
```typescript
|
|
285
|
+
import { getPoolImmutables, getPoolState, getSlot0, getAddressesOrThrow, ChainId } from "@metric.xyz/metric-omm-sdk-v1";
|
|
286
|
+
|
|
287
|
+
const addresses = getAddressesOrThrow(ChainId.ETHEREUM);
|
|
288
|
+
const imm = await getPoolImmutables(publicClient, addresses.factory, poolAddress);
|
|
289
|
+
const state = await getPoolState(publicClient, addresses.dataProvider, poolAddress);
|
|
290
|
+
const slot0 = await getSlot0(publicClient, addresses.dataProvider, poolAddress);
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## ABIs
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
import {
|
|
297
|
+
MetricOmmPoolAbi,
|
|
298
|
+
MetricOmmPoolDataProviderAbi,
|
|
299
|
+
MetricOmmSimpleRouterAbi,
|
|
300
|
+
MetricOmmSwapQuoterAbi,
|
|
301
|
+
MetricOmmPoolLiquidityAdderAbi,
|
|
302
|
+
DepositAllowlistExtensionAbi,
|
|
303
|
+
SwapAllowlistExtensionAbi,
|
|
304
|
+
PriceVelocityGuardExtensionAbi,
|
|
305
|
+
OracleValueStopLossExtensionAbi,
|
|
306
|
+
OracleProviderAbi,
|
|
307
|
+
} from "@metric.xyz/metric-omm-sdk-v1/abis";
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
Regenerate from pinned contracts:
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
npm run setup:contracts # init submodules, hardhat build, sync ABIs
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## Development
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
npm run build # tsc only (default prepare)
|
|
320
|
+
npm run setup:contracts # refresh ABIs from pinned git deps (maintainers)
|
|
321
|
+
npm test # Hardhat tests (needs matching @metric/* in node_modules)
|
|
322
|
+
npm run verify # lint, format, typecheck, test — publish gate
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
cd v1
|
|
327
|
+
npm ci
|
|
328
|
+
npm run setup:contracts
|
|
329
|
+
npm test
|
|
330
|
+
```
|