All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- BREAKING: Distribute separate CommonJS and ESM files (#351)
- Use the
exportsfield ofpackage.json, breaking some previously valid imports.
- Use the
PollingBlockTracker.checkForLatestBlock()andgetLatestBlock()now clear the cached block afterblockResetduration when called and thePollingBlockTrackeris not polling. (#348)
PollingBlockTracker.getLatestBlock()now accepts an optional parameteruseCache(#340)- This option defaults to
true, but whenfalse, it ignores the cached block number and instead updates and returns a new block number, ensuring that the frequency of requests is limited to thepollingIntervalperiod
- This option defaults to
- Bump
@metamask/eth-json-rpc-providerfrom^4.1.5to^5.0.0(#334)
- Fixed hanging
getLatestBlock()promises when block tracker is stopped before request completion (#320)- Pending
getLatestBlock()requests are now properly rejected with "Block tracker destroyed" error when the tracker is stopped
- Pending
- Errors that occur while polling are no longer wrapped (#310)
- BREAKING: Remove
SubscribeBlockTracker(#309)- Although we continue to maintain this, we have not used it internally for quite some time. In general we have found a polling-based approval to be reliable than a subscription-based approach. We recommend using
PollingBlockTrackerinstead.
- Although we continue to maintain this, we have not used it internally for quite some time. In general we have found a polling-based approval to be reliable than a subscription-based approach. We recommend using
- Fix
PollingBlockTracker.getLatestBlockso that it throws an error encountered while making the request instead of hanging, regardless of whether the request occurs inside or outside of a polling loop (#313) - Fix
PollingBlockTracker.getLatestBlockso that if invoked while a previous invocation is pending, it will throw if that invocation also throws (#313)
- Bump
@metamask/utilsfrom^9.1.0to^11.0.1(#297)
- Avoid risk of infinite retry loops when fetching new blocks (#284)
- When the provider returns an error and
PollingBlockTrackerorSubscribeBlockTrackeris destroyed, the promise returned by thegetLatestBlockmethod will be rejected.
- When the provider returns an error and
- Bump
@metamask/eth-json-rpc-providerfrom^4.1.1to^4.1.5(#273)
- Bump
@metamask/eth-json-rpc-providerfrom^4.1.0to^4.1.1(#261) - Bump
@metamask/safe-event-emitterfrom^3.0.0to^3.1.1(#261) - Bump
@metamask/utilsfrom^8.1.0to^9.1.0(#261)
- BREAKING: Adapt to EIP-1193 provider changes by using
requestmethod of provider instead ofsendAsync(#252)- This change included in
10.1.0was mistakenly categorised as a non-breaking change. - This requires provider object to have the
requestmethod. You need to upgrade to minimum4.1.0of@metamask/eth-json-rpc-providerso that therequestmethod is available.
- This change included in
10.1.0 [DEPRECATED]
- Adapt to EIP-1193 provider changes (#252)
- Deprecated
sendAsyncmethod is replaced withrequestmethod
- Deprecated
- Bump
@metamask/eth-json-rpc-providerfrom^4.0.0to^4.1.0(#252)
- BREAKING: Drop support for Node.js v16; add support for Node.js v20, v22 (#245)
- Update
@metamask/eth-json-rpc-providerfrom^3.0.2to^4.0.0(#247)
- Update dependency
@metamask/eth-json-rpc-enginefrom^7.1.1to^8.0.2(#235) - Update dependency
@metamask/eth-json-rpc-providerfrom^2.3.1to^3.0.2(#235)
- Put back missing empty
paramstoeth_blockNumbercall removed in 9.0.1 (#198)
- Concurrency fix: Prevent multiple simultaneous polling loops (#208)
- Bump
@metamask/eth-json-rpc-providerfrom^2.1.0to^2.3.1(#198) (#217)
- Rename package from
eth-block-trackerto@metamask/eth-block-tracker(#183)
- Typescript: Add
checkForLatestBlockfunction toBlockTrackerinterface (#184)
- Bump @metamask/utils from ^5.0.2 to ^8.1.0 (#178)
- BREAKING: Bump @metamask/eth-json-rpc-provider from ^1.0.0 to ^2.1.0 (#174)
- BREAKING: Increase minimum Node.js version to 16 (#173)
- Typescript: Export
BlockTrackerinterface (#168)
- Dependency Updates: (#165)
- Bump pify from ^3.0.0 to ^5.0.0
- Bump @metamask/utils from ^5.0.1 to ^5.0.2
- Add
usePastBlocksto constructor (#151)- Optional flag. When set to true, it allows blocks less than the current block number to be cached and returned.
- Dependency updates:
- BREAKING: The type of the
provideroption forPollingBlockTrackerandSubscribeBlockTrackerhas changed (#130)- The
provideroption must be compatible with theSafeEventEmitterProvidertype from@metamask/eth-json-rpc-middleware. - The new provider type should be mostly equivalent, except that it's now expected to have a
sendmethod. We don't use thatsendmethod in this package though.
- The
- BREAKING: Remove the
Providerexported type (#130)- We now use
@metamask/eth-json-rpc-providerfor this instead, so there was no need to re-export it.
- We now use
- Add back Provider type that was accidentally removed in 6.0.0 (#117)
- Align Provider type with
eth-json-rpc-middlewareto prevent typecasting (#117)
- Add logging (#112)
- You will not be able to see log messages by default, but you can turn them on for this library by setting the
DEBUGenvironment variable tometamask:eth-block-tracker:*ormetamask:*.
- You will not be able to see log messages by default, but you can turn them on for this library by setting the
- Add
destroymethod to block tracker classes (#106) - Update PollingBlockTracker to support new
blockResetDurationoption (#103) - Expose types that represent options to PollingBlockTracker and SubscribeBlockTracker constructors (#103)
- BREAKING: Require Node >= 14 (#113)
- BREAKING: Make BaseBlockTracker abstract (#103)
- If you are using this class directly, you must only use PollingBlockTracker or SubscribeBlockTracker.
- BREAKING: Make options for BaseBlockTracker required (#103)
- Subclasses must pass a set of options to
superin their constructors.
- Subclasses must pass a set of options to
- Make argument to
removeAllListenersin BaseBlockTracker optional (#103) - BREAKING: Update signatures for
_startand_endin BaseBlockTracker (#103)- Subclasses must provide an implementation for both of these methods; they are no longer no-ops.
- Both methods must return a promise.
- Update SubscribeBlockTracker to not pass empty
newHeadsparameter toeth_subscribecall (#108)- This change was made because OpenEthereum does not support this parameter. While we've done our best to confirm that this will not be a breaking change for other Ethereum implementations, you will want to confirm no breakages for yours.
- Add
@lavamoat/allow-scriptsto ensure that install scripts are opt-in for dependencies (#97)
5.0.1 - 2021-03-25
- Add missing
typesfield topackage.json(#75)
5.0.0 - 2021-03-25
- (BREAKING) Refactor exports (#71)
- (BREAKING) Target ES2017, remove ES5 builds (#71)
- Migrate to TypeScript (#71)
- Update various dependencies (#44, #49, #54, #59, #61, #62, #63, #70, #72)
4.4.3 - 2019-08-30
- Add SubscribeBlockTracker
- Change events so that they now only return the block number (internal polling is done via
eth_blockNumber) - Add
retryTimeoutandkeepEventLoopActiveto constructor - Update block trackers to inherit from
safe-event-emitterrather than EventEmitter
- Remove
blockevent- Please use
latestorsync.
- Please use
4.0.0 - 2018-04-26
- Add isRunning method
- Add
errorevent
- Significantly rewrite
eth-block-tracker(primarily due to optimizing network IO) - Rename
awaitCurrentBlocktogetLatestBlock
- Remove
stop/startmethods from BlockTrackers- BlockTrackers now automatically start and stop based on listener count for the
latestandsyncevents. You can force a stop by calling theEventEmittermethodremoveAllListeners.
- BlockTrackers now automatically start and stop based on listener count for the
- Remove tx body from block
- Remove getTrackingBlock
- Remove start/stop
- Remove test/util/testBlockMiddleware
3.0.0 - 2018-04-16
- Update published version so main module now exports unprocessed source
- Module includes dist:
- Bundle:
dist/EthBlockTracker.js - ES5 source:
dist/es5/
- Bundle:
- Rename
libtosrc - Update RpcBlockTracker to be a normal
EventEmitter- It no longer provides a callback to event handlers.
- Fix
awaitCurrentBlockreturn value
2.0.0 - 2017-06-14
- Expose EventEmitter interface (via
async-eventemitter) - Add
getTrackingBlock,getCurrentBlock,start, andstop - Add events:
block,latest,sync
1.0.0 - 2017-02-03
- Add RpcBlockTracker