New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@metamask/nonce-tracker

Package Overview
Dependencies
Maintainers
12
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@metamask/nonce-tracker - npm Package Compare versions

Comparing version 5.0.0 to 6.0.0

20

CHANGELOG.md

@@ -9,2 +9,19 @@ # Changelog

## [6.0.0]
### Added
- New `setProvider` function allows atomically changing provider and blockTracker ([#75](https://github.com/MetaMask/nonce-tracker/pull/75))
### Removed
- **BREAKING**: These private properties are no longer accessible: ([#75](https://github.com/MetaMask/nonce-tracker/pull/75))
- `blockTracker`
- `lockMap`
- `provider`
- `web3`
- **BREAKING**: These private functions are no longer accessible: ([#75](https://github.com/MetaMask/nonce-tracker/pull/75))
- `getConfirmedTransactions`
- `getPendingTransactions`
### Fixed
- Types: Allow `blockTracker` constructor option to be any `BlockTracker` instead of class `PollingBlockTracker` ([#76](https://github.com/MetaMask/nonce-tracker/pull/76))
## [5.0.0]

@@ -58,3 +75,4 @@ ### Changed

[Unreleased]: https://github.com/MetaMask/nonce-tracker/compare/v5.0.0...HEAD
[Unreleased]: https://github.com/MetaMask/nonce-tracker/compare/v6.0.0...HEAD
[6.0.0]: https://github.com/MetaMask/nonce-tracker/compare/v5.0.0...v6.0.0
[5.0.0]: https://github.com/MetaMask/nonce-tracker/compare/v4.0.0...v5.0.0

@@ -61,0 +79,0 @@ [4.0.0]: https://github.com/MetaMask/nonce-tracker/compare/v3.0.0...v4.0.0

24

dist/NonceTracker.d.ts
import { Mutex } from 'async-mutex';
import type { PollingBlockTracker } from '@metamask/eth-block-tracker';
import type { BlockTracker } from '@metamask/eth-block-tracker';
/**
* @property opts.provider - An ethereum provider
* @property opts.blockTracker - An instance of eth-block-tracker
* @property opts.blockTracker - An instance of @metamask/eth-block-tracker
* @property opts.getPendingTransactions - A function that returns an array of txMeta

@@ -13,3 +13,3 @@ * whose status is `submitted`

provider: Record<string, unknown>;
blockTracker: PollingBlockTracker;
blockTracker: BlockTracker;
getPendingTransactions: (address: string) => Transaction[];

@@ -82,10 +82,16 @@ getConfirmedTransactions: (address: string) => Transaction[];

export declare class NonceTracker {
private provider;
private blockTracker;
private web3;
private getPendingTransactions;
private getConfirmedTransactions;
private lockMap;
#private;
constructor(opts: NonceTrackerOptions);
/**
* Allows changing the provider and block tracker after insrtantiation. As the blockTracker also has a provider, they are updated atomically.
*
* @param opts - new props
* @param opts.provider - An ethereum provider
* @param opts.blockTracker - An instance of @metamask/eth-block-tracker
*/
setProvider({ provider, blockTracker, }: {
provider: Record<string, unknown>;
blockTracker: BlockTracker;
}): void;
/**
* @returns Promise<{ releaseLock: VoidFunction }> with the key releaseLock (the global mutex)

@@ -92,0 +98,0 @@ */

"use strict";
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var _NonceTracker_provider, _NonceTracker_blockTracker, _NonceTracker_getPendingTransactions, _NonceTracker_getConfirmedTransactions, _NonceTracker_lockMap;
Object.defineProperty(exports, "__esModule", { value: true });

@@ -9,14 +21,30 @@ exports.NonceTracker = void 0;

const async_mutex_1 = require("async-mutex");
// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports
const { Web3Provider } = require('@ethersproject/providers');
const providers_1 = require("@ethersproject/providers");
class NonceTracker {
constructor(opts) {
this.provider = opts.provider;
this.blockTracker = opts.blockTracker;
this.web3 = new Web3Provider(opts.provider);
this.getPendingTransactions = opts.getPendingTransactions;
this.getConfirmedTransactions = opts.getConfirmedTransactions;
this.lockMap = {};
_NonceTracker_provider.set(this, void 0);
_NonceTracker_blockTracker.set(this, void 0);
_NonceTracker_getPendingTransactions.set(this, void 0);
_NonceTracker_getConfirmedTransactions.set(this, void 0);
_NonceTracker_lockMap.set(this, void 0);
__classPrivateFieldSet(this, _NonceTracker_provider, opts.provider, "f");
__classPrivateFieldSet(this, _NonceTracker_blockTracker, opts.blockTracker, "f");
__classPrivateFieldSet(this, _NonceTracker_getPendingTransactions, opts.getPendingTransactions, "f");
__classPrivateFieldSet(this, _NonceTracker_getConfirmedTransactions, opts.getConfirmedTransactions, "f");
__classPrivateFieldSet(this, _NonceTracker_lockMap, {}, "f");
}
/**
* Allows changing the provider and block tracker after insrtantiation. As the blockTracker also has a provider, they are updated atomically.
*
* @param opts - new props
* @param opts.provider - An ethereum provider
* @param opts.blockTracker - An instance of @metamask/eth-block-tracker
*/
setProvider({ provider, blockTracker, }) {
assert_1.default(typeof provider === 'object', 'missing or invalid provider');
assert_1.default(typeof blockTracker === 'object', 'missing or invalid blockTracker');
__classPrivateFieldSet(this, _NonceTracker_provider, provider, "f");
__classPrivateFieldSet(this, _NonceTracker_blockTracker, blockTracker, "f");
}
/**
* @returns Promise<{ releaseLock: VoidFunction }> with the key releaseLock (the global mutex)

@@ -48,3 +76,3 @@ */

const highestSuggested = Math.max(nextNetworkNonce, highestLocallyConfirmed);
const pendingTxs = this.getPendingTransactions(address);
const pendingTxs = __classPrivateFieldGet(this, _NonceTracker_getPendingTransactions, "f").call(this, address);
const localNonceResult = this._getHighestContinuousFrom(pendingTxs, highestSuggested);

@@ -82,6 +110,6 @@ const nonceDetails = {

_lookupMutex(lockId) {
let mutex = this.lockMap[lockId];
let mutex = __classPrivateFieldGet(this, _NonceTracker_lockMap, "f")[lockId];
if (!mutex) {
mutex = new async_mutex_1.Mutex();
this.lockMap[lockId] = mutex;
__classPrivateFieldGet(this, _NonceTracker_lockMap, "f")[lockId] = mutex;
}

@@ -101,4 +129,4 @@ return mutex;

// and pending count are from the same block
const blockNumber = await this.blockTracker.getLatestBlock();
const baseCount = await this.web3.getTransactionCount(address, blockNumber);
const blockNumber = await __classPrivateFieldGet(this, _NonceTracker_blockTracker, "f").getLatestBlock();
const baseCount = await new providers_1.Web3Provider(__classPrivateFieldGet(this, _NonceTracker_provider, "f")).getTransactionCount(address, blockNumber);
assert_1.default(Number.isInteger(baseCount), `nonce-tracker - baseCount is not an integer - got: (${typeof baseCount}) "${baseCount}"`);

@@ -117,3 +145,3 @@ return {

_getHighestLocallyConfirmed(address) {
const confirmedTransactions = this.getConfirmedTransactions(address);
const confirmedTransactions = __classPrivateFieldGet(this, _NonceTracker_getConfirmedTransactions, "f").call(this, address);
const highest = this._getHighestNonce(confirmedTransactions);

@@ -157,2 +185,3 @@ return Number.isInteger(highest) ? highest + 1 : 0;

exports.NonceTracker = NonceTracker;
_NonceTracker_provider = new WeakMap(), _NonceTracker_blockTracker = new WeakMap(), _NonceTracker_getPendingTransactions = new WeakMap(), _NonceTracker_getConfirmedTransactions = new WeakMap(), _NonceTracker_lockMap = new WeakMap();
//# sourceMappingURL=NonceTracker.js.map
{
"name": "@metamask/nonce-tracker",
"version": "5.0.0",
"version": "6.0.0",
"description": "Transaction nonce calculation used in MetaMask.",

@@ -31,3 +31,3 @@ "keywords": [

"devDependencies": {
"@lavamoat/allow-scripts": "^2.5.1",
"@lavamoat/allow-scripts": "^3.0.4",
"@lavamoat/preinstall-always-fail": "^1.0.3",

@@ -34,0 +34,0 @@ "@metamask/auto-changelog": "^3.3.0",

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc