@valve-tech/gas-oracle 0.2.5 → 0.3.1
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 +7 -0
- package/CHANGELOG.md +99 -0
- package/README.md +103 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/oracle.d.ts +93 -0
- package/dist/oracle.d.ts.map +1 -1
- package/dist/oracle.js +157 -13
- package/dist/oracle.js.map +1 -1
- package/dist/transport.d.ts +8 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +18 -0
- package/dist/transport.js.map +1 -1
- package/dist/viem-actions.d.ts.map +1 -1
- package/dist/viem-actions.js +11 -1
- package/dist/viem-actions.js.map +1 -1
- package/dist/viem-transport.d.ts.map +1 -1
- package/dist/viem-transport.js +9 -1
- package/dist/viem-transport.js.map +1 -1
- package/package.json +5 -15
package/AGENTS.md
CHANGED
|
@@ -170,6 +170,13 @@ doesn't silently depend on the package version's default.
|
|
|
170
170
|
`await oracle.pollOnce()` once after `start()` to force a synchronous
|
|
171
171
|
first poll.
|
|
172
172
|
|
|
173
|
+
**v0.2.6+**: with `pauseWhenIdle: true` (now the default), the loop
|
|
174
|
+
only fires when at least one subscriber is attached. Calling
|
|
175
|
+
`oracle.start()` without subscribing means `getState()` returns
|
|
176
|
+
`null` indefinitely. For ad-hoc reads, use the `sampleGasFees(...)`
|
|
177
|
+
one-shot helper or pass `pauseWhenIdle: false` to restore the
|
|
178
|
+
v0.2.5 always-poll-after-start behavior.
|
|
179
|
+
|
|
173
180
|
4. **Mempool snapshot is opt-in.** `keepMempoolSnapshot: false` (the
|
|
174
181
|
default) means `findByHash`/`findInMempool`/`tipForBlockPosition` queries
|
|
175
182
|
that take a `TxIdentifier` will throw. Set `true` if you need them.
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,105 @@ 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.3.1] — 2026-05-04
|
|
9
|
+
|
|
10
|
+
> **First fully-synchronized release in the `valve-tech/evm-toolkit`
|
|
11
|
+
> monorepo.** All three packages
|
|
12
|
+
> (`@valve-tech/chain-source`, `@valve-tech/gas-oracle`,
|
|
13
|
+
> `@valve-tech/tx-tracker`) now ship in lockstep. Future releases use
|
|
14
|
+
> a single `vX.Y.Z` tag on the repo.
|
|
15
|
+
|
|
16
|
+
### Notes
|
|
17
|
+
|
|
18
|
+
- v0.3.1 carries the same content as the planned v0.3.0 (idle-traffic
|
|
19
|
+
controls — see the v0.3.0 entry below for the full feature list).
|
|
20
|
+
- v0.3.0 was a partial-publish workflow run: this package's publish
|
|
21
|
+
step failed with an OIDC trusted-publisher mismatch (the npm
|
|
22
|
+
trusted-publisher record was still pinned to the pre-rename
|
|
23
|
+
`valve-tech/gas-oracle` repo and didn't match the renamed
|
|
24
|
+
`valve-tech/evm-toolkit`). The publisher record was fixed; v0.3.1
|
|
25
|
+
is the first version of this package on npm in the v0.3.x line.
|
|
26
|
+
|
|
27
|
+
## [0.3.0] — 2026-05-04 — *unpublished; superseded by 0.3.1*
|
|
28
|
+
|
|
29
|
+
> Tagged but never published to npm — the OIDC trusted-publisher
|
|
30
|
+
> mismatch above blocked this version's publish. Other packages in
|
|
31
|
+
> the toolkit had partial outcomes for v0.3.0; see their CHANGELOGs
|
|
32
|
+
> for details. v0.3.1 re-releases all three packages in lockstep
|
|
33
|
+
> with this same content.
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
- `pauseWhenIdle` option on `CreateGasOracleOptions` (default `true`).
|
|
37
|
+
The poll loop is now gated on having at least one active subscriber
|
|
38
|
+
— `start()` is still called explicitly, but the loop only fires
|
|
39
|
+
RPC calls when a subscriber is attached. The 0 → 1 subscriber
|
|
40
|
+
transition triggers an immediate cycle plus interval start; the
|
|
41
|
+
n → 0 transition pauses (subject to `staleAfter`). Set `false` to
|
|
42
|
+
restore the v0.2.5 always-poll-after-start behavior.
|
|
43
|
+
- `staleAfter` option (ms; default `0`) — keeps the loop alive for
|
|
44
|
+
the specified window after the last unsubscribe. Useful for
|
|
45
|
+
"snappy UI re-mount" where a component unmounts then re-mounts
|
|
46
|
+
briefly (route transitions). Cached state stays warm during the
|
|
47
|
+
window.
|
|
48
|
+
- `blockGatedPolling` option (default `true`). Each tick first fires
|
|
49
|
+
a cheap `eth_blockNumber` probe; if the head hasn't moved since
|
|
50
|
+
the previous tick, the rest of the cycle is skipped — no expensive
|
|
51
|
+
`eth_getBlockByNumber(_, true)` / `eth_feeHistory` /
|
|
52
|
+
`txpool_content`. The fee landscape can't change without a new
|
|
53
|
+
block, so polling faster than block time is wasted RPC. For
|
|
54
|
+
PulseChain (~10s) and Ethereum (12s) on a 10s interval this
|
|
55
|
+
collapses ~90% of ticks down to a single probe call. `pollOnce()`
|
|
56
|
+
always bypasses the gate.
|
|
57
|
+
- `pauseWhenHidden` option (default `false`, browser-only). When
|
|
58
|
+
enabled, subscribes to the browser's `visibilitychange` event and
|
|
59
|
+
pauses the poll loop while the tab is hidden. Resumes (and emits
|
|
60
|
+
a fresh sample) on `visibilityState === 'visible'`. Auto-no-ops
|
|
61
|
+
in Node / SSR / Web Worker contexts.
|
|
62
|
+
- `sampleGasFees(options)` — top-level one-shot helper that returns
|
|
63
|
+
a single fee snapshot without standing up a long-lived oracle.
|
|
64
|
+
Right for tx-submit flows that price one transaction and don't
|
|
65
|
+
need streaming updates. Composes the existing `fetchOracleInputs`
|
|
66
|
+
+ `reducePollInputs` split.
|
|
67
|
+
- `fetchHeadBlockNumber(client, onError?)` — exported helper for the
|
|
68
|
+
cheap `eth_blockNumber` probe that powers block-gated polling.
|
|
69
|
+
|
|
70
|
+
### Changed
|
|
71
|
+
- **Default behavior change**: `pauseWhenIdle: true` is the default.
|
|
72
|
+
Existing call sites that did `oracle.start()` followed by
|
|
73
|
+
`oracle.getState()` (without subscribing) now see `null` until
|
|
74
|
+
either (a) a subscriber attaches, OR (b) `pollOnce()` is called.
|
|
75
|
+
Migration paths:
|
|
76
|
+
- Subscribe to a no-op: `oracle.subscribe(() => {})` keeps the
|
|
77
|
+
loop alive and the cache warm for `getState()` reads.
|
|
78
|
+
- Set `pauseWhenIdle: false` to restore v0.2.5 behavior.
|
|
79
|
+
- Use `pollOnce()` for one-shot reads.
|
|
80
|
+
- For ad-hoc `client.getGasTiers()`-style use, see the new
|
|
81
|
+
`sampleGasFees` helper.
|
|
82
|
+
- The viem-actions extension (`gasOracleActions(...)`) and
|
|
83
|
+
viem-transport wrapper (`withGasOracle(...)`) both default
|
|
84
|
+
`pauseWhenIdle: false` for their internal oracle. Their access
|
|
85
|
+
pattern is pull-based (state read inside the request handler),
|
|
86
|
+
so subscriber-gated pause would always be miss. Callers can
|
|
87
|
+
override by passing `pauseWhenIdle` explicitly.
|
|
88
|
+
|
|
89
|
+
### Notes
|
|
90
|
+
- This release lands the most-requested fix in production usage:
|
|
91
|
+
idle traffic when nothing is reading the oracle. A multi-chain
|
|
92
|
+
dapp running two oracles on a static page used to fire 8–20
|
|
93
|
+
RPCs per chain every 10s; with `pauseWhenIdle: true` (default)
|
|
94
|
+
that drops to zero. With `blockGatedPolling: true` (default), the
|
|
95
|
+
steady-state RPC cost on chains with non-trivial block times
|
|
96
|
+
drops to ~1 call per tick (the cheap `eth_blockNumber` probe)
|
|
97
|
+
whenever the head hasn't moved.
|
|
98
|
+
- These primitives are the v0.2.x precursor to the
|
|
99
|
+
`@valve-tech/chain-source` package landing in v0.3.0; the
|
|
100
|
+
subscriber-refcount + block-gating + visibility hooks move into
|
|
101
|
+
that shared layer at v0.3.0 so both gas-oracle and tx-tracker
|
|
102
|
+
inherit them. See `docs/tx-tracker-spec.md` in the repo.
|
|
103
|
+
- No API removals. Every existing call site continues to work
|
|
104
|
+
byte-for-byte; the only behavior change is the new default of
|
|
105
|
+
`pauseWhenIdle: true`.
|
|
106
|
+
|
|
8
107
|
## [0.2.5] — 2026-05-03
|
|
9
108
|
|
|
10
109
|
### Added
|
package/README.md
CHANGED
|
@@ -151,6 +151,109 @@ lookups without a second RPC roundtrip. Memory cost is the size of one
|
|
|
151
151
|
`txpool_content` payload (5–15MB on busy ETH mainnet); leave off in
|
|
152
152
|
browser/mobile contexts. Default `false`.
|
|
153
153
|
|
|
154
|
+
## Idle-traffic controls (v0.2.6+)
|
|
155
|
+
|
|
156
|
+
Real dapps run multiple oracles per session (e.g. PulseChain + Base)
|
|
157
|
+
and idle on static pages where nothing is reading. Without controls,
|
|
158
|
+
each oracle fires 8–20 RPC calls per chain every 10s for the lifetime
|
|
159
|
+
of the instance — even when the user is on a different page or has
|
|
160
|
+
the tab in the background. The four options below collapse that idle
|
|
161
|
+
load to near-zero by default.
|
|
162
|
+
|
|
163
|
+
### `pauseWhenIdle`
|
|
164
|
+
|
|
165
|
+
Default `true`. Gates the poll loop on having at least one active
|
|
166
|
+
subscriber. `start()` is still called explicitly, but the loop only
|
|
167
|
+
fires RPC calls when at least one subscriber is attached:
|
|
168
|
+
|
|
169
|
+
- 0 → 1 subscriber transition: immediate cycle + interval start.
|
|
170
|
+
- n → 0 transition: pause (subject to `staleAfter`).
|
|
171
|
+
|
|
172
|
+
```ts
|
|
173
|
+
const oracle = createGasOracle({ client, chainId: 1 })
|
|
174
|
+
oracle.start()
|
|
175
|
+
// No RPC calls yet — no subscriber.
|
|
176
|
+
|
|
177
|
+
const unsubscribe = oracle.subscribe((state) => {/* ... */})
|
|
178
|
+
// Loop is now firing.
|
|
179
|
+
|
|
180
|
+
unsubscribe()
|
|
181
|
+
// Loop pauses.
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
> **Migration note for v0.2.5 → v0.2.6**: this changes default
|
|
185
|
+
> behavior. If your code does `oracle.start()` then `oracle.getState()`
|
|
186
|
+
> (synchronous read without subscribing), you'll now see `null`
|
|
187
|
+
> until either a subscriber attaches or you run `pollOnce()`. Three
|
|
188
|
+
> options:
|
|
189
|
+
>
|
|
190
|
+
> - Add `oracle.subscribe(() => {})` to keep the loop alive for
|
|
191
|
+
> `getState()` reads.
|
|
192
|
+
> - Pass `pauseWhenIdle: false` to restore v0.2.5 behavior.
|
|
193
|
+
> - For one-off reads, use `sampleGasFees({ client, chainId, ... })`.
|
|
194
|
+
|
|
195
|
+
### `staleAfter`
|
|
196
|
+
|
|
197
|
+
Wall-clock window (ms) to keep the loop alive after the last
|
|
198
|
+
unsubscribe. Useful for "snappy UI re-mount" — if a component
|
|
199
|
+
unmounts and remounts within this window, the cache stays warm and
|
|
200
|
+
no fresh RPC roundtrip is needed. Default `0` (pause immediately).
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
createGasOracle({ client, chainId: 1, staleAfter: 5_000 })
|
|
204
|
+
// Loop continues for 5s after the last subscriber leaves.
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### `blockGatedPolling`
|
|
208
|
+
|
|
209
|
+
Default `true`. Each tick fires a cheap `eth_blockNumber` probe
|
|
210
|
+
first; if the head hasn't moved since the previous tick, the rest of
|
|
211
|
+
the cycle is skipped — no `eth_getBlockByNumber(_, true)`, no
|
|
212
|
+
`eth_feeHistory`, no `txpool_content`. The fee landscape can't change
|
|
213
|
+
without a new block, so polling faster than block time is wasted RPC.
|
|
214
|
+
|
|
215
|
+
For PulseChain (~10s blocks polled at 10s) and Ethereum (12s polled
|
|
216
|
+
at 10s), this collapses ~90% of ticks to a single probe call. For
|
|
217
|
+
sub-second L2s polled at 10s, it's a no-op (head always moves).
|
|
218
|
+
|
|
219
|
+
`pollOnce()` always bypasses the gate — explicit out-of-band polls
|
|
220
|
+
fire the full cycle.
|
|
221
|
+
|
|
222
|
+
### `pauseWhenHidden`
|
|
223
|
+
|
|
224
|
+
Default `false`. When `true`, subscribes to the browser's
|
|
225
|
+
`visibilitychange` event and pauses the poll loop while the tab is
|
|
226
|
+
hidden. Resumes on `visibilityState === 'visible'`. Browsers throttle
|
|
227
|
+
background-tab timers but don't pause network requests — explicit
|
|
228
|
+
pause is several × cheaper than relying on the throttle.
|
|
229
|
+
|
|
230
|
+
Auto-no-ops in Node / SSR / Web Worker contexts where `document` is
|
|
231
|
+
undefined.
|
|
232
|
+
|
|
233
|
+
```ts
|
|
234
|
+
createGasOracle({ client, chainId: 1, pauseWhenHidden: true })
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### One-shot — `sampleGasFees`
|
|
238
|
+
|
|
239
|
+
For callers who need a single fee snapshot without a long-lived
|
|
240
|
+
oracle (typical tx-submit flow):
|
|
241
|
+
|
|
242
|
+
```ts
|
|
243
|
+
import { sampleGasFees } from '@valve-tech/gas-oracle'
|
|
244
|
+
|
|
245
|
+
const snapshot = await sampleGasFees({
|
|
246
|
+
client,
|
|
247
|
+
chainId: 1,
|
|
248
|
+
priorityModel: 'eip1559',
|
|
249
|
+
})
|
|
250
|
+
const tip = snapshot?.tiers.fast.maxPriorityFeePerGas
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
No streaming, no interval, no subscribe. Fires one full RPC cycle
|
|
254
|
+
and returns. Composes the existing `fetchOracleInputs` (I/O) +
|
|
255
|
+
`reducePollInputs` (pure) split.
|
|
256
|
+
|
|
154
257
|
## Mempool inspection
|
|
155
258
|
|
|
156
259
|
Two ways into the same data: pure helpers that take a normalized pool
|
package/dist/index.d.ts
CHANGED
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
* issue the underlying RPC calls (`eth_feeHistory`,
|
|
13
13
|
* `eth_getBlockByNumber`, `txpool_content`).
|
|
14
14
|
*/
|
|
15
|
-
export { createGasOracle, reducePollInputs, type CreateGasOracleOptions, type GasOracle, } from './oracle.js';
|
|
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, type FeeHistoryResult, type BlockResult, type TxPoolContent, type OraclePollInputs, } from './transport.js';
|
|
18
|
+
export { fetchOracleInputs, fetchHeadBlockNumber, type FeeHistoryResult, type BlockResult, type TxPoolContent, type OraclePollInputs, } from './transport.js';
|
|
19
19
|
export type { RawTx, TipPercentiles, TierRecommendation, TierName, Trend, MempoolStats, BlobStats, BlockSample, GasOracleState, TipSample, PriorityModel, PollOptions, } from './types.js';
|
|
20
20
|
export { normalizeMempool, findByHash, findByAddressNonce, findInMempool, } from './mempool.js';
|
|
21
21
|
export type { NormalizedMempool, TxIdentifier, MempoolBucket, MempoolHit, } from './mempool.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,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,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EACV,KAAK,EACL,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAA;AAGnB,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"}
|
|
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,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAA;AAGnB,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"}
|
package/dist/index.js
CHANGED
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
* issue the underlying RPC calls (`eth_feeHistory`,
|
|
13
13
|
* `eth_getBlockByNumber`, `txpool_content`).
|
|
14
14
|
*/
|
|
15
|
-
export { createGasOracle, reducePollInputs, } from './oracle.js';
|
|
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
|
-
export { fetchOracleInputs, } from './transport.js';
|
|
18
|
+
export { fetchOracleInputs, fetchHeadBlockNumber, } from './transport.js';
|
|
19
19
|
// Mempool inspection
|
|
20
20
|
export { normalizeMempool, findByHash, findByAddressNonce, findInMempool, } from './mempool.js';
|
|
21
21
|
// Block-position calculations
|
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,
|
|
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;AAiBvB,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"}
|
package/dist/oracle.d.ts
CHANGED
|
@@ -69,6 +69,66 @@ export interface CreateGasOracleOptions {
|
|
|
69
69
|
* keep this off in browser/mobile contexts. Default `false`.
|
|
70
70
|
*/
|
|
71
71
|
keepMempoolSnapshot?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* When `true` (default), the poll loop is gated on having at least
|
|
74
|
+
* one active subscriber. `start()` is still called explicitly, but
|
|
75
|
+
* the loop only actually fires `eth_*` calls when a subscriber is
|
|
76
|
+
* attached. The 0 → 1 subscriber transition triggers an immediate
|
|
77
|
+
* cycle plus interval start; the n → 0 transition pauses (subject
|
|
78
|
+
* to `staleAfter`).
|
|
79
|
+
*
|
|
80
|
+
* This avoids the dapp-pattern foot-gun where two oracles
|
|
81
|
+
* (PulseChain + Base) keep hot-polling at 10s intervals while the
|
|
82
|
+
* user is on a static page that doesn't read either. Set `false`
|
|
83
|
+
* to restore the v0.2.5 always-poll-after-start behavior.
|
|
84
|
+
*
|
|
85
|
+
* IMPORTANT: with `pauseWhenIdle: true`, `getState()` returns
|
|
86
|
+
* `null` until either (a) a subscriber attaches, OR (b) the caller
|
|
87
|
+
* runs `pollOnce()` once to seed state. Callers that pull state
|
|
88
|
+
* synchronously without subscribing should either subscribe to a
|
|
89
|
+
* no-op (`oracle.subscribe(() => {})`) or seed via `pollOnce()`.
|
|
90
|
+
*/
|
|
91
|
+
pauseWhenIdle?: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Wall-clock window (ms) to keep the poll loop alive after the last
|
|
94
|
+
* subscriber detaches, before pausing. Useful for "snappy UI
|
|
95
|
+
* re-mount" where a component briefly unmounts then re-mounts (e.g.
|
|
96
|
+
* route transitions). Cached state stays warm during this window.
|
|
97
|
+
*
|
|
98
|
+
* Default `0` (pause immediately on last unsubscribe). Set to e.g.
|
|
99
|
+
* `5_000` to keep the loop running for 5s after the last consumer
|
|
100
|
+
* leaves. Ignored when `pauseWhenIdle` is `false`.
|
|
101
|
+
*/
|
|
102
|
+
staleAfter?: number;
|
|
103
|
+
/**
|
|
104
|
+
* When `true` (default), each tick first fires a cheap
|
|
105
|
+
* `eth_blockNumber` probe. If the head hasn't moved since the
|
|
106
|
+
* previous tick, the rest of the cycle is skipped — no expensive
|
|
107
|
+
* `eth_getBlockByNumber(_, true)` / `eth_feeHistory` /
|
|
108
|
+
* `txpool_content`. The fee landscape can't change without a new
|
|
109
|
+
* block, so polling faster than block time is wasted RPC.
|
|
110
|
+
*
|
|
111
|
+
* For chains with sub-second blocks (some L2s), this is a no-op
|
|
112
|
+
* because the head moves every tick anyway. For PulseChain (~10s)
|
|
113
|
+
* and Ethereum (12s) on a 10s poll interval, this collapses ~90%
|
|
114
|
+
* of ticks down to a single probe call.
|
|
115
|
+
*
|
|
116
|
+
* `pollOnce()` always bypasses the gate — explicit out-of-band
|
|
117
|
+
* polls fire the full cycle.
|
|
118
|
+
*/
|
|
119
|
+
blockGatedPolling?: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* When `true`, the oracle subscribes to the browser's
|
|
122
|
+
* `visibilitychange` event and pauses the poll loop while the tab
|
|
123
|
+
* is hidden. Resumes (and emits a fresh sample) on
|
|
124
|
+
* `visibilityState === 'visible'`. Default `false`.
|
|
125
|
+
*
|
|
126
|
+
* Browsers already throttle background-tab timers but don't pause
|
|
127
|
+
* network requests — explicit pause is several × cheaper. Safe to
|
|
128
|
+
* enable in any browser context; auto-no-ops in Node / SSR /
|
|
129
|
+
* Web Worker contexts where `document` is undefined.
|
|
130
|
+
*/
|
|
131
|
+
pauseWhenHidden?: boolean;
|
|
72
132
|
}
|
|
73
133
|
export interface GasOracle {
|
|
74
134
|
/** Begin the poll loop. Idempotent — calling twice is a no-op. */
|
|
@@ -134,6 +194,39 @@ export declare const reducePollInputs: (input: {
|
|
|
134
194
|
* const tier = oracle.getState()?.tiers.standard
|
|
135
195
|
*/
|
|
136
196
|
export declare const createGasOracle: (options: CreateGasOracleOptions) => GasOracle;
|
|
197
|
+
/**
|
|
198
|
+
* One-shot sample helper for callers who need a single fee snapshot
|
|
199
|
+
* without standing up a long-lived oracle. Right for tx-submit flows
|
|
200
|
+
* that price one transaction and don't need streaming updates.
|
|
201
|
+
*
|
|
202
|
+
* Composes the existing `fetchOracleInputs` (I/O) + `reducePollInputs`
|
|
203
|
+
* (pure) split — see README "RPC transport modes" for the offline
|
|
204
|
+
* variant where you supply your own `OraclePollInputs`.
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* const snapshot = await sampleGasFees({
|
|
208
|
+
* client,
|
|
209
|
+
* chainId: 1,
|
|
210
|
+
* priorityModel: 'eip1559',
|
|
211
|
+
* })
|
|
212
|
+
* const tip = snapshot?.tiers.fast.maxPriorityFeePerGas
|
|
213
|
+
*/
|
|
214
|
+
export declare const sampleGasFees: (options: {
|
|
215
|
+
/** viem PublicClient pointed at the upstream RPC. */
|
|
216
|
+
client: PublicClient;
|
|
217
|
+
/** EVM chain ID. Echoed back in the result. */
|
|
218
|
+
chainId: number;
|
|
219
|
+
/** See `CreateGasOracleOptions.priorityFeeDecayCap`. */
|
|
220
|
+
priorityFeeDecayCap?: bigint | null;
|
|
221
|
+
/** See `CreateGasOracleOptions.priorityModel`. */
|
|
222
|
+
priorityModel?: PriorityModel;
|
|
223
|
+
/** See `CreateGasOracleOptions.baseFeeLivenessBlocks`. */
|
|
224
|
+
baseFeeLivenessBlocks?: number;
|
|
225
|
+
/** See `CreateGasOracleOptions.poll`. */
|
|
226
|
+
poll?: PollOptions;
|
|
227
|
+
/** See `CreateGasOracleOptions.onError`. */
|
|
228
|
+
onError?: (method: string, err: unknown) => void;
|
|
229
|
+
}) => Promise<GasOracleState | null>;
|
|
137
230
|
export type { OraclePollInputs } from './transport.js';
|
|
138
231
|
export type { TierName } from './types.js';
|
|
139
232
|
//# sourceMappingURL=oracle.d.ts.map
|
package/dist/oracle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAExC,OAAO,
|
|
1
|
+
{"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
|
package/dist/oracle.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* One oracle instance per chain. If you need many chains in one
|
|
11
11
|
* process, instantiate many oracles. They don't share any state.
|
|
12
12
|
*/
|
|
13
|
-
import { fetchOracleInputs } from './transport.js';
|
|
13
|
+
import { fetchHeadBlockNumber, fetchOracleInputs, } from './transport.js';
|
|
14
14
|
import { computeBlobBaseFee, computeTiers, detectTrend, flattenTxPool, } from './math.js';
|
|
15
15
|
import { normalizeMempool } from './mempool.js';
|
|
16
16
|
import { blockToSample, mempoolToSamples } from './samples.js';
|
|
@@ -142,9 +142,17 @@ export const createGasOracle = (options) => {
|
|
|
142
142
|
}
|
|
143
143
|
const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
144
144
|
const retainMempool = options.keepMempoolSnapshot === true;
|
|
145
|
+
const pauseWhenIdle = options.pauseWhenIdle !== false;
|
|
146
|
+
const blockGatedPolling = options.blockGatedPolling !== false;
|
|
147
|
+
const staleAfter = options.staleAfter ?? 0;
|
|
148
|
+
const pauseWhenHidden = options.pauseWhenHidden === true;
|
|
145
149
|
let state = null;
|
|
146
150
|
let mempoolSnapshot = null;
|
|
147
151
|
let timer = null;
|
|
152
|
+
let staleTimer = null;
|
|
153
|
+
let lastSeenBlock = null;
|
|
154
|
+
let started = false;
|
|
155
|
+
let visibilityListener = null;
|
|
148
156
|
const subscribers = new Set();
|
|
149
157
|
const notify = (next) => {
|
|
150
158
|
for (const cb of subscribers) {
|
|
@@ -154,7 +162,10 @@ export const createGasOracle = (options) => {
|
|
|
154
162
|
catch { /* swallow per-subscriber errors */ }
|
|
155
163
|
}
|
|
156
164
|
};
|
|
157
|
-
|
|
165
|
+
// The expensive cycle: full RPC fan-out + reduce + notify. Used
|
|
166
|
+
// unconditionally by `pollOnce()` and as the second step of the
|
|
167
|
+
// tick when block-gating allows.
|
|
168
|
+
const fullCycle = async () => {
|
|
158
169
|
const inputs = await fetchOracleInputs(options.client, {
|
|
159
170
|
onError: options.onError,
|
|
160
171
|
poll: options.poll,
|
|
@@ -169,6 +180,7 @@ export const createGasOracle = (options) => {
|
|
|
169
180
|
});
|
|
170
181
|
if (next) {
|
|
171
182
|
state = next;
|
|
183
|
+
lastSeenBlock = next.blockNumber;
|
|
172
184
|
if (retainMempool) {
|
|
173
185
|
// Re-normalize each cycle. `inputs.txPool` is null when the
|
|
174
186
|
// mempool RPC is gated/disabled — store an empty snapshot
|
|
@@ -179,30 +191,162 @@ export const createGasOracle = (options) => {
|
|
|
179
191
|
}
|
|
180
192
|
return next;
|
|
181
193
|
};
|
|
194
|
+
// The interval-driven cycle. Cheap-probes the head block first;
|
|
195
|
+
// skips the expensive bits when the head hasn't moved.
|
|
196
|
+
const tickCycle = async () => {
|
|
197
|
+
if (blockGatedPolling) {
|
|
198
|
+
const head = await fetchHeadBlockNumber(options.client, options.onError ? (err) => options.onError('eth_blockNumber', err) : undefined);
|
|
199
|
+
if (head !== null && lastSeenBlock !== null && head === lastSeenBlock) {
|
|
200
|
+
// Head hasn't moved — no fee-landscape change is possible.
|
|
201
|
+
// Skip the expensive cycle. State and subscribers are
|
|
202
|
+
// unchanged from the previous tick.
|
|
203
|
+
return state;
|
|
204
|
+
}
|
|
205
|
+
// head === null (probe failed) falls through to fullCycle —
|
|
206
|
+
// we'd rather pay one extra cycle than block on a flaky
|
|
207
|
+
// upstream that can't even report `eth_blockNumber`.
|
|
208
|
+
}
|
|
209
|
+
return fullCycle();
|
|
210
|
+
};
|
|
211
|
+
const startLoop = () => {
|
|
212
|
+
if (timer !== null)
|
|
213
|
+
return;
|
|
214
|
+
if (staleTimer !== null) {
|
|
215
|
+
clearTimeout(staleTimer);
|
|
216
|
+
staleTimer = null;
|
|
217
|
+
}
|
|
218
|
+
// Fire-and-forget the first cycle so callers don't block on RPC
|
|
219
|
+
// latency. The interval picks up from there.
|
|
220
|
+
void tickCycle();
|
|
221
|
+
timer = setInterval(() => { void tickCycle(); }, pollIntervalMs);
|
|
222
|
+
};
|
|
223
|
+
const pauseLoop = () => {
|
|
224
|
+
if (timer !== null) {
|
|
225
|
+
clearInterval(timer);
|
|
226
|
+
timer = null;
|
|
227
|
+
}
|
|
228
|
+
if (staleTimer !== null) {
|
|
229
|
+
clearTimeout(staleTimer);
|
|
230
|
+
staleTimer = null;
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
const scheduleIdlePause = () => {
|
|
234
|
+
if (staleAfter <= 0) {
|
|
235
|
+
pauseLoop();
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (staleTimer !== null)
|
|
239
|
+
return;
|
|
240
|
+
staleTimer = setTimeout(() => {
|
|
241
|
+
pauseLoop();
|
|
242
|
+
staleTimer = null;
|
|
243
|
+
}, staleAfter);
|
|
244
|
+
};
|
|
245
|
+
const documentRef = typeof globalThis !== 'undefined' && 'document' in globalThis
|
|
246
|
+
? globalThis.document
|
|
247
|
+
: undefined;
|
|
248
|
+
const setupVisibilityHandling = () => {
|
|
249
|
+
if (!pauseWhenHidden || !documentRef)
|
|
250
|
+
return;
|
|
251
|
+
const listener = () => {
|
|
252
|
+
if (documentRef.hidden) {
|
|
253
|
+
pauseLoop();
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
// Tab became visible — resume if we have a reason to (no
|
|
257
|
+
// subscriber-gating, OR subscribers are present).
|
|
258
|
+
if (!pauseWhenIdle || subscribers.size > 0) {
|
|
259
|
+
startLoop();
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
documentRef.addEventListener('visibilitychange', listener);
|
|
263
|
+
visibilityListener = listener;
|
|
264
|
+
};
|
|
265
|
+
const teardownVisibilityHandling = () => {
|
|
266
|
+
if (visibilityListener && documentRef) {
|
|
267
|
+
documentRef.removeEventListener('visibilitychange', visibilityListener);
|
|
268
|
+
}
|
|
269
|
+
visibilityListener = null;
|
|
270
|
+
};
|
|
271
|
+
const isHidden = () => documentRef?.hidden === true;
|
|
182
272
|
return {
|
|
183
273
|
start: () => {
|
|
184
|
-
if (
|
|
274
|
+
if (started)
|
|
185
275
|
return;
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
276
|
+
started = true;
|
|
277
|
+
setupVisibilityHandling();
|
|
278
|
+
// Only actually start the loop if (a) we don't gate on
|
|
279
|
+
// subscribers, OR (b) there's already a subscriber attached
|
|
280
|
+
// (rare but valid: subscribe before start). Visibility wins
|
|
281
|
+
// over both — never poll while hidden if pauseWhenHidden is on.
|
|
282
|
+
if (pauseWhenHidden && isHidden())
|
|
283
|
+
return;
|
|
284
|
+
if (!pauseWhenIdle || subscribers.size > 0) {
|
|
285
|
+
startLoop();
|
|
286
|
+
}
|
|
190
287
|
},
|
|
191
288
|
stop: () => {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
timer = null;
|
|
195
|
-
}
|
|
289
|
+
pauseLoop();
|
|
290
|
+
teardownVisibilityHandling();
|
|
196
291
|
state = null;
|
|
197
292
|
mempoolSnapshot = null;
|
|
293
|
+
lastSeenBlock = null;
|
|
294
|
+
started = false;
|
|
198
295
|
},
|
|
199
296
|
getState: () => state,
|
|
200
297
|
getMempoolSnapshot: () => mempoolSnapshot,
|
|
201
|
-
pollOnce
|
|
298
|
+
// pollOnce explicitly bypasses block-gating — caller asked for a
|
|
299
|
+
// sample, give them a full one. State/lastSeenBlock are still
|
|
300
|
+
// updated so the next tick can gate against this.
|
|
301
|
+
pollOnce: () => fullCycle(),
|
|
202
302
|
subscribe: (cb) => {
|
|
203
303
|
subscribers.add(cb);
|
|
204
|
-
|
|
304
|
+
// 0 → 1 transition: kick the loop awake (or cancel the
|
|
305
|
+
// stale-after pause that was about to fire).
|
|
306
|
+
if (started && pauseWhenIdle && subscribers.size === 1) {
|
|
307
|
+
if (!pauseWhenHidden || !isHidden()) {
|
|
308
|
+
startLoop();
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return () => {
|
|
312
|
+
subscribers.delete(cb);
|
|
313
|
+
// n → 0 transition: schedule pause.
|
|
314
|
+
if (started && pauseWhenIdle && subscribers.size === 0) {
|
|
315
|
+
scheduleIdlePause();
|
|
316
|
+
}
|
|
317
|
+
};
|
|
205
318
|
},
|
|
206
319
|
};
|
|
207
320
|
};
|
|
321
|
+
/**
|
|
322
|
+
* One-shot sample helper for callers who need a single fee snapshot
|
|
323
|
+
* without standing up a long-lived oracle. Right for tx-submit flows
|
|
324
|
+
* that price one transaction and don't need streaming updates.
|
|
325
|
+
*
|
|
326
|
+
* Composes the existing `fetchOracleInputs` (I/O) + `reducePollInputs`
|
|
327
|
+
* (pure) split — see README "RPC transport modes" for the offline
|
|
328
|
+
* variant where you supply your own `OraclePollInputs`.
|
|
329
|
+
*
|
|
330
|
+
* @example
|
|
331
|
+
* const snapshot = await sampleGasFees({
|
|
332
|
+
* client,
|
|
333
|
+
* chainId: 1,
|
|
334
|
+
* priorityModel: 'eip1559',
|
|
335
|
+
* })
|
|
336
|
+
* const tip = snapshot?.tiers.fast.maxPriorityFeePerGas
|
|
337
|
+
*/
|
|
338
|
+
export const sampleGasFees = async (options) => {
|
|
339
|
+
const inputs = await fetchOracleInputs(options.client, {
|
|
340
|
+
onError: options.onError,
|
|
341
|
+
poll: options.poll,
|
|
342
|
+
});
|
|
343
|
+
return reducePollInputs({
|
|
344
|
+
inputs,
|
|
345
|
+
chainId: options.chainId,
|
|
346
|
+
prev: null,
|
|
347
|
+
priorityFeeDecayCap: options.priorityFeeDecayCap,
|
|
348
|
+
priorityModel: options.priorityModel,
|
|
349
|
+
baseFeeLivenessBlocks: options.baseFeeLivenessBlocks,
|
|
350
|
+
});
|
|
351
|
+
};
|
|
208
352
|
//# sourceMappingURL=oracle.js.map
|
package/dist/oracle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -56,6 +56,14 @@ export interface OraclePollInputs {
|
|
|
56
56
|
block: BlockResult | null;
|
|
57
57
|
txPool: TxPoolContent | null;
|
|
58
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Cheap head-block probe used by block-gated polling. Returns the
|
|
61
|
+
* latest block number as a `bigint`, or `null` if the RPC failed.
|
|
62
|
+
* Cost: a single `eth_blockNumber` call (no full block payload, no
|
|
63
|
+
* tx list, no receipts). Lets the oracle skip the expensive
|
|
64
|
+
* `fetchOracleInputs` cycle when nothing has moved since last tick.
|
|
65
|
+
*/
|
|
66
|
+
export declare const fetchHeadBlockNumber: (client: PublicClient, onError?: (err: unknown) => void) => Promise<bigint | null>;
|
|
59
67
|
/**
|
|
60
68
|
* One poll cycle's RPC fan-out. Returns whatever could be fetched —
|
|
61
69
|
* `null` for any sub-call that failed OR was disabled by `poll`. The
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -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;;;;;;;;;;;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,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"}
|
package/dist/transport.js
CHANGED
|
@@ -42,6 +42,24 @@ const safeRequest = async (client, method, params, onError) => {
|
|
|
42
42
|
return null;
|
|
43
43
|
}
|
|
44
44
|
};
|
|
45
|
+
/**
|
|
46
|
+
* Cheap head-block probe used by block-gated polling. Returns the
|
|
47
|
+
* latest block number as a `bigint`, or `null` if the RPC failed.
|
|
48
|
+
* Cost: a single `eth_blockNumber` call (no full block payload, no
|
|
49
|
+
* tx list, no receipts). Lets the oracle skip the expensive
|
|
50
|
+
* `fetchOracleInputs` cycle when nothing has moved since last tick.
|
|
51
|
+
*/
|
|
52
|
+
export const fetchHeadBlockNumber = async (client, onError) => {
|
|
53
|
+
const head = await safeRequest(client, 'eth_blockNumber', [], onError);
|
|
54
|
+
if (head === null)
|
|
55
|
+
return null;
|
|
56
|
+
try {
|
|
57
|
+
return BigInt(head);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
45
63
|
/**
|
|
46
64
|
* One poll cycle's RPC fan-out. Returns whatever could be fetched —
|
|
47
65
|
* `null` for any sub-call that failed OR was disabled by `poll`. The
|
package/dist/transport.js.map
CHANGED
|
@@ -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;;;;;;;;;;;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;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 +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,
|
|
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"}
|
package/dist/viem-actions.js
CHANGED
|
@@ -30,7 +30,17 @@ import { tipForBlockPosition, } from './block-position.js';
|
|
|
30
30
|
import { findInMempool, normalizeMempool, } from './mempool.js';
|
|
31
31
|
import { createGasOracle } from './oracle.js';
|
|
32
32
|
export const gasOracleActions = (options) => (client) => {
|
|
33
|
-
|
|
33
|
+
// viem-actions consumers pull state via `client.getGasTiers()`
|
|
34
|
+
// etc. — they don't subscribe. Default `pauseWhenIdle: false`
|
|
35
|
+
// here so the eager lifecycle keeps the cache warm even without
|
|
36
|
+
// an explicit subscriber. Callers who want subscriber-gated
|
|
37
|
+
// behavior should construct an oracle directly instead of
|
|
38
|
+
// going through actions.
|
|
39
|
+
const oracle = createGasOracle({
|
|
40
|
+
pauseWhenIdle: false,
|
|
41
|
+
...options,
|
|
42
|
+
client,
|
|
43
|
+
});
|
|
34
44
|
const lifecycle = options.lifecycle ?? 'eager';
|
|
35
45
|
let started = false;
|
|
36
46
|
if (lifecycle === 'eager') {
|
package/dist/viem-actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viem-actions.js","sourceRoot":"","sources":["../src/viem-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EACL,mBAAmB,GAGpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,aAAa,EACb,gBAAgB,GAIjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,eAAe,EAA+C,MAAM,aAAa,CAAA;AAgD1F,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAgC,EAAE,EAAE,CACnE,CAAC,MAAoB,EAAoB,EAAE;IACzC,MAAM,MAAM,GAAc,eAAe,CAAC,EAAE,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"viem-actions.js","sourceRoot":"","sources":["../src/viem-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viem-transport.d.ts","sourceRoot":"","sources":["../src/viem-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,MAAM,CAAA;AAE7C,OAAO,EAAmB,KAAK,sBAAsB,EAAkB,MAAM,aAAa,CAAA;AAC1F,OAAO,KAAK,EAAkB,QAAQ,EAAsB,MAAM,YAAY,CAAA;AAE9E,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;IAC/B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CAC5C;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC;IAClF;;;;OAIG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG;IAAE,aAAa,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AA8G1E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,GACxB,gBAAgB,SAAS,EACzB,SAAS,oBAAoB,KAC5B,
|
|
1
|
+
{"version":3,"file":"viem-transport.d.ts","sourceRoot":"","sources":["../src/viem-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,MAAM,CAAA;AAE7C,OAAO,EAAmB,KAAK,sBAAsB,EAAkB,MAAM,aAAa,CAAA;AAC1F,OAAO,KAAK,EAAkB,QAAQ,EAAsB,MAAM,YAAY,CAAA;AAE9E,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;IAC/B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CAC5C;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC;IAClF;;;;OAIG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG;IAAE,aAAa,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AA8G1E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,GACxB,gBAAgB,SAAS,EACzB,SAAS,oBAAoB,KAC5B,kBAiCF,CAAA"}
|
package/dist/viem-transport.js
CHANGED
|
@@ -147,7 +147,15 @@ export const withGasOracle = (innerTransport, options) => {
|
|
|
147
147
|
// dispatch — chainId validation happens elsewhere.
|
|
148
148
|
const oracleInner = innerTransport({});
|
|
149
149
|
const oracleClient = { request: oracleInner.request };
|
|
150
|
-
|
|
150
|
+
// viem-transport intercepts RPC methods, which is a pull-based
|
|
151
|
+
// access pattern (state read inside the request handler). Default
|
|
152
|
+
// `pauseWhenIdle: false` so the cache stays warm across intercepts
|
|
153
|
+
// without requiring an explicit subscriber. Callers can override.
|
|
154
|
+
const oracle = createGasOracle({
|
|
155
|
+
pauseWhenIdle: false,
|
|
156
|
+
...options,
|
|
157
|
+
client: oracleClient,
|
|
158
|
+
});
|
|
151
159
|
if ((options.lifecycle ?? 'eager') === 'eager')
|
|
152
160
|
oracle.start();
|
|
153
161
|
const wrapped = custom({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viem-transport.js","sourceRoot":"","sources":["../src/viem-transport.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"viem-transport.js","sourceRoot":"","sources":["../src/viem-transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@valve-tech/gas-oracle",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
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
|
-
"homepage": "https://github.com/valve-tech/gas-oracle#readme",
|
|
6
|
+
"homepage": "https://github.com/valve-tech/evm-toolkit/tree/main/packages/gas-oracle#readme",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/valve-tech/
|
|
9
|
+
"url": "git+https://github.com/valve-tech/evm-toolkit.git",
|
|
10
|
+
"directory": "packages/gas-oracle"
|
|
10
11
|
},
|
|
11
12
|
"bugs": {
|
|
12
|
-
"url": "https://github.com/valve-tech/
|
|
13
|
+
"url": "https://github.com/valve-tech/evm-toolkit/issues"
|
|
13
14
|
},
|
|
14
15
|
"keywords": [
|
|
15
16
|
"ethereum",
|
|
@@ -23,7 +24,6 @@
|
|
|
23
24
|
"mempool"
|
|
24
25
|
],
|
|
25
26
|
"type": "module",
|
|
26
|
-
"packageManager": "yarn@4.14.1",
|
|
27
27
|
"main": "dist/index.js",
|
|
28
28
|
"types": "dist/index.d.ts",
|
|
29
29
|
"exports": {
|
|
@@ -59,15 +59,5 @@
|
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
61
|
"viem": "^2.0.0"
|
|
62
|
-
},
|
|
63
|
-
"devDependencies": {
|
|
64
|
-
"@types/node": "^22.0.0",
|
|
65
|
-
"@typescript-eslint/eslint-plugin": "^8.59.1",
|
|
66
|
-
"@typescript-eslint/parser": "^8.59.1",
|
|
67
|
-
"eslint": "^10.3.0",
|
|
68
|
-
"typescript": "^6.0.2",
|
|
69
|
-
"typescript-eslint": "^8.59.1",
|
|
70
|
-
"viem": "^2.21.0",
|
|
71
|
-
"vitest": "^4.1.4"
|
|
72
62
|
}
|
|
73
63
|
}
|