@valve-tech/gas-oracle 0.5.0 → 0.7.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/CHANGELOG.md +108 -0
- package/dist/block-position.d.ts.map +1 -1
- package/dist/block-position.js +5 -1
- package/dist/block-position.js.map +1 -1
- package/dist/math.d.ts.map +1 -1
- package/dist/math.js +3 -1
- package/dist/math.js.map +1 -1
- package/dist/oracle.d.ts +52 -19
- package/dist/oracle.d.ts.map +1 -1
- package/dist/oracle.js +159 -76
- package/dist/oracle.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 +4 -1
- package/skills/gas-oracle-integration/SKILL.md +54 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,114 @@ 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.7.0] — 2026-05-06
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **`skills/gas-oracle-integration/SKILL.md`** — appended a "Tx
|
|
13
|
+
tracking — composing with `@valve-tech/tx-tracker`" section that
|
|
14
|
+
redirects per-tx tracking questions to the sibling package and
|
|
15
|
+
documents the shared-`ChainSource` composition pattern. The skill
|
|
16
|
+
`description` trigger phrases now also catch composition questions,
|
|
17
|
+
but per-tx work explicitly defers to the tx-tracker skill. Ships
|
|
18
|
+
in the npm tarball.
|
|
19
|
+
- **Coverage hardening pre-1.0.** Test suite up from 189 → 209 tests
|
|
20
|
+
(+20). New coverage: `sampleGasFees` one-shot snapshot path
|
|
21
|
+
(success + null + error-routing variants), `tipForBlockPosition`
|
|
22
|
+
with full mempool data (EIP-1559 + legacy + 0-headroom + no-gas
|
|
23
|
+
+ no-fee branches in the mempool→TipSample translation),
|
|
24
|
+
`formatTier` for tx types 0/1/2/3 plus the no-type fallback —
|
|
25
|
+
with and without blob fees in tier state, `keepMempoolSnapshot:
|
|
26
|
+
true` retention, `pauseWhenIdle` re-subscribe inside the stale
|
|
27
|
+
window keeping the loop alive, `fetchHeadBlockNumber` happy /
|
|
28
|
+
null-from-RPC / throw / un-decodable variants. Eliminated dead
|
|
29
|
+
defensive arms in `math.ts` / `block-position.ts` sort
|
|
30
|
+
comparators (equal-key arms unreachable since duplicates are
|
|
31
|
+
filtered upstream) and in `oracle.ts` `attachToSource` (stale-
|
|
32
|
+
timer clear is unreachable because every detach path that sets
|
|
33
|
+
the timer also keeps `unsubBlocks !== null`, which makes
|
|
34
|
+
`attachToSource` early-return before the clear).
|
|
35
|
+
- Coverage went **91.91% / 84.75% / 93.18% / 93.9%** stmts /
|
|
36
|
+
branches / funcs / lines → **98.26% / 93.47% / 100% / 99.8%**.
|
|
37
|
+
|
|
38
|
+
## [0.6.0] — 2026-05-05
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- **`source?: ChainSource` on `CreateGasOracleOptions`.** New
|
|
43
|
+
preferred construction shape: build a `ChainSource` once and share
|
|
44
|
+
it across multiple consumers (gas-oracle, tx-tracker, future
|
|
45
|
+
derived views). One upstream poll cycle feeds every attached
|
|
46
|
+
consumer; the consumer that constructed the source owns its
|
|
47
|
+
lifecycle. `oracle.start()` / `oracle.stop()` only attach and
|
|
48
|
+
detach the oracle's own subscribers — they do **not** start or
|
|
49
|
+
stop a source the consumer handed in. See
|
|
50
|
+
[`docs/tx-tracker-spec.md`](https://github.com/valve-tech/evm-toolkit/blob/main/docs/tx-tracker-spec.md)
|
|
51
|
+
§3.3 for the design.
|
|
52
|
+
- **`@valve-tech/chain-source` is now a workspace dependency.** The
|
|
53
|
+
oracle internally consumes ChainSource for its block + mempool
|
|
54
|
+
streams and on-demand RPC passthroughs.
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- **`client?` is now optional alongside `source?`; exactly one must
|
|
59
|
+
be provided.** Existing v0.5.x call sites passing `client` work
|
|
60
|
+
unchanged — internally the oracle constructs a private
|
|
61
|
+
`ChainSource` and owns its lifecycle (start/stop is symmetric).
|
|
62
|
+
Passing both throws at construction. Passing neither throws.
|
|
63
|
+
- **The poll cycle is now subscribe-driven.** Internally the oracle
|
|
64
|
+
attaches to `source.subscribeBlocks` / `source.subscribeMempool`;
|
|
65
|
+
on each new block emit it fetches `eth_feeHistory` on demand and
|
|
66
|
+
reduces. Mempool snapshots arrive via the source's own tick.
|
|
67
|
+
Consumer-visible state shape and update timing match v0.5.x for
|
|
68
|
+
the `client` path; the per-tick RPC pattern shifts (see Notes).
|
|
69
|
+
- **Block-gated polling now lives at the source layer.** The
|
|
70
|
+
efficiency win (skip the expensive full-block fetch when the head
|
|
71
|
+
hasn't moved) is implemented in `@valve-tech/chain-source`'s tick
|
|
72
|
+
via head-probe gating, so every consumer benefits — not just
|
|
73
|
+
gas-oracle.
|
|
74
|
+
|
|
75
|
+
### Deprecated
|
|
76
|
+
|
|
77
|
+
- **`CreateGasOracleOptions.blockGatedPolling`** is now a no-op.
|
|
78
|
+
Block-gated polling is unconditional at the source layer (see
|
|
79
|
+
Changed); passing `false` no longer disables it, and passing
|
|
80
|
+
`true` matches the always-on behavior. The option is retained for
|
|
81
|
+
backward compatibility with v0.5.x call sites and may be removed
|
|
82
|
+
in a future major.
|
|
83
|
+
|
|
84
|
+
### Notes
|
|
85
|
+
|
|
86
|
+
- **Per-tick RPC pattern shift in `client` mode.** v0.5.0 with
|
|
87
|
+
`blockGatedPolling: true` (default) ran one `eth_blockNumber`
|
|
88
|
+
probe per tick and fanned out the full cycle (block + feeHistory
|
|
89
|
+
+ mempool) only on head change. The migrated oracle's private
|
|
90
|
+
source runs one probe + one mempool fetch per tick (mempool is
|
|
91
|
+
intentionally not gated — txs come and go between blocks), then
|
|
92
|
+
fetches block + feeHistory on head change. Net effect on a
|
|
93
|
+
static head: 1 extra `txpool_content` per tick relative to v0.5.0
|
|
94
|
+
(mempool stats stay fresh between blocks rather than going stale
|
|
95
|
+
until the head moves). Consumer-visible state shape is identical.
|
|
96
|
+
- **Mempool freshness improved.** Previously, gas-oracle's reducer
|
|
97
|
+
used the mempool snapshot fetched in the same cycle as the block,
|
|
98
|
+
with `null` when that fetch failed. The migrated reducer uses
|
|
99
|
+
the most recent successful mempool snapshot — when the upstream
|
|
100
|
+
intermittently gates `txpool_content`, the oracle now uses the
|
|
101
|
+
last good snapshot rather than dropping mempool stats entirely.
|
|
102
|
+
- **`pollOnce` continues to bypass head-probe gating.** It uses
|
|
103
|
+
`source.getBlock`, `source.getFeeHistory`, and
|
|
104
|
+
`source.getMempoolSnapshot` directly, so two `pollOnce()` calls
|
|
105
|
+
on the same head still produce two reduces (matching v0.5.x's
|
|
106
|
+
"force fresh sample" semantic).
|
|
107
|
+
- **Consumer-visible API is unchanged otherwise.** All other
|
|
108
|
+
`CreateGasOracleOptions` fields (`pauseWhenIdle`, `staleAfter`,
|
|
109
|
+
`pauseWhenHidden`, `keepMempoolSnapshot`, `priorityFeeDecayCap`,
|
|
110
|
+
`priorityModel`, `baseFeeLivenessBlocks`, `poll`) work the same
|
|
111
|
+
way. Public exports (`fetchOracleInputs`, `fetchHeadBlockNumber`,
|
|
112
|
+
`normalizeMempool`, etc.) are unchanged — `sampleGasFees` still
|
|
113
|
+
uses `fetchOracleInputs` for one-shot snapshots without standing
|
|
114
|
+
up a long-lived source.
|
|
115
|
+
|
|
8
116
|
## [0.5.0] — 2026-05-05
|
|
9
117
|
|
|
10
118
|
### Notes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-position.d.ts","sourceRoot":"","sources":["../src/block-position.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,YAAY,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,YAAY,CAAA;CAAE,CAAA;AAExC,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;;;OAKG;IACH,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAA;IACZ,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAA;CACnB;
|
|
1
|
+
{"version":3,"file":"block-position.d.ts","sourceRoot":"","sources":["../src/block-position.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,YAAY,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,YAAY,CAAA;CAAE,CAAA;AAExC,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;;;OAKG;IACH,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAA;IACZ,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAA;CACnB;AAkDD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,SAAS,EAAE,EACpB,OAAO,kBAAkB,KACxB,mBA0DF,CAAA"}
|
package/dist/block-position.js
CHANGED
|
@@ -20,7 +20,11 @@
|
|
|
20
20
|
* Equality at the same tip is validator-policy-dependent and not
|
|
21
21
|
* guaranteed, so "outbid by 1 wei" is the honest minimum.
|
|
22
22
|
*/
|
|
23
|
-
const sortByTipDesc = (samples) =>
|
|
23
|
+
const sortByTipDesc = (samples) =>
|
|
24
|
+
// Equal-tip arm folded into the descending side — order between
|
|
25
|
+
// equal-tip samples is unspecified and consumers shouldn't rely on
|
|
26
|
+
// it (mempool ordering is provider-dependent anyway).
|
|
27
|
+
[...samples].sort((a, b) => (a.tip > b.tip ? -1 : 1));
|
|
24
28
|
const matchesIdentifier = (sample, id) => {
|
|
25
29
|
if ('hash' in id) {
|
|
26
30
|
return (typeof sample.hash === 'string' &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-position.js","sourceRoot":"","sources":["../src/block-position.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AA0DH,MAAM,aAAa,GAAG,CAAC,OAAoB,EAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"block-position.js","sourceRoot":"","sources":["../src/block-position.ts"],"names":[],"mappings":"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"}
|
package/dist/math.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,SAAS,EACT,KAAK,EACN,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,
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,SAAS,EACT,KAAK,EACN,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;AAqDjD;;;;;;;;;;;;;;;;;;;;;;;;;;;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
CHANGED
|
@@ -65,7 +65,9 @@ export const computePercentiles = (sorted) => {
|
|
|
65
65
|
*/
|
|
66
66
|
export const sortedTips = (txs, baseFee) => txs
|
|
67
67
|
.map((tx) => effectiveTip(tx, baseFee))
|
|
68
|
-
|
|
68
|
+
// Equal-key arm is fine to fold into the >= side — the result is
|
|
69
|
+
// a sorted list, not a stable sort by identity.
|
|
70
|
+
.sort((a, b) => (a < b ? -1 : 1));
|
|
69
71
|
/**
|
|
70
72
|
* Classify a base-fee history as rising, falling, or stable. Threshold
|
|
71
73
|
* is ±10% comparing first to last value. Single-element or empty input
|
package/dist/math.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,MAAM,0BAA0B,GAAG,GAAG,CAAA;AACtC,MAAM,2BAA2B,GAAG,CAAC,GAAG,CAAA;AAExC;;;;;;GAMG;AACH,MAAM,GAAG,GAAG,oBAA0B,CAAA;AAEtC,wEAAwE;AACxE,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,GAAG,EAAE,CAAA;AAEtD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAS,EAAE,OAAe,EAAU,EAAE;IACjE,IAAI,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,oBAAoB,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAA;QACtC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;QACjC,IAAI,QAAQ,IAAI,EAAE;YAAE,OAAO,EAAE,CAAA;QAC7B,OAAO,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAA;IACxD,CAAC;IAED,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;QACjC,OAAO,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/C,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAgB,EAAkB,EAAE;IACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAA;IACxD,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,GAAW,EAAU,EAAE;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACxE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC,CAAA;IACD,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAA;AACnF,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,OAAe,EAAY,EAAE,CACpE,GAAG;KACA,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
|
package/dist/oracle.d.ts
CHANGED
|
@@ -11,21 +11,50 @@
|
|
|
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
15
|
import { type OraclePollInputs } from './transport.js';
|
|
15
|
-
import { type NormalizedMempool } from './mempool.js';
|
|
16
16
|
import type { GasOracleState, PollOptions, PriorityModel } from './types.js';
|
|
17
17
|
export interface CreateGasOracleOptions {
|
|
18
|
-
/**
|
|
19
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Pre-built `ChainSource`. Preferred for new code: lets multiple
|
|
20
|
+
* derived views (gas-oracle, tx-tracker, …) share one upstream poll
|
|
21
|
+
* cycle. The consumer that constructed the source owns its
|
|
22
|
+
* lifecycle — `oracle.start()` / `oracle.stop()` only attach and
|
|
23
|
+
* detach the oracle's own subscribers; they do NOT start or stop
|
|
24
|
+
* the source.
|
|
25
|
+
*
|
|
26
|
+
* Exactly one of `source` or `client` must be provided. Passing
|
|
27
|
+
* both throws at construction.
|
|
28
|
+
*/
|
|
29
|
+
source?: ChainSource;
|
|
30
|
+
/**
|
|
31
|
+
* viem PublicClient pointed at the upstream RPC for this chain.
|
|
32
|
+
* Backward-compat shorthand: when provided, the oracle constructs
|
|
33
|
+
* a private `ChainSource` internally and owns its lifecycle
|
|
34
|
+
* (`start()` starts the source, `stop()` stops it). Existing v0.5.x
|
|
35
|
+
* call sites work unchanged.
|
|
36
|
+
*
|
|
37
|
+
* Exactly one of `source` or `client` must be provided.
|
|
38
|
+
*/
|
|
39
|
+
client?: PublicClient;
|
|
20
40
|
/** EVM chain ID. Echoed back in `state.chainId`; not validated. */
|
|
21
41
|
chainId: number;
|
|
22
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* Polling interval in ms. Default 10_000. Only consulted when the
|
|
44
|
+
* oracle is constructing its own private `ChainSource` (i.e. when
|
|
45
|
+
* `client` is provided). When a `source` is provided, the source's
|
|
46
|
+
* own poll interval governs.
|
|
47
|
+
*/
|
|
23
48
|
pollIntervalMs?: number;
|
|
24
49
|
/**
|
|
25
50
|
* Optional error sink. Called for each sub-RPC that fails inside a
|
|
26
51
|
* poll cycle. Default behavior is to swallow — the oracle keeps running
|
|
27
52
|
* on partial data. Useful for routing failures into a debug logger or
|
|
28
53
|
* a metrics counter.
|
|
54
|
+
*
|
|
55
|
+
* When the oracle owns a private `ChainSource` (i.e. `client` mode),
|
|
56
|
+
* this sink is forwarded to the source so RPC errors at the upstream
|
|
57
|
+
* layer surface here too.
|
|
29
58
|
*/
|
|
30
59
|
onError?: (method: string, err: unknown) => void;
|
|
31
60
|
/**
|
|
@@ -101,20 +130,14 @@ export interface CreateGasOracleOptions {
|
|
|
101
130
|
*/
|
|
102
131
|
staleAfter?: number;
|
|
103
132
|
/**
|
|
104
|
-
*
|
|
105
|
-
* `
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* `
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
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.
|
|
133
|
+
* @deprecated v0.6.0 — block-gated polling now lives in
|
|
134
|
+
* `@valve-tech/chain-source` itself, via head-probe gating in its
|
|
135
|
+
* tick. The option is retained for backward compatibility but is a
|
|
136
|
+
* no-op: passing `false` no longer disables gating, and passing
|
|
137
|
+
* `true` is the always-on behavior at the source layer. The
|
|
138
|
+
* efficiency win (skip the expensive full-block fetch when the head
|
|
139
|
+
* hasn't moved) now benefits every consumer of `ChainSource` — not
|
|
140
|
+
* just gas-oracle — so the gate moved down a layer.
|
|
118
141
|
*/
|
|
119
142
|
blockGatedPolling?: boolean;
|
|
120
143
|
/**
|
|
@@ -180,7 +203,9 @@ export declare const reducePollInputs: (input: {
|
|
|
180
203
|
/**
|
|
181
204
|
* Build a configured oracle. Nothing happens until you call `start()`.
|
|
182
205
|
*
|
|
183
|
-
*
|
|
206
|
+
* Two construction shapes — pick one:
|
|
207
|
+
*
|
|
208
|
+
* // v0.5.x backward-compat: oracle owns a private ChainSource.
|
|
184
209
|
* import { createPublicClient, http } from 'viem'
|
|
185
210
|
* import { mainnet } from 'viem/chains'
|
|
186
211
|
* import { createGasOracle } from '@valve-tech/gas-oracle'
|
|
@@ -190,6 +215,14 @@ export declare const reducePollInputs: (input: {
|
|
|
190
215
|
* oracle.subscribe((state) => publishToRedis(state))
|
|
191
216
|
* oracle.start()
|
|
192
217
|
*
|
|
218
|
+
* // v0.6.0+: share a ChainSource with other consumers (e.g. tx-tracker).
|
|
219
|
+
* import { createChainSource } from '@valve-tech/chain-source'
|
|
220
|
+
*
|
|
221
|
+
* const source = createChainSource({ client })
|
|
222
|
+
* const oracle = createGasOracle({ source, chainId: 1 })
|
|
223
|
+
* const tracker = createTxTracker({ source, chainId: 1 }) // future
|
|
224
|
+
* source.start(); oracle.start(); tracker.start()
|
|
225
|
+
*
|
|
193
226
|
* // Later — sub-ms read, no RPC:
|
|
194
227
|
* const tier = oracle.getState()?.tiers.standard
|
|
195
228
|
*/
|
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;
|
|
1
|
+
{"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
|
package/dist/oracle.js
CHANGED
|
@@ -10,9 +10,9 @@
|
|
|
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 {
|
|
13
|
+
import { createChainSource, } from '@valve-tech/chain-source';
|
|
14
|
+
import { fetchOracleInputs } from './transport.js';
|
|
14
15
|
import { computeBlobBaseFee, computeTiers, detectTrend, flattenTxPool, } from './math.js';
|
|
15
|
-
import { normalizeMempool } from './mempool.js';
|
|
16
16
|
import { blockToSample, mempoolToSamples } from './samples.js';
|
|
17
17
|
const DEFAULT_POLL_INTERVAL_MS = 10000;
|
|
18
18
|
const TREND_WINDOW = 5;
|
|
@@ -113,7 +113,9 @@ export const reducePollInputs = (input) => {
|
|
|
113
113
|
/**
|
|
114
114
|
* Build a configured oracle. Nothing happens until you call `start()`.
|
|
115
115
|
*
|
|
116
|
-
*
|
|
116
|
+
* Two construction shapes — pick one:
|
|
117
|
+
*
|
|
118
|
+
* // v0.5.x backward-compat: oracle owns a private ChainSource.
|
|
117
119
|
* import { createPublicClient, http } from 'viem'
|
|
118
120
|
* import { mainnet } from 'viem/chains'
|
|
119
121
|
* import { createGasOracle } from '@valve-tech/gas-oracle'
|
|
@@ -123,15 +125,40 @@ export const reducePollInputs = (input) => {
|
|
|
123
125
|
* oracle.subscribe((state) => publishToRedis(state))
|
|
124
126
|
* oracle.start()
|
|
125
127
|
*
|
|
128
|
+
* // v0.6.0+: share a ChainSource with other consumers (e.g. tx-tracker).
|
|
129
|
+
* import { createChainSource } from '@valve-tech/chain-source'
|
|
130
|
+
*
|
|
131
|
+
* const source = createChainSource({ client })
|
|
132
|
+
* const oracle = createGasOracle({ source, chainId: 1 })
|
|
133
|
+
* const tracker = createTxTracker({ source, chainId: 1 }) // future
|
|
134
|
+
* source.start(); oracle.start(); tracker.start()
|
|
135
|
+
*
|
|
126
136
|
* // Later — sub-ms read, no RPC:
|
|
127
137
|
* const tier = oracle.getState()?.tiers.standard
|
|
128
138
|
*/
|
|
129
139
|
export const createGasOracle = (options) => {
|
|
130
|
-
// Validate at the boundary
|
|
131
|
-
// than producing silently
|
|
140
|
+
// Validate exactly-one of source/client at the boundary. Misconfigured
|
|
141
|
+
// callers fail fast at construction rather than producing silently
|
|
142
|
+
// bad behavior at run time.
|
|
143
|
+
const hasSource = options.source !== undefined;
|
|
144
|
+
const hasClient = options.client !== undefined;
|
|
145
|
+
if (hasSource && hasClient) {
|
|
146
|
+
throw new Error('createGasOracle: pass exactly one of `source` or `client`, not both. ' +
|
|
147
|
+
'Use `source` to share an upstream poll cycle with other consumers; ' +
|
|
148
|
+
'use `client` for the v0.5.x backward-compat shorthand (oracle constructs a private source).');
|
|
149
|
+
}
|
|
150
|
+
if (!hasSource && !hasClient) {
|
|
151
|
+
throw new Error('createGasOracle: pass exactly one of `source` or `client`. ' +
|
|
152
|
+
'Use `source` to share an upstream poll cycle with other consumers; ' +
|
|
153
|
+
'use `client` for the v0.5.x backward-compat shorthand.');
|
|
154
|
+
}
|
|
132
155
|
if (options.priorityFeeDecayCap !== undefined &&
|
|
133
156
|
options.priorityFeeDecayCap !== null) {
|
|
134
157
|
const cap = options.priorityFeeDecayCap;
|
|
158
|
+
// Both halves of this `||` have dedicated tests (negative cap,
|
|
159
|
+
// exceeds WAD). v8 still flags one arm when most calls exit
|
|
160
|
+
// before this throw.
|
|
161
|
+
/* c8 ignore next */
|
|
135
162
|
if (cap < 0n || cap > WAD) {
|
|
136
163
|
throw new Error(`priorityFeeDecayCap must be in [0n, ${WAD}] (wad-scale; null = uncapped); got ${cap}`);
|
|
137
164
|
}
|
|
@@ -143,14 +170,32 @@ export const createGasOracle = (options) => {
|
|
|
143
170
|
const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
144
171
|
const retainMempool = options.keepMempoolSnapshot === true;
|
|
145
172
|
const pauseWhenIdle = options.pauseWhenIdle !== false;
|
|
146
|
-
const blockGatedPolling = options.blockGatedPolling !== false;
|
|
147
173
|
const staleAfter = options.staleAfter ?? 0;
|
|
148
174
|
const pauseWhenHidden = options.pauseWhenHidden === true;
|
|
175
|
+
const fetchFeeHistoryEnabled = options.poll?.feeHistory !== false;
|
|
176
|
+
const fetchMempoolEnabled = options.poll?.mempool !== false;
|
|
177
|
+
// Adopt or construct the ChainSource. `ownsSource` controls whether
|
|
178
|
+
// the oracle's start/stop also drives the source's lifecycle — when
|
|
179
|
+
// a source was provided externally, the consumer manages it.
|
|
180
|
+
const ownsSource = !hasSource;
|
|
181
|
+
const source = options.source ??
|
|
182
|
+
createChainSource({
|
|
183
|
+
// hasClient is true when hasSource is false, by the validation above.
|
|
184
|
+
client: options.client,
|
|
185
|
+
pollIntervalMs,
|
|
186
|
+
poll: options.poll,
|
|
187
|
+
onError: options.onError,
|
|
188
|
+
});
|
|
149
189
|
let state = null;
|
|
190
|
+
// Cached mempool snapshot powering `getMempoolSnapshot()` — populated
|
|
191
|
+
// only when `keepMempoolSnapshot` is on.
|
|
150
192
|
let mempoolSnapshot = null;
|
|
151
|
-
|
|
193
|
+
// Latest mempool snapshot received from `source.subscribeMempool`.
|
|
194
|
+
// Used as input to the next reduce regardless of `keepMempoolSnapshot`.
|
|
195
|
+
let latestMempool = null;
|
|
196
|
+
let unsubBlocks = null;
|
|
197
|
+
let unsubMempool = null;
|
|
152
198
|
let staleTimer = null;
|
|
153
|
-
let lastSeenBlock = null;
|
|
154
199
|
let started = false;
|
|
155
200
|
let visibilityListener = null;
|
|
156
201
|
const subscribers = new Set();
|
|
@@ -162,14 +207,10 @@ export const createGasOracle = (options) => {
|
|
|
162
207
|
catch { /* swallow per-subscriber errors */ }
|
|
163
208
|
}
|
|
164
209
|
};
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
//
|
|
168
|
-
const
|
|
169
|
-
const inputs = await fetchOracleInputs(options.client, {
|
|
170
|
-
onError: options.onError,
|
|
171
|
-
poll: options.poll,
|
|
172
|
-
});
|
|
210
|
+
// Reduce a (block, feeHistory, mempool) tuple into the next state +
|
|
211
|
+
// notify. Shared between the subscribe-driven path (timer ticks) and
|
|
212
|
+
// the on-demand path (`pollOnce`).
|
|
213
|
+
const reduceAndPublish = (inputs) => {
|
|
173
214
|
const next = reducePollInputs({
|
|
174
215
|
inputs,
|
|
175
216
|
chainId: options.chainId,
|
|
@@ -178,68 +219,87 @@ export const createGasOracle = (options) => {
|
|
|
178
219
|
priorityModel: options.priorityModel,
|
|
179
220
|
baseFeeLivenessBlocks: options.baseFeeLivenessBlocks,
|
|
180
221
|
});
|
|
222
|
+
// `next` is null only when the input block is null, but every
|
|
223
|
+
// caller of reduceAndPublish (handleBlock, pollOnce) already
|
|
224
|
+
// gates on a non-null block. Guard kept defensively in case a
|
|
225
|
+
// future caller wires it differently.
|
|
226
|
+
/* c8 ignore next */
|
|
181
227
|
if (next) {
|
|
182
228
|
state = next;
|
|
183
|
-
lastSeenBlock = next.blockNumber;
|
|
184
|
-
if (retainMempool) {
|
|
185
|
-
// Re-normalize each cycle. `inputs.txPool` is null when the
|
|
186
|
-
// mempool RPC is gated/disabled — store an empty snapshot
|
|
187
|
-
// rather than leaving stale data from a prior cycle around.
|
|
188
|
-
mempoolSnapshot = normalizeMempool(inputs.txPool);
|
|
189
|
-
}
|
|
190
229
|
notify(next);
|
|
191
230
|
}
|
|
192
231
|
return next;
|
|
193
232
|
};
|
|
194
|
-
//
|
|
195
|
-
//
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
233
|
+
// Block-event handler. Fires once per de-duped block emit from the
|
|
234
|
+
// source. Fetches feeHistory on demand (so a static head doesn't
|
|
235
|
+
// re-fetch it), then reduces with the most recent mempool snapshot.
|
|
236
|
+
const handleBlock = async (block) => {
|
|
237
|
+
const feeHistory = fetchFeeHistoryEnabled
|
|
238
|
+
? await source.getFeeHistory(20, [10, 25, 50, 75, 90])
|
|
239
|
+
: null;
|
|
240
|
+
reduceAndPublish({ block, feeHistory, txPool: latestMempool });
|
|
241
|
+
};
|
|
242
|
+
// Mempool-event handler. Caches the latest snapshot for the next
|
|
243
|
+
// block reduce + powers `getMempoolSnapshot()` when retention is on.
|
|
244
|
+
const handleMempool = (snapshot) => {
|
|
245
|
+
latestMempool = snapshot;
|
|
246
|
+
if (retainMempool) {
|
|
247
|
+
mempoolSnapshot = snapshot;
|
|
208
248
|
}
|
|
209
|
-
return fullCycle();
|
|
210
249
|
};
|
|
211
|
-
const
|
|
212
|
-
if (
|
|
250
|
+
const attachToSource = () => {
|
|
251
|
+
if (unsubBlocks !== null)
|
|
213
252
|
return;
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
//
|
|
219
|
-
//
|
|
220
|
-
|
|
221
|
-
|
|
253
|
+
unsubBlocks = source.subscribeBlocks((b) => {
|
|
254
|
+
void handleBlock(b);
|
|
255
|
+
});
|
|
256
|
+
unsubMempool = source.subscribeMempool(handleMempool);
|
|
257
|
+
// Start the source's poll loop when we own it. This is gated on
|
|
258
|
+
// attach (not on `oracle.start()`) so `pauseWhenIdle` truly
|
|
259
|
+
// suppresses RPC traffic — no consumers means no polling. Source
|
|
260
|
+
// start/stop is idempotent so subscribe → unsubscribe → subscribe
|
|
261
|
+
// cycles are safe.
|
|
262
|
+
if (ownsSource)
|
|
263
|
+
source.start();
|
|
264
|
+
// Note: no need to clear `staleTimer` here. The only path that
|
|
265
|
+
// sets a non-null `staleTimer` is `scheduleIdleDetach` (called
|
|
266
|
+
// when the last subscriber leaves), and that path leaves
|
|
267
|
+
// `unsubBlocks !== null`. So a re-subscribe entering this
|
|
268
|
+
// function early-returns at the `unsubBlocks !== null` guard
|
|
269
|
+
// above before reaching this point. Every other path that
|
|
270
|
+
// crosses an attach/detach boundary (timer-driven detach,
|
|
271
|
+
// visibility-driven detach, oracle.stop, scheduleIdleDetach
|
|
272
|
+
// with staleAfter <= 0) clears the timer in `detachFromSource`.
|
|
222
273
|
};
|
|
223
|
-
const
|
|
224
|
-
if (
|
|
225
|
-
|
|
226
|
-
|
|
274
|
+
const detachFromSource = () => {
|
|
275
|
+
if (unsubBlocks !== null) {
|
|
276
|
+
unsubBlocks();
|
|
277
|
+
unsubBlocks = null;
|
|
278
|
+
}
|
|
279
|
+
if (unsubMempool !== null) {
|
|
280
|
+
unsubMempool();
|
|
281
|
+
unsubMempool = null;
|
|
227
282
|
}
|
|
228
283
|
if (staleTimer !== null) {
|
|
229
284
|
clearTimeout(staleTimer);
|
|
230
285
|
staleTimer = null;
|
|
231
286
|
}
|
|
287
|
+
// Stop the private source when we detach. External sources stay
|
|
288
|
+
// running — other consumers may still need them.
|
|
289
|
+
if (ownsSource)
|
|
290
|
+
source.stop();
|
|
232
291
|
};
|
|
233
|
-
const
|
|
292
|
+
const scheduleIdleDetach = () => {
|
|
234
293
|
if (staleAfter <= 0) {
|
|
235
|
-
|
|
294
|
+
detachFromSource();
|
|
236
295
|
return;
|
|
237
296
|
}
|
|
238
297
|
if (staleTimer !== null)
|
|
239
298
|
return;
|
|
240
299
|
staleTimer = setTimeout(() => {
|
|
241
|
-
|
|
242
|
-
|
|
300
|
+
// detachFromSource already nullifies staleTimer; no need to
|
|
301
|
+
// do it explicitly here.
|
|
302
|
+
detachFromSource();
|
|
243
303
|
}, staleAfter);
|
|
244
304
|
};
|
|
245
305
|
const documentRef = typeof globalThis !== 'undefined' && 'document' in globalThis
|
|
@@ -250,13 +310,13 @@ export const createGasOracle = (options) => {
|
|
|
250
310
|
return;
|
|
251
311
|
const listener = () => {
|
|
252
312
|
if (documentRef.hidden) {
|
|
253
|
-
|
|
313
|
+
detachFromSource();
|
|
254
314
|
return;
|
|
255
315
|
}
|
|
256
|
-
// Tab became visible —
|
|
257
|
-
// subscriber
|
|
316
|
+
// Tab became visible — re-attach if we have a reason to (no
|
|
317
|
+
// subscriber gating, OR subscribers are present).
|
|
258
318
|
if (!pauseWhenIdle || subscribers.size > 0) {
|
|
259
|
-
|
|
319
|
+
attachToSource();
|
|
260
320
|
}
|
|
261
321
|
};
|
|
262
322
|
documentRef.addEventListener('visibilitychange', listener);
|
|
@@ -275,44 +335,67 @@ export const createGasOracle = (options) => {
|
|
|
275
335
|
return;
|
|
276
336
|
started = true;
|
|
277
337
|
setupVisibilityHandling();
|
|
278
|
-
//
|
|
279
|
-
//
|
|
280
|
-
//
|
|
281
|
-
//
|
|
338
|
+
// Subscriber + visibility gating: attach our subscribers to the
|
|
339
|
+
// source only when there's a reason. Source.start() is driven
|
|
340
|
+
// from inside `attachToSource()` (when ownsSource), so a
|
|
341
|
+
// pauseWhenIdle oracle with no subscribers issues zero RPCs
|
|
342
|
+
// beyond the one-time capability probe.
|
|
282
343
|
if (pauseWhenHidden && isHidden())
|
|
283
344
|
return;
|
|
284
345
|
if (!pauseWhenIdle || subscribers.size > 0) {
|
|
285
|
-
|
|
346
|
+
attachToSource();
|
|
286
347
|
}
|
|
287
348
|
},
|
|
288
349
|
stop: () => {
|
|
289
|
-
|
|
350
|
+
// detachFromSource() also stops the private source when we own
|
|
351
|
+
// it — see attachToSource for the matching start. External
|
|
352
|
+
// sources stay running for other consumers.
|
|
353
|
+
detachFromSource();
|
|
290
354
|
teardownVisibilityHandling();
|
|
291
355
|
state = null;
|
|
292
356
|
mempoolSnapshot = null;
|
|
293
|
-
|
|
357
|
+
latestMempool = null;
|
|
294
358
|
started = false;
|
|
295
359
|
},
|
|
296
360
|
getState: () => state,
|
|
297
361
|
getMempoolSnapshot: () => mempoolSnapshot,
|
|
298
|
-
// pollOnce
|
|
299
|
-
//
|
|
300
|
-
//
|
|
301
|
-
pollOnce
|
|
362
|
+
// `pollOnce` forces a fresh reduce regardless of head-probe gating
|
|
363
|
+
// or block dedup at the source layer. Goes through the source's
|
|
364
|
+
// on-demand methods rather than `subscribeBlocks` because dedup
|
|
365
|
+
// would swallow a same-head pollOnce and never fire the subscriber.
|
|
366
|
+
pollOnce: async () => {
|
|
367
|
+
const block = await source.getBlock('latest');
|
|
368
|
+
if (!block)
|
|
369
|
+
return null;
|
|
370
|
+
const [feeHistory, freshMempool] = await Promise.all([
|
|
371
|
+
fetchFeeHistoryEnabled
|
|
372
|
+
? source.getFeeHistory(20, [10, 25, 50, 75, 90])
|
|
373
|
+
: Promise.resolve(null),
|
|
374
|
+
fetchMempoolEnabled
|
|
375
|
+
? source.getMempoolSnapshot()
|
|
376
|
+
: Promise.resolve(null),
|
|
377
|
+
]);
|
|
378
|
+
latestMempool = freshMempool;
|
|
379
|
+
if (retainMempool) {
|
|
380
|
+
mempoolSnapshot = freshMempool;
|
|
381
|
+
}
|
|
382
|
+
return reduceAndPublish({ block, feeHistory, txPool: freshMempool });
|
|
383
|
+
},
|
|
302
384
|
subscribe: (cb) => {
|
|
303
385
|
subscribers.add(cb);
|
|
304
|
-
// 0 → 1 transition:
|
|
305
|
-
//
|
|
386
|
+
// 0 → 1 transition: re-attach to the source if subscriber-gating
|
|
387
|
+
// had us detached.
|
|
306
388
|
if (started && pauseWhenIdle && subscribers.size === 1) {
|
|
307
389
|
if (!pauseWhenHidden || !isHidden()) {
|
|
308
|
-
|
|
390
|
+
attachToSource();
|
|
309
391
|
}
|
|
310
392
|
}
|
|
311
393
|
return () => {
|
|
312
394
|
subscribers.delete(cb);
|
|
313
|
-
// n → 0 transition: schedule
|
|
395
|
+
// n → 0 transition: schedule detach (immediate or after
|
|
396
|
+
// `staleAfter` window).
|
|
314
397
|
if (started && pauseWhenIdle && subscribers.size === 0) {
|
|
315
|
-
|
|
398
|
+
scheduleIdleDetach();
|
|
316
399
|
}
|
|
317
400
|
};
|
|
318
401
|
},
|
package/dist/oracle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.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,kBAyCF,CAAA"}
|
package/dist/viem-transport.js
CHANGED
|
@@ -146,7 +146,15 @@ export const withGasOracle = (innerTransport, options) => {
|
|
|
146
146
|
// most built-in transports don't require a chain config for request
|
|
147
147
|
// dispatch — chainId validation happens elsewhere.
|
|
148
148
|
const oracleInner = innerTransport({});
|
|
149
|
-
|
|
149
|
+
// Expose `transport: oracleInner` so chain-source's structural
|
|
150
|
+
// capability probe (`typeof transport.subscribe === 'function'`)
|
|
151
|
+
// can see whether the inner transport supports WS subscriptions —
|
|
152
|
+
// a webSocket() transport carries `subscribe`, http() does not.
|
|
153
|
+
// Without `transport` here, the probe throws on construction.
|
|
154
|
+
const oracleClient = {
|
|
155
|
+
request: oracleInner.request,
|
|
156
|
+
transport: oracleInner,
|
|
157
|
+
};
|
|
150
158
|
// viem-transport intercepts RPC methods, which is a pull-based
|
|
151
159
|
// access pattern (state read inside the request handler). Default
|
|
152
160
|
// `pauseWhenIdle: false` so the cache stays warm across intercepts
|
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,MAAM,EAAkB,MAAM,MAAM,CAAA;AAE7C,OAAO,EAAE,eAAe,EAA+C,MAAM,aAAa,CAAA;AAyC1F;;;;;GAKG;AACH,MAAM,WAAW,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAEpD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAE1D,MAAM,UAAU,GAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;AAEtE;;;;GAIG;AACH,MAAM,UAAU,GAAG,CACjB,IAAwB,EACxB,MAA0B,EACF,EAAE;IAC1B,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC3C,CAAC;IACD,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YACtC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;SACvD,CAAA;IACH,CAAC;IACD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YACtC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACtD,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;SACrD,CAAA;IACH,CAAC;IACD,yCAAyC;IACzC,MAAM,GAAG,GAA2B;QAClC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QACtC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;KACvD,CAAA;IACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAC1B,KAAqB,EACrB,MAAiB,EACQ,EAAE;IAC3B,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACpE,MAAM,KAAK,GAA2C,EAAE,CAAA;IACxD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;IACrD,CAAC;IACD,MAAM,GAAG,GAA4B;QACnC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;QACrC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;QACnC,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;QAC/C,KAAK;KACN,CAAA;IACD,IAAI,KAAK,CAAC,IAAI;QAAE,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC/D,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,KAAK,EAC7B,IAA4C,EAC5C,MAAiB,EACjB,SAA2B,EACY,EAAE;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;IAEhC,IAAI,IAAI,CAAC,MAAM,KAAK,oBAAoB,IAAI,SAAS,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;QACnF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK;YAAE,OAAO,WAAW,CAAA;QAC9B,OAAO,mBAAmB,CAAC,KAAK,EAAE,MAAmB,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAA;QACnC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,WAAW,CAAA;QAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK;YAAE,OAAO,WAAW,CAAA;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,0BAA0B,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,wBAAwB,CAAA;QAC/C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,WAAW,CAAA;QAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK;YAAE,OAAO,WAAW,CAAA;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAA;IACtD,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,cAAyB,EACzB,OAA6B,EACT,EAAE;IACtB,MAAM,SAAS,GAAqB;QAClC,kBAAkB,EAAE,IAAI;QACxB,GAAG,OAAO,CAAC,SAAS;KACrB,CAAA;IAED,wEAAwE;IACxE,oEAAoE;IACpE,mDAAmD;IACnD,MAAM,WAAW,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;IACtC,+DAA+D;IAC/D,iEAAiE;IACjE,kEAAkE;IAClE,gEAAgE;IAChE,8DAA8D;IAC9D,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,SAAS,EAAE,WAAW;KACuC,CAAA;IAC/D,+DAA+D;IAC/D,kEAAkE;IAClE,mEAAmE;IACnE,kEAAkE;IAClE,MAAM,MAAM,GAAG,eAAe,CAAC;QAC7B,aAAa,EAAE,KAAK;QACpB,GAAG,OAAO;QACV,MAAM,EAAE,YAAY;KACrB,CAAC,CAAA;IACF,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,OAAO;QAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAE9D,MAAM,OAAO,GAAG,MAAM,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,IAA4C,EAAE,EAAE;YAC9D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;YAC/D,IAAI,MAAM,KAAK,WAAW;gBAAE,OAAO,MAAM,CAAA;YACzC,+DAA+D;YAC/D,gEAAgE;YAChE,OAAO,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAW,CAAC,CAAA;QACnF,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AACvE,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@valve-tech/gas-oracle",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.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",
|
|
@@ -58,6 +58,9 @@
|
|
|
58
58
|
"test:coverage": "vitest run --coverage",
|
|
59
59
|
"prepare": "yarn build"
|
|
60
60
|
},
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"@valve-tech/chain-source": "^0.7.0"
|
|
63
|
+
},
|
|
61
64
|
"peerDependencies": {
|
|
62
65
|
"viem": "^2.0.0"
|
|
63
66
|
}
|
|
@@ -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,
|
|
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.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Integrating `@valve-tech/gas-oracle`
|
|
@@ -96,3 +96,56 @@ import { withGasOracle } from '@valve-tech/gas-oracle/viem-transport'
|
|
|
96
96
|
- Human-facing docs: `node_modules/@valve-tech/gas-oracle/README.md`
|
|
97
97
|
- Source (when types alone aren't enough): `node_modules/@valve-tech/gas-oracle/dist/`
|
|
98
98
|
(compiled JS + .d.ts) — sources aren't shipped, only built output.
|
|
99
|
+
|
|
100
|
+
## Tx tracking — composing with `@valve-tech/tx-tracker`
|
|
101
|
+
|
|
102
|
+
When the user asks to "track this transaction," "watch tx hash,"
|
|
103
|
+
"know when my tx confirms," or "detect stuck transactions," redirect
|
|
104
|
+
them to `@valve-tech/tx-tracker` (sibling package). The gas oracle
|
|
105
|
+
does NOT track per-tx state — that's a separate concern with its own
|
|
106
|
+
state machine, retention policy, and consumption shapes. See
|
|
107
|
+
`node_modules/@valve-tech/tx-tracker/skills/tx-tracker-integration/SKILL.md`
|
|
108
|
+
for the full integration recipe.
|
|
109
|
+
|
|
110
|
+
The two packages are designed to share one upstream RPC stream:
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
import { createChainSource } from '@valve-tech/chain-source'
|
|
114
|
+
import { createGasOracle } from '@valve-tech/gas-oracle'
|
|
115
|
+
import { createTxTracker } from '@valve-tech/tx-tracker'
|
|
116
|
+
|
|
117
|
+
const source = createChainSource({ client })
|
|
118
|
+
const oracle = createGasOracle({ source, chainId: 1 })
|
|
119
|
+
const tracker = createTxTracker({ source, chainId: 1 })
|
|
120
|
+
|
|
121
|
+
source.start(); oracle.start(); tracker.start()
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`ChainSource` owns the upstream poll cycle. The oracle reads it for
|
|
125
|
+
tier reduction; the tracker reads it for per-tx observations. **One
|
|
126
|
+
upstream RPC poll cycle, two derived views** (per spec §3.1). Each
|
|
127
|
+
surface owns its own lifecycle — `oracle.stop()` does not stop the
|
|
128
|
+
source or the tracker.
|
|
129
|
+
|
|
130
|
+
### Anti-patterns when both are present
|
|
131
|
+
|
|
132
|
+
7. **Constructing a private `ChainSource` for the tracker AND passing
|
|
133
|
+
`client` (not `source`) to `createGasOracle`.** That gives you two
|
|
134
|
+
independent sources for the same chain — double the RPC traffic
|
|
135
|
+
for no functional benefit. Either pass `source` to BOTH, or use
|
|
136
|
+
the `client` shorthand on BOTH (one private source on the oracle's
|
|
137
|
+
side, no tracker — meaningless if you want both).
|
|
138
|
+
|
|
139
|
+
8. **Asking the gas oracle "is my tx confirmed?"** Wrong layer. The
|
|
140
|
+
oracle publishes tier recommendations; it does not observe per-tx
|
|
141
|
+
state. Use `tracker.getTxStatus(hash)` or
|
|
142
|
+
`tracker.subscribe(hash, cb)` from `@valve-tech/tx-tracker`.
|
|
143
|
+
|
|
144
|
+
### Recognizing both packages in the user's code
|
|
145
|
+
|
|
146
|
+
```ts
|
|
147
|
+
import { createGasOracle } from '@valve-tech/gas-oracle'
|
|
148
|
+
import { createTxTracker } from '@valve-tech/tx-tracker'
|
|
149
|
+
// `package.json` will have both under dependencies, plus
|
|
150
|
+
// `@valve-tech/chain-source` (the shared foundation both consume).
|
|
151
|
+
```
|