@valve-tech/gas-oracle 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -54,8 +54,8 @@ import { withGasOracle } from '@valve-tech/gas-oracle/viem-transport'
54
54
 
55
55
  | Type | What it is |
56
56
  |---|---|
57
- | `CreateGasOracleOptions` | Constructor config. Required: `client`, `chainId`. Tuneables: `priorityFeeDecayCap`, `priorityModel`, `baseFeeLivenessBlocks`, `poll`, `keepMempoolSnapshot`. |
58
- | `GasOracleState` | What `oracle.getState()` returns. Holds the four-tier `tiers` map plus latest `baseFee`, `bufferedBaseFee`, mempool snapshot if enabled. |
57
+ | `CreateGasOracleOptions` | Constructor config. Required: `client`, `chainId`. Tuneables: `priorityFeeDecayCap`, `priorityModel`, `baseFeeLivenessBlocks`, `poll`, `keepMempoolSnapshot`, `ringWindowBlocks` (default 20n). |
58
+ | `GasOracleState` | What `oracle.getState()` returns. Holds the four-tier `tiers` map plus latest `baseFee`, `bufferedBaseFee`, mempool snapshot if enabled, the rolling block `ring`, and `lastReorg` (a `ReorgEvent \| null` describing the most recent ring trim, if any). |
59
59
  | `TierRecommendation` | Per-tier struct: `{ maxPriorityFeePerGas, maxFeePerGas, gasPrice, maxFeePerBlobGas }`. All `bigint`. |
60
60
  | `RawTx` | One mempool entry: `{ hash, from, to, nonce, value, maxPriorityFeePerGas, maxFeePerGas, gas, ... }`. Nullable fields for fields the chain may not expose. |
61
61
  | `BlockPositionQuery` | Discriminated union — five mutually-exclusive shapes (see below). |
package/CHANGELOG.md CHANGED
@@ -5,6 +5,77 @@ All notable changes to `@valve-tech/gas-oracle` are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [0.11.0] — 2026-05-11
9
+
10
+ ### Added
11
+
12
+ - 20-block ring lifecycle for `state.ring`. The single-element
13
+ placeholder is replaced with a real rolling window: each new block
14
+ goes through one of `append` / `duplicate` / `reorg` / `restart`,
15
+ with head-trim when the window cap would be exceeded. The poll
16
+ loop pre-fetches missing blocks via `source.getBlock(n)` to bridge
17
+ clean gaps before the reducer runs (one notification, not N).
18
+ - `createGasOracle` option `ringWindowBlocks?: bigint` — controls
19
+ the ring cap. Default `20n`, matching the `eth_feeHistory` window.
20
+ Pass `0n` to disable the cap (replay harnesses) or `1n` to restore
21
+ the v0.10 single-block-per-tick semantics.
22
+ - `GasOracleState.lastReorg: ReorgEvent | null` — populated when the
23
+ ring lifecycle trims diverged tail blocks. Persists across
24
+ subsequent clean appends; consumers asking "did a reorg happen on
25
+ THIS tick?" should compare `lastReorg.blockNumber === blockNumber`.
26
+ - Pure ring helper exported as `incorporateBlock(prevRing, newBlock,
27
+ maxWindow)` from the package root. Useful for replay harnesses or
28
+ tests verifying ring transitions independent of the rest of the
29
+ reducer.
30
+ - `reducePollInputs` accepts an optional `historicalBlocks?:
31
+ BlockResult[]` (oldest → newest) so callers replaying RPC payloads
32
+ can fill the ring in one call.
33
+
34
+ ### Changed
35
+
36
+ - Tier numbers are now multi-block-stabilized: `state.tiers.*` are
37
+ computed from `ring[*].tips ++ mempoolSamples`, not just the latest
38
+ block's tips. This is the user-visible effect of the ring
39
+ lifecycle — quiet single-block dips no longer collapse the
40
+ paying-lane tiers (the cap mechanism was previously load-bearing
41
+ for that case). Behavior change is intentional; consumers wanting
42
+ the v0.10 semantics can pass `ringWindowBlocks: 1n`.
43
+ - Wire-shape types (`RawTx`, `BlockResult`, `FeeHistoryResult`,
44
+ `TxPoolContent`, `NormalizedMempool`) and the poll-cycle toggle
45
+ (`PollOptions`) are no longer declared locally — they're imported
46
+ from `@valve-tech/chain-source`, the canonical owner. The package
47
+ continues to re-export every one from `index.ts`, so downstream
48
+ `import { RawTx } from '@valve-tech/gas-oracle'` keeps working.
49
+ Type identity now unifies across the toolkit (a `BlockResult`
50
+ from gas-oracle is the same nominal type as one from chain-source).
51
+ No runtime change; no breaking change in consumed shapes.
52
+
53
+ ### Notes
54
+
55
+ - Reorg-side backfill is intentionally **not** in this change. When a
56
+ parentHash mismatch is detected, the reducer trims the diverged
57
+ tail and continues from the new block forward — the new canonical
58
+ branch refills via natural forward polling rather than a
59
+ refetch-by-hash walk. (`@valve-tech/chain-source` doesn't expose a
60
+ by-hash fetch yet; adding one would be a chain-source change in
61
+ scope for a follow-up if user signal warrants it.)
62
+ - `reduceAndPublish` was refactored to take `inputs.block: BlockResult`
63
+ (non-null) — the previous defensive `if (next)` guard plus
64
+ `/* c8 ignore */` directive were silencing coverage on a path
65
+ unreachable from either caller (`handleBlock` and `pollOnce` both
66
+ gate on non-null block). No behavior change; the dead branch is
67
+ gone. Closes the workspace-wide 100% coverage goal alongside new
68
+ tests for the gap-bridge logic in `handleBlock`/`pollOnce` and
69
+ the deeper-ancestor branch in `ring.ts`.
70
+
71
+ ## [0.10.1] — 2026-05-08
72
+
73
+ Synchronized release — no changes to this package. Republished at
74
+ 0.10.1 alongside the rest of the toolkit; v0.10.0 only got
75
+ trueblocks-sdk publishing wrong (missing `repository` field tripped
76
+ provenance validation), so the rest of the line had to bump to
77
+ re-sync.
78
+
8
79
  ## [0.10.0] — 2026-05-08
9
80
 
10
81
  Synchronized release — no changes to this package. Republished at
package/README.md CHANGED
@@ -164,6 +164,24 @@ lookups without a second RPC roundtrip. Memory cost is the size of one
164
164
  `txpool_content` payload (5–15MB on busy ETH mainnet); leave off in
165
165
  browser/mobile contexts. Default `false`.
166
166
 
167
+ ### `ringWindowBlocks`
168
+
169
+ Maximum number of blocks retained in `state.ring` for percentile
170
+ sampling. Default `20n` (matches the `eth_feeHistory` window). Tier
171
+ recommendations are computed from `ring[*].tips ++ mempoolSamples`,
172
+ so a larger window stabilizes the tier numbers across blocks at the
173
+ cost of more memory (~150 tips/block). Pass `1n` to restore
174
+ single-block-per-tick behavior; pass `0n` to disable the cap (only
175
+ useful for replay harnesses).
176
+
177
+ The poll loop pre-fetches missing blocks via `source.getBlock(n)` to
178
+ bridge gaps between consecutive ticks (e.g. after `pauseWhenIdle`
179
+ resumes), so the ring stays dense across brief upstream pauses.
180
+ Reorgs trim the ring's diverged tail and surface as
181
+ `state.lastReorg` (a `ReorgEvent | null` describing the trim depth
182
+ and dropped hashes); the new canonical branch refills via natural
183
+ forward polling.
184
+
167
185
  ## Idle-traffic controls (v0.2.6+)
168
186
 
169
187
  Real dapps run multiple oracles per session (e.g. PulseChain + Base)
package/dist/index.d.ts CHANGED
@@ -15,11 +15,20 @@
15
15
  export { createGasOracle, reducePollInputs, sampleGasFees, type CreateGasOracleOptions, type GasOracle, } from './oracle.js';
16
16
  export { effectiveTip, computePercentiles, detectTrend, cappedTip, computeTiers, computeBlobBaseFee, flattenTxPool, gasWeightedPercentiles, sortedTips, DEFAULT_PRIORITY_FEE_DECAY_CAP, DEFAULT_BASE_FEE_LIVENESS_BLOCKS, } from './math.js';
17
17
  export { blockToSample, mempoolToSamples, } from './samples.js';
18
- export { fetchOracleInputs, fetchHeadBlockNumber, type FeeHistoryResult, type BlockResult, type TxPoolContent, type OraclePollInputs, } from './transport.js';
19
- export type { RawTx, TipPercentiles, TierRecommendation, MempoolStats, BlobStats, BlockSample, GasOracleState, TipSample, PollOptions, } from './types.js';
18
+ export { incorporateBlock } from './ring.js';
19
+ export type { ReorgEvent, RingMutation } from './ring.js';
20
+ export { fetchOracleInputs, fetchHeadBlockNumber, type OraclePollInputs, } from './transport.js';
21
+ export type { TipPercentiles, TierRecommendation, MempoolStats, BlobStats, BlockSample, GasOracleState, TipSample, } from './types.js';
20
22
  export { PriorityModel, TierName, TIER_LADDER, Trend, TxType } from './types.js';
21
23
  export { normalizeMempool, findByHash, findByAddressNonce, findInMempool, } from './mempool.js';
22
- export type { NormalizedMempool, TxIdentifier, MempoolBucket, MempoolHit, } from './mempool.js';
24
+ export type { TxIdentifier, MempoolBucket, MempoolHit, } from './mempool.js';
25
+ /**
26
+ * Wire-shape types describing raw `eth_*` responses, plus the poll-cycle
27
+ * toggle. Owned by `@valve-tech/chain-source`; re-exported here so
28
+ * downstream consumers don't have to add a second package import to
29
+ * type a fixture or a stored snapshot.
30
+ */
31
+ export type { BlockResult, FeeHistoryResult, NormalizedMempool, PollOptions, RawTx, TxPoolContent, } from '@valve-tech/chain-source';
23
32
  export { tipForBlockPosition } from './block-position.js';
24
33
  export type { BlockPositionQuery, BlockPositionResult, } from './block-position.js';
25
34
  export { minimumReplacementFee, bumpForReplacement, recommendBumpTier, BumpStrategy, ReplacementBumpPercent, } from './replacement.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,SAAS,GACf,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EACV,KAAK,EACL,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,EACd,SAAS,EACT,WAAW,GACZ,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGhF,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,aAAa,GACd,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,YAAY,EACV,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,wBAAwB,EACxB,cAAc,GACf,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAGvE,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAG9E,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,KAAK,WAAW,GACjB,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,SAAS,GACf,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAA;AAKrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAEzD,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,EACd,SAAS,GACV,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGhF,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,aAAa,GACd,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,cAAc,CAAA;AAErB;;;;;GAKG;AACH,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,KAAK,EACL,aAAa,GACd,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,YAAY,EACV,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,wBAAwB,EACxB,cAAc,GACf,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAGvE,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAG9E,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,KAAK,WAAW,GACjB,MAAM,cAAc,CAAA"}
package/dist/index.js CHANGED
@@ -15,6 +15,10 @@
15
15
  export { createGasOracle, reducePollInputs, sampleGasFees, } from './oracle.js';
16
16
  export { effectiveTip, computePercentiles, detectTrend, cappedTip, computeTiers, computeBlobBaseFee, flattenTxPool, gasWeightedPercentiles, sortedTips, DEFAULT_PRIORITY_FEE_DECAY_CAP, DEFAULT_BASE_FEE_LIVENESS_BLOCKS, } from './math.js';
17
17
  export { blockToSample, mempoolToSamples, } from './samples.js';
18
+ // Pure ring-buffer maintenance (used by the reducer; exposed for
19
+ // replay harnesses + tests that want to verify ring transitions
20
+ // independent of the rest of the reducer).
21
+ export { incorporateBlock } from './ring.js';
18
22
  export { fetchOracleInputs, fetchHeadBlockNumber, } from './transport.js';
19
23
  // Const-namespace pairs (value + type share the identifier — see types.ts).
20
24
  export { PriorityModel, TierName, TIER_LADDER, Trend, TxType } from './types.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,aAAa,GAGd,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,GAKrB,MAAM,gBAAgB,CAAA;AAcvB,4EAA4E;AAC5E,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEhF,qBAAqB;AACrB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,aAAa,GACd,MAAM,cAAc,CAAA;AAQrB,8BAA8B;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAMzD,4CAA4C;AAC5C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;AAMzB,sDAAsD;AACtD,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAA;AAEvE,4DAA4D;AAC5D,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE9E,iEAAiE;AACjE,OAAO,EACL,YAAY,EACZ,gBAAgB,GAEjB,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,aAAa,GAGd,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAA;AAErB,iEAAiE;AACjE,gEAAgE;AAChE,2CAA2C;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAG5C,OAAO,EACL,iBAAiB,EACjB,oBAAoB,GAErB,MAAM,gBAAgB,CAAA;AAYvB,4EAA4E;AAC5E,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEhF,qBAAqB;AACrB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,aAAa,GACd,MAAM,cAAc,CAAA;AAsBrB,8BAA8B;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAMzD,4CAA4C;AAC5C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;AAMzB,sDAAsD;AACtD,OAAO,EAAE,WAAW,EAA0B,MAAM,mBAAmB,CAAA;AAEvE,4DAA4D;AAC5D,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE9E,iEAAiE;AACjE,OAAO,EACL,YAAY,EACZ,gBAAgB,GAEjB,MAAM,cAAc,CAAA"}
package/dist/math.d.ts CHANGED
@@ -7,7 +7,8 @@
7
7
  * (legacy txs, EIP-1559 with zero headroom, cold-start cap, post-EIP-4844
8
8
  * blob fee) is handled here rather than at higher layers.
9
9
  */
10
- import { PriorityModel, TierName, Trend, type RawTx, type TierRecommendation, type TipPercentiles, type TipSample } from './types.js';
10
+ import type { RawTx } from '@valve-tech/chain-source';
11
+ import { PriorityModel, TierName, Trend, type TierRecommendation, type TipPercentiles, type TipSample } from './types.js';
11
12
  /** Default priority-fee decay cap = 12.5% / block (EIP-1559 parity). */
12
13
  export declare const DEFAULT_PRIORITY_FEE_DECAY_CAP: bigint;
13
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,QAAQ,EACR,KAAK,EAEL,KAAK,KAAK,EACV,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,YAAY,CAAA;AAcnB,wEAAwE;AACxE,eAAO,MAAM,8BAA8B,QAAW,CAAA;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GAAI,IAAI,KAAK,EAAE,SAAS,MAAM,KAAG,MAezD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,EAAE,KAAG,cASrD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,KAAK,EAAE,EAAE,SAAS,MAAM,KAAG,MAAM,EAK5B,CAAA;AAErC;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,EAAE,KAAG,KAS/C,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS,GACpB,QAAQ,MAAM,EACd,gBAAgB,MAAM,EACtB,eAAe,MAAM,GAAG,SAAS,EACjC,0BAA0B,MAAM,GAAG,SAAS,EAC5C,WAAU,MAAM,GAAG,IAAqC,KACvD,MAgBF,CAAA;AAeD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,SAAS,EAAE,EACpB,aAAa,MAAM,EAAE,KACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAkCvB,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,gCAAgC,IAAI,CAAA;AAmDjD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO;IAClC,WAAW,EAAE,SAAS,EAAE,CAAA;IACxB,cAAc,EAAE,SAAS,EAAE,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,KAAK,CAAA;IACnB,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,CAAA;IAClD,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACvD,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5C,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B,KAAG;IACF,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;IAC3C,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;CA4DxC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,eAAe,MAAM,KAAG,MAY1D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,KAC7D,KAAK,EAOP,CAAA"}
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,EACL,aAAa,EACb,QAAQ,EACR,KAAK,EAEL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,YAAY,CAAA;AAcnB,wEAAwE;AACxE,eAAO,MAAM,8BAA8B,QAAW,CAAA;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GAAI,IAAI,KAAK,EAAE,SAAS,MAAM,KAAG,MAezD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,EAAE,KAAG,cASrD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,KAAK,EAAE,EAAE,SAAS,MAAM,KAAG,MAAM,EAK5B,CAAA;AAErC;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,EAAE,KAAG,KAS/C,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS,GACpB,QAAQ,MAAM,EACd,gBAAgB,MAAM,EACtB,eAAe,MAAM,GAAG,SAAS,EACjC,0BAA0B,MAAM,GAAG,SAAS,EAC5C,WAAU,MAAM,GAAG,IAAqC,KACvD,MAgBF,CAAA;AAeD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,SAAS,EAAE,EACpB,aAAa,MAAM,EAAE,KACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAkCvB,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,gCAAgC,IAAI,CAAA;AAmDjD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO;IAClC,WAAW,EAAE,SAAS,EAAE,CAAA;IACxB,cAAc,EAAE,SAAS,EAAE,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,KAAK,CAAA;IACnB,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI,CAAA;IAClD,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACvD,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5C,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B,KAAG;IACF,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;IAC3C,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;CA4DxC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,eAAe,MAAM,KAAG,MAY1D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,KAC7D,KAAK,EAOP,CAAA"}
package/dist/math.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
package/dist/mempool.d.ts CHANGED
@@ -19,15 +19,7 @@
19
19
  * functionally identical to `TxPoolContent`, but the type alias names
20
20
  * the invariant.
21
21
  */
22
- import type { TxPoolContent } from './transport.js';
23
- import type { RawTx } from './types.js';
24
- /**
25
- * `TxPoolContent` after a single normalization pass — every sender
26
- * address key is lowercase ASCII, every nonce key is a decimal string.
27
- * All lookup helpers expect this form; pass raw `TxPoolContent` through
28
- * `normalizeMempool` first.
29
- */
30
- export type NormalizedMempool = TxPoolContent;
22
+ import type { NormalizedMempool, RawTx, TxPoolContent } from '@valve-tech/chain-source';
31
23
  /**
32
24
  * Discriminated identifier for a single tx — either by its hash, or by
33
25
  * sender + nonce. Re-used across mempool lookups (`findInMempool`) and
@@ -1 +1 @@
1
- {"version":3,"file":"mempool.d.ts","sourceRoot":"","sources":["../src/mempool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAExD,yCAAyC;AACzC,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEhD,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,EAAE,EAAE,KAAK,CAAA;IACT,0CAA0C;IAC1C,MAAM,EAAE,aAAa,CAAA;IACrB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;CACd;AAiBD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,KACrC,iBAGD,CAAA;AAqBF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC1C,MAAM,MAAM,KACX,UAAU,GAAG,IAKf,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC1C,SAAS,MAAM,EACf,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,KAC9B,UAAU,GAAG,IAiBf,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC1C,IAAI,YAAY,KACf,UAAU,GAAG,IAGf,CAAA"}
1
+ {"version":3,"file":"mempool.d.ts","sourceRoot":"","sources":["../src/mempool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,KAAK,EACL,aAAa,EACd,MAAM,0BAA0B,CAAA;AAEjC;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAExD,yCAAyC;AACzC,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEhD,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,EAAE,EAAE,KAAK,CAAA;IACT,0CAA0C;IAC1C,MAAM,EAAE,aAAa,CAAA;IACrB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;CACd;AAiBD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,KACrC,iBAGD,CAAA;AAqBF;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC1C,MAAM,MAAM,KACX,UAAU,GAAG,IAKf,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC1C,SAAS,MAAM,EACf,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,KAC9B,UAAU,GAAG,IAiBf,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC1C,IAAI,YAAY,KACf,UAAU,GAAG,IAGf,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mempool.js","sourceRoot":"","sources":["../src/mempool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mempool.js","sourceRoot":"","sources":["../src/mempool.ts"],"names":[],"mappings":"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"}
package/dist/oracle.d.ts CHANGED
@@ -11,9 +11,9 @@
11
11
  * process, instantiate many oracles. They don't share any state.
12
12
  */
13
13
  import type { PublicClient } from 'viem';
14
- import { type ChainSource, type NormalizedMempool } from '@valve-tech/chain-source';
14
+ import { type BlockResult, type ChainSource, type NormalizedMempool, type PollOptions } from '@valve-tech/chain-source';
15
15
  import { type OraclePollInputs } from './transport.js';
16
- import type { GasOracleState, PollOptions, PriorityModel } from './types.js';
16
+ import type { GasOracleState, PriorityModel } from './types.js';
17
17
  export interface CreateGasOracleOptions {
18
18
  /**
19
19
  * Pre-built `ChainSource`. Preferred for new code: lets multiple
@@ -152,6 +152,19 @@ export interface CreateGasOracleOptions {
152
152
  * Web Worker contexts where `document` is undefined.
153
153
  */
154
154
  pauseWhenHidden?: boolean;
155
+ /**
156
+ * How many recent blocks to retain in `state.ring` for percentile
157
+ * sampling and reorg detection. Default 20n (matches the
158
+ * `eth_feeHistory` window). Pass 0n to disable the cap (the ring
159
+ * grows without bound; only useful for replay harnesses).
160
+ *
161
+ * The ring fills naturally as the poll loop receives blocks, with
162
+ * pre-fetched gap bridging via `source.getBlock` when consecutive
163
+ * polls miss intermediate blocks. Larger windows give more samples
164
+ * (more stable tier numbers) at the cost of more memory and more
165
+ * I/O on resume after a long pause.
166
+ */
167
+ ringWindowBlocks?: bigint;
155
168
  }
156
169
  export interface GasOracle {
157
170
  /** Begin the poll loop. Idempotent — calling twice is a no-op. */
@@ -191,14 +204,38 @@ export interface GasOracle {
191
204
  *
192
205
  * Pure: no I/O, no global state, no time. Test by feeding it fixture
193
206
  * inputs and asserting the returned shape.
207
+ *
208
+ * Ring lifecycle. The reducer maintains `state.ring` across calls
209
+ * using `incorporateBlock` (see `ring.ts`): clean appends, duplicate
210
+ * detection, reorg trim, restart on irrecoverable gaps. The poll loop
211
+ * in `createGasOracle` pre-fetches missing blocks for clean gaps and
212
+ * passes them as `historicalBlocks` so the ring stays dense across
213
+ * brief interruptions; callers using `reducePollInputs` directly
214
+ * (replay harnesses, snapshot tests) can pass the same param.
194
215
  */
195
216
  export declare const reducePollInputs: (input: {
196
217
  inputs: OraclePollInputs;
197
218
  chainId: number;
198
219
  prev: GasOracleState | null;
220
+ /**
221
+ * Older blocks to slot into the ring before the current input block.
222
+ * Ordered oldest → newest. Used by the I/O-driven gap bridge in
223
+ * `oracle.ts`'s poll loop and by replay harnesses; standalone callers
224
+ * can omit it. Each historical block contributes its `tips` to the
225
+ * percentile sample base; `feeHistory` and `txPool` from `inputs`
226
+ * still apply to the current block only.
227
+ */
228
+ historicalBlocks?: BlockResult[];
199
229
  priorityFeeDecayCap?: bigint | null;
200
230
  priorityModel?: PriorityModel;
201
231
  baseFeeLivenessBlocks?: number;
232
+ /**
233
+ * Maximum ring size. Defaults to 20 blocks (matching the
234
+ * `eth_feeHistory` window). Pass 0n to disable the cap. Older
235
+ * entries are dropped from the head as new appends would exceed
236
+ * the window.
237
+ */
238
+ ringWindowBlocks?: bigint;
202
239
  }) => GasOracleState | null;
203
240
  /**
204
241
  * Build a configured oracle. Nothing happens until you call `start()`.
@@ -1 +1 @@
1
- {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
package/dist/oracle.js CHANGED
@@ -13,16 +13,26 @@
13
13
  import { createChainSource, } from '@valve-tech/chain-source';
14
14
  import { fetchOracleInputs } from './transport.js';
15
15
  import { computeBlobBaseFee, computeTiers, detectTrend, flattenTxPool, } from './math.js';
16
+ import { incorporateBlock } from './ring.js';
16
17
  import { blockToSample, mempoolToSamples } from './samples.js';
17
18
  const DEFAULT_POLL_INTERVAL_MS = 10000n;
18
19
  const TREND_WINDOW = 5;
19
20
  const WAD = 1000000000000000000n;
21
+ const DEFAULT_RING_WINDOW_BLOCKS = 20n;
20
22
  /**
21
23
  * Reduce a poll cycle's RPC outputs into a new oracle state, using the
22
24
  * previous state to anchor the cap-decay and the base-fee history.
23
25
  *
24
26
  * Pure: no I/O, no global state, no time. Test by feeding it fixture
25
27
  * inputs and asserting the returned shape.
28
+ *
29
+ * Ring lifecycle. The reducer maintains `state.ring` across calls
30
+ * using `incorporateBlock` (see `ring.ts`): clean appends, duplicate
31
+ * detection, reorg trim, restart on irrecoverable gaps. The poll loop
32
+ * in `createGasOracle` pre-fetches missing blocks for clean gaps and
33
+ * passes them as `historicalBlocks` so the ring stays dense across
34
+ * brief interruptions; callers using `reducePollInputs` directly
35
+ * (replay harnesses, snapshot tests) can pass the same param.
26
36
  */
27
37
  export const reducePollInputs = (input) => {
28
38
  const { block, feeHistory, txPool } = input.inputs;
@@ -38,14 +48,24 @@ export const reducePollInputs = (input) => {
38
48
  ? feeHistory.baseFeePerGas.map((hex) => BigInt(hex))
39
49
  : [baseFee];
40
50
  const baseFeeTrend = detectTrend(baseFeeHistory.slice(-TREND_WINDOW));
41
- // Build the rolling ring. The full 20-block append/bridgeGap/clear
42
- // lifecycle is deferred (spec §7-§9); for now we keep window = 1 by
43
- // populating ring as a single-element array from the current block.
44
- // Forward-compatible: callers can read `state.ring` as a list of
45
- // BlockSamples without caring how many entries are in it.
51
+ // Build the rolling ring. Pure helper handles append / duplicate /
52
+ // reorg-trim / restart; the I/O-driven gap bridge happens in
53
+ // `handleBlock` and arrives here pre-fetched via `historicalBlocks`.
54
+ const ringWindow = input.ringWindowBlocks ?? DEFAULT_RING_WINDOW_BLOCKS;
55
+ let workingRing = input.prev?.ring ?? [];
56
+ let lastReorg = input.prev?.lastReorg ?? null;
57
+ for (const histBlock of input.historicalBlocks ?? []) {
58
+ const histMutation = incorporateBlock(workingRing, blockToSample(histBlock), ringWindow);
59
+ workingRing = histMutation.ring;
60
+ if (histMutation.reorg)
61
+ lastReorg = histMutation.reorg;
62
+ }
46
63
  const blockSample = blockToSample(block);
47
- const ring = [blockSample];
48
- const ringSamples = blockSample.tips;
64
+ const mutation = incorporateBlock(workingRing, blockSample, ringWindow);
65
+ const ring = mutation.ring;
66
+ if (mutation.reorg)
67
+ lastReorg = mutation.reorg;
68
+ const ringSamples = ring.flatMap((b) => b.tips);
49
69
  // Mempool — best-effort signal.
50
70
  let mempool = {
51
71
  pendingCount: 0n,
@@ -106,6 +126,7 @@ export const reducePollInputs = (input) => {
106
126
  blob,
107
127
  tiers,
108
128
  ring,
129
+ lastReorg,
109
130
  mempoolSamples,
110
131
  lastPublishedTips: publishedTips,
111
132
  lastPublishedBlockNumber: blockNumber,
@@ -208,37 +229,84 @@ export const createGasOracle = (options) => {
208
229
  catch { /* swallow per-subscriber errors */ }
209
230
  }
210
231
  };
211
- // Reduce a (block, feeHistory, mempool) tuple into the next state +
212
- // notify. Shared between the subscribe-driven path (timer ticks) and
213
- // the on-demand path (`pollOnce`).
214
- const reduceAndPublish = (inputs) => {
232
+ const ringWindowBlocks = options.ringWindowBlocks ?? DEFAULT_RING_WINDOW_BLOCKS;
233
+ /**
234
+ * Reduce a (block, feeHistory, mempool) tuple into the next state +
235
+ * notify. Shared between the subscribe-driven path (timer ticks)
236
+ * and the on-demand path (`pollOnce`). `historicalBlocks` carries
237
+ * any gap-bridge blocks fetched by `handleBlock` so the ring fills
238
+ * in chronological order in a single reducer call (one notification).
239
+ *
240
+ * The `block` field on `inputs` is **required non-null** here —
241
+ * both callers (`handleBlock` and `pollOnce`) already gate on a
242
+ * non-null block, so the pure reducer's null-block-early-return
243
+ * arm cannot fire from this path. Typing the parameter
244
+ * accordingly removes the dead `if (next)` guard and the
245
+ * `c8 ignore` directive that was needed to silence coverage.
246
+ */
247
+ const reduceAndPublish = (inputs, historicalBlocks) => {
215
248
  const next = reducePollInputs({
216
249
  inputs,
250
+ historicalBlocks,
217
251
  chainId: options.chainId,
218
252
  prev: state,
219
253
  priorityFeeDecayCap: options.priorityFeeDecayCap,
220
254
  priorityModel: options.priorityModel,
221
255
  baseFeeLivenessBlocks: options.baseFeeLivenessBlocks,
256
+ ringWindowBlocks,
222
257
  });
223
- // `next` is null only when the input block is null, but every
224
- // caller of reduceAndPublish (handleBlock, pollOnce) already
225
- // gates on a non-null block. Guard kept defensively in case a
226
- // future caller wires it differently.
227
- /* c8 ignore next */
228
- if (next) {
229
- state = next;
230
- notify(next);
231
- }
258
+ state = next;
259
+ notify(next);
232
260
  return next;
233
261
  };
262
+ /**
263
+ * Pre-fetch missing blocks between `prev.ring`'s tip and `newBlock`
264
+ * so the reducer's ring stays dense across brief upstream pauses.
265
+ *
266
+ * Bounded by `ringWindowBlocks` — gaps larger than the window
267
+ * trigger a ring restart anyway, so spending RPC calls to bridge
268
+ * them is wasted. Each missing block is fetched by number via
269
+ * `source.getBlock`. Failures are silently dropped: a partial bridge
270
+ * still leaves the new block as the new tip, and the reducer's pure
271
+ * helper handles incomplete ancestry by restarting if necessary.
272
+ *
273
+ * Reorgs (parentHash mismatch with `prev.tip.hash`) are NOT
274
+ * backfilled here — that would require fetching by hash, which
275
+ * `chain-source` doesn't expose. The reducer's trim handles them
276
+ * correctly; the new canonical branch refills via natural forward
277
+ * polling.
278
+ */
279
+ const bridgeGap = async (newBlock) => {
280
+ if (state === null || state.ring.length === 0)
281
+ return [];
282
+ const tip = state.ring[state.ring.length - 1];
283
+ const newNumber = BigInt(newBlock.number);
284
+ const gap = newNumber - tip.number;
285
+ if (gap <= 1n)
286
+ return [];
287
+ if (ringWindowBlocks > 0n && gap > ringWindowBlocks)
288
+ return [];
289
+ const missing = [];
290
+ for (let n = tip.number + 1n; n < newNumber; n += 1n) {
291
+ const fetched = await source.getBlock(n);
292
+ if (!fetched)
293
+ break;
294
+ missing.push(fetched);
295
+ }
296
+ return missing;
297
+ };
234
298
  // Block-event handler. Fires once per de-duped block emit from the
235
299
  // source. Fetches feeHistory on demand (so a static head doesn't
236
- // re-fetch it), then reduces with the most recent mempool snapshot.
300
+ // re-fetch it), bridges any clean gap from the prev tip, then
301
+ // reduces with the most recent mempool snapshot.
237
302
  const handleBlock = async (block) => {
238
- const feeHistory = fetchFeeHistoryEnabled
239
- ? await source.getFeeHistory(20, [10, 25, 50, 75, 90])
240
- : null;
241
- reduceAndPublish({ block, feeHistory, txPool: latestMempool });
303
+ const [feeHistory, historicalBlocks] = await Promise.all([
304
+ fetchFeeHistoryEnabled
305
+ ? source.getFeeHistory(20, [10, 25, 50, 75, 90])
306
+ : Promise.resolve(null),
307
+ bridgeGap(block),
308
+ ]);
309
+ reduceAndPublish({ block, feeHistory, txPool: latestMempool }, historicalBlocks);
242
310
  };
243
311
  // Mempool-event handler. Caches the latest snapshot for the next
244
312
  // block reduce + powers `getMempoolSnapshot()` when retention is on.
@@ -368,19 +436,20 @@ export const createGasOracle = (options) => {
368
436
  const block = await source.getBlock('latest');
369
437
  if (!block)
370
438
  return null;
371
- const [feeHistory, freshMempool] = await Promise.all([
439
+ const [feeHistory, freshMempool, historicalBlocks] = await Promise.all([
372
440
  fetchFeeHistoryEnabled
373
441
  ? source.getFeeHistory(20, [10, 25, 50, 75, 90])
374
442
  : Promise.resolve(null),
375
443
  fetchMempoolEnabled
376
444
  ? source.getMempoolSnapshot()
377
445
  : Promise.resolve(null),
446
+ bridgeGap(block),
378
447
  ]);
379
448
  latestMempool = freshMempool;
380
449
  if (retainMempool) {
381
450
  mempoolSnapshot = freshMempool;
382
451
  }
383
- return reduceAndPublish({ block, feeHistory, txPool: freshMempool });
452
+ return reduceAndPublish({ block, feeHistory, txPool: freshMempool }, historicalBlocks);
384
453
  },
385
454
  subscribe: (cb) => {
386
455
  subscribers.add(cb);
@@ -1 +1 @@
1
- {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,iBAAiB,GAIlB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,iBAAiB,EAAyB,MAAM,gBAAgB,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,aAAa,GACd,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAS9D,MAAM,wBAAwB,GAAG,MAAO,CAAA;AACxC,MAAM,YAAY,GAAG,CAAC,CAAA;AACtB,MAAM,GAAG,GAAG,oBAA0B,CAAA;AA+KtC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAOhC,EAAyB,EAAE;IAC1B,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAA;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAEvB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IAC3C,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE5C,+DAA+D;IAC/D,gEAAgE;IAChE,MAAM,cAAc,GAAa,UAAU;QACzC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACb,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;IAErE,mEAAmE;IACnE,oEAAoE;IACpE,oEAAoE;IACpE,iEAAiE;IACjE,0DAA0D;IAC1D,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,CAAA;IAC1B,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAA;IAEpC,gCAAgC;IAChC,IAAI,OAAO,GAAiB;QAC1B,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,EAAE;QACf,gBAAgB,EAAE,EAAE;QACpB,aAAa;KACd,CAAA;IACD,IAAI,cAAc,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAChD,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC9C,OAAO,GAAG;YACR,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;YACvC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YACrC,gBAAgB,EAAE,UAAU,CAAC,MAAM,CACjC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACjD,EAAE,CACH;YACD,aAAa;SACd,CAAA;IACH,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,EAAE,CAAA;IACrB,CAAC;IAED,4DAA4D;IAC5D,IAAI,IAAI,GAAqB,IAAI,CAAA;IACjC,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QACjD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,CAAA;QACtD,MAAM,WAAW,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAA;QACrD,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;QACrG,IAAI,GAAG;YACL,WAAW;YACX,aAAa;YACb,WAAW;YACX,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC;SAC/C,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAC/F,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,YAAY,CAAC;QAC5C,WAAW;QACX,cAAc;QACd,OAAO;QACP,YAAY;QACZ,IAAI,EAAE,SAAS;QACf,WAAW;QACX,iBAAiB,EAAE,KAAK,CAAC,IAAI,EAAE,iBAAiB;QAChD,wBAAwB,EAAE,KAAK,CAAC,IAAI,EAAE,wBAAwB;QAC9D,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;KACnD,CAAC,CAAA;IAEF,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW;QACX,SAAS;QACT,OAAO;QACP,YAAY;QACZ,cAAc;QACd,OAAO;QACP,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,cAAc;QACd,iBAAiB,EAAE,aAAa;QAChC,wBAAwB,EAAE,WAAW;KACtC,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAA+B,EAAa,EAAE;IAC5E,uEAAuE;IACvE,mEAAmE;IACnE,4BAA4B;IAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAA;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAA;IAC9C,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,uEAAuE;YACrE,qEAAqE;YACrE,6FAA6F,CAChG,CAAA;IACH,CAAC;IACD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,6DAA6D;YAC3D,qEAAqE;YACrE,wDAAwD,CAC3D,CAAA;IACH,CAAC;IACD,IACE,OAAO,CAAC,mBAAmB,KAAK,SAAS;QACzC,OAAO,CAAC,mBAAmB,KAAK,IAAI,EACpC,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAA;QACvC,+DAA+D;QAC/D,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,uCAAuC,GAAG,uCAAuC,GAAG,EAAE,CACvF,CAAA;QACH,CAAC;QACD,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,uCAAuC,GAAG,uCAAuC,GAAG,EAAE,CACvF,CAAA;QACH,CAAC;IACH,CAAC;IACD,IACE,OAAO,CAAC,qBAAqB,KAAK,SAAS;QAC3C,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,OAAO,CAAC,qBAAqB,GAAG,CAAC,CAAC,EACvF,CAAC;QACD,MAAM,IAAI,KAAK,CACb,yDAAyD,OAAO,CAAC,qBAAqB,EAAE,CACzF,CAAA;IACH,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAA;IACzE,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,KAAK,IAAI,CAAA;IAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,KAAK,CAAA;IACrD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAA;IAC1C,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,IAAI,CAAA;IACxD,MAAM,sBAAsB,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,KAAK,KAAK,CAAA;IACjE,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK,CAAA;IAE3D,oEAAoE;IACpE,oEAAoE;IACpE,6DAA6D;IAC7D,MAAM,UAAU,GAAG,CAAC,SAAS,CAAA;IAC7B,MAAM,MAAM,GACV,OAAO,CAAC,MAAM;QACd,iBAAiB,CAAC;YAChB,sEAAsE;YACtE,MAAM,EAAE,OAAO,CAAC,MAAsB;YACtC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC;YACtC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAA;IAEJ,IAAI,KAAK,GAA0B,IAAI,CAAA;IACvC,sEAAsE;IACtE,yCAAyC;IACzC,IAAI,eAAe,GAA6B,IAAI,CAAA;IACpD,mEAAmE;IACnE,wEAAwE;IACxE,IAAI,aAAa,GAA6B,IAAI,CAAA;IAClD,IAAI,WAAW,GAAwB,IAAI,CAAA;IAC3C,IAAI,YAAY,GAAwB,IAAI,CAAA;IAC5C,IAAI,UAAU,GAAyC,IAAI,CAAA;IAC3D,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,kBAAkB,GAAwB,IAAI,CAAA;IAClD,MAAM,WAAW,GAAG,IAAI,GAAG,EAA+B,CAAA;IAE1D,MAAM,MAAM,GAAG,CAAC,IAAoB,EAAQ,EAAE;QAC5C,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC;gBAAC,EAAE,CAAC,IAAI,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAA;IAED,oEAAoE;IACpE,qEAAqE;IACrE,mCAAmC;IACnC,MAAM,gBAAgB,GAAG,CAAC,MAAwB,EAAyB,EAAE;QAC3E,MAAM,IAAI,GAAG,gBAAgB,CAAC;YAC5B,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,KAAK;YACX,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;SACrD,CAAC,CAAA;QACF,8DAA8D;QAC9D,6DAA6D;QAC7D,8DAA8D;QAC9D,sCAAsC;QACtC,oBAAoB;QACpB,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,GAAG,IAAI,CAAA;YACZ,MAAM,CAAC,IAAI,CAAC,CAAA;QACd,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAED,mEAAmE;IACnE,iEAAiE;IACjE,oEAAoE;IACpE,MAAM,WAAW,GAAG,KAAK,EAAE,KAAkB,EAAiB,EAAE;QAC9D,MAAM,UAAU,GAAG,sBAAsB;YACvC,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACtD,CAAC,CAAC,IAAI,CAAA;QACR,gBAAgB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;IAChE,CAAC,CAAA;IAED,iEAAiE;IACjE,qEAAqE;IACrE,MAAM,aAAa,GAAG,CAAC,QAA2B,EAAQ,EAAE;QAC1D,aAAa,GAAG,QAAQ,CAAA;QACxB,IAAI,aAAa,EAAE,CAAC;YAClB,eAAe,GAAG,QAAQ,CAAA;QAC5B,CAAC;IACH,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,GAAS,EAAE;QAChC,IAAI,WAAW,KAAK,IAAI;YAAE,OAAM;QAChC,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE;YACzC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;QACF,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;QACrD,gEAAgE;QAChE,4DAA4D;QAC5D,iEAAiE;QACjE,kEAAkE;QAClE,mBAAmB;QACnB,IAAI,UAAU;YAAE,MAAM,CAAC,KAAK,EAAE,CAAA;QAC9B,+DAA+D;QAC/D,+DAA+D;QAC/D,yDAAyD;QACzD,0DAA0D;QAC1D,6DAA6D;QAC7D,0DAA0D;QAC1D,0DAA0D;QAC1D,4DAA4D;QAC5D,gEAAgE;IAClE,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,GAAS,EAAE;QAClC,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,WAAW,EAAE,CAAA;YACb,WAAW,GAAG,IAAI,CAAA;QACpB,CAAC;QACD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,YAAY,EAAE,CAAA;YACd,YAAY,GAAG,IAAI,CAAA;QACrB,CAAC;QACD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,YAAY,CAAC,UAAU,CAAC,CAAA;YACxB,UAAU,GAAG,IAAI,CAAA;QACnB,CAAC;QACD,gEAAgE;QAChE,iDAAiD;QACjD,IAAI,UAAU;YAAE,MAAM,CAAC,IAAI,EAAE,CAAA;IAC/B,CAAC,CAAA;IAED,MAAM,kBAAkB,GAAG,GAAS,EAAE;QACpC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YACpB,gBAAgB,EAAE,CAAA;YAClB,OAAM;QACR,CAAC;QACD,IAAI,UAAU,KAAK,IAAI;YAAE,OAAM;QAC/B,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,4DAA4D;YAC5D,yBAAyB;YACzB,gBAAgB,EAAE,CAAA;QACpB,CAAC,EAAE,UAAU,CAAC,CAAA;IAChB,CAAC,CAAA;IASD,MAAM,WAAW,GACf,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,IAAI,UAAU;QAC3D,CAAC,CAAE,UAA2C,CAAC,QAAQ;QACvD,CAAC,CAAC,SAAS,CAAA;IAEf,MAAM,uBAAuB,GAAG,GAAS,EAAE;QACzC,IAAI,CAAC,eAAe,IAAI,CAAC,WAAW;YAAE,OAAM;QAC5C,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;gBACvB,gBAAgB,EAAE,CAAA;gBAClB,OAAM;YACR,CAAC;YACD,4DAA4D;YAC5D,kDAAkD;YAClD,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC3C,cAAc,EAAE,CAAA;YAClB,CAAC;QACH,CAAC,CAAA;QACD,WAAW,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;QAC1D,kBAAkB,GAAG,QAAQ,CAAA;IAC/B,CAAC,CAAA;IAED,MAAM,0BAA0B,GAAG,GAAS,EAAE;QAC5C,IAAI,kBAAkB,IAAI,WAAW,EAAE,CAAC;YACtC,WAAW,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;QACzE,CAAC;QACD,kBAAkB,GAAG,IAAI,CAAA;IAC3B,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,GAAY,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAE5D,OAAO;QACL,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,OAAO;gBAAE,OAAM;YACnB,OAAO,GAAG,IAAI,CAAA;YACd,uBAAuB,EAAE,CAAA;YACzB,gEAAgE;YAChE,8DAA8D;YAC9D,yDAAyD;YACzD,4DAA4D;YAC5D,wCAAwC;YACxC,IAAI,eAAe,IAAI,QAAQ,EAAE;gBAAE,OAAM;YACzC,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC3C,cAAc,EAAE,CAAA;YAClB,CAAC;QACH,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,+DAA+D;YAC/D,2DAA2D;YAC3D,4CAA4C;YAC5C,gBAAgB,EAAE,CAAA;YAClB,0BAA0B,EAAE,CAAA;YAC5B,KAAK,GAAG,IAAI,CAAA;YACZ,eAAe,GAAG,IAAI,CAAA;YACtB,aAAa,GAAG,IAAI,CAAA;YACpB,OAAO,GAAG,KAAK,CAAA;QACjB,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;QACrB,kBAAkB,EAAE,GAAG,EAAE,CAAC,eAAe;QACzC,mEAAmE;QACnE,gEAAgE;QAChE,gEAAgE;QAChE,oEAAoE;QACpE,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAC7C,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAA;YACvB,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACnD,sBAAsB;oBACpB,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAChD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;gBACzB,mBAAmB;oBACjB,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE;oBAC7B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;aAC1B,CAAC,CAAA;YACF,aAAa,GAAG,YAAY,CAAA;YAC5B,IAAI,aAAa,EAAE,CAAC;gBAClB,eAAe,GAAG,YAAY,CAAA;YAChC,CAAC;YACD,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;QACtE,CAAC;QACD,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;YAChB,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACnB,iEAAiE;YACjE,mBAAmB;YACnB,IAAI,OAAO,IAAI,aAAa,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACpC,cAAc,EAAE,CAAA;gBAClB,CAAC;YACH,CAAC;YACD,OAAO,GAAG,EAAE;gBACV,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACtB,wDAAwD;gBACxD,wBAAwB;gBACxB,IAAI,OAAO,IAAI,aAAa,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACvD,kBAAkB,EAAE,CAAA;gBACtB,CAAC;YACH,CAAC,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,OAenC,EAAkC,EAAE;IACnC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE;QACrD,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAA;IACF,OAAO,gBAAgB,CAAC;QACtB,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,IAAI;QACV,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;KACrD,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
package/dist/ring.d.ts ADDED
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Pure ring-buffer maintenance for the gas oracle's block-history window.
3
+ *
4
+ * The ring holds the most recent N `BlockSample`s (oldest → newest).
5
+ * Tier computation samples `state.ring[*].tips` so the percentile
6
+ * distribution reflects multi-block inclusion rather than a single
7
+ * block's accident. The ring also gives tx-tracker its reorg-walk
8
+ * substrate (see `docs/tx-tracker-spec.md` §12.1) when the consumer
9
+ * shares one source between both packages.
10
+ *
11
+ * **Stateful surface, pure module.** The reducer (`oracle.ts`'s
12
+ * `reducePollInputs`) is the only caller that builds the ring across
13
+ * cycles; this module just classifies one transition at a time and
14
+ * returns a new ring shape. No I/O, no closures over time, no mutation
15
+ * of the input ring.
16
+ *
17
+ * **Lifecycle the ring covers:**
18
+ *
19
+ * - **append** — new block continues the chain
20
+ * (`newBlock.parentHash === ring.tip.hash`). Push to tail; trim
21
+ * head if length would exceed `maxWindow`.
22
+ * - **duplicate** — new block already present at the same height with
23
+ * the same hash. No-op; ring returned unchanged.
24
+ * - **reorg** — new block conflicts with a block already in the ring,
25
+ * either by replacing an existing height (same number, different
26
+ * hash) or by extending from a height deeper than the current tip
27
+ * (parentHash matches a non-tip hash). Trim everything from the
28
+ * divergence point forward, append the new block, and emit a
29
+ * `ReorgEvent` describing the dropped tail.
30
+ * - **restart** — no relationship with the prev ring (gap larger
31
+ * than what backfill caught, or completely unrelated chain). Drop
32
+ * the prev ring and return `[newBlock]`.
33
+ *
34
+ * The I/O-driven `bridgeGap` and `clearAndBackfill` behaviors live in
35
+ * `oracle.ts`'s `handleBlock` — they pre-fetch missing blocks via the
36
+ * `ChainSource` and feed them into this module as `historicalBlocks`
37
+ * before the current block. This module never fetches anything.
38
+ */
39
+ import type { BlockSample } from './types.js';
40
+ /**
41
+ * Description of a tail-trim caused by reorg detection. Consumers
42
+ * surface this on `GasOracleState.lastReorg` so observers know when
43
+ * the oracle dropped historical samples (and at what depth) without
44
+ * subscribing to a separate reorg channel.
45
+ */
46
+ export interface ReorgEvent {
47
+ /** Block number at which divergence was detected (= `newBlock.number`). */
48
+ blockNumber: bigint;
49
+ /** Number of tail blocks trimmed from the previous ring. */
50
+ depth: bigint;
51
+ /** Hash of the new canonical tip after the trim + append. */
52
+ newTipHash: string;
53
+ /**
54
+ * Hashes of the dropped tail blocks, ordered oldest → newest. Empty
55
+ * tuple is impossible — `depth >= 1` for every reorg event.
56
+ */
57
+ droppedHashes: readonly string[];
58
+ }
59
+ /**
60
+ * Result of classifying + applying one ring transition. Pure data.
61
+ *
62
+ * - `ring` — the new ring (always non-empty).
63
+ * - `reorg` — populated iff a tail-trim happened. `null` for clean
64
+ * appends, restarts, and duplicates.
65
+ * - `duplicate` — `true` when the new block was already in the ring at
66
+ * its height with the same hash. The reducer may short-circuit
67
+ * subscriber notification on this signal.
68
+ */
69
+ export interface RingMutation {
70
+ ring: BlockSample[];
71
+ reorg: ReorgEvent | null;
72
+ duplicate: boolean;
73
+ }
74
+ /**
75
+ * Decide what `prevRing` becomes after observing `newBlock`. Pure: the
76
+ * input ring is never mutated.
77
+ *
78
+ * `maxWindow` caps the ring length — the head (oldest entry) is dropped
79
+ * to make room when an append would exceed it. Callers pass the
80
+ * configured `ringWindowBlocks` (default 20n).
81
+ *
82
+ * Implementation walks the prev ring once from newest → oldest, looking
83
+ * for the first block whose number ≤ `newBlock.number`:
84
+ *
85
+ * 1. If no such block exists (prev ring is empty, or every entry is
86
+ * newer than `newBlock`): restart with `[newBlock]`.
87
+ * 2. If the matched block has the same number and same hash as
88
+ * `newBlock`: duplicate. Return `prevRing` unchanged.
89
+ * 3. If the matched block has the same number but a different hash:
90
+ * reorg at this height. Trim from the matched index forward,
91
+ * append `newBlock`.
92
+ * 4. If the matched block has a smaller number AND its hash matches
93
+ * `newBlock.parentHash`: append after this block (trimming any
94
+ * blocks tail-ward of the matched block — those are now-stale
95
+ * branches if the matched block isn't the tip).
96
+ * 5. Otherwise: gap (parent isn't anywhere in the ring) → restart
97
+ * with `[newBlock]`. The I/O-driven backfill in `oracle.ts` is
98
+ * expected to have filled small gaps before reaching here, so
99
+ * arriving in case 5 means the gap exceeded the window or the
100
+ * backfill was disabled.
101
+ */
102
+ export declare const incorporateBlock: (prevRing: readonly BlockSample[], newBlock: BlockSample, maxWindow: bigint) => RingMutation;
103
+ //# sourceMappingURL=ring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ring.d.ts","sourceRoot":"","sources":["../src/ring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAA;IACnB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAA;IACb,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,aAAa,EAAE,SAAS,MAAM,EAAE,CAAA;CACjC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,EAAE,CAAA;IACnB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,SAAS,WAAW,EAAE,EAChC,UAAU,WAAW,EACrB,WAAW,MAAM,KAChB,YAkFF,CAAA"}
package/dist/ring.js ADDED
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Pure ring-buffer maintenance for the gas oracle's block-history window.
3
+ *
4
+ * The ring holds the most recent N `BlockSample`s (oldest → newest).
5
+ * Tier computation samples `state.ring[*].tips` so the percentile
6
+ * distribution reflects multi-block inclusion rather than a single
7
+ * block's accident. The ring also gives tx-tracker its reorg-walk
8
+ * substrate (see `docs/tx-tracker-spec.md` §12.1) when the consumer
9
+ * shares one source between both packages.
10
+ *
11
+ * **Stateful surface, pure module.** The reducer (`oracle.ts`'s
12
+ * `reducePollInputs`) is the only caller that builds the ring across
13
+ * cycles; this module just classifies one transition at a time and
14
+ * returns a new ring shape. No I/O, no closures over time, no mutation
15
+ * of the input ring.
16
+ *
17
+ * **Lifecycle the ring covers:**
18
+ *
19
+ * - **append** — new block continues the chain
20
+ * (`newBlock.parentHash === ring.tip.hash`). Push to tail; trim
21
+ * head if length would exceed `maxWindow`.
22
+ * - **duplicate** — new block already present at the same height with
23
+ * the same hash. No-op; ring returned unchanged.
24
+ * - **reorg** — new block conflicts with a block already in the ring,
25
+ * either by replacing an existing height (same number, different
26
+ * hash) or by extending from a height deeper than the current tip
27
+ * (parentHash matches a non-tip hash). Trim everything from the
28
+ * divergence point forward, append the new block, and emit a
29
+ * `ReorgEvent` describing the dropped tail.
30
+ * - **restart** — no relationship with the prev ring (gap larger
31
+ * than what backfill caught, or completely unrelated chain). Drop
32
+ * the prev ring and return `[newBlock]`.
33
+ *
34
+ * The I/O-driven `bridgeGap` and `clearAndBackfill` behaviors live in
35
+ * `oracle.ts`'s `handleBlock` — they pre-fetch missing blocks via the
36
+ * `ChainSource` and feed them into this module as `historicalBlocks`
37
+ * before the current block. This module never fetches anything.
38
+ */
39
+ /**
40
+ * Decide what `prevRing` becomes after observing `newBlock`. Pure: the
41
+ * input ring is never mutated.
42
+ *
43
+ * `maxWindow` caps the ring length — the head (oldest entry) is dropped
44
+ * to make room when an append would exceed it. Callers pass the
45
+ * configured `ringWindowBlocks` (default 20n).
46
+ *
47
+ * Implementation walks the prev ring once from newest → oldest, looking
48
+ * for the first block whose number ≤ `newBlock.number`:
49
+ *
50
+ * 1. If no such block exists (prev ring is empty, or every entry is
51
+ * newer than `newBlock`): restart with `[newBlock]`.
52
+ * 2. If the matched block has the same number and same hash as
53
+ * `newBlock`: duplicate. Return `prevRing` unchanged.
54
+ * 3. If the matched block has the same number but a different hash:
55
+ * reorg at this height. Trim from the matched index forward,
56
+ * append `newBlock`.
57
+ * 4. If the matched block has a smaller number AND its hash matches
58
+ * `newBlock.parentHash`: append after this block (trimming any
59
+ * blocks tail-ward of the matched block — those are now-stale
60
+ * branches if the matched block isn't the tip).
61
+ * 5. Otherwise: gap (parent isn't anywhere in the ring) → restart
62
+ * with `[newBlock]`. The I/O-driven backfill in `oracle.ts` is
63
+ * expected to have filled small gaps before reaching here, so
64
+ * arriving in case 5 means the gap exceeded the window or the
65
+ * backfill was disabled.
66
+ */
67
+ export const incorporateBlock = (prevRing, newBlock, maxWindow) => {
68
+ if (prevRing.length === 0) {
69
+ return { ring: [newBlock], reorg: null, duplicate: false };
70
+ }
71
+ // Scan from newest → oldest for first entry with number ≤ newBlock.number.
72
+ let matchIndex = -1;
73
+ for (let i = prevRing.length - 1; i >= 0; i -= 1) {
74
+ if (prevRing[i].number <= newBlock.number) {
75
+ matchIndex = i;
76
+ break;
77
+ }
78
+ }
79
+ if (matchIndex === -1) {
80
+ // Every entry is newer than newBlock — newBlock is older than the
81
+ // entire window. Treat as restart so we don't propagate a strictly
82
+ // older reading; this case shouldn't happen in normal operation
83
+ // (the source emits monotonically) but the reducer asks for a
84
+ // defensible answer either way.
85
+ return { ring: [newBlock], reorg: null, duplicate: false };
86
+ }
87
+ const matched = prevRing[matchIndex];
88
+ if (matched.number === newBlock.number) {
89
+ if (matched.hash === newBlock.hash) {
90
+ return { ring: prevRing.slice(), reorg: null, duplicate: true };
91
+ }
92
+ // Same height, different hash → reorg replacing matched (and any
93
+ // blocks tail-ward of it, though by construction matchIndex is the
94
+ // newest index ≤ newBlock.number, so there are no tail-ward
95
+ // entries with smaller-or-equal numbers; entries above matchIndex
96
+ // have strictly larger numbers and are also wrong).
97
+ const droppedHashes = prevRing.slice(matchIndex).map((b) => b.hash);
98
+ const trimmed = prevRing.slice(0, matchIndex);
99
+ return {
100
+ ring: capTail([...trimmed, newBlock], maxWindow),
101
+ reorg: {
102
+ blockNumber: newBlock.number,
103
+ depth: BigInt(droppedHashes.length),
104
+ newTipHash: newBlock.hash,
105
+ droppedHashes,
106
+ },
107
+ duplicate: false,
108
+ };
109
+ }
110
+ // matched.number < newBlock.number — newBlock extends the chain
111
+ // from somewhere in the ring (or arrived with a gap).
112
+ if (matched.hash !== newBlock.parentHash) {
113
+ // Parent isn't where we thought it was. Either a gap (and the
114
+ // canonical chain at newBlock.parentHash isn't in our ring), or a
115
+ // deeper reorg the I/O layer didn't catch. Conservative: restart.
116
+ return { ring: [newBlock], reorg: null, duplicate: false };
117
+ }
118
+ // Append after matched. If matched isn't the tip, the entries above
119
+ // matchIndex were on a now-stale branch — drop them and emit a reorg
120
+ // for the dropped tail. (matched.parentHash by construction was OK
121
+ // earlier, but children we recorded above it have been superseded.)
122
+ if (matchIndex < prevRing.length - 1) {
123
+ const droppedHashes = prevRing.slice(matchIndex + 1).map((b) => b.hash);
124
+ const kept = prevRing.slice(0, matchIndex + 1);
125
+ return {
126
+ ring: capTail([...kept, newBlock], maxWindow),
127
+ reorg: {
128
+ blockNumber: newBlock.number,
129
+ depth: BigInt(droppedHashes.length),
130
+ newTipHash: newBlock.hash,
131
+ droppedHashes,
132
+ },
133
+ duplicate: false,
134
+ };
135
+ }
136
+ // Clean append at the tip.
137
+ return {
138
+ ring: capTail([...prevRing, newBlock], maxWindow),
139
+ reorg: null,
140
+ duplicate: false,
141
+ };
142
+ };
143
+ /**
144
+ * Trim the head (oldest entries) until length ≤ maxWindow. Internal
145
+ * helper; exported only for testing if needed (currently colocated
146
+ * tests use `incorporateBlock` end-to-end).
147
+ *
148
+ * `maxWindow` ≤ 0n is treated as "no cap" so callers can disable the
149
+ * window by passing 0n; that's an unusual configuration but keeps the
150
+ * pure helper from throwing on bad input.
151
+ */
152
+ const capTail = (ring, maxWindow) => {
153
+ if (maxWindow <= 0n)
154
+ return ring;
155
+ const max = Number(maxWindow);
156
+ if (ring.length <= max)
157
+ return ring;
158
+ return ring.slice(ring.length - max);
159
+ };
160
+ //# sourceMappingURL=ring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ring.js","sourceRoot":"","sources":["../src/ring.ts"],"names":[],"mappings":"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"}
package/dist/samples.d.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * `transport.ts` (which stays I/O) so tests can fixture the RPC
9
9
  * shapes without touching either neighbor.
10
10
  */
11
- import type { BlockResult, TxPoolContent } from './transport.js';
11
+ import type { BlockResult, TxPoolContent } from '@valve-tech/chain-source';
12
12
  import type { BlockSample, TipSample } from './types.js';
13
13
  /**
14
14
  * Convert a full block (from `eth_getBlockByNumber(_, true)`) into a
@@ -1 +1 @@
1
- {"version":3,"file":"samples.d.ts","sourceRoot":"","sources":["../src/samples.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAS,SAAS,EAAE,MAAM,YAAY,CAAA;AA8B/D;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,WAAW,KAAG,WAsBlD,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,EACtC,gBAAgB,MAAM,KACrB,SAAS,EAkBX,CAAA"}
1
+ {"version":3,"file":"samples.d.ts","sourceRoot":"","sources":["../src/samples.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,WAAW,EAEX,aAAa,EACd,MAAM,0BAA0B,CAAA;AAGjC,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA8BxD;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,WAAW,KAAG,WAsBlD,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,EACtC,gBAAgB,MAAM,KACrB,SAAS,EAkBX,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"samples.js","sourceRoot":"","sources":["../src/samples.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"samples.js","sourceRoot":"","sources":["../src/samples.ts"],"names":[],"mappings":"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"}
@@ -21,36 +21,17 @@
21
21
  * (excessBlobGas, blobGasUsed) that viem currently doesn't surface in
22
22
  * its decoded Block type uniformly across versions.
23
23
  */
24
+ import type { BlockResult, FeeHistoryResult, PollOptions, TxPoolContent } from '@valve-tech/chain-source';
24
25
  import type { PublicClient } from 'viem';
25
- import type { PollOptions, RawTx } from './types.js';
26
- /** Result shape returned by `eth_feeHistory`. */
27
- export interface FeeHistoryResult {
28
- baseFeePerGas: string[];
29
- reward?: string[][];
30
- gasUsedRatio: number[];
31
- oldestBlock: string;
32
- }
33
26
  /**
34
- * Result shape returned by `eth_getBlockByNumber` with `fullTransactions=true`.
35
- * Hex-encoded numbers are kept as strings the oracle decodes them at the
36
- * point of use to keep transport boundary-typed and the math layer pure.
27
+ * Combined upstream payload one oracle poll cycle consumes. Each field is
28
+ * `null` when its underlying RPC failed or was disabled by `PollOptions`;
29
+ * `reducePollInputs` handles every shape independently.
30
+ *
31
+ * The wire-shape members (`FeeHistoryResult`, `BlockResult`, `TxPoolContent`)
32
+ * are owned by `@valve-tech/chain-source`; this composite shape stays here
33
+ * because it's gas-oracle's call shape, not chain-source's.
37
34
  */
38
- export interface BlockResult {
39
- number: string;
40
- hash?: string;
41
- parentHash?: string;
42
- timestamp: string;
43
- baseFeePerGas: string;
44
- gasLimit: string;
45
- gasUsed: string;
46
- transactions: RawTx[];
47
- excessBlobGas?: string;
48
- blobGasUsed?: string;
49
- }
50
- export interface TxPoolContent {
51
- pending: Record<string, Record<string, RawTx>>;
52
- queued: Record<string, Record<string, RawTx>>;
53
- }
54
35
  export interface OraclePollInputs {
55
36
  feeHistory: FeeHistoryResult | null;
56
37
  block: BlockResult | null;
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEpD,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACnB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,KAAK,EAAE,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;IAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACnC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;CAC7B;AA2BD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,YAAY,EACpB,UAAU,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,KAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAQvB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,YAAY,EACpB,UAAS;IACP,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,IAAI,CAAC,EAAE,WAAW,CAAA;CACd,KACL,OAAO,CAAC,gBAAgB,CAiC1B,CAAA"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,aAAa,EACd,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAExC;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACnC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;CAC7B;AA2BD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,YAAY,EACpB,UAAU,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,KAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAQvB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,YAAY,EACpB,UAAS;IACP,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,IAAI,CAAC,EAAE,WAAW,CAAA;CACd,KACL,OAAO,CAAC,gBAAgB,CAiC1B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AA2CH;;;;;;;GAOG;AACH,MAAM,WAAW,GAAG,KAAK,EACvB,MAAoB,EACpB,MAAc,EACd,MAAiB,EACjB,OAAgC,EACb,EAAE;IACrB,IAAI,CAAC;QACH,oEAAoE;QACpE,qEAAqE;QACrE,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAW,CAAC,CAAM,CAAA;QACvE,OAAO,MAAM,IAAI,IAAI,CAAA;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,MAAoB,EACpB,OAAgC,EACR,EAAE;IAC1B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAS,MAAM,EAAE,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;IAC9E,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC9B,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAAoB,EACpB,UAGI,EAAE,EACqB,EAAE;IAC7B,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,EAAE,CAC/B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,OAAO,CAAC,OAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAE/E,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,KAAK,KAAK,CAAA;IAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK,CAAA;IAEpD,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpD,eAAe;YACb,CAAC,CAAC,WAAW,CACT,MAAM,EACN,gBAAgB,EAChB,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EACxC,KAAK,CAAC,gBAAgB,CAAC,CACxB;YACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QACzB,WAAW,CACT,MAAM,EACN,sBAAsB,EACtB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAChB,KAAK,CAAC,sBAAsB,CAAC,CAC9B;QACD,YAAY;YACV,CAAC,CAAC,WAAW,CACT,MAAM,EACN,gBAAgB,EAChB,EAAE,EACF,KAAK,CAAC,gBAAgB,CAAC,CACxB;YACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;KAC1B,CAAC,CAAA;IAEF,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC,CAAA"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAyBH;;;;;;;GAOG;AACH,MAAM,WAAW,GAAG,KAAK,EACvB,MAAoB,EACpB,MAAc,EACd,MAAiB,EACjB,OAAgC,EACb,EAAE;IACrB,IAAI,CAAC;QACH,oEAAoE;QACpE,qEAAqE;QACrE,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAW,CAAC,CAAM,CAAA;QACvE,OAAO,MAAM,IAAI,IAAI,CAAA;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,MAAoB,EACpB,OAAgC,EACR,EAAE;IAC1B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAS,MAAM,EAAE,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;IAC9E,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC9B,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAAoB,EACpB,UAGI,EAAE,EACqB,EAAE;IAC7B,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,EAAE,CAC/B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,OAAO,CAAC,OAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAE/E,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,KAAK,KAAK,CAAA;IAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK,CAAA;IAEpD,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpD,eAAe;YACb,CAAC,CAAC,WAAW,CACT,MAAM,EACN,gBAAgB,EAChB,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EACxC,KAAK,CAAC,gBAAgB,CAAC,CACxB;YACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QACzB,WAAW,CACT,MAAM,EACN,sBAAsB,EACtB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAChB,KAAK,CAAC,sBAAsB,CAAC,CAC9B;QACD,YAAY;YACV,CAAC,CAAC,WAAW,CACT,MAAM,EACN,gBAAgB,EAChB,EAAE,EACF,KAAK,CAAC,gBAAgB,CAAC,CACxB;YACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;KAC1B,CAAC,CAAA;IAEF,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC,CAAA"}
package/dist/types.d.ts CHANGED
@@ -6,28 +6,14 @@
6
6
  * since JSON has no native bigint and `JSON.stringify` will throw on raw
7
7
  * bigint values. The caller owns that encoding — this package keeps the
8
8
  * canonical numeric form internally.
9
- */
10
- /**
11
- * Minimal tx shape extracted from `eth_getBlockByNumber(latest, true)` or
12
- * `txpool_content`. Fee fields drive tip math; `hash`, `from`, `nonce`
13
- * support mempool lookups (`findByHash` / `findByAddressNonce`). Other
14
- * tx fields (to/value/data/etc.) are ignored.
15
9
  *
16
- * `hash`, `from`, `nonce` are nominally optional because `eth_get-
17
- * BlockByNumber(_, true)` blocks always carry them but we want callers
18
- * to be able to construct `RawTx` from minimal fixtures in tests.
19
- * geth/reth `txpool_content` includes all three.
10
+ * Wire-shape types describing raw `eth_*` responses (`RawTx`,
11
+ * `BlockResult`, `FeeHistoryResult`, `TxPoolContent`, `NormalizedMempool`)
12
+ * and the poll-cycle toggle (`PollOptions`) live in
13
+ * `@valve-tech/chain-source`. This package re-exports them from `index.ts`
14
+ * for downstream API stability.
20
15
  */
21
- export interface RawTx {
22
- maxPriorityFeePerGas?: string;
23
- maxFeePerGas?: string;
24
- gasPrice?: string;
25
- gas?: string;
26
- type?: string;
27
- hash?: string;
28
- from?: string;
29
- nonce?: string;
30
- }
16
+ import type { ReorgEvent } from './ring.js';
31
17
  export interface TipPercentiles {
32
18
  p10: bigint;
33
19
  p25: bigint;
@@ -140,25 +126,6 @@ export declare const TxType: {
140
126
  readonly setCodeAuthorization: 4;
141
127
  };
142
128
  export type TxType = (typeof TxType)[keyof typeof TxType];
143
- /**
144
- * Producer-side toggles: which RPCs the oracle calls upstream each cycle.
145
- *
146
- * Fields default to true. `eth_getBlockByNumber` is intentionally not
147
- * toggleable — without a block we can't compute anything.
148
- *
149
- * - `feeHistory: false` — drops `eth_feeHistory`. Trend detection falls
150
- * back to a single-element history (always
151
- * reports `'stable'`); percentile fallback
152
- * becomes block-only.
153
- * - `mempool: false` — drops `txpool_content`. Tiers reflect block
154
- * inclusion only, not pending pressure. Useful
155
- * when the upstream provider gates the
156
- * method (many public RPCs return 405).
157
- */
158
- export interface PollOptions {
159
- feeHistory?: boolean;
160
- mempool?: boolean;
161
- }
162
129
  /**
163
130
  * One block's worth of state retained in the rolling ring. Per-tx tips
164
131
  * + gas are kept so we can re-percentile on each poll without re-fetching
@@ -191,12 +158,31 @@ export interface GasOracleState {
191
158
  blob: BlobStats | null;
192
159
  tiers: Record<TierName, TierRecommendation>;
193
160
  /**
194
- * Rolling ring of recent blocks (oldest → newest). Producer-only.
195
- * Currently always single-element; the 20-block lifecycle (append /
196
- * bridgeGap / clearAndBackfill) is deferred to a follow-up per spec
197
- * §7-§9.
161
+ * Rolling ring of recent blocks (oldest → newest). Capacity is
162
+ * controlled by `createGasOracle`'s `ringWindowBlocks` option
163
+ * (default 20n). Producer-local: the relay's `toPublishable` strips
164
+ * it before publishing snapshots over the wire, since downstream
165
+ * consumers receiving a serialized snapshot don't need the per-block
166
+ * sample buffer.
167
+ *
168
+ * Maintained by the pure helper in `ring.ts`. Each new block triggers
169
+ * one of: clean append (with head-trim if the cap would be exceeded),
170
+ * duplicate (no-op), reorg (trim the diverged tail then append), or
171
+ * restart (drop everything and start fresh from this block — fires
172
+ * when the gap exceeds the window or the parent chain isn't
173
+ * recoverable). The poll loop pre-fetches missing blocks via
174
+ * `source.getBlock` to bridge clean gaps before reaching the reducer.
198
175
  */
199
176
  ring: BlockSample[];
177
+ /**
178
+ * Most recent reorg observed by the ring lifecycle, or `null` if no
179
+ * reorg has been seen since this oracle instance started. Persists
180
+ * across subsequent clean appends — consumers asking "did a reorg
181
+ * happen on THIS tick?" should compare `lastReorg.blockNumber`
182
+ * against `state.blockNumber`. Producer-local; safe to ship over
183
+ * the wire but not load-bearing.
184
+ */
185
+ lastReorg: ReorgEvent | null;
200
186
  /**
201
187
  * Live mempool samples used to compute this snapshot's tiers.
202
188
  * Producer-local — wire publishers should strip before serializing
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -6,6 +6,12 @@
6
6
  * since JSON has no native bigint and `JSON.stringify` will throw on raw
7
7
  * bigint values. The caller owns that encoding — this package keeps the
8
8
  * canonical numeric form internally.
9
+ *
10
+ * Wire-shape types describing raw `eth_*` responses (`RawTx`,
11
+ * `BlockResult`, `FeeHistoryResult`, `TxPoolContent`, `NormalizedMempool`)
12
+ * and the poll-cycle toggle (`PollOptions`) live in
13
+ * `@valve-tech/chain-source`. This package re-exports them from `index.ts`
14
+ * for downstream API stability.
9
15
  */
10
16
  export const Trend = {
11
17
  rising: 'rising',
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4CH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACR,CAAA;AAGV,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACV,CAAA;AAGV;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAwB;IAC9C,QAAQ,CAAC,IAAI;IACb,QAAQ,CAAC,QAAQ;IACjB,QAAQ,CAAC,IAAI;IACb,QAAQ,CAAC,OAAO;CACR,CAAA;AA2CV;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACV,CAAA;AAGV;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,oBAAoB,EAAE,CAAC;CACf,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwBH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACR,CAAA;AAGV,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACV,CAAA;AAGV;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAwB;IAC9C,QAAQ,CAAC,IAAI;IACb,QAAQ,CAAC,QAAQ;IACjB,QAAQ,CAAC,IAAI;IACb,QAAQ,CAAC,OAAO;CACR,CAAA;AA2CV;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACV,CAAA;AAGV;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,oBAAoB,EAAE,CAAC;CACf,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"viem-actions.d.ts","sourceRoot":"","sources":["../src/viem-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAExC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAGL,KAAK,UAAU,EAEf,KAAK,YAAY,EAClB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAmB,KAAK,sBAAsB,EAAkB,MAAM,aAAa,CAAA;AAE1F,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAa,MAAM,YAAY,CAAA;AAEzF,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC;IACrF;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAA;IAC1C,6EAA6E;IAC7E,UAAU,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC3D;;;;;OAKG;IACH,eAAe,EAAE,CAAC,EAAE,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IACjE;;;;;;OAMG;IACH,mBAAmB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAChF;;;;OAIG;IACH,aAAa,EAAE,MAAM,IAAI,CAAA;CAC1B;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS,uBAAuB,MAC9D,QAAQ,YAAY,KAAG,gBAiGvB,CAAA"}
1
+ {"version":3,"file":"viem-actions.d.ts","sourceRoot":"","sources":["../src/viem-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAExC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,YAAY,EAClB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAmB,KAAK,sBAAsB,EAAkB,MAAM,aAAa,CAAA;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAa,MAAM,YAAY,CAAA;AAEzF,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC;IACrF;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAA;IAC1C,6EAA6E;IAC7E,UAAU,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC3D;;;;;OAKG;IACH,eAAe,EAAE,CAAC,EAAE,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IACjE;;;;;;OAMG;IACH,mBAAmB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAChF;;;;OAIG;IACH,aAAa,EAAE,MAAM,IAAI,CAAA;CAC1B;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS,uBAAuB,MAC9D,QAAQ,YAAY,KAAG,gBAiGvB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"viem-actions.js","sourceRoot":"","sources":["../src/viem-actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viem-actions.js","sourceRoot":"","sources":["../src/viem-actions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valve-tech/gas-oracle",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Multi-tier gas-fee oracle for EVM chains. Computes slow/standard/fast/instant tier recommendations from block-included tips, mempool pending tips, and base-fee trend, with a configurable downside-decay cap and a chain-aware EIP-1559 priority cutoff. viem-native — pass it a PublicClient and it does the rest. Ships viem-actions and viem-transport subpaths for drop-in client extension and transport-wrapping.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/valve-tech/evm-toolkit/tree/main/packages/gas-oracle#readme",
@@ -59,7 +59,7 @@
59
59
  "prepare": "yarn build"
60
60
  },
61
61
  "dependencies": {
62
- "@valve-tech/chain-source": "^0.10.0"
62
+ "@valve-tech/chain-source": "^0.11.0"
63
63
  },
64
64
  "peerDependencies": {
65
65
  "viem": "^2.0.0"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gas-oracle-integration
3
- description: Integrate `@valve-tech/gas-oracle` into an EVM dapp or backend. Use when the user wants gas-tier recommendations (`slow` / `standard` / `fast` / `instant`), needs to set `maxPriorityFeePerGas` and `maxFeePerGas` for a transaction, or asks "how do I price a transaction" against a viem `PublicClient`. Also use when seeing imports from `@valve-tech/gas-oracle` and the user asks for help configuring it per chain (Ethereum, Base, Arbitrum, OP, PulseChain), or asks about `priorityFeeDecayCap`, `priorityModel`, `tipForBlockPosition`, viem-actions, or viem-transport. Also fires when the user asks about composing the oracle with `@valve-tech/tx-tracker` over a shared `ChainSource` — but actual per-tx tracking work belongs in the tx-tracker skill, not here.
3
+ description: Integrate `@valve-tech/gas-oracle` into an EVM dapp or backend. Use when the user wants gas-tier recommendations (`slow` / `standard` / `fast` / `instant`), needs to set `maxPriorityFeePerGas` and `maxFeePerGas` for a transaction, asks "how do I price a transaction" against a viem `PublicClient`, or wants to bump a stuck tx (`recommendBumpTier` / `bumpForReplacement`). Also use when seeing imports from `@valve-tech/gas-oracle` and the user asks for help configuring it per chain (Ethereum, Base, Arbitrum, OP, PulseChain), or asks about `priorityFeeDecayCap`, `priorityModel`, `tipForBlockPosition`, `classifyTip`, `chainPresets`, viem-actions, or viem-transport. Also fires when the user asks about composing the oracle with `@valve-tech/tx-tracker` over a shared `ChainSource` — but actual per-tx tracking work belongs in the tx-tracker skill, not here. Skip when the user only wants per-tx state (delegate to tx-tracker-integration), only wants the raw block/mempool stream with no gas math (delegate to chain-source-integration), or is doing simple `eth_gasPrice` queries that don't need multi-tier reasoning (vanilla viem suffices).
4
4
  ---
5
5
 
6
6
  # Integrating `@valve-tech/gas-oracle`