@nradko/metric-omm-sdk-v1 0.4.4 → 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 CHANGED
@@ -16,24 +16,26 @@ Or via the combined package:
16
16
  import { v1 } from "@nradko/metric-omm-sdk";
17
17
  ```
18
18
 
19
- ## Ethereum mainnet and Base addresses
19
+ ## Ethereum, Base, Robinhood, and HyperEVM addresses
20
20
 
21
- Protocol contracts use the **same addresses** on Ethereum mainnet and Base (CREATE2). Wrapped native differs per chain (WETH).
21
+ Protocol contracts use the **same addresses** on Ethereum, Base, Robinhood (4663), and HyperEVM (CREATE2). Wrapped native differs per chain.
22
22
 
23
23
  | Contract | Address |
24
24
  | -------- | ------- |
25
- | MetricOmmPoolFactory | `0xf98aD80FE666B9a23075CdF64aF5971802844Fd8` |
26
- | MetricOmmPoolDeployer | `0xf93e1ea4516E99A4Ee81D4979C8D3C8Ab636e397` |
27
- | MetricOmmPoolLiquidityAdder | `0xdd615506d83e2d94f30aaf17e846330164ab599e` |
28
- | MetricOmmPoolDataProvider | `0x7dc8eD16661A5003D9708B55f768484f9E963AdB` |
29
- | MetricOmmSimpleRouter | `0xa4d4be6a6b6d9f6532cacfe61fc666ef2f9997ed` |
30
- | MetricOmmSwapQuoter | `0xfa13b57b570B43c8b9A61ba8D2C1781aB064f617` |
31
- | DepositAllowlistExtension | `0xC93BdA96021650DBfCEab6470c5329a0F391C160` |
32
- | SwapAllowlistExtension | `0x50c58A0bf9711Ae091c3aF5C3eab49544062662e` |
33
- | OracleValueStopLossExtension | `0x34822E3D4265a8E42284Ce9807A1a804b7552838` |
34
- | PriceVelocityGuardExtension | `0x07A5c4821cd84a9A6162a6b1f756aA458B7616E3` |
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
35
  | WETH (Ethereum) | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` |
36
36
  | WETH (Base) | `0x4200000000000000000000000000000000000006` |
37
+ | WETH (Robinhood) | `0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73` |
38
+ | WHYPE (HyperEVM) | `0x5555555555555555555555555555555555555555` |
37
39
 
38
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.
39
41
 
@@ -42,10 +44,11 @@ import { getAddressesOrThrow, ChainId, isChainSupported } from "@nradko/metric-o
42
44
 
43
45
  const a = getAddressesOrThrow(ChainId.ETHEREUM);
44
46
  // getAddressesOrThrow(ChainId.BASE) — same protocol addresses as Ethereum
47
+ // getAddressesOrThrow(ChainId.ROBINHOOD) / ChainId.HYPEREVM — same protocol addresses
45
48
  // isChainSupported(ChainId.ARBITRUM) === false — use DeployedChainId / getSupportedChainIds()
46
49
  ```
47
50
 
48
- `ChainId` lists future chain IDs for typing; **Ethereum mainnet and Base** have entries in `ADDRESSES` for this release.
51
+ `ChainId` lists future chain IDs for typing; **Ethereum, Base, Robinhood, and HyperEVM** have entries in `ADDRESSES` for this release.
49
52
 
50
53
  ## Swaps (SimpleRouter)
51
54
 
@@ -325,5 +328,3 @@ npm ci
325
328
  npm run setup:contracts
326
329
  npm test
327
330
  ```
328
-
329
- Fork tests: set `ETHEREUM_RPC_URL` (optional `ETHEREUM_FORK_BLOCK_NUMBER`).
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * MetricAMM SDK — v1 deployed addresses.
3
3
  *
4
- * Ethereum mainnet and Base use the same protocol deployment addresses (CREATE2).
5
- * Pool state reads (slot0, bins, position shares) and depth/quote views use dataProvider
6
- * (MetricOmmPoolDataProvider — the single deployed lens per factory).
4
+ * Ethereum, Base, Robinhood, and HyperEVM share the same protocol deployment
5
+ * addresses (CREATE2). Pool state reads (slot0, bins, position shares) and
6
+ * depth/quote views use dataProvider (MetricOmmPoolDataProvider — the single
7
+ * deployed lens per factory).
7
8
  */
8
9
  import type { Address } from "viem";
9
10
  export declare const ChainId: {
@@ -16,10 +17,11 @@ export declare const ChainId: {
16
17
  readonly MEGAETH: 4326;
17
18
  readonly HYPEREVM: 999;
18
19
  readonly MONAD: 143;
20
+ readonly ROBINHOOD: 4663;
19
21
  };
20
22
  export type ChainId = (typeof ChainId)[keyof typeof ChainId];
21
23
  /** Chains that have entries in ADDRESSES for this SDK release. */
22
- export type DeployedChainId = typeof ChainId.ETHEREUM | typeof ChainId.BASE;
24
+ export type DeployedChainId = typeof ChainId.ETHEREUM | typeof ChainId.BASE | typeof ChainId.ROBINHOOD | typeof ChainId.HYPEREVM;
23
25
  export interface ChainAddresses {
24
26
  /** MetricOmmPoolFactory */
25
27
  factory: Address;
@@ -43,7 +45,7 @@ export interface ChainAddresses {
43
45
  priceVelocityGuardExtension: Address;
44
46
  };
45
47
  }
46
- /** Periphery deployment — Ethereum mainnet and Base (CREATE2, same protocol addresses). */
48
+ /** Periphery deployment — CREATE2, same protocol addresses on each chain below. */
47
49
  export declare const ADDRESSES: Record<DeployedChainId, ChainAddresses>;
48
50
  export declare function getAddresses(chainId: number): ChainAddresses | undefined;
49
51
  export declare function getAddressesOrThrow(chainId: number): ChainAddresses;
@@ -1 +1 @@
1
- {"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../src/addresses.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAIpC,eAAO,MAAM,OAAO;;;;;;;;;;CAUV,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAE7D,kEAAkE;AAClE,MAAM,MAAM,eAAe,GAAG,OAAO,OAAO,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAI5E,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,cAAc,EAAE,OAAO,CAAC;IACxB,yEAAyE;IACzE,YAAY,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,YAAY,EAAE,OAAO,CAAC;IACtB,kEAAkE;IAClE,MAAM,EAAE,OAAO,CAAC;IAChB,+CAA+C;IAC/C,aAAa,EAAE,OAAO,CAAC;IAEvB,wDAAwD;IACxD,UAAU,EAAE;QACV,yBAAyB,EAAE,OAAO,CAAC;QACnC,sBAAsB,EAAE,OAAO,CAAC;QAChC,4BAA4B,EAAE,OAAO,CAAC;QACtC,2BAA2B,EAAE,OAAO,CAAC;KACtC,CAAC;CACH;AAoBD,2FAA2F;AAC3F,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,cAAc,CASpD,CAAC;AAMX,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAIxE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAQnE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,eAAe,CAE5E;AAED,wBAAgB,oBAAoB,IAAI,eAAe,EAAE,CAExD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIxD"}
1
+ {"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../src/addresses.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAIpC,eAAO,MAAM,OAAO;;;;;;;;;;;CAWV,CAAC;AAEX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAE7D,kEAAkE;AAClE,MAAM,MAAM,eAAe,GACvB,OAAO,OAAO,CAAC,QAAQ,GACvB,OAAO,OAAO,CAAC,IAAI,GACnB,OAAO,OAAO,CAAC,SAAS,GACxB,OAAO,OAAO,CAAC,QAAQ,CAAC;AAI5B,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,cAAc,EAAE,OAAO,CAAC;IACxB,yEAAyE;IACzE,YAAY,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,YAAY,EAAE,OAAO,CAAC;IACtB,kEAAkE;IAClE,MAAM,EAAE,OAAO,CAAC;IAChB,+CAA+C;IAC/C,aAAa,EAAE,OAAO,CAAC;IAEvB,wDAAwD;IACxD,UAAU,EAAE;QACV,yBAAyB,EAAE,OAAO,CAAC;QACnC,sBAAsB,EAAE,OAAO,CAAC;QAChC,4BAA4B,EAAE,OAAO,CAAC;QACtC,2BAA2B,EAAE,OAAO,CAAC;KACtC,CAAC;CACH;AAoBD,mFAAmF;AACnF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,cAAc,CAiBpD,CAAC;AAWX,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAMxE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAQnE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,eAAe,CAO5E;AAED,wBAAgB,oBAAoB,IAAI,eAAe,EAAE,CAExD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIxD"}
package/dist/addresses.js CHANGED
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * MetricAMM SDK — v1 deployed addresses.
3
3
  *
4
- * Ethereum mainnet and Base use the same protocol deployment addresses (CREATE2).
5
- * Pool state reads (slot0, bins, position shares) and depth/quote views use dataProvider
6
- * (MetricOmmPoolDataProvider — the single deployed lens per factory).
4
+ * Ethereum, Base, Robinhood, and HyperEVM share the same protocol deployment
5
+ * addresses (CREATE2). Pool state reads (slot0, bins, position shares) and
6
+ * depth/quote views use dataProvider (MetricOmmPoolDataProvider — the single
7
+ * deployed lens per factory).
7
8
  */
8
9
  // ============ Chain IDs ============
9
10
  export const ChainId = {
@@ -16,24 +17,25 @@ export const ChainId = {
16
17
  MEGAETH: 4326,
17
18
  HYPEREVM: 999,
18
19
  MONAD: 143,
20
+ ROBINHOOD: 4663,
19
21
  };
20
22
  // ============ Deployed addresses ============
21
- /** Shared protocol deployment (Ethereum + Base). */
23
+ /** Shared protocol deployment (Ethereum, Base, Robinhood, HyperEVM). */
22
24
  const PROTOCOL_ADDRESSES = {
23
- factory: "0xf98aD80FE666B9a23075CdF64aF5971802844Fd8",
24
- poolDeployer: "0xf93e1ea4516E99A4Ee81D4979C8D3C8Ab636e397",
25
- liquidityAdder: "0xdd615506d83e2d94f30aaf17e846330164ab599e",
26
- dataProvider: "0x7dc8eD16661A5003D9708B55f768484f9E963AdB",
27
- simpleRouter: "0xa4d4be6a6b6d9f6532cacfe61fc666ef2f9997ed",
28
- quoter: "0xfa13b57b570B43c8b9A61ba8D2C1781aB064f617",
25
+ factory: "0x622911384e7973439b8be305f5e3Fc3c5736EDe4",
26
+ poolDeployer: "0x47D5C9df5e3419217471A9D12D932Dbed7B0B7f1",
27
+ liquidityAdder: "0x9aA238a8319D20F6D8C3bcca45CA2F5e27C1e00f",
28
+ dataProvider: "0x19f85Eb0a450b429C9a700bE867CF284e7e685eC",
29
+ simpleRouter: "0x292DecA668291262341f92B840830f78dB35b6E5",
30
+ quoter: "0xaB6C48D981B943F62A23bb4EB2db125182E6753c",
29
31
  extensions: {
30
- depositAllowlistExtension: "0xC93BdA96021650DBfCEab6470c5329a0F391C160",
31
- swapAllowlistExtension: "0x50c58A0bf9711Ae091c3aF5C3eab49544062662e",
32
- oracleValueStopLossExtension: "0x34822E3D4265a8E42284Ce9807A1a804b7552838",
33
- priceVelocityGuardExtension: "0x07A5c4821cd84a9A6162a6b1f756aA458B7616E3",
32
+ depositAllowlistExtension: "0x2229c48864d9aC877d23591fE99C3718Ef992F66",
33
+ swapAllowlistExtension: "0xAC6BA2d77279a7B26db57Be6f8bF234932547eEd",
34
+ oracleValueStopLossExtension: "0x7D5D12aa06A025Fa37410F522F166070bA998e11",
35
+ priceVelocityGuardExtension: "0x225c402B55c63d081821aA9260179C0d35e25091",
34
36
  },
35
37
  };
36
- /** Periphery deployment — Ethereum mainnet and Base (CREATE2, same protocol addresses). */
38
+ /** Periphery deployment — CREATE2, same protocol addresses on each chain below. */
37
39
  export const ADDRESSES = {
38
40
  [ChainId.ETHEREUM]: {
39
41
  ...PROTOCOL_ADDRESSES,
@@ -43,25 +45,45 @@ export const ADDRESSES = {
43
45
  ...PROTOCOL_ADDRESSES,
44
46
  wrappedNative: "0x4200000000000000000000000000000000000006",
45
47
  },
48
+ [ChainId.ROBINHOOD]: {
49
+ ...PROTOCOL_ADDRESSES,
50
+ wrappedNative: "0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",
51
+ },
52
+ [ChainId.HYPEREVM]: {
53
+ ...PROTOCOL_ADDRESSES,
54
+ wrappedNative: "0x5555555555555555555555555555555555555555",
55
+ },
46
56
  };
47
57
  // ============ Helper Functions ============
48
- const DEPLOYED_CHAIN_IDS = [ChainId.ETHEREUM, ChainId.BASE];
58
+ const DEPLOYED_CHAIN_IDS = [
59
+ ChainId.ETHEREUM,
60
+ ChainId.BASE,
61
+ ChainId.ROBINHOOD,
62
+ ChainId.HYPEREVM,
63
+ ];
49
64
  export function getAddresses(chainId) {
50
65
  if (chainId === ChainId.ETHEREUM)
51
66
  return ADDRESSES[ChainId.ETHEREUM];
52
67
  if (chainId === ChainId.BASE)
53
68
  return ADDRESSES[ChainId.BASE];
69
+ if (chainId === ChainId.ROBINHOOD)
70
+ return ADDRESSES[ChainId.ROBINHOOD];
71
+ if (chainId === ChainId.HYPEREVM)
72
+ return ADDRESSES[ChainId.HYPEREVM];
54
73
  return undefined;
55
74
  }
56
75
  export function getAddressesOrThrow(chainId) {
57
76
  const addresses = getAddresses(chainId);
58
77
  if (!addresses) {
59
- throw new Error(`Chain ${chainId} has no v1 deployment in this SDK (Ethereum and Base are configured)`);
78
+ throw new Error(`Chain ${chainId} has no v1 deployment in this SDK (Ethereum, Base, Robinhood, and HyperEVM are configured)`);
60
79
  }
61
80
  return addresses;
62
81
  }
63
82
  export function isChainSupported(chainId) {
64
- return chainId === ChainId.ETHEREUM || chainId === ChainId.BASE;
83
+ return (chainId === ChainId.ETHEREUM ||
84
+ chainId === ChainId.BASE ||
85
+ chainId === ChainId.ROBINHOOD ||
86
+ chainId === ChainId.HYPEREVM);
65
87
  }
66
88
  export function getSupportedChainIds() {
67
89
  return [...DEPLOYED_CHAIN_IDS];
@@ -1 +1 @@
1
- {"version":3,"file":"addresses.js","sourceRoot":"","sources":["../src/addresses.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,sCAAsC;AAEtC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,KAAK;IAChB,GAAG,EAAE,EAAE;IACP,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;CACF,CAAC;AAkCX,+CAA+C;AAE/C,oDAAoD;AACpD,MAAM,kBAAkB,GAAG;IACzB,OAAO,EAAE,4CAA4C;IACrD,YAAY,EAAE,4CAA4C;IAC1D,cAAc,EAAE,4CAA4C;IAC5D,YAAY,EAAE,4CAA4C;IAC1D,YAAY,EAAE,4CAA4C;IAC1D,MAAM,EAAE,4CAA4C;IACpD,UAAU,EAAE;QACV,yBAAyB,EAAE,4CAA4C;QACvE,sBAAsB,EAAE,4CAA4C;QACpE,4BAA4B,EAAE,4CAA4C;QAC1E,2BAA2B,EAAE,4CAA4C;KAC1E;CACuD,CAAC;AAE3D,2FAA2F;AAC3F,MAAM,CAAC,MAAM,SAAS,GAA4C;IAChE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAClB,GAAG,kBAAkB;QACrB,aAAa,EAAE,4CAA4C;KAC5D;IACD,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACd,GAAG,kBAAkB;QACrB,aAAa,EAAE,4CAA4C;KAC5D;CACO,CAAC;AAEX,6CAA6C;AAE7C,MAAM,kBAAkB,GAA+B,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAExF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,SAAS,OAAO,sEAAsE,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,OAAO,SAAS,CAAC,OAAO,KAAK,4CAA4C,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"addresses.js","sourceRoot":"","sources":["../src/addresses.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cursorBounds.d.ts","sourceRoot":"","sources":["../../src/pool/cursorBounds.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAIlD,OAAO,EAAyC,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AA2BnG,iFAAiF;AACjF,wBAAgB,6BAA6B,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,CAMnF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,qBAAqB,EAAE,MAAM,GAC5B,qBAAqB,CA2BvB;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAejC"}
1
+ {"version":3,"file":"cursorBounds.d.ts","sourceRoot":"","sources":["../../src/pool/cursorBounds.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAIlD,OAAO,EAAyC,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AA2BnG,iFAAiF;AACjF,wBAAgB,6BAA6B,CAAC,qBAAqB,EAAE,MAAM,GAAG,MAAM,CAMnF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,qBAAqB,EAAE,MAAM,GAC5B,qBAAqB,CA2BvB;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAkBjC"}
@@ -65,11 +65,17 @@ export function computeLiquidityCursorBounds(curBinIdx, curPosInBin, maximalCurs
65
65
  * left or right from the current cursor (summing across bin boundaries).
66
66
  */
67
67
  export async function prepareLiquidityCursorBounds(params) {
68
- const chainId = params.publicClient.chain?.id;
69
- if (chainId === undefined) {
70
- throw new Error("publicClient.chain.id is required to resolve dataProvider address");
68
+ let dataProviderAddress;
69
+ if (params.dataProviderAddress) {
70
+ dataProviderAddress = params.dataProviderAddress;
71
+ }
72
+ else {
73
+ const chainId = params.publicClient.chain?.id;
74
+ if (chainId === undefined) {
75
+ throw new Error("publicClient.chain.id is required to resolve dataProvider address");
76
+ }
77
+ dataProviderAddress = getAddressesOrThrow(chainId).dataProvider;
71
78
  }
72
- const dataProviderAddress = params.dataProviderAddress ?? getAddressesOrThrow(chainId).dataProvider;
73
79
  const slot0 = await getSlot0(params.publicClient, dataProviderAddress, params.pool);
74
80
  return computeLiquidityCursorBounds(slot0.curBinIdx, slot0.curPosInBin, params.maximalCursorMovement);
75
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cursorBounds.js","sourceRoot":"","sources":["../../src/pool/cursorBounds.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursorBounds.js","sourceRoot":"","sources":["../../src/pool/cursorBounds.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nradko/metric-omm-sdk-v1",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "Metric AMM SDK — v1 contracts (SimpleRouter, SwapQuoter, LiquidityAdder, extensions, add/removeLiquidity)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/addresses.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * MetricAMM SDK — v1 deployed addresses.
3
3
  *
4
- * Ethereum mainnet and Base use the same protocol deployment addresses (CREATE2).
5
- * Pool state reads (slot0, bins, position shares) and depth/quote views use dataProvider
6
- * (MetricOmmPoolDataProvider — the single deployed lens per factory).
4
+ * Ethereum, Base, Robinhood, and HyperEVM share the same protocol deployment
5
+ * addresses (CREATE2). Pool state reads (slot0, bins, position shares) and
6
+ * depth/quote views use dataProvider (MetricOmmPoolDataProvider — the single
7
+ * deployed lens per factory).
7
8
  */
8
9
 
9
10
  import type { Address } from "viem";
@@ -20,12 +21,17 @@ export const ChainId = {
20
21
  MEGAETH: 4326,
21
22
  HYPEREVM: 999,
22
23
  MONAD: 143,
24
+ ROBINHOOD: 4663,
23
25
  } as const;
24
26
 
25
27
  export type ChainId = (typeof ChainId)[keyof typeof ChainId];
26
28
 
27
29
  /** Chains that have entries in ADDRESSES for this SDK release. */
28
- export type DeployedChainId = typeof ChainId.ETHEREUM | typeof ChainId.BASE;
30
+ export type DeployedChainId =
31
+ | typeof ChainId.ETHEREUM
32
+ | typeof ChainId.BASE
33
+ | typeof ChainId.ROBINHOOD
34
+ | typeof ChainId.HYPEREVM;
29
35
 
30
36
  // ============ Contract Address Types ============
31
37
 
@@ -56,23 +62,23 @@ export interface ChainAddresses {
56
62
 
57
63
  // ============ Deployed addresses ============
58
64
 
59
- /** Shared protocol deployment (Ethereum + Base). */
65
+ /** Shared protocol deployment (Ethereum, Base, Robinhood, HyperEVM). */
60
66
  const PROTOCOL_ADDRESSES = {
61
- factory: "0xf98aD80FE666B9a23075CdF64aF5971802844Fd8",
62
- poolDeployer: "0xf93e1ea4516E99A4Ee81D4979C8D3C8Ab636e397",
63
- liquidityAdder: "0xdd615506d83e2d94f30aaf17e846330164ab599e",
64
- dataProvider: "0x7dc8eD16661A5003D9708B55f768484f9E963AdB",
65
- simpleRouter: "0xa4d4be6a6b6d9f6532cacfe61fc666ef2f9997ed",
66
- quoter: "0xfa13b57b570B43c8b9A61ba8D2C1781aB064f617",
67
+ factory: "0x622911384e7973439b8be305f5e3Fc3c5736EDe4",
68
+ poolDeployer: "0x47D5C9df5e3419217471A9D12D932Dbed7B0B7f1",
69
+ liquidityAdder: "0x9aA238a8319D20F6D8C3bcca45CA2F5e27C1e00f",
70
+ dataProvider: "0x19f85Eb0a450b429C9a700bE867CF284e7e685eC",
71
+ simpleRouter: "0x292DecA668291262341f92B840830f78dB35b6E5",
72
+ quoter: "0xaB6C48D981B943F62A23bb4EB2db125182E6753c",
67
73
  extensions: {
68
- depositAllowlistExtension: "0xC93BdA96021650DBfCEab6470c5329a0F391C160",
69
- swapAllowlistExtension: "0x50c58A0bf9711Ae091c3aF5C3eab49544062662e",
70
- oracleValueStopLossExtension: "0x34822E3D4265a8E42284Ce9807A1a804b7552838",
71
- priceVelocityGuardExtension: "0x07A5c4821cd84a9A6162a6b1f756aA458B7616E3",
74
+ depositAllowlistExtension: "0x2229c48864d9aC877d23591fE99C3718Ef992F66",
75
+ swapAllowlistExtension: "0xAC6BA2d77279a7B26db57Be6f8bF234932547eEd",
76
+ oracleValueStopLossExtension: "0x7D5D12aa06A025Fa37410F522F166070bA998e11",
77
+ priceVelocityGuardExtension: "0x225c402B55c63d081821aA9260179C0d35e25091",
72
78
  },
73
79
  } as const satisfies Omit<ChainAddresses, "wrappedNative">;
74
80
 
75
- /** Periphery deployment — Ethereum mainnet and Base (CREATE2, same protocol addresses). */
81
+ /** Periphery deployment — CREATE2, same protocol addresses on each chain below. */
76
82
  export const ADDRESSES: Record<DeployedChainId, ChainAddresses> = {
77
83
  [ChainId.ETHEREUM]: {
78
84
  ...PROTOCOL_ADDRESSES,
@@ -82,15 +88,30 @@ export const ADDRESSES: Record<DeployedChainId, ChainAddresses> = {
82
88
  ...PROTOCOL_ADDRESSES,
83
89
  wrappedNative: "0x4200000000000000000000000000000000000006",
84
90
  },
91
+ [ChainId.ROBINHOOD]: {
92
+ ...PROTOCOL_ADDRESSES,
93
+ wrappedNative: "0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",
94
+ },
95
+ [ChainId.HYPEREVM]: {
96
+ ...PROTOCOL_ADDRESSES,
97
+ wrappedNative: "0x5555555555555555555555555555555555555555",
98
+ },
85
99
  } as const;
86
100
 
87
101
  // ============ Helper Functions ============
88
102
 
89
- const DEPLOYED_CHAIN_IDS: readonly DeployedChainId[] = [ChainId.ETHEREUM, ChainId.BASE];
103
+ const DEPLOYED_CHAIN_IDS: readonly DeployedChainId[] = [
104
+ ChainId.ETHEREUM,
105
+ ChainId.BASE,
106
+ ChainId.ROBINHOOD,
107
+ ChainId.HYPEREVM,
108
+ ];
90
109
 
91
110
  export function getAddresses(chainId: number): ChainAddresses | undefined {
92
111
  if (chainId === ChainId.ETHEREUM) return ADDRESSES[ChainId.ETHEREUM];
93
112
  if (chainId === ChainId.BASE) return ADDRESSES[ChainId.BASE];
113
+ if (chainId === ChainId.ROBINHOOD) return ADDRESSES[ChainId.ROBINHOOD];
114
+ if (chainId === ChainId.HYPEREVM) return ADDRESSES[ChainId.HYPEREVM];
94
115
  return undefined;
95
116
  }
96
117
 
@@ -98,14 +119,19 @@ export function getAddressesOrThrow(chainId: number): ChainAddresses {
98
119
  const addresses = getAddresses(chainId);
99
120
  if (!addresses) {
100
121
  throw new Error(
101
- `Chain ${chainId} has no v1 deployment in this SDK (Ethereum and Base are configured)`,
122
+ `Chain ${chainId} has no v1 deployment in this SDK (Ethereum, Base, Robinhood, and HyperEVM are configured)`,
102
123
  );
103
124
  }
104
125
  return addresses;
105
126
  }
106
127
 
107
128
  export function isChainSupported(chainId: number): chainId is DeployedChainId {
108
- return chainId === ChainId.ETHEREUM || chainId === ChainId.BASE;
129
+ return (
130
+ chainId === ChainId.ETHEREUM ||
131
+ chainId === ChainId.BASE ||
132
+ chainId === ChainId.ROBINHOOD ||
133
+ chainId === ChainId.HYPEREVM
134
+ );
109
135
  }
110
136
 
111
137
  export function getSupportedChainIds(): DeployedChainId[] {
@@ -95,13 +95,16 @@ export async function prepareLiquidityCursorBounds(params: {
95
95
  maximalCursorMovement: number;
96
96
  dataProviderAddress?: Address;
97
97
  }): Promise<LiquidityCursorBounds> {
98
- const chainId = params.publicClient.chain?.id;
99
- if (chainId === undefined) {
100
- throw new Error("publicClient.chain.id is required to resolve dataProvider address");
98
+ let dataProviderAddress: Address;
99
+ if (params.dataProviderAddress) {
100
+ dataProviderAddress = params.dataProviderAddress;
101
+ } else {
102
+ const chainId = params.publicClient.chain?.id;
103
+ if (chainId === undefined) {
104
+ throw new Error("publicClient.chain.id is required to resolve dataProvider address");
105
+ }
106
+ dataProviderAddress = getAddressesOrThrow(chainId).dataProvider;
101
107
  }
102
-
103
- const dataProviderAddress =
104
- params.dataProviderAddress ?? getAddressesOrThrow(chainId).dataProvider;
105
108
  const slot0 = await getSlot0(params.publicClient, dataProviderAddress, params.pool);
106
109
 
107
110
  return computeLiquidityCursorBounds(