@steerprotocol/sdk 4.0.0-next.12 → 4.0.0-next.14

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
@@ -2194,8 +2194,9 @@ empty filtered page can still have nextCursor. Listing candidates still require
2194
2194
  LP totals exclude collected reward reserves and keep gauge rewards separate from the token pair.
2195
2195
  Snapshots preserve actual NFT tokensOwed without inventing V3 swap-fee accrual for staked NFTs.
2196
2196
  Small pinned resolutions, resolved snapshots and bulk snapshots each take two RPCs; latest adds one.
2197
- Strict original-storage/Multicall compatibility remains available. Standalone claims and reward-debt
2198
- user-read APIs remain unqualified.
2197
+ Strict original-storage/Multicall compatibility remains available. Dedicated getUserRewards and
2198
+ prepareClaimRewards methods now expose caller-owned reward reads and unsigned claims; see the
2199
+ [standalone reward qualification](benchmarks/standalone-rewards-qualification-2026-11-08.md).
2199
2200
 
2200
2201
  ```ts
2201
2202
  const withdrawal = await vault.previewWithdraw({ account, shares, receiver });
@@ -2273,6 +2274,49 @@ is an error, not a fabricated key. Pool browsing remains separate and requires a
2273
2274
  Base retains its existing indexed adapter by default. BNB combines indexed browsing with RPC key
2274
2275
  resolution; Robinhood uses RPC key resolution without indexed pool browsing.
2275
2276
 
2277
+ ### BNB Thena Fusion
2278
+
2279
+ `MultiPositionThena` resolves through `AmmProtocol.Thena` / `ThenaVersion.Fusion`
2280
+ and the exact qualified symmetric legacy Algebra deployment. Single/bulk snapshots use
2281
+ 15% aggregate fee rounding and two native pinned RPC requests, with per-member failures.
2282
+ Pool browsing uses the verified Graph endpoint, including pagination and token searches.
2283
+ Swap quotes simulate the original pool, verify actual input consumption, and require deployless
2284
+ calls or code overrides. They never decode the published two-word V1 quoter as V2.
2285
+
2286
+ Wallet discovery, user positions, ERC20 deposit/withdrawal, native BNB wrapping and separate WBNB
2287
+ unwrapping have read-only simulation coverage. Both WBNB vaults use WBNB as token1. Execute and
2288
+ confirm an exit before preparing an unwrap from actual received WBNB. Classic, Static Stable and
2289
+ Channel Multiplier run through the installed loaders with their actual registered WASM, including
2290
+ Channel Multiplier's real data connector. These claims apply to the qualified Fusion v1
2291
+ implementation, not Thena Integral or arbitrary future implementations.
2292
+ See [Thena qualification](src/vault/adapters/algebra-legacy/thena-qualification.md) for evidence,
2293
+ provider requirements, request budgets and verification limits.
2294
+
2295
+ ### Base Hydrex Integral vault snapshots
2296
+
2297
+ `getVaultSnapshots(ChainId.Base, addresses)` supports the exact qualified `MultiPositionHydrex`
2298
+ implementation through the existing Integral reader. Hydrex and QuickSwap retain separate exact
2299
+ identities and factories on Base. Native snapshots use two pinned RPC requests and preserve ordered
2300
+ per-member failures. Independent original post-poke accounting, retained responses and fallback
2301
+ costs are documented in [Hydrex qualification](src/vault/adapters/algebra-integral/hydrex-qualification.md).
2302
+ AMM selection uses `AmmProtocol.Hydrex` and `HydrexVersion.Integral`.
2303
+
2304
+ The funded representative also has qualified wallet discovery, user positions, ERC20 deposit
2305
+ quotes/previews/preparation and partial/full withdrawal preparation. Live rolled-back simulations
2306
+ verify real share mint/burn and token movements. Pool browsing/search, both swap quote directions and tick/chart reads have representative live
2307
+ qualification. Native ETH deposits prepare WETH wrapping before approvals/deposit; unused input
2308
+ remains WETH. After a confirmed withdrawal, use `AlgebraIntegralVault.prepareUnwrapNative` with
2309
+ an actual WETH balance for a separate unwrap. The registered WASM strategy also runs locally
2310
+ with its actual configuration and empty connector list. Nonempty Hydrex connector manifests and
2311
+ other implementations still need qualification. See the qualification document for exact evidence
2312
+ and limits.
2313
+
2314
+ ### BSC SushiSwap and Uniswap V3 snapshots
2315
+
2316
+ The exact qualified `MultiPositionSushi` and `MultiPositionUniswapV3` implementations now support vault resolution, single/bulk snapshots and direct pool reads. They reuse the fixed-fee V3 reader with 15% aggregate fee rounding. Normal bulk snapshot pages use two pinned RPC requests and preserve per-member failures with `allowFailure: true`.
2317
+
2318
+ AMM-filtered Steer vault listing works. Underlying AMM pool browsing remains unqualified: both inherited subgraphs returned pool rows without the expected factory identity and the SDK rejects those responses. Deposit/withdrawal flows were not newly qualified by this snapshot work. Base Sushi is separately qualified after the 30-vault migration, using its exact upgraded FeeManager/helper implementation; see [Base Sushi qualification](src/vault/adapters/uniswap-v3/base-sushi-qualification.md). See [source and live qualification](src/vault/adapters/uniswap-v3/bsc-qualification.md).
2319
+
2276
2320
  ### BSC PancakeSwap V3 vault snapshots
2277
2321
 
2278
2322
  `MultiPositionPancake` vaults on BSC use the shared `UniswapV3Vault` implementation and
@@ -2321,7 +2365,7 @@ and position-level `nftTokensOwed` diagnostics excluded from LP entitlement. Wal
2321
2365
  indexed vault candidates plus on-chain share balances. User positions and prepared ERC20 deposit
2322
2366
  and withdrawal flows have passed live simulations, including partial/full withdrawal rewards.
2323
2367
  AVAX inputs use an explicit WAVAX wrap before deposit. Native exits use a separate unwrap after
2324
- withdrawal confirmation; standalone reward claims are not exposed. Vault reads use bounded
2368
+ withdrawal confirmation. Dedicated getUserRewards and prepareClaimRewards methods expose standalone reward reads and claims. Vault reads use bounded
2325
2369
  compatibility calls, without a two-RPC guarantee.
2326
2370
 
2327
2371
  See [qualification](src/vault/adapters/blackhole/qualification.md) for exact identities and evidence.
@@ -2431,3 +2475,182 @@ to the current fee identifiers after a fee-policy replacement. These remain part
2431
2475
  `reservedFees`, fully excluded from LP holdings. Current-recipient unpaid fees plus
2432
2476
  `unattributedReservedFees` reconcile to the stored reserve; current unclaimed fee cuts still
2433
2477
  reconcile exactly to the current policy.
2478
+
2479
+ ### Base SushiManaged and Robinhood V3 snapshots
2480
+
2481
+ The exact qualified `MultiPositionSushiManaged` on Base and `MultiPositionSushi` /
2482
+ `MultiPositionUniswapV3` on Robinhood now support vault snapshots and native V3 pool routing.
2483
+ Each uses its stored FeeManager and helper. Current captured fee rates are 8000, 1500 and 3000
2484
+ basis points respectively; these apply to earned fees. Original same-block post-poke accounting
2485
+ and actual helper bytecode verify reserve exclusion and stored/fresh fee inclusion.
2486
+
2487
+ Managed and ordinary Base Sushi remain separate vault identities on the same AMM deployment.
2488
+ Base and Robinhood support two-request native snapshot pages. Robinhood mixes qualified V3 and V4
2489
+ vaults in the same batch, preserving individual failures and pinned accounting. All 33 eligible
2490
+ Robinhood catalog vaults passed a retained six-request scan.
2491
+
2492
+ Real-balance ERC20 deposit/withdrawal simulations, wallet positions and actual registered strategies
2493
+ passed for the three added deployments; both Robinhood strategies include their real price connector.
2494
+ Robinhood deposit estimates use sequential original contract accounting through an ephemeral helper.
2495
+ Robinhood Uniswap V3 pool browsing still requires a verified indexer. Its inherited Celo placeholder
2496
+ has been removed; specific pool reads and vault discovery continue to work.
2497
+
2498
+ **Robinhood Uniswap V3 pool discovery limitation:** No public subgraph with sufficient coverage
2499
+ has been verified. Sentry's live Robinhood subgraph returned no record for either the qualified
2500
+ vault's V3 pool (`0xe2b46c905e12ab8e2f864e4821a4325884c1b126`) or the canonical WETH/USDG
2501
+ 0.05% V3 pool (`0x69bfaf19c9f377bb306a89aed9f6b07e2c1a8d9a`). A healthy indexer alone does
2502
+ not establish pool coverage. [Goldsky lists Uniswap as a Robinhood data customer](https://goldsky.com/blog/robinhood-chain-data-live-on-goldsky),
2503
+ but that announcement identifies neither a V3 query endpoint nor its coverage. Pool listing/search
2504
+ remains explicitly unavailable until a Robinhood V3 indexer is verified; known-pool reads, vault
2505
+ listing, snapshots and the qualified user flows remain available.
2506
+
2507
+ See [V3 holdings qualification](src/vault/adapters/uniswap-v3/holdings-qualification.md) for exact
2508
+ identities, retained/live evidence, request counts and remaining gaps.
2509
+
2510
+ ### BNB Uniswap V4 ALM
2511
+
2512
+ The exact `MultiPositionUniswapV4` beacon/implementation is registered separately from Reserve V4.
2513
+ It reuses the source-qualified standalone accounting reader and optimized mixed-family batches.
2514
+ All five matching registry vaults currently have zero shares and no liquidity ranges. Native
2515
+ snapshots match their original totals; mixed Uniswap/Reserve pages preserve two-request execution
2516
+ and individual failures. Controlled original-runtime fee/reserve tests and a real-balance bootstrap
2517
+ deposit with partial/full original exits also pass.
2518
+
2519
+ Funded shared accounting is verified against six Reserve representatives, including hooked DTF
2520
+ vaults. The five newly registered vaults remain empty; exact-runtime controlled tests and bootstrap
2521
+ simulations provide separate evidence. All five known pools appear in retained token searches.
2522
+ Browsing now checks the configured PositionManager index before falling back to initialization
2523
+ logs for inconsistent indexed keys. All 29 inconsistent keys in the tested pages resolved through
2524
+ that index, without logs or block receipts.
2525
+
2526
+ Registered strategy/connector execution passes with valid manifests. An older Reserve manifest
2527
+ lacks required strategy settings and is rejected by the loader; compute-specific overrides remain
2528
+ outside the SDK. The oracle-enabled implementation's hooked-pool oracle read currently reverts,
2529
+ so original `tend` needs deployment-policy attention. No oracle bypass is introduced.
2530
+ See [BNB Uniswap V4 qualification](src/vault/adapters/uniswap-v4/bsc-uniswap-qualification.md).
2531
+
2532
+ ### Optimism and Arbitrum Uniswap V3
2533
+
2534
+ Exact `MultiPositionUniswapV3` deployments on Optimism and Arbitrum reuse the qualified Polygon
2535
+ fixed-fee reader. Funded snapshots match original post-poke totals in native and fallback modes.
2536
+ Native resolution and snapshot pages retain two pinned RPC requests, including mixed Arbitrum
2537
+ Camelot/Uniswap batches and individual unsupported members. Both accrued fee reserves remain
2538
+ excluded from LP idle assets; shared provider failures stay fatal.
2539
+
2540
+ Vault listing, known-pool reads and pool token searches work on both chains. Optimism uses a
2541
+ qualified replacement Graph endpoint covering all 14 known vault pools, with token-filtered
2542
+ pagination verified. Deployment-specific user flows and WASM execution are separate verification work. See [qualification and request budgets](src/vault/adapters/uniswap-v3/optimism-arbitrum-qualification.md).
2543
+
2544
+ ### Group 7 V3 registrations
2545
+
2546
+ Optimism Sushi, Arbitrum Sushi/Pancake and Flare SparkDex v3.2 now have exact source-qualified
2547
+ vault registrations and optimized two-request native snapshot pages. All four funded
2548
+ representatives match original post-poke accounting. Sushi/Pancake retain fixed 15% aggregate
2549
+ fee rounding; Spark32 uses its actual FeeManager and the existing qualified helper.
2550
+
2551
+ Vault listing and known-pool reads work on all four. Pool searches and pagination pass for
2552
+ Sushi and Spark32. Arbitrum Pancake's inherited indexer fails consistent pinned-page queries,
2553
+ so its pool browsing remains unqualified. User-flow and WASM qualification remain separate.
2554
+ Select Spark32 with `AmmProtocol.Spark` and `SparkVersion.V3_2`. See [exact identities and evidence](src/vault/adapters/uniswap-v3/group7-qualification.md).
2555
+
2556
+ ### Ethereum Cypher and Flare SparkIntegral
2557
+
2558
+ The exact `MultiPositionCypher` and `MultiPositionSparkIntegral` deployments now reuse Algebra
2559
+ Integral readers with optimized vault resolution/snapshots. Funded representatives match original
2560
+ post-poke holdings in all three reader modes. Native single/bulk snapshots take two pinned RPCs;
2561
+ a mixed Flare Spark32/Integral page does too. Pool reads, indexed vault listing and token-filtered
2562
+ pool browsing pass retained real-response checks.
2563
+
2564
+ Select Cypher with `AmmProtocol.Cypher` / `CypherVersion.V4`, or SparkIntegral with
2565
+ `AmmProtocol.Spark` / `SparkVersion.V4`. Spark32 remains `SparkVersion.V3_2`; omitting Spark's
2566
+ version is now ambiguous. V4 here is product branding for Algebra Integral.
2567
+
2568
+ Deployment-specific user-flow/native-token/WASM verification remains separate. These registrations
2569
+ do not qualify every implementation or enable API instrumentation on additional chains. See
2570
+ [identities, fee proof, request counts and limits](src/vault/adapters/algebra-integral/multichain-qualification.md).
2571
+
2572
+ ### Remaining V3 vault registrations
2573
+
2574
+ Ethereum Sushi/SushiManaged/Uniswap, Avalanche Sushi, Katana Sushi and Bittensor V3 now have exact
2575
+ source-qualified snapshot bindings through the existing FeeManager/helper reader. Funded native,
2576
+ deployless and Multicall snapshots match original post-poke holdings. Bittensor's helper matches
2577
+ Robinhood's qualified implementation; select its AMM with `AmmProtocol.Bittensor` / `BittensorVersion.V3`.
2578
+
2579
+ Vault discovery and direct pool reads pass for all six targets. Pool token search/pagination passes
2580
+ for Ethereum Uniswap, Avalanche, Katana and Bittensor; Ethereum Sushi's inherited indexer reports
2581
+ indexing errors. Ethereum/Katana/Bittensor native bulk reads use two pinned RPCs per ordinary page.
2582
+ Avalanche Sushi now uses two-call native bulk reads; mixed pages keep Sushi batched while
2583
+ Blackhole retains its separate farming reader. Deployment-specific user-flow/WASM and API APR acceptance remain separate. See
2584
+ [exact identities, manager rates, evidence and gaps](src/vault/adapters/uniswap-v3/remaining-qualification.md).
2585
+
2586
+ Local source now registers all 37 chain/beacon snapshot targets in the API rollout matrix.
2587
+ This does not enable additional API chains or qualify every SDK feature on every deployment.
2588
+
2589
+ Avalanche Sushi snapshot pages now use **2 RPC requests for 16 inputs**, down from 266; 17 inputs
2590
+ use 4. Three distinct Sushi vaults also use 2 requests and match original post-poke totals. Mixed
2591
+ pages preserve Blackhole rewards/NFT accounting and per-member failures. Blackhole now uses the
2592
+ same bulk coordinator: **two shared view requests plus one original farming simulation per active
2593
+ NFT**. The three funded one-NFT snapshots each use **3 RPC requests instead of 62**; mixed
2594
+ Sushi/Blackhole pages use **3 instead of 63**. Three distinct Blackhole vaults use 5 requests.
2595
+ Farming simulations retain the original caller and state. Compatibility reads and fatal provider
2596
+ errors are preserved. See the [Sushi benchmark](benchmarks/vault-bulk-avalanche-2026-11-07.json) and
2597
+ [Blackhole benchmark](benchmarks/vault-bulk-blackhole-2026-11-07.json).
2598
+
2599
+ ### November 7 discovery, quote and native-flow completion
2600
+
2601
+ - Sushi V3 on BSC/Base/Polygon and Uniswap V3 on BSC now use their indexers' lowercase factory
2602
+ entity IDs. Onchain identities and other deployments' case-sensitive entity IDs are preserved.
2603
+ Live first/continuation pages and retained offline regressions pass.
2604
+ - Sushi V3 on BSC/Base/Polygon and Spark32 on Flare now configure verified factory-bound QuoterV2
2605
+ deployments. Positive quotes in both directions match independent same-block contract simulations.
2606
+ The public swap method is `amm.quote(request, options)`.
2607
+ - Pancake V3 BSC accepts native BNB, and Camelot legacy Arbitrum accepts native ETH, through the
2608
+ existing wrap/approval/deposit sequence. Real funded-account simulations cover deposits, partial/full
2609
+ exits and a separate balance-checked `prepareUnwrapNative`. Exits return wrapped currency; unwrap
2610
+ after confirmation using the actual received amount. Wrapper identity and native/wrapped ambiguity
2611
+ checks remain explicit. No transactions were broadcast.
2612
+
2613
+ See [discovery and quote evidence](src/vault/adapters/uniswap-v3/bsc-qualification.md),
2614
+ [Pancake native flows](src/vault/adapters/uniswap-v3/pancake-qualification.md) and
2615
+ [Camelot native flows](src/vault/adapters/algebra-legacy/camelot-qualification.md).
2616
+ Robinhood Uniswap V3/V4 complete pool catalogs and the separately documented deployment-specific
2617
+ user-flow/WASM qualification remain follow-up work. These changes describe local source, not publication.
2618
+
2619
+ ### Updated representative user-flow qualification (November 7, 2026)
2620
+
2621
+ Fresh original-contract simulations now qualify the two Robinhood V4 representatives
2622
+ (ERC20 and native ETH) and 16 later deployment representatives. Actual connector and
2623
+ strategy WASM execution also passed for 19 representatives, including Bittensor,
2624
+ Optimism Uniswap and Arbitrum Sushi. These results supersede the earlier blanket
2625
+ user-flow/WASM follow-up statements above for the exact representatives in the
2626
+ [qualification report](benchmarks/vault-user-flow-qualification-2026-11-07.md).
2627
+
2628
+ Bittensor deposit quotes, previews and preparation now use the existing ephemeral
2629
+ accounting path when Multicall deployment metadata is absent. Funded deposit/exit
2630
+ execution remains pending. BSC Sushi and Arbitrum Uniswap connector execution are
2631
+ verified with data-connector-loader 5.0.0-next.9 and its corrected subgraph routing.
2632
+ The Arbitrum fix preserves the original connector configuration and uses the
2633
+ consumer credential instead of forwarding the embedded key.
2634
+ Historical Robinhood live replays still require RPC history that the public provider
2635
+ may prune. These checks establish representative behavior, not all deployments or
2636
+ API APR acceptance, and do not enable additional native conveniences or discovery.
2637
+
2638
+ ### Native currency across registered vault families
2639
+
2640
+ Registered V3, Legacy Algebra, Integral and Aerodrome vaults accept the zero address for native inputs when their pair contains the qualified wrapper on Ethereum, Optimism, Flare, BSC, Polygon, Bittensor, Robinhood, Base, Arbitrum, Avalanche or Katana. Use the existing quoteDeposit, previewDeposit and prepareDeposit methods. Prepared transactions wrap the maximum native input before approvals and deposit; unused input remains wrapped. Quotes do not perform swaps. Empty vaults still require explicit two-token maxima.
2641
+
2642
+ After a withdrawal confirms, use vault.prepareUnwrapNative({ account, amount }) with the actual received wrapped balance to prepare a separate unwrap. The SDK verifies the wrapper's runtime and, where applicable, proxy implementation at the pinned block. A chain's presence or a token's symbol alone does not enable wrapping. Existing V4 direct-native and Blackhole native AVAX flows retain their own accounting.
2643
+
2644
+ Original-contract checks passed for all 11 wrappers and 28 native-funded deposit/exit representatives, including Bittensor TAO. Aerodrome's stored-manager and V3 exit verification encountered inactive gauges: original contracts revert with GK when trying to restake. Those variants are not claimed fully verified for native exits; no matching native V2 candidate was found in the queried sample. See [native-currency qualification](benchmarks/native-currency-qualification-2026-11-08.md) for exact vaults, blocks, limits and reproduction.
2645
+
2646
+ ### Standalone shareholder rewards
2647
+
2648
+ BlackholeVault and AerodromeVault expose getUserRewards(account, options) and prepareClaimRewards(account, options). The read returns account, blockNumber, shares and rewards: an array of { token, decimals, claimable, rewardDebt }, with raw/formatted token amounts. Reward debt is a stored accounting checkpoint preventing double payment, not a user liability. Claims pay the caller and do not burn shares. Blackhole users can still have accrued rewards after transferring all shares.
2649
+
2650
+ ```ts
2651
+ const rewards = await vault.getUserRewards(account, { blockNumber });
2652
+ const plan = await vault.prepareClaimRewards(account, { blockNumber });
2653
+ // Send plan.transactions with the wallet for plan.account after reviewing plan.preview.
2654
+ ```
2655
+
2656
+ Preparation verifies the original deployment and simulates the original claim at one block. It returns one unsigned zero-value transaction, with no approvals or configurable recipient. Actual rewards can change before confirmation. Errors are surfaced rather than converted into empty rewards. Positive original-contract claims passed on Blackhole and all three registered Aerodrome implementation layouts, including inactive-gauge representatives and overlapping reward tokens. These claims do not establish that Aerodrome withdrawals/rebalances work after gauge deactivation. Exact scope and replay commands are in the [qualification report](benchmarks/standalone-rewards-qualification-2026-11-08.md).