merkle-patricia-tree
Advanced tools
Comparing version 3.0.0 to 4.0.0
118
CHANGELOG.md
# Changelog | ||
All notable changes to this project will be documented in this file. | ||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) | ||
(modification: no type change headlines) and this project adheres to | ||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) | ||
(modification: no type change headlines) and this project adheres to | ||
[Semantic Versioning](http://semver.org/spec/v2.0.0.html). | ||
## [4.0.0] - 2020-04-17 | ||
This release introduces a major API upgrade from callbacks to Promises. | ||
Example using async/await syntax: | ||
```typescript | ||
import { BaseTrie as Trie } from 'merkle-patricia-tree' | ||
const trie = new Trie() | ||
async function test() { | ||
await trie.put(Buffer.from('test'), Buffer.from('one')) | ||
const value = await trie.get(Buffer.from('test')) | ||
console.log(value.toString()) // 'one' | ||
} | ||
test() | ||
``` | ||
### Breaking Changes | ||
#### Trie methods | ||
See the [docs](https://github.com/ethereumjs/merkle-patricia-tree/tree/master/docs) for the latest Promise-based method signatures. | ||
#### Trie.prove renamed to Trie.createProof | ||
To clarify the method's purpose `Trie.prove` has been renamed to `Trie.createProof`. `Trie.prove` has been deprecated but will remain as an alias for `Trie.createProof` until removed. | ||
#### Trie raw methods | ||
`getRaw`, `putRaw` and `delRaw` were deprecated in `v3.0.0` and have been removed from this release. Instead, please use `trie.db.get`, `trie.db.put`, and `trie.db.del`. If using a `SecureTrie` or `CheckpointTrie`, use `trie._maindb` to override the checkpointing mechanism and interact directly with the db. | ||
#### SecureTrie.copy | ||
`SecureTrie.copy` now includes checkpoint metadata by default. To maintain original behavior of _not_ copying checkpoint state, pass `false` to param `includeCheckpoints`. | ||
### Changed | ||
- Convert trieNode to ES6 class ([#71](https://github.com/ethereumjs/merkle-patricia-tree/pull/71)) | ||
- Merge checkpoint and secure interface with their ES6 classes ([#73](https://github.com/ethereumjs/merkle-patricia-tree/pull/73)) | ||
- Extract db-related methods from baseTrie ([#74](https://github.com/ethereumjs/merkle-patricia-tree/pull/74)) | ||
- \_lookupNode callback to use standard error, response pattern ([#83](https://github.com/ethereumjs/merkle-patricia-tree/pull/83)) | ||
- Accept leveldb in constructor, minor fixes ([#92](https://github.com/ethereumjs/merkle-patricia-tree/pull/92)) | ||
- Refactor TrieNode, add levelup types ([#98](https://github.com/ethereumjs/merkle-patricia-tree/pull/98)) | ||
- Promisify rest of library ([#107](https://github.com/ethereumjs/merkle-patricia-tree/pull/107)) | ||
- Use `Nibbles` type for `number[]` ([#115](https://github.com/ethereumjs/merkle-patricia-tree/pull/115)) | ||
- Upgrade ethereumjs-util to 7.0.0 / Upgrade level-mem to 5.0.1 ([#116](https://github.com/ethereumjs/merkle-patricia-tree/pull/116)) | ||
- Create dual ES5 and ES2017 builds ([#117](https://github.com/ethereumjs/merkle-patricia-tree/pull/117)) | ||
- Include checkpoints by default in SecureTrie.copy ([#119](https://github.com/ethereumjs/merkle-patricia-tree/pull/119)) | ||
- Rename Trie.prove to Trie.createProof ([#122](https://github.com/ethereumjs/merkle-patricia-tree/pull/122)) | ||
### Added | ||
- Support for proofs of null/absence. Dried up prove/verify. ([#82](https://github.com/ethereumjs/merkle-patricia-tree/pull/82)) | ||
- Add more Ethereum state DB focused example accessing account values ([#89](https://github.com/ethereumjs/merkle-patricia-tree/pull/89)) | ||
### Fixed | ||
- Drop ethereumjs-testing dep and fix bug in branch value update ([#69](https://github.com/ethereumjs/merkle-patricia-tree/pull/69)) | ||
- Fix prove and verifyProof in SecureTrie ([#79](https://github.com/ethereumjs/merkle-patricia-tree/pull/79)) | ||
- Fixed src code links in docs ([#93](https://github.com/ethereumjs/merkle-patricia-tree/pull/93)) | ||
### Dev / Testing / CI | ||
- Update tape to v4.10.1 ([#81](https://github.com/ethereumjs/merkle-patricia-tree/pull/81)) | ||
- Org links and git hooks ([#87](https://github.com/ethereumjs/merkle-patricia-tree/pull/87)) | ||
- Use module.exports syntax in util files ([#90](https://github.com/ethereumjs/merkle-patricia-tree/pull/90)) | ||
- Rename deprecated sha3 consts and func to keccak256 ([#91](https://github.com/ethereumjs/merkle-patricia-tree/pull/91)) | ||
- Migrate to Typescript ([#96](https://github.com/ethereumjs/merkle-patricia-tree/pull/96)) | ||
- Fix Travis's xvfb service ([#97](https://github.com/ethereumjs/merkle-patricia-tree/pull/97)) | ||
- Fix test cases and docs ([#104](https://github.com/ethereumjs/merkle-patricia-tree/pull/104)) | ||
- Upgrade CI Provider from Travis to GH Actions ([#105](https://github.com/ethereumjs/merkle-patricia-tree/pull/105)) | ||
- Upgrade test suite to TS ([#106](https://github.com/ethereumjs/merkle-patricia-tree/pull/106)) | ||
- Better document `_formatNode` ([#109](https://github.com/ethereumjs/merkle-patricia-tree/pull/109)) | ||
- Move `failingRefactorTests` to `secure.spec.ts` ([#110](https://github.com/ethereumjs/merkle-patricia-tree/pull/110)) | ||
- Fix test suite typos ([#114](https://github.com/ethereumjs/merkle-patricia-tree/pull/110)) | ||
[4.0.0]: https://github.com/ethereumjs/merkle-patricia-tree/compare/v3.0.0...v4.0.0 | ||
## [3.0.0] - 2019-01-03 | ||
This release comes along with some major version bump of the underlying ``level`` | ||
database storage backend. If you have the library deeper integrated in one of | ||
This release comes along with some major version bump of the underlying `level` | ||
database storage backend. If you have the library deeper integrated in one of | ||
your projects make sure that the new DB version plays well with the rest of the | ||
code. | ||
The release also introduces modern ``ES6`` JavaScript for the library (thanks @alextsg) | ||
switching to ``ES6`` classes and clean inheritance on all the modules. | ||
The release also introduces modern `ES6` JavaScript for the library (thanks @alextsg) | ||
switching to `ES6` classes and clean inheritance on all the modules. | ||
- Replace ``levelup`` 1.2.1 + ``memdown`` 1.0.0 with ``level-mem`` 3.0.1 and upgrade ``level-ws`` to 1.0.0, PR [#56](https://github.com/ethereumjs/merkle-patricia-tree/pull/56) | ||
- Support for ``ES6`` classes, PRs [#57](https://github.com/ethereumjs/merkle-patricia-tree/pull/57), [#61](https://github.com/ethereumjs/merkle-patricia-tree/pull/61) | ||
- Updated ``async`` and ``readable-stream`` dependencies (resulting in smaller browser builds), PR [#60](https://github.com/ethereumjs/merkle-patricia-tree/pull/60) | ||
- Replace `levelup` 1.2.1 + `memdown` 1.0.0 with `level-mem` 3.0.1 and upgrade `level-ws` to 1.0.0, PR [#56](https://github.com/ethereumjs/merkle-patricia-tree/pull/56) | ||
- Support for `ES6` classes, PRs [#57](https://github.com/ethereumjs/merkle-patricia-tree/pull/57), [#61](https://github.com/ethereumjs/merkle-patricia-tree/pull/61) | ||
- Updated `async` and `readable-stream` dependencies (resulting in smaller browser builds), PR [#60](https://github.com/ethereumjs/merkle-patricia-tree/pull/60) | ||
- Updated, automated and cleaned up [API documentation](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/docs/index.md) build, PR [#63](https://github.com/ethereumjs/merkle-patricia-tree/pull/63) | ||
@@ -26,4 +105,5 @@ | ||
## [2.3.2] - 2018-09-24 | ||
- Fixed a bug in verify proof if the tree contains an extension node with an embedded branch node, PR [#51](https://github.com/ethereumjs/merkle-patricia-tree/pull/51) | ||
- Fixed ``_scratch`` 'leak' to global/window, PR [#42](https://github.com/ethereumjs/merkle-patricia-tree/pull/42) | ||
- Fixed `_scratch` 'leak' to global/window, PR [#42](https://github.com/ethereumjs/merkle-patricia-tree/pull/42) | ||
- Fixed coverage report leaving certain tests, PR [#53](https://github.com/ethereumjs/merkle-patricia-tree/pull/53) | ||
@@ -34,5 +114,6 @@ | ||
## [2.3.1] - 2018-03-14 | ||
- Fix OutOfMemory bug when trying to create a read stream on large trie structures | ||
- Fix OutOfMemory bug when trying to create a read stream on large trie structures | ||
(e.g. a current state DB from a Geth node), PR [#38](https://github.com/ethereumjs/merkle-patricia-tree/pull/38) | ||
- Fix race condition due to mutated ``_getDBs``/``_putDBs``, PR [#28](https://github.com/ethereumjs/merkle-patricia-tree/pull/28) | ||
- Fix race condition due to mutated `_getDBs`/`_putDBs`, PR [#28](https://github.com/ethereumjs/merkle-patricia-tree/pull/28) | ||
@@ -42,13 +123,16 @@ [2.3.1]: https://github.com/ethereumjs/merkle-patricia-tree/compare/v2.3.0...v2.3.1 | ||
## [2.3.0] - 2017-11-30 | ||
- Methods for merkle proof generation ``Trie.prove()`` and verification ``Trie.verifyProof()`` (see [./proof.js](./proof.js)) | ||
- Methods for merkle proof generation `Trie.prove()` and verification `Trie.verifyProof()` (see [./proof.js](./proof.js)) | ||
[2.3.0]: https://github.com/ethereumjs/merkle-patricia-tree/compare/v2.2.0...v2.3.0 | ||
## [2.2.0] - 2017-08-03 | ||
- Renamed ``root`` functions argument to ``nodeRef`` for passing a node reference | ||
- Make ``findPath()`` (path to node for given key) a public method | ||
- Renamed `root` functions argument to `nodeRef` for passing a node reference | ||
- Make `findPath()` (path to node for given key) a public method | ||
[2.2.0]: https://github.com/ethereumjs/merkle-patricia-tree/compare/v2.1.2...v2.2.0 | ||
## [2.1.2] - 2016-03-01 | ||
- Added benchmark (see [./benchmarks/](./benchmarks/)) | ||
@@ -60,2 +144,3 @@ - Updated dependencies | ||
## [2.1.1] - 2016-01-06 | ||
- Added README, API documentation | ||
@@ -67,6 +152,5 @@ - Dependency updates | ||
## [2.0.3] - 2015-09-24 | ||
- Initial, first of the currently released version on npm | ||
[2.0.3]: https://github.com/ethereumjs/merkle-patricia-tree/compare/1.1.x...2.0.3 | ||
{ | ||
"name": "merkle-patricia-tree", | ||
"version": "3.0.0", | ||
"version": "4.0.0", | ||
"description": "This is an implementation of the modified merkle patricia tree as specified in the Ethereum's yellow paper.", | ||
"main": "index.js", | ||
"main": "dist/index.js", | ||
"types": "dist/index.d.ts", | ||
"files": [ | ||
"dist", | ||
"dist.browser" | ||
], | ||
"browser": "dist.browser/index.js", | ||
"scripts": { | ||
"benchmarks": "npm run build && ts-node benchmarks/index.ts", | ||
"build": "tsc -p tsconfig.prod.json && tsc -p tsconfig.browser.json", | ||
"prepublishOnly": "npm run test && npm run build", | ||
"coverage": "nyc --reporter=lcov npm run test:node", | ||
"docs:build": "typedoc", | ||
"lint": "ethereumjs-config-lint", | ||
"lint:fix": "ethereumjs-config-lint-fix", | ||
"format": "ethereumjs-config-format", | ||
"format:fix": "ethereumjs-config-format-fix", | ||
"formatTest": "node ./scripts/formatTest", | ||
"tsc": "ethereumjs-config-tsc", | ||
"test": "npm run test:node && npm run test:browser", | ||
"coverage": "istanbul cover tape ./test/*.js", | ||
"coveralls": "npm run coverage && coveralls <coverage/lcov.info", | ||
"lint": "standard", | ||
"prepublishOnly": "npm run build", | ||
"test:browser": "karma start karma.conf.js", | ||
"test:node": "babel-tape-runner ./test/*.js", | ||
"babel": "npx babel src --out-dir ./", | ||
"build": "npm run babel && mkdir -p dist && browserify --s Trie index.js -o dist/trie.js -t [ babelify --presets [ @babel/preset-env ] ]", | ||
"build:docs": "documentation build ./src/** -f md --shallow ./src/index.js ./src/secure.js ./src/proof.js > ./docs/index.md --github --config documentation.yml --markdown-toc false" | ||
"test:browser": "npm run build && karma start karma.conf.js", | ||
"test:node": "npm run build && tape -r ts-node/register test/*.ts" | ||
}, | ||
"husky": { | ||
"hooks": { | ||
"pre-push": "npm run lint" | ||
} | ||
}, | ||
"author": { | ||
@@ -37,39 +52,33 @@ "name": "mjbecze", | ||
"dependencies": { | ||
"async": "^2.6.1", | ||
"ethereumjs-util": "^5.2.0", | ||
"level-mem": "^3.0.1", | ||
"level-ws": "^1.0.0", | ||
"readable-stream": "^3.0.6", | ||
"rlp": "^2.0.0", | ||
"semaphore": ">=1.0.1" | ||
"@types/levelup": "^3.1.1", | ||
"ethereumjs-util": "^7.0.2", | ||
"level-mem": "^5.0.1", | ||
"level-ws": "^2.0.0", | ||
"readable-stream": "^3.6.0", | ||
"rlp": "^2.2.4", | ||
"semaphore-async-await": "^1.5.1" | ||
}, | ||
"devDependencies": { | ||
"@babel/cli": "^7.1.5", | ||
"@babel/core": "^7.1.2", | ||
"@babel/plugin-proposal-class-properties": "^7.1.0", | ||
"@babel/preset-env": "^7.1.0", | ||
"babel-tape-runner": "^3.0.0", | ||
"babelify": "^10.0.0", | ||
"browserify": "^13.0.0", | ||
"coveralls": "^2.11.6", | ||
"documentation": "^8.1.2", | ||
"ethereumjs-testing": "0.0.1", | ||
"istanbul": "^0.4.1", | ||
"karma": "^1.7.1", | ||
"karma-browserify": "^5.0.0", | ||
"karma-chrome-launcher": "^2.2.0", | ||
"karma-detect-browsers": "^2.0.2", | ||
"karma-env-preprocessor": "^0.1.1", | ||
"karma-firefox-launcher": "^1.0.1", | ||
"karma-tap": "^1.0.3", | ||
"standard": "^5.3.1", | ||
"tape": "^4.4.0" | ||
"@ethereumjs/config-nyc": "^1.1.1", | ||
"@ethereumjs/config-prettier": "^1.1.1", | ||
"@ethereumjs/config-tsc": "^1.1.1", | ||
"@ethereumjs/config-tslint": "^1.1.1", | ||
"@types/bn.js": "^4.11.6", | ||
"@types/tape": "^4.2.34", | ||
"husky": "^4.2.3", | ||
"karma": "^4.4.1", | ||
"karma-chrome-launcher": "^3.1.0", | ||
"karma-firefox-launcher": "^1.3.0", | ||
"karma-tap": "^4.2.0", | ||
"karma-typescript": "^5.0.1", | ||
"nyc": "^15.0.0", | ||
"prettier": "^2.0.2", | ||
"tape": "^4.13.2", | ||
"ts-node": "^8.8.1", | ||
"tslint": "^5.18.0", | ||
"typedoc": "next", | ||
"typedoc-plugin-markdown": "^2.2.17", | ||
"typescript": "^3.7.5", | ||
"typestrict": "^1.0.2" | ||
}, | ||
"standard": { | ||
"ignore": [ | ||
"dist/**", | ||
"package-init.js", | ||
"package.js" | ||
] | ||
}, | ||
"contributors": [ | ||
@@ -76,0 +85,0 @@ "Aaron Kumavis <http://aaron.kumavis.me/> (https://github.com/kumavis)" |
158
README.md
# SYNOPSIS | ||
[![NPM Package](https://img.shields.io/npm/v/merkle-patricia-tree.svg?style=flat-square)](https://www.npmjs.org/package/merkle-patricia-tree) | ||
[![Build Status](https://img.shields.io/travis/ethereumjs/merkle-patricia-tree.svg?branch=master&style=flat-square)](https://travis-ci.org/ethereumjs/merkle-patricia-tree) | ||
[![Coverage Status](https://img.shields.io/coveralls/ethereumjs/merkle-patricia-tree.svg?style=flat-square)](https://coveralls.io/r/ethereumjs/merkle-patricia-tree) | ||
[![Gitter](https://img.shields.io/gitter/room/ethereum/ethereumjs-lib.svg?style=flat-square)](https://gitter.im/ethereum/ethereumjs-lib) or #ethereumjs on freenode | ||
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) | ||
[![NPM Package](https://img.shields.io/npm/v/merkle-patricia-tree)](https://www.npmjs.org/package/merkle-patricia-tree) | ||
[![Actions Status](https://github.com/ethereumjs/merkle-patricia-tree/workflows/Build/badge.svg)](https://github.com/ethereumjs/merkle-patricia-tree/actions) | ||
[![Coverage Status](https://img.shields.io/coveralls/ethereumjs/merkle-patricia-tree.svg)](https://coveralls.io/r/ethereumjs/merkle-patricia-tree) | ||
[![Gitter](https://img.shields.io/gitter/room/ethereum/ethereumjs.svg)](https://gitter.im/ethereum/ethereumjs) | ||
This is an implementation of the modified merkle patricia tree as specified in the [Ethereum's yellow paper](http://gavwood.com/Paper.pdf). | ||
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) | ||
> The modified Merkle Patricia tree (trie) provides a persistent data structure to map between arbitrary-length binary data (byte arrays). It is defined in terms of a mutable data structure to map between 256-bit binary fragments and arbitrary-length binary data. The core of the trie, and its sole requirement in terms of the protocol specification is to provide a single 32-byte value that identifies a given set of key-value pairs. | ||
\- Ethereum's yellow paper | ||
This is an implementation of the modified merkle patricia tree as specified in the [Ethereum Yellow Paper](http://gavwood.com/Paper.pdf): | ||
The only backing store supported is LevelDB through the ```levelup``` module. | ||
> The modified Merkle Patricia tree (trie) provides a persistent data structure to map between arbitrary-length binary data (byte arrays). It is defined in terms of a mutable data structure to map between 256-bit binary fragments and arbitrary-length binary data. The core of the trie, and its sole requirement in terms of the protocol specification is to provide a single 32-byte value that identifies a given set of key-value pairs. | ||
The only backing store supported is LevelDB through the `levelup` module. | ||
# INSTALL | ||
`npm install merkle-patricia-tree` | ||
`npm install merkle-patricia-tree` | ||
# USAGE | ||
There are 3 variants of the tree implemented in this library, namely: `BaseTrie`, `CheckpointTrie` and `SecureTrie`. `CheckpointTrie` adds checkpointing functionality to the `BaseTrie` with the methods `checkpoint`, `commit` and `revert`. `SecureTrie` extends `CheckpointTrie` and is the most suitable variant for Ethereum applications. It stores values under the `keccak256` hash of their keys. | ||
## Initialization and Basic Usage | ||
```javascript | ||
var Trie = require('merkle-patricia-tree'), | ||
level = require('level'), | ||
db = level('./testdb'), | ||
trie = new Trie(db); | ||
```typescript | ||
import level from 'level' | ||
import { BaseTrie as Trie } from 'merkle-patricia-tree' | ||
trie.put('test', 'one', function () { | ||
trie.get('test', function (err, value) { | ||
if(value) console.log(value.toString()) | ||
}); | ||
}); | ||
const db = level('./testdb') | ||
const trie = new Trie(db) | ||
async function test() { | ||
await trie.put(Buffer.from('test'), Buffer.from('one')) | ||
const value = await trie.get(Buffer.from('test')) | ||
console.log(value.toString()) // 'one' | ||
} | ||
test() | ||
``` | ||
@@ -38,11 +44,13 @@ | ||
```javascript | ||
Trie.prove(trie, 'test', function (err, prove) { | ||
if (err) return cb(err) | ||
Trie.verifyProof(trie.root, 'test', prove, function (err, value) { | ||
if (err) return cb(err) | ||
console.log(value.toString()) | ||
cb() | ||
}) | ||
}) | ||
```typescript | ||
const trie = new Trie() | ||
async function test() { | ||
await trie.put(Buffer.from('test'), Buffer.from('one')) | ||
const proof = await Trie.createProof(trie, Buffer.from('test')) | ||
const value = await Trie.verifyProof(trie.root, Buffer.from('test'), proof) | ||
console.log(value.toString()) // 'one' | ||
} | ||
test() | ||
``` | ||
@@ -52,16 +60,16 @@ | ||
```javascript | ||
var level = require('level') | ||
var Trie = require('./secure') | ||
```typescript | ||
import level from 'level' | ||
import { SecureTrie as Trie } from 'merkle-patricia-tree' | ||
var stateRoot = "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544" // Block #222 | ||
const db = level('YOUR_PATH_TO_THE_GETH_CHAIN_DB') | ||
// Set stateRoot to block #222 | ||
const stateRoot = '0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544' | ||
// Initialize trie | ||
const trie = new Trie(db, stateRoot) | ||
var db = level('YOUR_PATH_TO_THE_GETH_CHAIN_DB') | ||
var trie = new Trie(db, stateRoot) | ||
trie.createReadStream() | ||
.on('data', function (data) { | ||
console.log(data) | ||
}) | ||
.on('end', function() { | ||
trie | ||
.createReadStream() | ||
.on('data', console.log) | ||
.on('end', () => { | ||
console.log('End.') | ||
@@ -71,6 +79,52 @@ }) | ||
## Read Account State including Storage from Geth DB | ||
```typescript | ||
import level from 'level' | ||
import rlp from 'rlp' | ||
import { BN, bufferToHex } from 'ethereumjs-util' | ||
import Account from 'ethereumjs-account' | ||
import { SecureTrie as Trie } from 'merkle-patricia-tree' | ||
const stateRoot = 'STATE_ROOT_OF_A_BLOCK' | ||
const db = level('YOUR_PATH_TO_THE_GETH_CHAINDATA_FOLDER') | ||
const trie = new Trie(db, stateRoot) | ||
const address = 'AN_ETHEREUM_ACCOUNT_ADDRESS' | ||
async function test() { | ||
const data = await trie.get(address) | ||
const acc = new Account(data) | ||
console.log('-------State-------') | ||
console.log(`nonce: ${new BN(acc.nonce)}`) | ||
console.log(`balance in wei: ${new BN(acc.balance)}`) | ||
console.log(`storageRoot: ${bufferToHex(acc.stateRoot)}`) | ||
console.log(`codeHash: ${bufferToHex(acc.codeHash)}`) | ||
let storageTrie = trie.copy() | ||
storageTrie.root = acc.stateRoot | ||
console.log('------Storage------') | ||
const stream = storageTrie.createReadStream() | ||
stream | ||
.on('data', (data) => { | ||
console.log(`key: ${bufferToHex(data.key)}`) | ||
console.log(`Value: ${bufferToHex(rlp.decode(data.value))}`) | ||
}) | ||
.on('end', () => { | ||
console.log('Finished reading storage.') | ||
}) | ||
} | ||
test() | ||
``` | ||
# API | ||
[./docs/](./docs/index.md) | ||
[Documentation](./docs/README.md) | ||
# TESTING | ||
`npm test` | ||
@@ -80,9 +134,19 @@ | ||
- ["Exploring Ethereum's state trie with Node.js"](https://wanderer.github.io/ethereum/nodejs/code/2014/05/21/using-ethereums-tries-with-node/) blog post | ||
- ["Merkling in Ethereum"](https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/) blog post | ||
- [Ethereum Trie Specification](https://github.com/ethereum/wiki/wiki/Patricia-Tree) Wiki | ||
- ["Understanding the ethereum trie"](https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/) blog post | ||
- ["Trie and Patricia Trie Overview"](https://www.youtube.com/watch?v=jXAHLqQthKw&t=26s) Video Talk on Youtube | ||
- Wiki | ||
- [Ethereum Trie Specification](https://github.com/ethereum/wiki/wiki/Patricia-Tree) | ||
- Blog posts | ||
- [Exploring Ethereum's State Trie with Node.js](https://wanderer.github.io/ethereum/nodejs/code/2014/05/21/using-ethereums-tries-with-node/) | ||
- [Merkling in Ethereum](https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/) | ||
- [Understanding the Ethereum Trie](https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/) | ||
- Videos | ||
- [Trie and Patricia Trie Overview](https://www.youtube.com/watch?v=jXAHLqQthKw&t=26s) | ||
# EthereumJS | ||
See our organizational [documentation](https://ethereumjs.readthedocs.io) for an introduction to `EthereumJS` as well as information on current standards and best practices. | ||
If you want to join for work or do improvements on the libraries have a look at our [contribution guidelines](https://ethereumjs.readthedocs.io/en/latest/contributing.html). | ||
# LICENSE | ||
MPL-2.0 |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
101
149
0
492285
21
9132
2
+ Added@types/levelup@^3.1.1
+ Addedsemaphore-async-await@^1.5.1
+ Added@types/abstract-leveldown@7.2.5(transitive)
+ Added@types/bn.js@5.1.6(transitive)
+ Added@types/levelup@3.1.1(transitive)
+ Addedabstract-leveldown@6.2.36.3.0(transitive)
+ Addeddeferred-leveldown@5.3.0(transitive)
+ Addedencoding-down@6.3.0(transitive)
+ Addedethereumjs-util@7.1.5(transitive)
+ Addedimmediate@3.3.0(transitive)
+ Addedlevel-concat-iterator@2.0.1(transitive)
+ Addedlevel-iterator-stream@4.0.2(transitive)
+ Addedlevel-mem@5.0.1(transitive)
+ Addedlevel-packager@5.1.1(transitive)
+ Addedlevel-supports@1.0.1(transitive)
+ Addedlevel-ws@2.0.0(transitive)
+ Addedlevelup@4.4.0(transitive)
+ Addedmemdown@5.1.0(transitive)
+ Addedsemaphore-async-await@1.5.1(transitive)
+ Addedstring_decoder@1.3.0(transitive)
- Removedasync@^2.6.1
- Removedsemaphore@>=1.0.1
- Removedabstract-leveldown@5.0.0(transitive)
- Removedasync@2.6.4(transitive)
- Removedcore-util-is@1.0.3(transitive)
- Removeddeferred-leveldown@4.0.2(transitive)
- Removedencoding-down@5.0.4(transitive)
- Removedethereumjs-util@5.2.1(transitive)
- Removedethjs-util@0.1.6(transitive)
- Removedis-hex-prefixed@1.0.0(transitive)
- Removedisarray@1.0.0(transitive)
- Removedlevel-iterator-stream@3.0.1(transitive)
- Removedlevel-mem@3.0.1(transitive)
- Removedlevel-packager@4.0.1(transitive)
- Removedlevel-ws@1.0.0(transitive)
- Removedlevelup@3.1.1(transitive)
- Removedlodash@4.17.21(transitive)
- Removedmemdown@3.0.0(transitive)
- Removedprocess-nextick-args@2.0.1(transitive)
- Removedreadable-stream@2.3.8(transitive)
- Removedsafe-buffer@5.1.2(transitive)
- Removedsemaphore@1.1.0(transitive)
- Removedstring_decoder@1.1.1(transitive)
- Removedstrip-hex-prefix@1.0.0(transitive)
Updatedethereumjs-util@^7.0.2
Updatedlevel-mem@^5.0.1
Updatedlevel-ws@^2.0.0
Updatedreadable-stream@^3.6.0
Updatedrlp@^2.2.4