From 373df49167fe83b192dadcd62697232cd900f9ff Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Thu, 6 Feb 2020 09:55:43 -0800 Subject: [PATCH 1/8] fix test cases and docs --- .travis.yml | 3 +- README.md | 18 +- docs/README.md | 416 ++++++++++++ docs/classes/branchnode.md | 169 +++++ docs/classes/checkpointtrie.md | 843 +++++++++++++++++++++++ docs/classes/db.md | 147 ++++ docs/classes/extensionnode.md | 181 +++++ docs/classes/leafnode.md | 181 +++++ docs/classes/prioritizedtaskexecutor.md | 92 +++ docs/classes/scratchdb.md | 167 +++++ docs/classes/scratchreadstream.md | 66 ++ docs/classes/securetrie.md | 848 ++++++++++++++++++++++++ docs/classes/trie.md | 636 ++++++++++++++++++ docs/classes/triereadstream.md | 66 ++ docs/index.md | 493 -------------- docs/interfaces/delbatch.md | 30 + docs/interfaces/putbatch.md | 39 ++ docs/interfaces/task.md | 30 + package.json | 6 +- src/baseTrie.ts | 18 +- test/checkpoint.js | 62 +- test/encodeing.js | 6 +- test/index.js | 225 ++++--- test/offical.js | 110 +-- test/proof.js | 419 ++++++------ test/secure.js | 113 ++-- test/streams.js | 245 ++++--- typedoc.json | 5 +- 28 files changed, 4593 insertions(+), 1041 deletions(-) create mode 100644 docs/README.md create mode 100644 docs/classes/branchnode.md create mode 100644 docs/classes/checkpointtrie.md create mode 100644 docs/classes/db.md create mode 100644 docs/classes/extensionnode.md create mode 100644 docs/classes/leafnode.md create mode 100644 docs/classes/prioritizedtaskexecutor.md create mode 100644 docs/classes/scratchdb.md create mode 100644 docs/classes/scratchreadstream.md create mode 100644 docs/classes/securetrie.md create mode 100644 docs/classes/trie.md create mode 100644 docs/classes/triereadstream.md delete mode 100644 docs/index.md create mode 100644 docs/interfaces/delbatch.md create mode 100644 docs/interfaces/putbatch.md create mode 100644 docs/interfaces/task.md diff --git a/.travis.yml b/.travis.yml index 984811d..f637413 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ language: node_js node_js: - - "6" - "8" - "9" - "10" + - "12" env: - CXX=g++-4.8 services: @@ -32,4 +32,3 @@ matrix: node_js: "8" env: CXX=g++-4.8 TEST_SUITE=test:browser script: npm run build && npm run $TEST_SUITE - diff --git a/README.md b/README.md index ca746ef..ac6e0f3 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # 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 +[![NPM Package](https://img.shields.io/npm/v/merkle-patricia-tree)](https://www.npmjs.org/package/merkle-patricia-tree) +[![Build Status](https://img.shields.io/travis/ethereumjs/merkle-patricia-tree/master)](https://travis-ci.org/ethereumjs/merkle-patricia-tree) +[![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-lib.svg)](https://gitter.im/ethereum/ethereumjs-lib) [![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) @@ -30,8 +30,8 @@ const Trie = require('merkle-patricia-tree').BaseTrie, db = level('./testdb'), trie = new Trie(db) -trie.put('test', 'one', function() { - trie.get('test', function(err, value) { +trie.put(Buffer.from('test'), Buffer.from('one'), function() { + trie.get(Buffer.from('test'), function(err, value) { if (value) console.log(value.toString()) }) }) @@ -40,9 +40,9 @@ trie.put('test', 'one', function() { ## Merkle Proofs ```javascript -Trie.prove(trie, 'test', function(err, prove) { +Trie.prove(trie, Buffer.from('test'), function(err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, 'test', prove, function(err, value) { + Trie.verifyProof(trie.root, Buffer.from('test'), prove, function(err, value) { if (err) return cb(err) console.log(value.toString()) cb() @@ -117,7 +117,7 @@ trie.get(address, function(err, data) { # API -[./docs/](./docs/index.md) +[Documentation](./docs/README.md) # TESTING diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..a0362db --- /dev/null +++ b/docs/README.md @@ -0,0 +1,416 @@ +[merkle-patricia-tree](README.md) + +# merkle-patricia-tree + +## Index + +### Classes + +* [BranchNode](classes/branchnode.md) +* [CheckpointTrie](classes/checkpointtrie.md) +* [DB](classes/db.md) +* [ExtensionNode](classes/extensionnode.md) +* [LeafNode](classes/leafnode.md) +* [PrioritizedTaskExecutor](classes/prioritizedtaskexecutor.md) +* [ScratchDB](classes/scratchdb.md) +* [ScratchReadStream](classes/scratchreadstream.md) +* [SecureTrie](classes/securetrie.md) +* [Trie](classes/trie.md) +* [TrieReadStream](classes/triereadstream.md) + +### Interfaces + +* [DelBatch](interfaces/delbatch.md) +* [PutBatch](interfaces/putbatch.md) +* [Task](interfaces/task.md) + +### Type aliases + +* [BatchDBOp](README.md#batchdbop) +* [EmbeddedNode](README.md#embeddednode) +* [ErrorCallback](README.md#errorcallback) +* [Nibbles](README.md#nibbles) +* [TrieNode](README.md#trienode) + +### Variables + +* [Readable](README.md#const-readable) +* [WriteStream](README.md#const-writestream) +* [assert](README.md#const-assert) +* [async](README.md#const-async) +* [level](README.md#const-level) +* [semaphore](README.md#const-semaphore) + +### Functions + +* [addHexPrefix](README.md#addhexprefix) +* [asyncFirstSeries](README.md#asyncfirstseries) +* [callTogether](README.md#calltogether) +* [decodeNode](README.md#decodenode) +* [decodeRawNode](README.md#decoderawnode) +* [doKeysMatch](README.md#dokeysmatch) +* [isRawNode](README.md#israwnode) +* [isTerminator](README.md#private-isterminator) +* [matchingNibbleLength](README.md#private-matchingnibblelength) +* [nibblesToBuffer](README.md#private-nibblestobuffer) +* [removeHexPrefix](README.md#private-removehexprefix) +* [stringToNibbles](README.md#private-stringtonibbles) + +### Object literals + +* [ENCODING_OPTS](README.md#const-encoding_opts) + +## Type aliases + +### BatchDBOp + +Ƭ **BatchDBOp**: *[PutBatch](interfaces/putbatch.md) | [DelBatch](interfaces/delbatch.md)* + +*Defined in [db.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L7)* + +___ + +### EmbeddedNode + +Ƭ **EmbeddedNode**: *Buffer | Buffer[]* + +*Defined in [trieNode.ts:10](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L10)* + +___ + +### ErrorCallback + +Ƭ **ErrorCallback**: *function* + +*Defined in [types.ts:1](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/types.ts#L1)* + +#### Type declaration: + +▸ (`err?`: Error): *void* + +**Parameters:** + +Name | Type | +------ | ------ | +`err?` | Error | + +___ + +### Nibbles + +Ƭ **Nibbles**: *number[]* + +*Defined in [trieNode.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L7)* + +___ + +### TrieNode + +Ƭ **TrieNode**: *[BranchNode](classes/branchnode.md) | [ExtensionNode](classes/extensionnode.md) | [LeafNode](classes/leafnode.md)* + +*Defined in [trieNode.ts:6](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L6)* + +## Variables + +### `Const` Readable + +• **Readable**: *any* = require('readable-stream').Readable + +*Defined in [readStream.ts:4](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/readStream.ts#L4)* + +*Defined in [scratchReadStream.ts:3](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratchReadStream.ts#L3)* + +___ + +### `Const` WriteStream + +• **WriteStream**: *any* = require('level-ws') + +*Defined in [checkpointTrie.ts:9](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L9)* + +___ + +### `Const` assert + +• **assert**: *any* = require('assert') + +*Defined in [baseTrie.ts:19](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L19)* + +___ + +### `Const` async + +• **async**: *any* = require('async') + +*Defined in [util/async.ts:1](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/async.ts#L1)* + +*Defined in [baseTrie.ts:20](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L20)* + +*Defined in [checkpointTrie.ts:8](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L8)* + +___ + +### `Const` level + +• **level**: *any* = require('level-mem') + +*Defined in [db.ts:3](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L3)* + +___ + +### `Const` semaphore + +• **semaphore**: *any* = require('semaphore') + +*Defined in [baseTrie.ts:21](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L21)* + +## Functions + +### addHexPrefix + +▸ **addHexPrefix**(`key`: number[], `terminator`: boolean): *number[]* + +*Defined in [util/hex.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/hex.ts#L7)* + +Prepends hex prefix to an array of nibbles. + +**`method`** addHexPrefix + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | number[] | +`terminator` | boolean | + +**Returns:** *number[]* + +- returns buffer of encoded data + +___ + +### asyncFirstSeries + +▸ **asyncFirstSeries**(`array`: any[], `iterator`: Function, `cb`: Function): *void* + +*Defined in [util/async.ts:32](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/async.ts#L32)* + +Take a collection of async fns, call the cb on the first to return a truthy value. +If all run without a truthy result, return undefined + +**Parameters:** + +Name | Type | +------ | ------ | +`array` | any[] | +`iterator` | Function | +`cb` | Function | + +**Returns:** *void* + +___ + +### callTogether + +▸ **callTogether**(...`funcs`: Function[]): *(Anonymous function)* + +*Defined in [util/async.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/async.ts#L7)* + +Take two or more functions and returns a function that will execute all of +the given functions + +**Parameters:** + +Name | Type | +------ | ------ | +`...funcs` | Function[] | + +**Returns:** *(Anonymous function)* + +___ + +### decodeNode + +▸ **decodeNode**(`raw`: Buffer): *[TrieNode](README.md#trienode)* + +*Defined in [trieNode.ts:12](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L12)* + +**Parameters:** + +Name | Type | +------ | ------ | +`raw` | Buffer | + +**Returns:** *[TrieNode](README.md#trienode)* + +___ + +### decodeRawNode + +▸ **decodeRawNode**(`raw`: Buffer[]): *[TrieNode](README.md#trienode)* + +*Defined in [trieNode.ts:20](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L20)* + +**Parameters:** + +Name | Type | +------ | ------ | +`raw` | Buffer[] | + +**Returns:** *[TrieNode](README.md#trienode)* + +___ + +### doKeysMatch + +▸ **doKeysMatch**(`keyA`: number[], `keyB`: number[]): *boolean* + +*Defined in [util/nibbles.ts:56](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/nibbles.ts#L56)* + +Compare two nibble array keys. + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`keyA` | number[] | - | +`keyB` | number[] | | + +**Returns:** *boolean* + +___ + +### isRawNode + +▸ **isRawNode**(`n`: any): *boolean* + +*Defined in [trieNode.ts:34](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L34)* + +**Parameters:** + +Name | Type | +------ | ------ | +`n` | any | + +**Returns:** *boolean* + +___ + +### `Private` isTerminator + +▸ **isTerminator**(`key`: number[]): *boolean* + +*Defined in [util/hex.ts:46](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/hex.ts#L46)* + +Returns true if hexprefixed path is for a terminating (leaf) node. + +**`method`** isTerminator + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | number[] | an hexprefixed array of nibbles | + +**Returns:** *boolean* + +___ + +### `Private` matchingNibbleLength + +▸ **matchingNibbleLength**(`nib1`: number[], `nib2`: number[]): *number* + +*Defined in [util/nibbles.ts:43](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/nibbles.ts#L43)* + +Returns the number of in order matching nibbles of two give nibble arrays. + +**`method`** matchingNibbleLength + +**Parameters:** + +Name | Type | +------ | ------ | +`nib1` | number[] | +`nib2` | number[] | + +**Returns:** *number* + +___ + +### `Private` nibblesToBuffer + +▸ **nibblesToBuffer**(`arr`: number[]): *Buffer* + +*Defined in [util/nibbles.ts:27](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/nibbles.ts#L27)* + +Converts a nibble array into a buffer. + +**`method`** nibblesToBuffer + +**Parameters:** + +Name | Type | +------ | ------ | +`arr` | number[] | + +**Returns:** *Buffer* + +___ + +### `Private` removeHexPrefix + +▸ **removeHexPrefix**(`val`: number[]): *number[]* + +*Defined in [util/hex.ts:30](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/hex.ts#L30)* + +Removes hex prefix of an array of nibbles. + +**`method`** removeHexPrefix + +**Parameters:** + +Name | Type | +------ | ------ | +`val` | number[] | + +**Returns:** *number[]* + +___ + +### `Private` stringToNibbles + +▸ **stringToNibbles**(`key`: Buffer): *number[]* + +*Defined in [util/nibbles.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/nibbles.ts#L7)* + +Converts a string OR a buffer to a nibble array. + +**`method`** stringToNibbles + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | + +**Returns:** *number[]* + +## Object literals + +### `Const` ENCODING_OPTS + +### ▪ **ENCODING_OPTS**: *object* + +*Defined in [db.ts:5](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L5)* + +### keyEncoding + +• **keyEncoding**: *string* = "binary" + +*Defined in [db.ts:5](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L5)* + +### valueEncoding + +• **valueEncoding**: *string* = "binary" + +*Defined in [db.ts:5](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L5)* diff --git a/docs/classes/branchnode.md b/docs/classes/branchnode.md new file mode 100644 index 0000000..bab0aab --- /dev/null +++ b/docs/classes/branchnode.md @@ -0,0 +1,169 @@ +[merkle-patricia-tree](../README.md) › [BranchNode](branchnode.md) + +# Class: BranchNode + +## Hierarchy + +* **BranchNode** + +## Index + +### Constructors + +* [constructor](branchnode.md#constructor) + +### Properties + +* [_branches](branchnode.md#_branches) +* [_value](branchnode.md#_value) + +### Accessors + +* [value](branchnode.md#value) + +### Methods + +* [getBranch](branchnode.md#getbranch) +* [getChildren](branchnode.md#getchildren) +* [hash](branchnode.md#hash) +* [raw](branchnode.md#raw) +* [serialize](branchnode.md#serialize) +* [setBranch](branchnode.md#setbranch) +* [fromArray](branchnode.md#static-fromarray) + +## Constructors + +### constructor + +\+ **new BranchNode**(): *[BranchNode](branchnode.md)* + +*Defined in [trieNode.ts:40](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L40)* + +**Returns:** *[BranchNode](branchnode.md)* + +## Properties + +### _branches + +• **_branches**: *null | Buffer‹› | Buffer‹›[][]* + +*Defined in [trieNode.ts:39](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L39)* + +___ + +### _value + +• **_value**: *Buffer | null* + +*Defined in [trieNode.ts:40](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L40)* + +## Accessors + +### value + +• **get value**(): *Buffer | null* + +*Defined in [trieNode.ts:54](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L54)* + +**Returns:** *Buffer | null* + +• **set value**(`v`: Buffer | null): *void* + +*Defined in [trieNode.ts:58](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L58)* + +**Parameters:** + +Name | Type | +------ | ------ | +`v` | Buffer | null | + +**Returns:** *void* + +## Methods + +### getBranch + +▸ **getBranch**(`i`: number): *null | Buffer‹› | Buffer‹›[]* + +*Defined in [trieNode.ts:78](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L78)* + +**Parameters:** + +Name | Type | +------ | ------ | +`i` | number | + +**Returns:** *null | Buffer‹› | Buffer‹›[]* + +___ + +### getChildren + +▸ **getChildren**(): *[number, [EmbeddedNode](../README.md#embeddednode)][]* + +*Defined in [trieNode.ts:87](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L87)* + +**Returns:** *[number, [EmbeddedNode](../README.md#embeddednode)][]* + +___ + +### hash + +▸ **hash**(): *Buffer* + +*Defined in [trieNode.ts:74](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L74)* + +**Returns:** *Buffer* + +___ + +### raw + +▸ **raw**(): *null | Buffer‹› | Buffer‹›[][]* + +*Defined in [trieNode.ts:66](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L66)* + +**Returns:** *null | Buffer‹› | Buffer‹›[][]* + +___ + +### serialize + +▸ **serialize**(): *Buffer* + +*Defined in [trieNode.ts:70](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L70)* + +**Returns:** *Buffer* + +___ + +### setBranch + +▸ **setBranch**(`i`: number, `v`: [EmbeddedNode](../README.md#embeddednode) | null): *void* + +*Defined in [trieNode.ts:62](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L62)* + +**Parameters:** + +Name | Type | +------ | ------ | +`i` | number | +`v` | [EmbeddedNode](../README.md#embeddednode) | null | + +**Returns:** *void* + +___ + +### `Static` fromArray + +▸ **fromArray**(`arr`: Buffer[]): *[BranchNode](branchnode.md)* + +*Defined in [trieNode.ts:47](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L47)* + +**Parameters:** + +Name | Type | +------ | ------ | +`arr` | Buffer[] | + +**Returns:** *[BranchNode](branchnode.md)* diff --git a/docs/classes/checkpointtrie.md b/docs/classes/checkpointtrie.md new file mode 100644 index 0000000..6584957 --- /dev/null +++ b/docs/classes/checkpointtrie.md @@ -0,0 +1,843 @@ +[merkle-patricia-tree](../README.md) › [CheckpointTrie](checkpointtrie.md) + +# Class: CheckpointTrie + +## Hierarchy + +* [Trie](trie.md) + + ↳ **CheckpointTrie** + + ↳ [SecureTrie](securetrie.md) + +## Index + +### Constructors + +* [constructor](checkpointtrie.md#constructor) + +### Properties + +* [EMPTY_TRIE_ROOT](checkpointtrie.md#empty_trie_root) +* [_checkpoints](checkpointtrie.md#_checkpoints) +* [_mainDB](checkpointtrie.md#_maindb) +* [_scratch](checkpointtrie.md#_scratch) +* [db](checkpointtrie.md#db) +* [sem](checkpointtrie.md#protected-sem) + +### Accessors + +* [isCheckpoint](checkpointtrie.md#ischeckpoint) +* [root](checkpointtrie.md#root) + +### Methods + +* [_createInitialNode](checkpointtrie.md#_createinitialnode) +* [_createScratchReadStream](checkpointtrie.md#private-_createscratchreadstream) +* [_deleteNode](checkpointtrie.md#_deletenode) +* [_enterCpMode](checkpointtrie.md#private-_entercpmode) +* [_exitCpMode](checkpointtrie.md#private-_exitcpmode) +* [_findDbNodes](checkpointtrie.md#_finddbnodes) +* [_findValueNodes](checkpointtrie.md#_findvaluenodes) +* [_formatNode](checkpointtrie.md#_formatnode) +* [_lookupNode](checkpointtrie.md#_lookupnode) +* [_putNode](checkpointtrie.md#_putnode) +* [_saveStack](checkpointtrie.md#private-_savestack) +* [_updateNode](checkpointtrie.md#private-_updatenode) +* [_walkTrie](checkpointtrie.md#_walktrie) +* [batch](checkpointtrie.md#batch) +* [checkRoot](checkpointtrie.md#checkroot) +* [checkpoint](checkpointtrie.md#checkpoint) +* [commit](checkpointtrie.md#commit) +* [copy](checkpointtrie.md#copy) +* [createReadStream](checkpointtrie.md#createreadstream) +* [del](checkpointtrie.md#del) +* [delRaw](checkpointtrie.md#delraw) +* [findPath](checkpointtrie.md#findpath) +* [get](checkpointtrie.md#get) +* [getRaw](checkpointtrie.md#getraw) +* [put](checkpointtrie.md#put) +* [putRaw](checkpointtrie.md#putraw) +* [revert](checkpointtrie.md#revert) +* [setRoot](checkpointtrie.md#setroot) +* [fromProof](checkpointtrie.md#static-fromproof) +* [prove](checkpointtrie.md#static-prove) +* [verifyProof](checkpointtrie.md#static-verifyproof) + +## Constructors + +### constructor + +\+ **new CheckpointTrie**(...`args`: any): *[CheckpointTrie](checkpointtrie.md)* + +*Overrides [Trie](trie.md).[constructor](trie.md#constructor)* + +*Defined in [checkpointTrie.ts:14](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L14)* + +**Parameters:** + +Name | Type | +------ | ------ | +`...args` | any | + +**Returns:** *[CheckpointTrie](checkpointtrie.md)* + +## Properties + +### EMPTY_TRIE_ROOT + +• **EMPTY_TRIE_ROOT**: *Buffer* + +*Inherited from [Trie](trie.md).[EMPTY_TRIE_ROOT](trie.md#empty_trie_root)* + +*Defined in [baseTrie.ts:34](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L34)* + +___ + +### _checkpoints + +• **_checkpoints**: *Buffer[]* + +*Defined in [checkpointTrie.ts:14](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L14)* + +___ + +### _mainDB + +• **_mainDB**: *[DB](db.md)* + +*Defined in [checkpointTrie.ts:12](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L12)* + +___ + +### _scratch + +• **_scratch**: *[ScratchDB](scratchdb.md) | null* + +*Defined in [checkpointTrie.ts:13](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L13)* + +___ + +### db + +• **db**: *[DB](db.md)* + +*Inherited from [Trie](trie.md).[db](trie.md#db)* + +*Defined in [baseTrie.ts:35](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L35)* + +___ + +### `Protected` sem + +• **sem**: *any* + +*Inherited from [Trie](trie.md).[sem](trie.md#protected-sem)* + +*Defined in [baseTrie.ts:36](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L36)* + +## Accessors + +### isCheckpoint + +• **get isCheckpoint**(): *boolean* + +*Defined in [checkpointTrie.ts:29](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L29)* + +Is the trie during a checkpoint phase? + +**Returns:** *boolean* + +___ + +### root + +• **get root**(): *Buffer* + +*Inherited from [Trie](trie.md).[root](trie.md#root)* + +*Defined in [baseTrie.ts:103](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L103)* + +**Returns:** *Buffer* + +• **set root**(`value`: Buffer): *void* + +*Inherited from [Trie](trie.md).[root](trie.md#root)* + +*Defined in [baseTrie.ts:99](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L99)* + +**Parameters:** + +Name | Type | +------ | ------ | +`value` | Buffer | + +**Returns:** *void* + +## Methods + +### _createInitialNode + +▸ **_createInitialNode**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[_createInitialNode](trie.md#_createinitialnode)* + +*Defined in [baseTrie.ts:735](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L735)* + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`value` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### `Private` _createScratchReadStream + +▸ **_createScratchReadStream**(`scratch`: [ScratchDB](scratchdb.md)): *[ScratchReadStream](scratchreadstream.md)‹›* + +*Defined in [checkpointTrie.ts:154](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L154)* + +Returns a `ScratchReadStream` based on the state updates +since checkpoint. + +**`method`** createScratchReadStream + +**Parameters:** + +Name | Type | +------ | ------ | +`scratch` | [ScratchDB](scratchdb.md) | + +**Returns:** *[ScratchReadStream](scratchreadstream.md)‹›* + +___ + +### _deleteNode + +▸ **_deleteNode**(`k`: Buffer, `stack`: [TrieNode](../README.md#trienode)[], `cb`: Function): *any* + +*Inherited from [Trie](trie.md).[_deleteNode](trie.md#_deletenode)* + +*Defined in [baseTrie.ts:617](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L617)* + +**Parameters:** + +Name | Type | +------ | ------ | +`k` | Buffer | +`stack` | [TrieNode](../README.md#trienode)[] | +`cb` | Function | + +**Returns:** *any* + +___ + +### `Private` _enterCpMode + +▸ **_enterCpMode**(): *void* + +*Defined in [checkpointTrie.ts:125](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L125)* + +Enter into checkpoint mode. + +**Returns:** *void* + +___ + +### `Private` _exitCpMode + +▸ **_exitCpMode**(`commitState`: boolean, `cb`: Function): *void* + +*Defined in [checkpointTrie.ts:134](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L134)* + +Exit from checkpoint mode. + +**Parameters:** + +Name | Type | +------ | ------ | +`commitState` | boolean | +`cb` | Function | + +**Returns:** *void* + +___ + +### _findDbNodes + +▸ **_findDbNodes**(`onFound`: Function, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[_findDbNodes](trie.md#_finddbnodes)* + +*Defined in [baseTrie.ts:346](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L346)* + +**Parameters:** + +Name | Type | +------ | ------ | +`onFound` | Function | +`cb` | Function | + +**Returns:** *void* + +___ + +### _findValueNodes + +▸ **_findValueNodes**(`onFound`: Function, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[_findValueNodes](trie.md#_findvaluenodes)* + +*Defined in [baseTrie.ts:320](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L320)* + +**Parameters:** + +Name | Type | +------ | ------ | +`onFound` | Function | +`cb` | Function | + +**Returns:** *void* + +___ + +### _formatNode + +▸ **_formatNode**(`node`: [TrieNode](../README.md#trienode), `topLevel`: boolean, `opStack`: [BatchDBOp](../README.md#batchdbop)[], `remove`: boolean): *Buffer‹› | null | Buffer‹› | Buffer‹›[][]* + +*Overrides [Trie](trie.md).[_formatNode](trie.md#_formatnode)* + +*Defined in [checkpointTrie.ts:163](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L163)* + +**Parameters:** + +Name | Type | Default | +------ | ------ | ------ | +`node` | [TrieNode](../README.md#trienode) | - | +`topLevel` | boolean | - | +`opStack` | [BatchDBOp](../README.md#batchdbop)[] | - | +`remove` | boolean | false | + +**Returns:** *Buffer‹› | null | Buffer‹› | Buffer‹›[][]* + +___ + +### _lookupNode + +▸ **_lookupNode**(`node`: Buffer | Buffer[], `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[_lookupNode](trie.md#_lookupnode)* + +*Defined in [baseTrie.ts:230](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L230)* + +**Parameters:** + +Name | Type | +------ | ------ | +`node` | Buffer | Buffer[] | +`cb` | Function | + +**Returns:** *void* + +___ + +### _putNode + +▸ **_putNode**(`node`: [TrieNode](../README.md#trienode), `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[_putNode](trie.md#_putnode)* + +*Defined in [baseTrie.ts:247](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L247)* + +**Parameters:** + +Name | Type | +------ | ------ | +`node` | [TrieNode](../README.md#trienode) | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### `Private` _saveStack + +▸ **_saveStack**(`key`: number[], `stack`: [TrieNode](../README.md#trienode)[], `opStack`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[_saveStack](trie.md#private-_savestack)* + +*Defined in [baseTrie.ts:588](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L588)* + +saves a stack + +**`method`** _saveStack + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | number[] | the key. Should follow the stack | +`stack` | [TrieNode](../README.md#trienode)[] | a stack of nodes to the value given by the key | +`opStack` | [BatchDBOp](../README.md#batchdbop)[] | a stack of levelup operations to commit at the end of this funciton | +`cb` | [ErrorCallback](../README.md#errorcallback) | | + +**Returns:** *void* + +___ + +### `Private` _updateNode + +▸ **_updateNode**(`k`: Buffer, `value`: Buffer, `keyRemainder`: number[], `stack`: [TrieNode](../README.md#trienode)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[_updateNode](trie.md#private-_updatenode)* + +*Defined in [baseTrie.ts:370](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L370)* + +Updates a node + +**`method`** _updateNode + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`k` | Buffer | - | +`value` | Buffer | - | +`keyRemainder` | number[] | - | +`stack` | [TrieNode](../README.md#trienode)[] | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | the callback | + +**Returns:** *void* + +___ + +### _walkTrie + +▸ **_walkTrie**(`root`: Buffer, `onNode`: Function, `onDone`: Function): *any* + +*Inherited from [Trie](trie.md).[_walkTrie](trie.md#_walktrie)* + +*Defined in [baseTrie.ts:473](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L473)* + +**Parameters:** + +Name | Type | +------ | ------ | +`root` | Buffer | +`onNode` | Function | +`onDone` | Function | + +**Returns:** *any* + +___ + +### batch + +▸ **batch**(`ops`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[batch](trie.md#batch)* + +*Defined in [baseTrie.ts:799](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L799)* + +The given hash of operations (key additions or deletions) are executed on the DB + +**`method`** batch + +**`memberof`** Trie + +**`example`** +var ops = [ + { type: 'del', key: Buffer.from('father') } + , { type: 'put', key: Buffer.from('name'), value: Buffer.from('Yuri Irsenovich Kim') } + , { type: 'put', key: Buffer.from('dob'), value: Buffer.from('16 February 1941') } + , { type: 'put', key: Buffer.from('spouse'), value: Buffer.from('Kim Young-sook') } + , { type: 'put', key: Buffer.from('occupation'), value: Buffer.from('Clown') } +] +trie.batch(ops) + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`ops` | [BatchDBOp](../README.md#batchdbop)[] | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | | + +**Returns:** *void* + +___ + +### checkRoot + +▸ **checkRoot**(`root`: Buffer, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[checkRoot](trie.md#checkroot)* + +*Defined in [baseTrie.ts:819](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L819)* + +Checks if a given root exists + +**Parameters:** + +Name | Type | +------ | ------ | +`root` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### checkpoint + +▸ **checkpoint**(): *void* + +*Defined in [checkpointTrie.ts:39](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L39)* + +Creates a checkpoint that can later be reverted to or committed. +After this is called, no changes to the trie will be permanently saved +until `commit` is called. Calling `putRaw` overrides the checkpointing +mechanism and would directly write to db. + +**Returns:** *void* + +___ + +### commit + +▸ **commit**(`cb`: Function): *void* + +*Defined in [checkpointTrie.ts:56](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L56)* + +Commits a checkpoint to disk, if current checkpoint is not nested. If +nested, only sets the parent checkpoint as current checkpoint. + +**`method`** commit + +**`throws`** If not during a checkpoint phase + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`cb` | Function | the callback | + +**Returns:** *void* + +___ + +### copy + +▸ **copy**(`includeCheckpoints`: boolean): *[CheckpointTrie](checkpointtrie.md)* + +*Overrides [Trie](trie.md).[copy](trie.md#copy)* + +*Defined in [checkpointTrie.ts:101](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L101)* + +Returns a copy of the underlying trie with the interface +of CheckpointTrie. If during a checkpoint, the copy will +contain the checkpointing metadata (incl. reference to the same scratch). + +**Parameters:** + +Name | Type | Default | Description | +------ | ------ | ------ | ------ | +`includeCheckpoints` | boolean | true | If true and during a checkpoint, the copy will contain the checkpointing metadata and will use the same scratch as underlying db. | + +**Returns:** *[CheckpointTrie](checkpointtrie.md)* + +___ + +### createReadStream + +▸ **createReadStream**(): *ReadStream* + +*Inherited from [Trie](trie.md).[createReadStream](trie.md#createreadstream)* + +*Defined in [baseTrie.ts:772](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L772)* + +The `data` event is given an `Object` hat has two properties; the `key` and the `value`. Both should be Buffers. + +**`method`** createReadStream + +**`memberof`** Trie + +**Returns:** *ReadStream* + +Returns a [stream](https://nodejs.org/dist/latest-v5.x/docs/api/stream.html#stream_class_stream_readable) of the contents of the `trie` + +___ + +### del + +▸ **del**(`key`: Buffer, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[del](trie.md#del)* + +*Defined in [baseTrie.ts:183](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L183)* + +deletes a value given a `key` + +**`method`** del + +**`memberof`** Trie + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### delRaw + +▸ **delRaw**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[delRaw](trie.md#delraw)* + +*Defined in [baseTrie.ts:225](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L225)* + +Deletes key directly from underlying key/value db. + +**`deprecated`** + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### findPath + +▸ **findPath**(`key`: Buffer, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[findPath](trie.md#findpath)* + +*Defined in [baseTrie.ts:266](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L266)* + +Tries to find a path to the node for the given key +It returns a `stack` of nodes to the closet node + +**`method`** findPath + +**`memberof`** Trie + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### get + +▸ **get**(`key`: Buffer, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[get](trie.md#get)* + +*Defined in [baseTrie.ts:125](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L125)* + +Gets a value given a `key` + +**`method`** get + +**`memberof`** Trie + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | Buffer | the key to search for | +`cb` | Function | A callback `Function` which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null` | + +**Returns:** *void* + +___ + +### getRaw + +▸ **getRaw**(`key`: Buffer, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[getRaw](trie.md#getraw)* + +*Defined in [baseTrie.ts:208](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L208)* + +Retrieves a value directly from key/value db. + +**`deprecated`** + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### put + +▸ **put**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[put](trie.md#put)* + +*Defined in [baseTrie.ts:147](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L147)* + +Stores a given `value` at the given `key` + +**`method`** put + +**`memberof`** Trie + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | Buffer | - | +`value` | Buffer | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function` which is given the argument `err` - for errors that may have occured | + +**Returns:** *void* + +___ + +### putRaw + +▸ **putRaw**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Overrides [Trie](trie.md).[putRaw](trie.md#putraw)* + +*Defined in [checkpointTrie.ts:117](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L117)* + +Writes a value under given key directly to the +key/value db, disregarding checkpoints. + +**`deprecated`** + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`value` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### revert + +▸ **revert**(`cb`: Function): *void* + +*Defined in [checkpointTrie.ts:78](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L78)* + +Reverts the trie to the state it was at when `checkpoint` was first called. +If during a nested checkpoint, sets root to most recent checkpoint, and sets +parent checkpoint as current. + +**Parameters:** + +Name | Type | +------ | ------ | +`cb` | Function | + +**Returns:** *void* + +___ + +### setRoot + +▸ **setRoot**(`value?`: Buffer): *void* + +*Inherited from [Trie](trie.md).[setRoot](trie.md#setroot)* + +*Defined in [baseTrie.ts:107](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L107)* + +**Parameters:** + +Name | Type | +------ | ------ | +`value?` | Buffer | + +**Returns:** *void* + +___ + +### `Static` fromProof + +▸ **fromProof**(`proofNodes`: Buffer[], `cb`: Function, `proofTrie?`: [Trie](trie.md)): *void* + +*Inherited from [Trie](trie.md).[fromProof](trie.md#static-fromproof)* + +*Defined in [baseTrie.ts:49](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L49)* + +**Parameters:** + +Name | Type | +------ | ------ | +`proofNodes` | Buffer[] | +`cb` | Function | +`proofTrie?` | [Trie](trie.md) | + +**Returns:** *void* + +___ + +### `Static` prove + +▸ **prove**(`trie`: [Trie](trie.md), `key`: Buffer, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[prove](trie.md#static-prove)* + +*Defined in [baseTrie.ts:70](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L70)* + +**Parameters:** + +Name | Type | +------ | ------ | +`trie` | [Trie](trie.md) | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### `Static` verifyProof + +▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proofNodes`: Buffer[], `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[verifyProof](trie.md#static-verifyproof)* + +*Defined in [baseTrie.ts:85](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L85)* + +**Parameters:** + +Name | Type | +------ | ------ | +`rootHash` | Buffer | +`key` | Buffer | +`proofNodes` | Buffer[] | +`cb` | Function | + +**Returns:** *void* diff --git a/docs/classes/db.md b/docs/classes/db.md new file mode 100644 index 0000000..d6d3394 --- /dev/null +++ b/docs/classes/db.md @@ -0,0 +1,147 @@ +[merkle-patricia-tree](../README.md) › [DB](db.md) + +# Class: DB + +DB is a thin wrapper around the underlying levelup db, +which validates inputs and sets encoding type. + +## Hierarchy + +* **DB** + + ↳ [ScratchDB](scratchdb.md) + +## Index + +### Constructors + +* [constructor](db.md#constructor) + +### Properties + +* [_leveldb](db.md#_leveldb) + +### Methods + +* [batch](db.md#batch) +* [copy](db.md#copy) +* [del](db.md#del) +* [get](db.md#get) +* [put](db.md#put) + +## Constructors + +### constructor + +\+ **new DB**(`leveldb?`: LevelUp): *[DB](db.md)* + +*Defined in [db.ts:23](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L23)* + +Initialize a DB instance. If `leveldb` is not provided, DB +defaults to an [in-memory store](https://github.com/Level/memdown). + +**Parameters:** + +Name | Type | +------ | ------ | +`leveldb?` | LevelUp | + +**Returns:** *[DB](db.md)* + +## Properties + +### _leveldb + +• **_leveldb**: *LevelUp* + +*Defined in [db.ts:23](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L23)* + +## Methods + +### batch + +▸ **batch**(`opStack`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [db.ts:85](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L85)* + +Performs a batch operation on db. + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`opStack` | [BatchDBOp](../README.md#batchdbop)[] | A stack of levelup operations | +`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | + +**Returns:** *void* + +___ + +### copy + +▸ **copy**(): *[DB](db.md)* + +*Defined in [db.ts:95](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L95)* + +Returns a copy of the DB instance, with a reference +to the **same** underlying leveldb instance. + +**Returns:** *[DB](db.md)* + +___ + +### del + +▸ **del**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [db.ts:73](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L73)* + +Removes a raw value in the underlying leveldb. + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | Buffer | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | + +**Returns:** *void* + +___ + +### get + +▸ **get**(`key`: Buffer, `cb`: Function): *void* + +*Defined in [db.ts:41](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L41)* + +Retrieves a raw value from leveldb. + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | Buffer | - | +`cb` | Function | A callback `Function`, which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null`. | + +**Returns:** *void* + +___ + +### put + +▸ **put**(`key`: Buffer, `val`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [db.ts:60](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L60)* + +Writes a value directly to leveldb. + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | Buffer | The key as a `Buffer` or `String` | +`val` | Buffer | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | + +**Returns:** *void* diff --git a/docs/classes/extensionnode.md b/docs/classes/extensionnode.md new file mode 100644 index 0000000..fc568d7 --- /dev/null +++ b/docs/classes/extensionnode.md @@ -0,0 +1,181 @@ +[merkle-patricia-tree](../README.md) › [ExtensionNode](extensionnode.md) + +# Class: ExtensionNode + +## Hierarchy + +* **ExtensionNode** + +## Index + +### Constructors + +* [constructor](extensionnode.md#constructor) + +### Properties + +* [_nibbles](extensionnode.md#_nibbles) +* [_value](extensionnode.md#_value) + +### Accessors + +* [key](extensionnode.md#key) +* [value](extensionnode.md#value) + +### Methods + +* [encodedKey](extensionnode.md#encodedkey) +* [hash](extensionnode.md#hash) +* [raw](extensionnode.md#raw) +* [serialize](extensionnode.md#serialize) +* [decodeKey](extensionnode.md#static-decodekey) +* [encodeKey](extensionnode.md#static-encodekey) + +## Constructors + +### constructor + +\+ **new ExtensionNode**(`nibbles`: [Nibbles](../README.md#nibbles), `value`: Buffer): *[ExtensionNode](extensionnode.md)* + +*Defined in [trieNode.ts:101](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L101)* + +**Parameters:** + +Name | Type | +------ | ------ | +`nibbles` | [Nibbles](../README.md#nibbles) | +`value` | Buffer | + +**Returns:** *[ExtensionNode](extensionnode.md)* + +## Properties + +### _nibbles + +• **_nibbles**: *[Nibbles](../README.md#nibbles)* + +*Defined in [trieNode.ts:100](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L100)* + +___ + +### _value + +• **_value**: *Buffer* + +*Defined in [trieNode.ts:101](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L101)* + +## Accessors + +### key + +• **get key**(): *[Nibbles](../README.md#nibbles)* + +*Defined in [trieNode.ts:116](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L116)* + +**Returns:** *[Nibbles](../README.md#nibbles)* + +• **set key**(`k`: [Nibbles](../README.md#nibbles)): *void* + +*Defined in [trieNode.ts:120](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L120)* + +**Parameters:** + +Name | Type | +------ | ------ | +`k` | [Nibbles](../README.md#nibbles) | + +**Returns:** *void* + +___ + +### value + +• **get value**(): *Buffer* + +*Defined in [trieNode.ts:124](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L124)* + +**Returns:** *Buffer* + +• **set value**(`v`: Buffer): *void* + +*Defined in [trieNode.ts:128](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L128)* + +**Parameters:** + +Name | Type | +------ | ------ | +`v` | Buffer | + +**Returns:** *void* + +## Methods + +### encodedKey + +▸ **encodedKey**(): *[Nibbles](../README.md#nibbles)* + +*Defined in [trieNode.ts:132](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L132)* + +**Returns:** *[Nibbles](../README.md#nibbles)* + +___ + +### hash + +▸ **hash**(): *Buffer* + +*Defined in [trieNode.ts:144](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L144)* + +**Returns:** *Buffer* + +___ + +### raw + +▸ **raw**(): *[Buffer, Buffer]* + +*Defined in [trieNode.ts:136](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L136)* + +**Returns:** *[Buffer, Buffer]* + +___ + +### serialize + +▸ **serialize**(): *Buffer* + +*Defined in [trieNode.ts:140](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L140)* + +**Returns:** *Buffer* + +___ + +### `Static` decodeKey + +▸ **decodeKey**(`key`: [Nibbles](../README.md#nibbles)): *[Nibbles](../README.md#nibbles)* + +*Defined in [trieNode.ts:112](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L112)* + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | [Nibbles](../README.md#nibbles) | + +**Returns:** *[Nibbles](../README.md#nibbles)* + +___ + +### `Static` encodeKey + +▸ **encodeKey**(`key`: [Nibbles](../README.md#nibbles)): *[Nibbles](../README.md#nibbles)* + +*Defined in [trieNode.ts:108](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L108)* + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | [Nibbles](../README.md#nibbles) | + +**Returns:** *[Nibbles](../README.md#nibbles)* diff --git a/docs/classes/leafnode.md b/docs/classes/leafnode.md new file mode 100644 index 0000000..021fab9 --- /dev/null +++ b/docs/classes/leafnode.md @@ -0,0 +1,181 @@ +[merkle-patricia-tree](../README.md) › [LeafNode](leafnode.md) + +# Class: LeafNode + +## Hierarchy + +* **LeafNode** + +## Index + +### Constructors + +* [constructor](leafnode.md#constructor) + +### Properties + +* [_nibbles](leafnode.md#_nibbles) +* [_value](leafnode.md#_value) + +### Accessors + +* [key](leafnode.md#key) +* [value](leafnode.md#value) + +### Methods + +* [encodedKey](leafnode.md#encodedkey) +* [hash](leafnode.md#hash) +* [raw](leafnode.md#raw) +* [serialize](leafnode.md#serialize) +* [decodeKey](leafnode.md#static-decodekey) +* [encodeKey](leafnode.md#static-encodekey) + +## Constructors + +### constructor + +\+ **new LeafNode**(`nibbles`: [Nibbles](../README.md#nibbles), `value`: Buffer): *[LeafNode](leafnode.md)* + +*Defined in [trieNode.ts:151](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L151)* + +**Parameters:** + +Name | Type | +------ | ------ | +`nibbles` | [Nibbles](../README.md#nibbles) | +`value` | Buffer | + +**Returns:** *[LeafNode](leafnode.md)* + +## Properties + +### _nibbles + +• **_nibbles**: *[Nibbles](../README.md#nibbles)* + +*Defined in [trieNode.ts:150](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L150)* + +___ + +### _value + +• **_value**: *Buffer* + +*Defined in [trieNode.ts:151](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L151)* + +## Accessors + +### key + +• **get key**(): *[Nibbles](../README.md#nibbles)* + +*Defined in [trieNode.ts:166](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L166)* + +**Returns:** *[Nibbles](../README.md#nibbles)* + +• **set key**(`k`: [Nibbles](../README.md#nibbles)): *void* + +*Defined in [trieNode.ts:170](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L170)* + +**Parameters:** + +Name | Type | +------ | ------ | +`k` | [Nibbles](../README.md#nibbles) | + +**Returns:** *void* + +___ + +### value + +• **get value**(): *Buffer* + +*Defined in [trieNode.ts:174](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L174)* + +**Returns:** *Buffer* + +• **set value**(`v`: Buffer): *void* + +*Defined in [trieNode.ts:178](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L178)* + +**Parameters:** + +Name | Type | +------ | ------ | +`v` | Buffer | + +**Returns:** *void* + +## Methods + +### encodedKey + +▸ **encodedKey**(): *[Nibbles](../README.md#nibbles)* + +*Defined in [trieNode.ts:182](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L182)* + +**Returns:** *[Nibbles](../README.md#nibbles)* + +___ + +### hash + +▸ **hash**(): *Buffer* + +*Defined in [trieNode.ts:194](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L194)* + +**Returns:** *Buffer* + +___ + +### raw + +▸ **raw**(): *[Buffer, Buffer]* + +*Defined in [trieNode.ts:186](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L186)* + +**Returns:** *[Buffer, Buffer]* + +___ + +### serialize + +▸ **serialize**(): *Buffer* + +*Defined in [trieNode.ts:190](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L190)* + +**Returns:** *Buffer* + +___ + +### `Static` decodeKey + +▸ **decodeKey**(`encodedKey`: [Nibbles](../README.md#nibbles)): *[Nibbles](../README.md#nibbles)* + +*Defined in [trieNode.ts:162](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L162)* + +**Parameters:** + +Name | Type | +------ | ------ | +`encodedKey` | [Nibbles](../README.md#nibbles) | + +**Returns:** *[Nibbles](../README.md#nibbles)* + +___ + +### `Static` encodeKey + +▸ **encodeKey**(`key`: [Nibbles](../README.md#nibbles)): *[Nibbles](../README.md#nibbles)* + +*Defined in [trieNode.ts:158](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L158)* + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | [Nibbles](../README.md#nibbles) | + +**Returns:** *[Nibbles](../README.md#nibbles)* diff --git a/docs/classes/prioritizedtaskexecutor.md b/docs/classes/prioritizedtaskexecutor.md new file mode 100644 index 0000000..c271c0b --- /dev/null +++ b/docs/classes/prioritizedtaskexecutor.md @@ -0,0 +1,92 @@ +[merkle-patricia-tree](../README.md) › [PrioritizedTaskExecutor](prioritizedtaskexecutor.md) + +# Class: PrioritizedTaskExecutor + +## Hierarchy + +* **PrioritizedTaskExecutor** + +## Index + +### Constructors + +* [constructor](prioritizedtaskexecutor.md#private-constructor) + +### Properties + +* [currentPoolSize](prioritizedtaskexecutor.md#private-currentpoolsize) +* [maxPoolSize](prioritizedtaskexecutor.md#private-maxpoolsize) +* [queue](prioritizedtaskexecutor.md#private-queue) + +### Methods + +* [execute](prioritizedtaskexecutor.md#private-execute) + +## Constructors + +### `Private` constructor + +\+ **new PrioritizedTaskExecutor**(`maxPoolSize`: number): *[PrioritizedTaskExecutor](prioritizedtaskexecutor.md)* + +*Defined in [prioritizedTaskExecutor.ts:9](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L9)* + +Executes tasks up to maxPoolSize at a time, other items are put in a priority queue. + +**`class`** PrioritizedTaskExecutor + +**`prop`** {Number} maxPoolSize The maximum size of the pool + +**`prop`** {Number} currentPoolSize The current size of the pool + +**`prop`** {Array} queue The task queue + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`maxPoolSize` | number | The maximum size of the pool | + +**Returns:** *[PrioritizedTaskExecutor](prioritizedtaskexecutor.md)* + +## Properties + +### `Private` currentPoolSize + +• **currentPoolSize**: *number* + +*Defined in [prioritizedTaskExecutor.ts:8](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L8)* + +___ + +### `Private` maxPoolSize + +• **maxPoolSize**: *number* + +*Defined in [prioritizedTaskExecutor.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L7)* + +___ + +### `Private` queue + +• **queue**: *[Task](../interfaces/task.md)[]* + +*Defined in [prioritizedTaskExecutor.ts:9](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L9)* + +## Methods + +### `Private` execute + +▸ **execute**(`priority`: number, `fn`: Function): *void* + +*Defined in [prioritizedTaskExecutor.ts:32](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L32)* + +Executes the task. + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`priority` | number | The priority of the task | +`fn` | Function | The function that accepts the callback, which must be called upon the task completion. | + +**Returns:** *void* diff --git a/docs/classes/scratchdb.md b/docs/classes/scratchdb.md new file mode 100644 index 0000000..4e2174b --- /dev/null +++ b/docs/classes/scratchdb.md @@ -0,0 +1,167 @@ +[merkle-patricia-tree](../README.md) › [ScratchDB](scratchdb.md) + +# Class: ScratchDB + +An in-memory wrap over `DB` with an upstream DB +which will be queried when a key is not found +in the in-memory scratch. This class is used to implement +checkpointing functionality in CheckpointTrie. + +## Hierarchy + +* [DB](db.md) + + ↳ **ScratchDB** + +## Index + +### Constructors + +* [constructor](scratchdb.md#constructor) + +### Properties + +* [_leveldb](scratchdb.md#_leveldb) +* [_upstream](scratchdb.md#private-_upstream) + +### Methods + +* [batch](scratchdb.md#batch) +* [copy](scratchdb.md#copy) +* [del](scratchdb.md#del) +* [get](scratchdb.md#get) +* [put](scratchdb.md#put) + +## Constructors + +### constructor + +\+ **new ScratchDB**(`upstreamDB`: [DB](db.md)): *[ScratchDB](scratchdb.md)* + +*Overrides [DB](db.md).[constructor](db.md#constructor)* + +*Defined in [scratch.ts:11](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratch.ts#L11)* + +**Parameters:** + +Name | Type | +------ | ------ | +`upstreamDB` | [DB](db.md) | + +**Returns:** *[ScratchDB](scratchdb.md)* + +## Properties + +### _leveldb + +• **_leveldb**: *LevelUp* + +*Inherited from [DB](db.md).[_leveldb](db.md#_leveldb)* + +*Defined in [db.ts:23](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L23)* + +___ + +### `Private` _upstream + +• **_upstream**: *[DB](db.md)* + +*Defined in [scratch.ts:11](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratch.ts#L11)* + +## Methods + +### batch + +▸ **batch**(`opStack`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [DB](db.md).[batch](db.md#batch)* + +*Defined in [db.ts:85](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L85)* + +Performs a batch operation on db. + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`opStack` | [BatchDBOp](../README.md#batchdbop)[] | A stack of levelup operations | +`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | + +**Returns:** *void* + +___ + +### copy + +▸ **copy**(): *[ScratchDB](scratchdb.md)* + +*Overrides [DB](db.md).[copy](db.md#copy)* + +*Defined in [scratch.ts:39](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratch.ts#L39)* + +**Returns:** *[ScratchDB](scratchdb.md)* + +___ + +### del + +▸ **del**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [DB](db.md).[del](db.md#del)* + +*Defined in [db.ts:73](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L73)* + +Removes a raw value in the underlying leveldb. + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | Buffer | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | + +**Returns:** *void* + +___ + +### get + +▸ **get**(`key`: Buffer, `cb`: Function): *void* + +*Overrides [DB](db.md).[get](db.md#get)* + +*Defined in [scratch.ts:22](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratch.ts#L22)* + +Similar to `DB.get`, but first searches in-memory +scratch DB, if key not found, searches upstream DB. + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### put + +▸ **put**(`key`: Buffer, `val`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [DB](db.md).[put](db.md#put)* + +*Defined in [db.ts:60](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L60)* + +Writes a value directly to leveldb. + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | Buffer | The key as a `Buffer` or `String` | +`val` | Buffer | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | + +**Returns:** *void* diff --git a/docs/classes/scratchreadstream.md b/docs/classes/scratchreadstream.md new file mode 100644 index 0000000..c6562fb --- /dev/null +++ b/docs/classes/scratchreadstream.md @@ -0,0 +1,66 @@ +[merkle-patricia-tree](../README.md) › [ScratchReadStream](scratchreadstream.md) + +# Class: ScratchReadStream + +## Hierarchy + +* any + + ↳ **ScratchReadStream** + +## Index + +### Constructors + +* [constructor](scratchreadstream.md#constructor) + +### Properties + +* [_started](scratchreadstream.md#private-_started) +* [trie](scratchreadstream.md#private-trie) + +### Methods + +* [_read](scratchreadstream.md#_read) + +## Constructors + +### constructor + +\+ **new ScratchReadStream**(`trie`: BaseTrie): *[ScratchReadStream](scratchreadstream.md)* + +*Defined in [scratchReadStream.ts:10](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratchReadStream.ts#L10)* + +**Parameters:** + +Name | Type | +------ | ------ | +`trie` | BaseTrie | + +**Returns:** *[ScratchReadStream](scratchreadstream.md)* + +## Properties + +### `Private` _started + +• **_started**: *boolean* + +*Defined in [scratchReadStream.ts:10](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratchReadStream.ts#L10)* + +___ + +### `Private` trie + +• **trie**: *BaseTrie* + +*Defined in [scratchReadStream.ts:9](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratchReadStream.ts#L9)* + +## Methods + +### _read + +▸ **_read**(): *void* + +*Defined in [scratchReadStream.ts:19](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratchReadStream.ts#L19)* + +**Returns:** *void* diff --git a/docs/classes/securetrie.md b/docs/classes/securetrie.md new file mode 100644 index 0000000..b59a1e2 --- /dev/null +++ b/docs/classes/securetrie.md @@ -0,0 +1,848 @@ +[merkle-patricia-tree](../README.md) › [SecureTrie](securetrie.md) + +# Class: SecureTrie + +You can create a secure Trie where the keys are automatically hashed +using **keccak256** by using `require('merkle-patricia-tree/secure')`. +It has the same methods and constructor as `Trie`. + +**`class`** SecureTrie + +**`extends`** Trie + +## Hierarchy + + ↳ [CheckpointTrie](checkpointtrie.md) + + ↳ **SecureTrie** + +## Index + +### Constructors + +* [constructor](securetrie.md#constructor) + +### Properties + +* [EMPTY_TRIE_ROOT](securetrie.md#empty_trie_root) +* [_checkpoints](securetrie.md#_checkpoints) +* [_mainDB](securetrie.md#_maindb) +* [_scratch](securetrie.md#_scratch) +* [db](securetrie.md#db) +* [sem](securetrie.md#protected-sem) + +### Accessors + +* [isCheckpoint](securetrie.md#ischeckpoint) +* [root](securetrie.md#root) + +### Methods + +* [_createInitialNode](securetrie.md#_createinitialnode) +* [_createScratchReadStream](securetrie.md#private-_createscratchreadstream) +* [_deleteNode](securetrie.md#_deletenode) +* [_enterCpMode](securetrie.md#private-_entercpmode) +* [_exitCpMode](securetrie.md#private-_exitcpmode) +* [_findDbNodes](securetrie.md#_finddbnodes) +* [_findValueNodes](securetrie.md#_findvaluenodes) +* [_formatNode](securetrie.md#_formatnode) +* [_lookupNode](securetrie.md#_lookupnode) +* [_putNode](securetrie.md#_putnode) +* [_saveStack](securetrie.md#private-_savestack) +* [_updateNode](securetrie.md#private-_updatenode) +* [_walkTrie](securetrie.md#_walktrie) +* [batch](securetrie.md#batch) +* [checkRoot](securetrie.md#checkroot) +* [checkpoint](securetrie.md#checkpoint) +* [commit](securetrie.md#commit) +* [copy](securetrie.md#copy) +* [createReadStream](securetrie.md#createreadstream) +* [del](securetrie.md#del) +* [delRaw](securetrie.md#delraw) +* [findPath](securetrie.md#findpath) +* [get](securetrie.md#get) +* [getRaw](securetrie.md#getraw) +* [put](securetrie.md#put) +* [putRaw](securetrie.md#putraw) +* [revert](securetrie.md#revert) +* [setRoot](securetrie.md#setroot) +* [fromProof](securetrie.md#static-fromproof) +* [prove](securetrie.md#static-prove) +* [verifyProof](securetrie.md#static-verifyproof) + +## Constructors + +### constructor + +\+ **new SecureTrie**(...`args`: any): *[SecureTrie](securetrie.md)* + +*Overrides [CheckpointTrie](checkpointtrie.md).[constructor](checkpointtrie.md#constructor)* + +*Defined in [secure.ts:13](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L13)* + +**Parameters:** + +Name | Type | +------ | ------ | +`...args` | any | + +**Returns:** *[SecureTrie](securetrie.md)* + +## Properties + +### EMPTY_TRIE_ROOT + +• **EMPTY_TRIE_ROOT**: *Buffer* + +*Inherited from [Trie](trie.md).[EMPTY_TRIE_ROOT](trie.md#empty_trie_root)* + +*Defined in [baseTrie.ts:34](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L34)* + +___ + +### _checkpoints + +• **_checkpoints**: *Buffer[]* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[_checkpoints](checkpointtrie.md#_checkpoints)* + +*Defined in [checkpointTrie.ts:14](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L14)* + +___ + +### _mainDB + +• **_mainDB**: *[DB](db.md)* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[_mainDB](checkpointtrie.md#_maindb)* + +*Defined in [checkpointTrie.ts:12](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L12)* + +___ + +### _scratch + +• **_scratch**: *[ScratchDB](scratchdb.md) | null* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[_scratch](checkpointtrie.md#_scratch)* + +*Defined in [checkpointTrie.ts:13](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L13)* + +___ + +### db + +• **db**: *[DB](db.md)* + +*Inherited from [Trie](trie.md).[db](trie.md#db)* + +*Defined in [baseTrie.ts:35](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L35)* + +___ + +### `Protected` sem + +• **sem**: *any* + +*Inherited from [Trie](trie.md).[sem](trie.md#protected-sem)* + +*Defined in [baseTrie.ts:36](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L36)* + +## Accessors + +### isCheckpoint + +• **get isCheckpoint**(): *boolean* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[isCheckpoint](checkpointtrie.md#ischeckpoint)* + +*Defined in [checkpointTrie.ts:29](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L29)* + +Is the trie during a checkpoint phase? + +**Returns:** *boolean* + +___ + +### root + +• **get root**(): *Buffer* + +*Inherited from [Trie](trie.md).[root](trie.md#root)* + +*Defined in [baseTrie.ts:103](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L103)* + +**Returns:** *Buffer* + +• **set root**(`value`: Buffer): *void* + +*Inherited from [Trie](trie.md).[root](trie.md#root)* + +*Defined in [baseTrie.ts:99](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L99)* + +**Parameters:** + +Name | Type | +------ | ------ | +`value` | Buffer | + +**Returns:** *void* + +## Methods + +### _createInitialNode + +▸ **_createInitialNode**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[_createInitialNode](trie.md#_createinitialnode)* + +*Defined in [baseTrie.ts:735](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L735)* + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`value` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### `Private` _createScratchReadStream + +▸ **_createScratchReadStream**(`scratch`: [ScratchDB](scratchdb.md)): *[ScratchReadStream](scratchreadstream.md)‹›* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[_createScratchReadStream](checkpointtrie.md#private-_createscratchreadstream)* + +*Defined in [checkpointTrie.ts:154](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L154)* + +Returns a `ScratchReadStream` based on the state updates +since checkpoint. + +**`method`** createScratchReadStream + +**Parameters:** + +Name | Type | +------ | ------ | +`scratch` | [ScratchDB](scratchdb.md) | + +**Returns:** *[ScratchReadStream](scratchreadstream.md)‹›* + +___ + +### _deleteNode + +▸ **_deleteNode**(`k`: Buffer, `stack`: [TrieNode](../README.md#trienode)[], `cb`: Function): *any* + +*Inherited from [Trie](trie.md).[_deleteNode](trie.md#_deletenode)* + +*Defined in [baseTrie.ts:617](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L617)* + +**Parameters:** + +Name | Type | +------ | ------ | +`k` | Buffer | +`stack` | [TrieNode](../README.md#trienode)[] | +`cb` | Function | + +**Returns:** *any* + +___ + +### `Private` _enterCpMode + +▸ **_enterCpMode**(): *void* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[_enterCpMode](checkpointtrie.md#private-_entercpmode)* + +*Defined in [checkpointTrie.ts:125](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L125)* + +Enter into checkpoint mode. + +**Returns:** *void* + +___ + +### `Private` _exitCpMode + +▸ **_exitCpMode**(`commitState`: boolean, `cb`: Function): *void* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[_exitCpMode](checkpointtrie.md#private-_exitcpmode)* + +*Defined in [checkpointTrie.ts:134](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L134)* + +Exit from checkpoint mode. + +**Parameters:** + +Name | Type | +------ | ------ | +`commitState` | boolean | +`cb` | Function | + +**Returns:** *void* + +___ + +### _findDbNodes + +▸ **_findDbNodes**(`onFound`: Function, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[_findDbNodes](trie.md#_finddbnodes)* + +*Defined in [baseTrie.ts:346](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L346)* + +**Parameters:** + +Name | Type | +------ | ------ | +`onFound` | Function | +`cb` | Function | + +**Returns:** *void* + +___ + +### _findValueNodes + +▸ **_findValueNodes**(`onFound`: Function, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[_findValueNodes](trie.md#_findvaluenodes)* + +*Defined in [baseTrie.ts:320](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L320)* + +**Parameters:** + +Name | Type | +------ | ------ | +`onFound` | Function | +`cb` | Function | + +**Returns:** *void* + +___ + +### _formatNode + +▸ **_formatNode**(`node`: [TrieNode](../README.md#trienode), `topLevel`: boolean, `opStack`: [BatchDBOp](../README.md#batchdbop)[], `remove`: boolean): *Buffer‹› | null | Buffer‹› | Buffer‹›[][]* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[_formatNode](checkpointtrie.md#_formatnode)* + +*Overrides [Trie](trie.md).[_formatNode](trie.md#_formatnode)* + +*Defined in [checkpointTrie.ts:163](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L163)* + +**Parameters:** + +Name | Type | Default | +------ | ------ | ------ | +`node` | [TrieNode](../README.md#trienode) | - | +`topLevel` | boolean | - | +`opStack` | [BatchDBOp](../README.md#batchdbop)[] | - | +`remove` | boolean | false | + +**Returns:** *Buffer‹› | null | Buffer‹› | Buffer‹›[][]* + +___ + +### _lookupNode + +▸ **_lookupNode**(`node`: Buffer | Buffer[], `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[_lookupNode](trie.md#_lookupnode)* + +*Defined in [baseTrie.ts:230](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L230)* + +**Parameters:** + +Name | Type | +------ | ------ | +`node` | Buffer | Buffer[] | +`cb` | Function | + +**Returns:** *void* + +___ + +### _putNode + +▸ **_putNode**(`node`: [TrieNode](../README.md#trienode), `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[_putNode](trie.md#_putnode)* + +*Defined in [baseTrie.ts:247](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L247)* + +**Parameters:** + +Name | Type | +------ | ------ | +`node` | [TrieNode](../README.md#trienode) | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### `Private` _saveStack + +▸ **_saveStack**(`key`: number[], `stack`: [TrieNode](../README.md#trienode)[], `opStack`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[_saveStack](trie.md#private-_savestack)* + +*Defined in [baseTrie.ts:588](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L588)* + +saves a stack + +**`method`** _saveStack + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | number[] | the key. Should follow the stack | +`stack` | [TrieNode](../README.md#trienode)[] | a stack of nodes to the value given by the key | +`opStack` | [BatchDBOp](../README.md#batchdbop)[] | a stack of levelup operations to commit at the end of this funciton | +`cb` | [ErrorCallback](../README.md#errorcallback) | | + +**Returns:** *void* + +___ + +### `Private` _updateNode + +▸ **_updateNode**(`k`: Buffer, `value`: Buffer, `keyRemainder`: number[], `stack`: [TrieNode](../README.md#trienode)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[_updateNode](trie.md#private-_updatenode)* + +*Defined in [baseTrie.ts:370](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L370)* + +Updates a node + +**`method`** _updateNode + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`k` | Buffer | - | +`value` | Buffer | - | +`keyRemainder` | number[] | - | +`stack` | [TrieNode](../README.md#trienode)[] | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | the callback | + +**Returns:** *void* + +___ + +### _walkTrie + +▸ **_walkTrie**(`root`: Buffer, `onNode`: Function, `onDone`: Function): *any* + +*Inherited from [Trie](trie.md).[_walkTrie](trie.md#_walktrie)* + +*Defined in [baseTrie.ts:473](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L473)* + +**Parameters:** + +Name | Type | +------ | ------ | +`root` | Buffer | +`onNode` | Function | +`onDone` | Function | + +**Returns:** *any* + +___ + +### batch + +▸ **batch**(`ops`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[batch](trie.md#batch)* + +*Defined in [baseTrie.ts:799](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L799)* + +The given hash of operations (key additions or deletions) are executed on the DB + +**`method`** batch + +**`memberof`** Trie + +**`example`** +var ops = [ + { type: 'del', key: Buffer.from('father') } + , { type: 'put', key: Buffer.from('name'), value: Buffer.from('Yuri Irsenovich Kim') } + , { type: 'put', key: Buffer.from('dob'), value: Buffer.from('16 February 1941') } + , { type: 'put', key: Buffer.from('spouse'), value: Buffer.from('Kim Young-sook') } + , { type: 'put', key: Buffer.from('occupation'), value: Buffer.from('Clown') } +] +trie.batch(ops) + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`ops` | [BatchDBOp](../README.md#batchdbop)[] | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | | + +**Returns:** *void* + +___ + +### checkRoot + +▸ **checkRoot**(`root`: Buffer, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[checkRoot](trie.md#checkroot)* + +*Defined in [baseTrie.ts:819](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L819)* + +Checks if a given root exists + +**Parameters:** + +Name | Type | +------ | ------ | +`root` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### checkpoint + +▸ **checkpoint**(): *void* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[checkpoint](checkpointtrie.md#checkpoint)* + +*Defined in [checkpointTrie.ts:39](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L39)* + +Creates a checkpoint that can later be reverted to or committed. +After this is called, no changes to the trie will be permanently saved +until `commit` is called. Calling `putRaw` overrides the checkpointing +mechanism and would directly write to db. + +**Returns:** *void* + +___ + +### commit + +▸ **commit**(`cb`: Function): *void* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[commit](checkpointtrie.md#commit)* + +*Defined in [checkpointTrie.ts:56](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L56)* + +Commits a checkpoint to disk, if current checkpoint is not nested. If +nested, only sets the parent checkpoint as current checkpoint. + +**`method`** commit + +**`throws`** If not during a checkpoint phase + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`cb` | Function | the callback | + +**Returns:** *void* + +___ + +### copy + +▸ **copy**(): *[SecureTrie](securetrie.md)* + +*Overrides [CheckpointTrie](checkpointtrie.md).[copy](checkpointtrie.md#copy)* + +*Defined in [secure.ts:28](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L28)* + +**Returns:** *[SecureTrie](securetrie.md)* + +___ + +### createReadStream + +▸ **createReadStream**(): *ReadStream* + +*Inherited from [Trie](trie.md).[createReadStream](trie.md#createreadstream)* + +*Defined in [baseTrie.ts:772](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L772)* + +The `data` event is given an `Object` hat has two properties; the `key` and the `value`. Both should be Buffers. + +**`method`** createReadStream + +**`memberof`** Trie + +**Returns:** *ReadStream* + +Returns a [stream](https://nodejs.org/dist/latest-v5.x/docs/api/stream.html#stream_class_stream_readable) of the contents of the `trie` + +___ + +### del + +▸ **del**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Overrides [Trie](trie.md).[del](trie.md#del)* + +*Defined in [secure.ts:52](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L52)* + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### delRaw + +▸ **delRaw**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [Trie](trie.md).[delRaw](trie.md#delraw)* + +*Defined in [baseTrie.ts:225](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L225)* + +Deletes key directly from underlying key/value db. + +**`deprecated`** + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### findPath + +▸ **findPath**(`key`: Buffer, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[findPath](trie.md#findpath)* + +*Defined in [baseTrie.ts:266](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L266)* + +Tries to find a path to the node for the given key +It returns a `stack` of nodes to the closet node + +**`method`** findPath + +**`memberof`** Trie + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### get + +▸ **get**(`key`: Buffer, `cb`: Function): *void* + +*Overrides [Trie](trie.md).[get](trie.md#get)* + +*Defined in [secure.ts:34](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L34)* + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### getRaw + +▸ **getRaw**(`key`: Buffer, `cb`: Function): *void* + +*Inherited from [Trie](trie.md).[getRaw](trie.md#getraw)* + +*Defined in [baseTrie.ts:208](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L208)* + +Retrieves a value directly from key/value db. + +**`deprecated`** + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### put + +▸ **put**(`key`: Buffer, `val`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Overrides [Trie](trie.md).[put](trie.md#put)* + +*Defined in [secure.ts:43](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L43)* + +For a falsey value, use the original key +to avoid double hashing the key. + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`val` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### putRaw + +▸ **putRaw**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[putRaw](checkpointtrie.md#putraw)* + +*Overrides [Trie](trie.md).[putRaw](trie.md#putraw)* + +*Defined in [checkpointTrie.ts:117](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L117)* + +Writes a value under given key directly to the +key/value db, disregarding checkpoints. + +**`deprecated`** + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`value` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### revert + +▸ **revert**(`cb`: Function): *void* + +*Inherited from [CheckpointTrie](checkpointtrie.md).[revert](checkpointtrie.md#revert)* + +*Defined in [checkpointTrie.ts:78](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L78)* + +Reverts the trie to the state it was at when `checkpoint` was first called. +If during a nested checkpoint, sets root to most recent checkpoint, and sets +parent checkpoint as current. + +**Parameters:** + +Name | Type | +------ | ------ | +`cb` | Function | + +**Returns:** *void* + +___ + +### setRoot + +▸ **setRoot**(`value?`: Buffer): *void* + +*Inherited from [Trie](trie.md).[setRoot](trie.md#setroot)* + +*Defined in [baseTrie.ts:107](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L107)* + +**Parameters:** + +Name | Type | +------ | ------ | +`value?` | Buffer | + +**Returns:** *void* + +___ + +### `Static` fromProof + +▸ **fromProof**(`proofNodes`: Buffer[], `cb`: Function, `proofTrie?`: [Trie](trie.md)): *void* + +*Inherited from [Trie](trie.md).[fromProof](trie.md#static-fromproof)* + +*Defined in [baseTrie.ts:49](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L49)* + +**Parameters:** + +Name | Type | +------ | ------ | +`proofNodes` | Buffer[] | +`cb` | Function | +`proofTrie?` | [Trie](trie.md) | + +**Returns:** *void* + +___ + +### `Static` prove + +▸ **prove**(`trie`: [SecureTrie](securetrie.md), `key`: Buffer, `cb`: Function): *void* + +*Overrides [Trie](trie.md).[prove](trie.md#static-prove)* + +*Defined in [secure.ts:18](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L18)* + +**Parameters:** + +Name | Type | +------ | ------ | +`trie` | [SecureTrie](securetrie.md) | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### `Static` verifyProof + +▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proof`: Buffer[], `cb`: Function): *void* + +*Overrides [Trie](trie.md).[verifyProof](trie.md#static-verifyproof)* + +*Defined in [secure.ts:23](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L23)* + +**Parameters:** + +Name | Type | +------ | ------ | +`rootHash` | Buffer | +`key` | Buffer | +`proof` | Buffer[] | +`cb` | Function | + +**Returns:** *void* diff --git a/docs/classes/trie.md b/docs/classes/trie.md new file mode 100644 index 0000000..226b52e --- /dev/null +++ b/docs/classes/trie.md @@ -0,0 +1,636 @@ +[merkle-patricia-tree](../README.md) › [Trie](trie.md) + +# Class: Trie + +Use `require('merkel-patricia-tree').BaseTrie` for the base interface. In Ethereum applications +stick with the Secure Trie Overlay `require('merkel-patricia-tree').SecureTrie`. +The API for the raw and the secure interface are about the same. + +**`param`** A [levelup](https://github.com/Level/levelup) instance. By default creates an in-memory [memdown](https://github.com/Level/memdown) instance. +If the db is `null` or left undefined, then the trie will be stored in memory via [memdown](https://github.com/Level/memdown) + +**`param`** A hex `String` or `Buffer` for the root of a previously stored trie + +**`prop`** {Buffer} root The current root of the `trie` + +**`prop`** {Buffer} EMPTY_TRIE_ROOT the Root for an empty trie + +## Hierarchy + +* **Trie** + + ↳ [CheckpointTrie](checkpointtrie.md) + +## Index + +### Constructors + +* [constructor](trie.md#constructor) + +### Properties + +* [EMPTY_TRIE_ROOT](trie.md#empty_trie_root) +* [_root](trie.md#private-_root) +* [db](trie.md#db) +* [sem](trie.md#protected-sem) + +### Accessors + +* [root](trie.md#root) + +### Methods + +* [_createInitialNode](trie.md#_createinitialnode) +* [_deleteNode](trie.md#_deletenode) +* [_findDbNodes](trie.md#_finddbnodes) +* [_findValueNodes](trie.md#_findvaluenodes) +* [_formatNode](trie.md#_formatnode) +* [_lookupNode](trie.md#_lookupnode) +* [_putNode](trie.md#_putnode) +* [_saveStack](trie.md#private-_savestack) +* [_updateNode](trie.md#private-_updatenode) +* [_walkTrie](trie.md#_walktrie) +* [batch](trie.md#batch) +* [checkRoot](trie.md#checkroot) +* [copy](trie.md#copy) +* [createReadStream](trie.md#createreadstream) +* [del](trie.md#del) +* [delRaw](trie.md#delraw) +* [findPath](trie.md#findpath) +* [get](trie.md#get) +* [getRaw](trie.md#getraw) +* [put](trie.md#put) +* [putRaw](trie.md#putraw) +* [setRoot](trie.md#setroot) +* [fromProof](trie.md#static-fromproof) +* [prove](trie.md#static-prove) +* [verifyProof](trie.md#static-verifyproof) + +## Constructors + +### constructor + +\+ **new Trie**(`db?`: LevelUp | null, `root?`: Buffer): *[Trie](trie.md)* + +*Defined in [baseTrie.ts:37](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L37)* + +**Parameters:** + +Name | Type | +------ | ------ | +`db?` | LevelUp | null | +`root?` | Buffer | + +**Returns:** *[Trie](trie.md)* + +## Properties + +### EMPTY_TRIE_ROOT + +• **EMPTY_TRIE_ROOT**: *Buffer* + +*Defined in [baseTrie.ts:34](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L34)* + +___ + +### `Private` _root + +• **_root**: *Buffer* + +*Defined in [baseTrie.ts:37](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L37)* + +___ + +### db + +• **db**: *[DB](db.md)* + +*Defined in [baseTrie.ts:35](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L35)* + +___ + +### `Protected` sem + +• **sem**: *any* + +*Defined in [baseTrie.ts:36](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L36)* + +## Accessors + +### root + +• **get root**(): *Buffer* + +*Defined in [baseTrie.ts:103](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L103)* + +**Returns:** *Buffer* + +• **set root**(`value`: Buffer): *void* + +*Defined in [baseTrie.ts:99](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L99)* + +**Parameters:** + +Name | Type | +------ | ------ | +`value` | Buffer | + +**Returns:** *void* + +## Methods + +### _createInitialNode + +▸ **_createInitialNode**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [baseTrie.ts:735](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L735)* + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`value` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### _deleteNode + +▸ **_deleteNode**(`k`: Buffer, `stack`: [TrieNode](../README.md#trienode)[], `cb`: Function): *any* + +*Defined in [baseTrie.ts:617](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L617)* + +**Parameters:** + +Name | Type | +------ | ------ | +`k` | Buffer | +`stack` | [TrieNode](../README.md#trienode)[] | +`cb` | Function | + +**Returns:** *any* + +___ + +### _findDbNodes + +▸ **_findDbNodes**(`onFound`: Function, `cb`: Function): *void* + +*Defined in [baseTrie.ts:346](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L346)* + +**Parameters:** + +Name | Type | +------ | ------ | +`onFound` | Function | +`cb` | Function | + +**Returns:** *void* + +___ + +### _findValueNodes + +▸ **_findValueNodes**(`onFound`: Function, `cb`: Function): *void* + +*Defined in [baseTrie.ts:320](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L320)* + +**Parameters:** + +Name | Type | +------ | ------ | +`onFound` | Function | +`cb` | Function | + +**Returns:** *void* + +___ + +### _formatNode + +▸ **_formatNode**(`node`: [TrieNode](../README.md#trienode), `topLevel`: boolean, `opStack`: [BatchDBOp](../README.md#batchdbop)[], `remove`: boolean): *Buffer | null | Buffer‹› | Buffer‹›[][]* + +*Defined in [baseTrie.ts:743](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L743)* + +**Parameters:** + +Name | Type | Default | +------ | ------ | ------ | +`node` | [TrieNode](../README.md#trienode) | - | +`topLevel` | boolean | - | +`opStack` | [BatchDBOp](../README.md#batchdbop)[] | - | +`remove` | boolean | false | + +**Returns:** *Buffer | null | Buffer‹› | Buffer‹›[][]* + +___ + +### _lookupNode + +▸ **_lookupNode**(`node`: Buffer | Buffer[], `cb`: Function): *void* + +*Defined in [baseTrie.ts:230](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L230)* + +**Parameters:** + +Name | Type | +------ | ------ | +`node` | Buffer | Buffer[] | +`cb` | Function | + +**Returns:** *void* + +___ + +### _putNode + +▸ **_putNode**(`node`: [TrieNode](../README.md#trienode), `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [baseTrie.ts:247](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L247)* + +**Parameters:** + +Name | Type | +------ | ------ | +`node` | [TrieNode](../README.md#trienode) | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### `Private` _saveStack + +▸ **_saveStack**(`key`: number[], `stack`: [TrieNode](../README.md#trienode)[], `opStack`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [baseTrie.ts:588](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L588)* + +saves a stack + +**`method`** _saveStack + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | number[] | the key. Should follow the stack | +`stack` | [TrieNode](../README.md#trienode)[] | a stack of nodes to the value given by the key | +`opStack` | [BatchDBOp](../README.md#batchdbop)[] | a stack of levelup operations to commit at the end of this funciton | +`cb` | [ErrorCallback](../README.md#errorcallback) | | + +**Returns:** *void* + +___ + +### `Private` _updateNode + +▸ **_updateNode**(`k`: Buffer, `value`: Buffer, `keyRemainder`: number[], `stack`: [TrieNode](../README.md#trienode)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [baseTrie.ts:370](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L370)* + +Updates a node + +**`method`** _updateNode + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`k` | Buffer | - | +`value` | Buffer | - | +`keyRemainder` | number[] | - | +`stack` | [TrieNode](../README.md#trienode)[] | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | the callback | + +**Returns:** *void* + +___ + +### _walkTrie + +▸ **_walkTrie**(`root`: Buffer, `onNode`: Function, `onDone`: Function): *any* + +*Defined in [baseTrie.ts:473](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L473)* + +**Parameters:** + +Name | Type | +------ | ------ | +`root` | Buffer | +`onNode` | Function | +`onDone` | Function | + +**Returns:** *any* + +___ + +### batch + +▸ **batch**(`ops`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [baseTrie.ts:799](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L799)* + +The given hash of operations (key additions or deletions) are executed on the DB + +**`method`** batch + +**`memberof`** Trie + +**`example`** +var ops = [ + { type: 'del', key: Buffer.from('father') } + , { type: 'put', key: Buffer.from('name'), value: Buffer.from('Yuri Irsenovich Kim') } + , { type: 'put', key: Buffer.from('dob'), value: Buffer.from('16 February 1941') } + , { type: 'put', key: Buffer.from('spouse'), value: Buffer.from('Kim Young-sook') } + , { type: 'put', key: Buffer.from('occupation'), value: Buffer.from('Clown') } +] +trie.batch(ops) + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`ops` | [BatchDBOp](../README.md#batchdbop)[] | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | | + +**Returns:** *void* + +___ + +### checkRoot + +▸ **checkRoot**(`root`: Buffer, `cb`: Function): *void* + +*Defined in [baseTrie.ts:819](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L819)* + +Checks if a given root exists + +**Parameters:** + +Name | Type | +------ | ------ | +`root` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### copy + +▸ **copy**(): *[Trie](trie.md)* + +*Defined in [baseTrie.ts:778](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L778)* + +**Returns:** *[Trie](trie.md)* + +___ + +### createReadStream + +▸ **createReadStream**(): *ReadStream* + +*Defined in [baseTrie.ts:772](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L772)* + +The `data` event is given an `Object` hat has two properties; the `key` and the `value`. Both should be Buffers. + +**`method`** createReadStream + +**`memberof`** Trie + +**Returns:** *ReadStream* + +Returns a [stream](https://nodejs.org/dist/latest-v5.x/docs/api/stream.html#stream_class_stream_readable) of the contents of the `trie` + +___ + +### del + +▸ **del**(`key`: Buffer, `cb`: Function): *void* + +*Defined in [baseTrie.ts:183](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L183)* + +deletes a value given a `key` + +**`method`** del + +**`memberof`** Trie + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### delRaw + +▸ **delRaw**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [baseTrie.ts:225](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L225)* + +Deletes key directly from underlying key/value db. + +**`deprecated`** + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### findPath + +▸ **findPath**(`key`: Buffer, `cb`: Function): *void* + +*Defined in [baseTrie.ts:266](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L266)* + +Tries to find a path to the node for the given key +It returns a `stack` of nodes to the closet node + +**`method`** findPath + +**`memberof`** Trie + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### get + +▸ **get**(`key`: Buffer, `cb`: Function): *void* + +*Defined in [baseTrie.ts:125](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L125)* + +Gets a value given a `key` + +**`method`** get + +**`memberof`** Trie + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | Buffer | the key to search for | +`cb` | Function | A callback `Function` which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null` | + +**Returns:** *void* + +___ + +### getRaw + +▸ **getRaw**(`key`: Buffer, `cb`: Function): *void* + +*Defined in [baseTrie.ts:208](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L208)* + +Retrieves a value directly from key/value db. + +**`deprecated`** + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### put + +▸ **put**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [baseTrie.ts:147](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L147)* + +Stores a given `value` at the given `key` + +**`method`** put + +**`memberof`** Trie + +**Parameters:** + +Name | Type | Description | +------ | ------ | ------ | +`key` | Buffer | - | +`value` | Buffer | - | +`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function` which is given the argument `err` - for errors that may have occured | + +**Returns:** *void* + +___ + +### putRaw + +▸ **putRaw**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* + +*Defined in [baseTrie.ts:217](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L217)* + +Writes a value under given key directly to the +key/value db. + +**`deprecated`** + +**Parameters:** + +Name | Type | +------ | ------ | +`key` | Buffer | +`value` | Buffer | +`cb` | [ErrorCallback](../README.md#errorcallback) | + +**Returns:** *void* + +___ + +### setRoot + +▸ **setRoot**(`value?`: Buffer): *void* + +*Defined in [baseTrie.ts:107](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L107)* + +**Parameters:** + +Name | Type | +------ | ------ | +`value?` | Buffer | + +**Returns:** *void* + +___ + +### `Static` fromProof + +▸ **fromProof**(`proofNodes`: Buffer[], `cb`: Function, `proofTrie?`: [Trie](trie.md)): *void* + +*Defined in [baseTrie.ts:49](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L49)* + +**Parameters:** + +Name | Type | +------ | ------ | +`proofNodes` | Buffer[] | +`cb` | Function | +`proofTrie?` | [Trie](trie.md) | + +**Returns:** *void* + +___ + +### `Static` prove + +▸ **prove**(`trie`: [Trie](trie.md), `key`: Buffer, `cb`: Function): *void* + +*Defined in [baseTrie.ts:70](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L70)* + +**Parameters:** + +Name | Type | +------ | ------ | +`trie` | [Trie](trie.md) | +`key` | Buffer | +`cb` | Function | + +**Returns:** *void* + +___ + +### `Static` verifyProof + +▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proofNodes`: Buffer[], `cb`: Function): *void* + +*Defined in [baseTrie.ts:85](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L85)* + +**Parameters:** + +Name | Type | +------ | ------ | +`rootHash` | Buffer | +`key` | Buffer | +`proofNodes` | Buffer[] | +`cb` | Function | + +**Returns:** *void* diff --git a/docs/classes/triereadstream.md b/docs/classes/triereadstream.md new file mode 100644 index 0000000..df2946d --- /dev/null +++ b/docs/classes/triereadstream.md @@ -0,0 +1,66 @@ +[merkle-patricia-tree](../README.md) › [TrieReadStream](triereadstream.md) + +# Class: TrieReadStream + +## Hierarchy + +* any + + ↳ **TrieReadStream** + +## Index + +### Constructors + +* [constructor](triereadstream.md#constructor) + +### Properties + +* [_started](triereadstream.md#private-_started) +* [trie](triereadstream.md#private-trie) + +### Methods + +* [_read](triereadstream.md#_read) + +## Constructors + +### constructor + +\+ **new TrieReadStream**(`trie`: BaseTrie): *[TrieReadStream](triereadstream.md)* + +*Defined in [readStream.ts:8](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/readStream.ts#L8)* + +**Parameters:** + +Name | Type | +------ | ------ | +`trie` | BaseTrie | + +**Returns:** *[TrieReadStream](triereadstream.md)* + +## Properties + +### `Private` _started + +• **_started**: *boolean* + +*Defined in [readStream.ts:8](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/readStream.ts#L8)* + +___ + +### `Private` trie + +• **trie**: *BaseTrie* + +*Defined in [readStream.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/readStream.ts#L7)* + +## Methods + +### _read + +▸ **_read**(): *void* + +*Defined in [readStream.ts:17](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/readStream.ts#L17)* + +**Returns:** *void* diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 65ad2e1..0000000 --- a/docs/index.md +++ /dev/null @@ -1,493 +0,0 @@ - - -## SecureTrie - -[src/secure.js:12-55][1] - -**Extends Trie** - -You can create a secure Trie where the keys are automatically hashed -using **keccak256** by using `require('merkle-patricia-tree/secure')`. -It has the same methods and constructor as `Trie`. - -## Trie - -[src/baseTrie.js:25-768][2] - -Use `require('merkel-patricia-tree')` for the base interface. In Ethereum applications -stick with the Secure Trie Overlay `require('merkel-patricia-tree/secure')`. -The API for the raw and the secure interface are about the same - -### Parameters - -- `db` **[Object][3]?** A [levelup][4] instance. By default creates an in-memory [memdown][5] instance. - If the db is `null` or left undefined, then the trie will be stored in memory via [memdown][5] -- `root` **([Buffer][6] \| [String][7])?** A hex `String` or `Buffer` for the root of a previously stored trie - -### Properties - -- `root` **[Buffer][6]** The current root of the `trie` -- `EMPTY_TRIE_ROOT` **[Buffer][6]** the Root for an empty trie - -### get - -[src/baseTrie.js:92-104][8] - -Gets a value given a `key` - -#### Parameters - -- `key` **([Buffer][6] \| [String][7])** the key to search for -- `cb` **[Function][9]** A callback `Function` which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null` - -### put - -[src/baseTrie.js:114-138][10] - -Stores a given `value` at the given `key` - -#### Parameters - -- `key` **([Buffer][6] \| [String][7])** -- `Value` **([Buffer][6] \| [String][7])** -- `cb` **[Function][9]** A callback `Function` which is given the argument `err` - for errors that may have occured - -### del - -[src/baseTrie.js:147-163][11] - -deletes a value given a `key` - -#### Parameters - -- `key` **([Buffer][6] \| [String][7])** -- `callback` **[Function][9]** the callback `Function` - -### findPath - -[src/baseTrie.js:226-272][12] - -Tries to find a path to the node for the given key -It returns a `stack` of nodes to the closet node - -#### Parameters - -- `null-null` **([String][7] \| [Buffer][6])** key - the search key -- `null-null` **[Function][9]** cb - the callback function. Its is given the following - arguments- err - any errors encontered - - node - the last node found - - keyRemainder - the remaining key nibbles not accounted for - - stack - an array of nodes that forms the path to node we are searching for - -### createReadStream - -[src/baseTrie.js:716-718][13] - -The `data` event is given an `Object` hat has two properties; the `key` and the `value`. Both should be Buffers. - -Returns **[stream.Readable][14]** Returns a [stream][15] of the contents of the `trie` - -### batch - -[src/baseTrie.js:743-753][16] - -The given hash of operations (key additions or deletions) are executed on the DB - -#### Parameters - -- `ops` **[Array][17]** -- `cb` **[Function][9]** - -#### Examples - -```javascript -var ops = [ - { type: 'del', key: 'father' } - , { type: 'put', key: 'name', value: 'Yuri Irsenovich Kim' } - , { type: 'put', key: 'dob', value: '16 February 1941' } - , { type: 'put', key: 'spouse', value: 'Kim Young-sook' } - , { type: 'put', key: 'occupation', value: 'Clown' } -] -trie.batch(ops) -``` - -### checkRoot - -[src/baseTrie.js:762-767][18] - -Checks if a given root exists - -#### Parameters - -- `root` **[Buffer][6]** -- `cb` **[Function][9]** - -## Merkle Proof - -Static functions for creating/verifying a merkle proof. - - -## Internal Util Functions - -These are not exposed. - - -### addHexPrefix - -[src/util/hex.js:7-22][19] - -Prepends hex prefix to an array of nibbles. - -#### Parameters - -- `Array` **[Array][17]** of nibbles - -Returns **[Array][17]** returns buffer of encoded data -\* - -### asyncFirstSeries - -[src/util/async.js:38-54][20] - -Take a collection of async fns, call the cb on the first to return a truthy value. -If all run without a truthy result, return undefined - -#### Parameters - -- `array` -- `iterator` -- `cb` - -### doKeysMatch - -[src/util/nibbles.js:56-59][21] - -Compare two nibble array keys. - -#### Parameters - -- `keyA` **[Array][17]** -- `keyB` **[Array][17]** - -## - -[src/db.js:3-3][22] - -DB is a thin wrapper around the underlying levelup db, -which validates inputs and sets encoding type. - -## - -[src/util/async.js:3-6][23] - -Take two or more functions and returns a function that will execute all of -the given functions - -## - -[src/scratch.js:4-4][24] - -An in-memory wrap over `DB` with an upstream DB -which will be queried when a key is not found -in the in-memory scratch. This class is used to implement -checkpointing functionality in CheckpointTrie. - -## constructor - -[src/db.js:15-17][25] - -Initialize a DB instance. If `leveldb` is not provided, DB -defaults to an [in-memory store][5]. - -### Parameters - -- `leveldb` **[Object][3]?** An abstract-leveldown compliant store - -## get - -[src/db.js:26-36][26] - -Retrieves a raw value from leveldb. - -### Parameters - -- `key` **[Buffer][6]** -- `cb` **[Function][9]** A callback `Function`, which is given the arguments - `err` - for errors that may have occured - and `value` - the found value in a `Buffer` or if no value was found `null`. - -## put - -[src/db.js:45-50][27] - -Writes a value directly to leveldb. - -### Parameters - -- `key` **[Buffer][6]** The key as a `Buffer` or `String` -- `val` -- `cb` **[Function][9]** A callback `Function`, which is given the argument - `err` - for errors that may have occured -- `value` **[Buffer][6]** The value to be stored - -## del - -[src/db.js:58-62][28] - -Removes a raw value in the underlying leveldb. - -### Parameters - -- `key` **[Buffer][6]** -- `cb` **[Function][9]** A callback `Function`, which is given the argument - `err` - for errors that may have occured - -## batch - -[src/db.js:70-74][29] - -Performs a batch operation on db. - -### Parameters - -- `opStack` **[Array][17]** A stack of levelup operations -- `cb` **[Function][9]** A callback `Function`, which is given the argument - `err` - for errors that may have occured - -## copy - -[src/db.js:80-82][30] - -Returns a copy of the DB instance, with a reference -to the **same** underlying leveldb instance. - -## isCheckpoint - -[src/checkpointTrie.js:22-24][31] - -Is the trie during a checkpoint phase? - -## copy - -[src/checkpointTrie.js:97-106][32] - -Returns a copy of the underlying trie with the interface -of CheckpointTrie. If during a checkpoint, the copy will -contain the checkpointing metadata (incl. reference to the same scratch). - -### Parameters - -- `includeCheckpoints` **[boolean][33]** If true and during a checkpoint, the copy will - contain the checkpointing metadata and will use the same scratch as underlying db. (optional, default `true`) - -## putRaw - -[src/checkpointTrie.js:113-115][34] - -Writes a value under given key directly to the -key/value db, disregarding checkpoints. - -### Parameters - -- `key` -- `value` -- `cb` - -**Meta** - -- **deprecated**: This is deprecated. - - -## get - -[src/scratch.js:22-35][35] - -Similar to `DB.get`, but first searches in-memory -scratch DB, if key not found, searches upstream DB. - -### Parameters - -- `key` -- `cb` - -## checkpoint - -[src/checkpointTrie.js:33-41][36] - -Creates a checkpoint that can later be reverted to or committed. -After this is called, no changes to the trie will be permanently saved -until `commit` is called. Calling `putRaw` overrides the checkpointing -mechanism and would directly write to db. - -## put - -[src/secure.js:42-49][37] - -For a falsey value, use the original key -to avoid double hashing the key. - -### Parameters - -- `key` -- `val` -- `cb` - -## commit - -[src/checkpointTrie.js:50-65][38] - -Commits a checkpoint to disk, if current checkpoint is not nested. If -nested, only sets the parent checkpoint as current checkpoint. - -### Parameters - -- `cb` **[Function][9]** the callback - - -- Throws **any** If not during a checkpoint phase - -## revert - -[src/checkpointTrie.js:74-88][39] - -Reverts the trie to the state it was at when `checkpoint` was first called. -If during a nested checkpoint, sets root to most recent checkpoint, and sets -parent checkpoint as current. - -### Parameters - -- `cb` **[Function][9]** the callback - -## getRaw - -[src/baseTrie.js:169-171][40] - -Retrieves a value directly from key/value db. - -### Parameters - -- `key` -- `cb` - -**Meta** - -- **deprecated**: This is deprecated. - - -## putRaw - -[src/baseTrie.js:178-180][41] - -Writes a value under given key directly to the -key/value db. - -### Parameters - -- `key` -- `value` -- `cb` - -**Meta** - -- **deprecated**: This is deprecated. - - -## delRaw - -[src/baseTrie.js:186-188][42] - -Deletes key directly from underlying key/value db. - -### Parameters - -- `key` -- `cb` - -**Meta** - -- **deprecated**: This is deprecated. - - -[1]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/secure.js#L12-L55 "Source code on GitHub" - -[2]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L25-L768 "Source code on GitHub" - -[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object - -[4]: https://github.com/Level/levelup - -[5]: https://github.com/Level/memdown - -[6]: https://nodejs.org/api/buffer.html - -[7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String - -[8]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L92-L104 "Source code on GitHub" - -[9]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function - -[10]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L114-L138 "Source code on GitHub" - -[11]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L147-L163 "Source code on GitHub" - -[12]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L226-L272 "Source code on GitHub" - -[13]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L716-L718 "Source code on GitHub" - -[14]: https://nodejs.org/api/stream.html#stream_class_stream_readable - -[15]: https://nodejs.org/dist/latest-v5.x/docs/api/stream.html#stream_class_stream_readable - -[16]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L743-L753 "Source code on GitHub" - -[17]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array - -[18]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L762-L767 "Source code on GitHub" - -[19]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/util/hex.js#L7-L22 "Source code on GitHub" - -[20]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/util/async.js#L38-L54 "Source code on GitHub" - -[21]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/util/nibbles.js#L56-L59 "Source code on GitHub" - -[22]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/db.js#L3-L3 "Source code on GitHub" - -[23]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/util/async.js#L3-L6 "Source code on GitHub" - -[24]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/scratch.js#L4-L4 "Source code on GitHub" - -[25]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/db.js#L15-L17 "Source code on GitHub" - -[26]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/db.js#L26-L36 "Source code on GitHub" - -[27]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/db.js#L45-L50 "Source code on GitHub" - -[28]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/db.js#L58-L62 "Source code on GitHub" - -[29]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/db.js#L70-L74 "Source code on GitHub" - -[30]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/db.js#L80-L82 "Source code on GitHub" - -[31]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/checkpointTrie.js#L22-L24 "Source code on GitHub" - -[32]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/checkpointTrie.js#L97-L106 "Source code on GitHub" - -[33]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean - -[34]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/checkpointTrie.js#L113-L115 "Source code on GitHub" - -[35]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/scratch.js#L22-L35 "Source code on GitHub" - -[36]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/checkpointTrie.js#L33-L41 "Source code on GitHub" - -[37]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/secure.js#L42-L49 "Source code on GitHub" - -[38]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/checkpointTrie.js#L50-L65 "Source code on GitHub" - -[39]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/checkpointTrie.js#L74-L88 "Source code on GitHub" - -[40]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L169-L171 "Source code on GitHub" - -[41]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L178-L180 "Source code on GitHub" - -[42]: https://github.com/ethereumjs/merkle-patricia-tree/blob/2685d6759e18abeba0967b151bf965a5b1f9eec8/src/baseTrie.js#L186-L188 "Source code on GitHub" diff --git a/docs/interfaces/delbatch.md b/docs/interfaces/delbatch.md new file mode 100644 index 0000000..b45922a --- /dev/null +++ b/docs/interfaces/delbatch.md @@ -0,0 +1,30 @@ +[merkle-patricia-tree](../README.md) › [DelBatch](delbatch.md) + +# Interface: DelBatch + +## Hierarchy + +* **DelBatch** + +## Index + +### Properties + +* [key](delbatch.md#key) +* [type](delbatch.md#type) + +## Properties + +### key + +• **key**: *Buffer* + +*Defined in [db.ts:15](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L15)* + +___ + +### type + +• **type**: *"del"* + +*Defined in [db.ts:14](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L14)* diff --git a/docs/interfaces/putbatch.md b/docs/interfaces/putbatch.md new file mode 100644 index 0000000..9d22c24 --- /dev/null +++ b/docs/interfaces/putbatch.md @@ -0,0 +1,39 @@ +[merkle-patricia-tree](../README.md) › [PutBatch](putbatch.md) + +# Interface: PutBatch + +## Hierarchy + +* **PutBatch** + +## Index + +### Properties + +* [key](putbatch.md#key) +* [type](putbatch.md#type) +* [value](putbatch.md#value) + +## Properties + +### key + +• **key**: *Buffer* + +*Defined in [db.ts:10](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L10)* + +___ + +### type + +• **type**: *"put"* + +*Defined in [db.ts:9](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L9)* + +___ + +### value + +• **value**: *Buffer* + +*Defined in [db.ts:11](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L11)* diff --git a/docs/interfaces/task.md b/docs/interfaces/task.md new file mode 100644 index 0000000..a86fea9 --- /dev/null +++ b/docs/interfaces/task.md @@ -0,0 +1,30 @@ +[merkle-patricia-tree](../README.md) › [Task](task.md) + +# Interface: Task + +## Hierarchy + +* **Task** + +## Index + +### Properties + +* [fn](task.md#fn) +* [priority](task.md#priority) + +## Properties + +### fn + +• **fn**: *Function* + +*Defined in [prioritizedTaskExecutor.ts:3](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L3)* + +___ + +### priority + +• **priority**: *number* + +*Defined in [prioritizedTaskExecutor.ts:2](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L2)* diff --git a/package.json b/package.json index 63d7ace..1b504fc 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "prepublishOnly": "npm run test && npm run build", "coverage": "nyc npm run test:node && nyc report --reporter=text-lcov > .nyc_output/lcov.info", "coveralls": "npm run coverage && coveralls < .nyc_output/lcov.info", - "docs:build": "typedoc src", + "docs:build": "npx typedoc", "tslint": "ethereumjs-config-tslint", "tslint:fix": "ethereumjs-config-tslint-fix", "lint": "ethereumjs-config-lint", @@ -76,8 +76,8 @@ "prettier": "^1.18.2", "tape": "^4.10.1", "tslint": "^5.18.0", - "typedoc": "^0.15.0", - "typedoc-plugin-markdown": "^2.1.0", + "typedoc": "^0.16.9", + "typedoc-plugin-markdown": "^2.2.16", "typescript": "^3.5.3", "typestrict": "^1.0.2" }, diff --git a/src/baseTrie.ts b/src/baseTrie.ts index 6b25872..4661fe9 100644 --- a/src/baseTrie.ts +++ b/src/baseTrie.ts @@ -119,7 +119,7 @@ export class Trie { * Gets a value given a `key` * @method get * @memberof Trie - * @param {Buffer|String} key - the key to search for + * @param {Buffer} key - the key to search for * @param {Function} cb A callback `Function` which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null` */ get(key: Buffer, cb: Function) { @@ -140,8 +140,8 @@ export class Trie { * Stores a given `value` at the given `key` * @method put * @memberof Trie - * @param {Buffer|String} key - * @param {Buffer|String} Value + * @param {Buffer} key + * @param {Buffer} Value * @param {Function} cb A callback `Function` which is given the argument `err` - for errors that may have occured */ put(key: Buffer, value: Buffer, cb: ErrorCallback) { @@ -177,7 +177,7 @@ export class Trie { * deletes a value given a `key` * @method del * @memberof Trie - * @param {Buffer|String} key + * @param {Buffer} key * @param {Function} callback the callback `Function` */ del(key: Buffer, cb: Function) { @@ -786,11 +786,11 @@ export class Trie { * @memberof Trie * @example * var ops = [ - * { type: 'del', key: 'father' } - * , { type: 'put', key: 'name', value: 'Yuri Irsenovich Kim' } - * , { type: 'put', key: 'dob', value: '16 February 1941' } - * , { type: 'put', key: 'spouse', value: 'Kim Young-sook' } - * , { type: 'put', key: 'occupation', value: 'Clown' } + * { type: 'del', key: Buffer.from('father') } + * , { type: 'put', key: Buffer.from('name'), value: Buffer.from('Yuri Irsenovich Kim') } + * , { type: 'put', key: Buffer.from('dob'), value: Buffer.from('16 February 1941') } + * , { type: 'put', key: Buffer.from('spouse'), value: Buffer.from('Kim Young-sook') } + * , { type: 'put', key: Buffer.from('occupation'), value: Buffer.from('Clown') } * ] * trie.batch(ops) * @param {Array} ops diff --git a/test/checkpoint.js b/test/checkpoint.js index da670cb..6020f94 100644 --- a/test/checkpoint.js +++ b/test/checkpoint.js @@ -1,69 +1,69 @@ const tape = require('tape') const Trie = require('../dist/checkpointTrie').CheckpointTrie -tape('testing checkpoints', function (tester) { +tape('testing checkpoints', function(tester) { let trie, preRoot, postRoot, trieCopy const it = tester.test - it('setup', function (t) { + it('setup', function(t) { trie = new Trie() - trie.put('do', 'verb', function () { - trie.put('doge', 'coin', function () { + trie.put(Buffer.from('do'), Buffer.from('verb'), function() { + trie.put(Buffer.from('doge'), Buffer.from('coin'), function() { preRoot = trie.root.toString('hex') t.end() }) }) }) - it('should copy trie and get value before checkpoint', function (t) { + it('should copy trie and get value before checkpoint', function(t) { trieCopy = trie.copy() t.equal(trieCopy.root.toString('hex'), preRoot) - trieCopy.get('do', function (err, res) { + trieCopy.get(Buffer.from('do'), function(err, res) { t.error(err) t.ok(Buffer.from('verb').equals(res)) t.end() }) }) - it('should create a checkpoint', function (t) { + it('should create a checkpoint', function(t) { trie.checkpoint() t.end() }) - it('should save to the cache', function (t) { - trie.put('test', 'something', function () { - trie.put('love', 'emotion', function () { + it('should save to the cache', function(t) { + trie.put(Buffer.from('test'), Buffer.from('something'), function() { + trie.put(Buffer.from('love'), Buffer.from('emotion'), function() { postRoot = trie.root.toString('hex') t.end() }) }) }) - it('should get values from before checkpoint', function (t) { - trie.get('doge', function (err, res) { + it('should get values from before checkpoint', function(t) { + trie.get(Buffer.from('doge'), function(err, res) { t.error(err) t.ok(Buffer.from('coin').equals(res)) t.end() }) }) - it('should get values from cache', function (t) { - trie.get('love', function (err, res) { + it('should get values from cache', function(t) { + trie.get(Buffer.from('love'), function(err, res) { t.error(err) t.ok(Buffer.from('emotion').equals(res)) t.end() }) }) - it('should copy trie and get upstream and cache values after checkpoint', function (t) { + it('should copy trie and get upstream and cache values after checkpoint', function(t) { trieCopy = trie.copy() t.equal(trieCopy.root.toString('hex'), postRoot) t.equal(trieCopy._checkpoints.length, 1) t.ok(trieCopy.isCheckpoint) - trieCopy.get('do', function (err, res) { + trieCopy.get(Buffer.from('do'), function(err, res) { t.error(err) t.ok(Buffer.from('verb').equals(res)) - trieCopy.get('love', function (err, res) { + trieCopy.get(Buffer.from('love'), function(err, res) { t.error(err) t.ok(Buffer.from('emotion').equals(res)) t.end() @@ -71,28 +71,28 @@ tape('testing checkpoints', function (tester) { }) }) - it('should revert to the orginal root', function (t) { + it('should revert to the orginal root', function(t) { t.equal(trie.isCheckpoint, true) - trie.revert(function () { + trie.revert(function() { t.equal(trie.root.toString('hex'), preRoot) t.equal(trie.isCheckpoint, false) t.end() }) }) - it('should not get values from cache after revert', function (t) { - trie.get('love', function (err, res) { + it('should not get values from cache after revert', function(t) { + trie.get(Buffer.from('love'), function(err, res) { t.error(err) t.notOk(res) t.end() }) }) - it('should commit a checkpoint', function (t) { + it('should commit a checkpoint', function(t) { trie.checkpoint() - trie.put('test', 'something', function () { - trie.put('love', 'emotion', function () { - trie.commit(function () { + trie.put(Buffer.from('test'), Buffer.from('something'), function() { + trie.put(Buffer.from('love'), Buffer.from('emotion'), function() { + trie.commit(function() { t.equal(trie.isCheckpoint, false) t.equal(trie.root.toString('hex'), postRoot) t.end() @@ -101,23 +101,23 @@ tape('testing checkpoints', function (tester) { }) }) - it('should get new values after commit', function (t) { - trie.get('love', function (err, res) { + it('should get new values after commit', function(t) { + trie.get(Buffer.from('love'), function(err, res) { t.error(err) t.ok(Buffer.from('emotion').equals(res)) t.end() }) }) - it('should commit a nested checkpoint', function (t) { + it('should commit a nested checkpoint', function(t) { trie.checkpoint() var root - trie.put('test', 'something else', function () { + trie.put(Buffer.from('test'), Buffer.from('something else'), function() { root = trie.root trie.checkpoint() - trie.put('the feels', 'emotion', function () { + trie.put(Buffer.from('the feels'), Buffer.from('emotion'), function() { trie.revert() - trie.commit(function () { + trie.commit(function() { t.equal(trie.isCheckpoint, false) t.equal(trie.root.toString('hex'), root.toString('hex')) t.end() diff --git a/test/encodeing.js b/test/encodeing.js index c481ebd..3bcb8e9 100644 --- a/test/encodeing.js +++ b/test/encodeing.js @@ -4,9 +4,9 @@ const trie = new Trie() const trie2 = new Trie() const hex = 'FF44A3B3' -tape('encoding hexprefixes ', function (t) { - trie.put(new Buffer(hex, 'hex'), 'test', function () { - trie2.put('0x' + hex, 'test', function () { +tape('encoding hexprefixes ', function(t) { + trie.put(new Buffer(hex, 'hex'), Buffer.from('test'), function() { + trie2.put('0x' + hex, Buffer.from('test'), function() { t.equal(trie.root.toString('hex'), trie2.root.toString('hex')) t.end() }) diff --git a/test/index.js b/test/index.js index 3847ebc..37e5338 100644 --- a/test/index.js +++ b/test/index.js @@ -4,14 +4,14 @@ const rlp = require('rlp') const tape = require('tape') const ethUtil = require('ethereumjs-util') -tape('simple save and retrive', function (tester) { +tape('simple save and retrive', function(tester) { var it = tester.test - it('should not crash if given a non-existant root', function (t) { + it('should not crash if given a non-existant root', function(t) { var root = new Buffer('3f4399b08efe68945c1cf90ffe85bbe3ce978959da753f9e649f034015b8817d', 'hex') var trie = new Trie(null, root) - trie.get('test', function (err, value) { + trie.get(Buffer.from('test'), function(err, value) { t.equal(value, null) t.notEqual(err, null) t.end() @@ -19,63 +19,66 @@ tape('simple save and retrive', function (tester) { }) var trie = new Trie() - it('save a value', function (t) { - trie.put('test', 'one', t.end) + it('save a value', function(t) { + trie.put(Buffer.from('test'), Buffer.from('one'), t.end) }) - it('should get a value', function (t) { - trie.get('test', function (err, value) { + it('should get a value', function(t) { + trie.get(Buffer.from('test'), function(err, value) { t.equal(value.toString(), 'one') t.end(err) }) }) - it('should update a value', function (t) { - trie.put('test', new Buffer('two'), function () { - trie.get('test', function (err, value) { + it('should update a value', function(t) { + trie.put(Buffer.from('test'), Buffer.from('two'), function() { + trie.get(Buffer.from('test'), function(err, value) { t.equal(value.toString(), 'two') t.end(err) }) }) }) - it('should delete a value', function (t) { - trie.del('test', function (stack) { - trie.get('test', function (err, value) { + it('should delete a value', function(t) { + trie.del(Buffer.from('test'), function(stack) { + trie.get(Buffer.from('test'), function(err, value) { t.notok(value) t.end(err) }) }) }) - it('should recreate a value', function (t) { + it('should recreate a value', function(t) { trie.put(new Buffer('test'), new Buffer('one'), t.end) }) - it('should get updated a value', function (t) { - trie.get('test', function (err, value) { + it('should get updated a value', function(t) { + trie.get(Buffer.from('test'), function(err, value) { t.equal(value.toString(), 'one') t.end(err) }) }) - it('should create a branch here', function (t) { - trie.put(new Buffer('doge'), new Buffer('coin'), function () { - t.equal('de8a34a8c1d558682eae1528b47523a483dd8685d6db14b291451a66066bf0fc', trie.root.toString('hex')) + it('should create a branch here', function(t) { + trie.put(new Buffer('doge'), new Buffer('coin'), function() { + t.equal( + 'de8a34a8c1d558682eae1528b47523a483dd8685d6db14b291451a66066bf0fc', + trie.root.toString('hex'), + ) t.end() }) }) - it('should get a value that is in a branch', function (t) { - trie.get(new Buffer('doge'), function (err, value) { + it('should get a value that is in a branch', function(t) { + trie.get(new Buffer('doge'), function(err, value) { t.equal(value.toString(), 'coin') t.end(err) }) }) - it('should delete from a branch', function (t) { - trie.del('doge', function (err1, stack) { - trie.get('doge', function (err2, value) { + it('should delete from a branch', function(t) { + trie.del(Buffer.from('doge'), function(err1, stack) { + trie.get(Buffer.from('doge'), function(err2, value) { t.equal(value, null) t.end(err1 || err2) }) @@ -83,122 +86,157 @@ tape('simple save and retrive', function (tester) { }) }) -tape('storing longer values', function (tester) { +tape('storing longer values', function(tester) { var it = tester.test var trie = new Trie() var longString = 'this will be a really really really long value' var longStringRoot = 'b173e2db29e79c78963cff5196f8a983fbe0171388972106b114ef7f5c24dfa3' - it('should store a longer string', function (t) { - trie.put(new Buffer('done'), new Buffer(longString), function (err1, value) { - trie.put(new Buffer('doge'), new Buffer('coin'), function (err2, value) { + it('should store a longer string', function(t) { + trie.put(new Buffer('done'), new Buffer(longString), function(err1, value) { + trie.put(new Buffer('doge'), new Buffer('coin'), function(err2, value) { t.equal(longStringRoot, trie.root.toString('hex')) t.end(err1 || err2) }) }) }) - it('should retreive a longer value', function (t) { - trie.get(new Buffer('done'), function (err, value) { + it('should retreive a longer value', function(t) { + trie.get(new Buffer('done'), function(err, value) { t.equal(value.toString(), longString) t.end(err) }) }) - it('should when being modiefied delete the old value', function (t) { + it('should when being modiefied delete the old value', function(t) { trie.put(new Buffer('done'), new Buffer('test'), t.end) }) }) -tape('testing Extentions and branches', function (tester) { +tape('testing Extentions and branches', function(tester) { var trie = new Trie() var it = tester.test - it('should store a value', function (t) { + it('should store a value', function(t) { trie.put(new Buffer('doge'), new Buffer('coin'), t.end) }) - it('should create extention to store this value', function (t) { - trie.put(new Buffer('do'), new Buffer('verb'), function () { - t.equal('f803dfcb7e8f1afd45e88eedb4699a7138d6c07b71243d9ae9bff720c99925f9', trie.root.toString('hex')) + it('should create extention to store this value', function(t) { + trie.put(new Buffer('do'), new Buffer('verb'), function() { + t.equal( + 'f803dfcb7e8f1afd45e88eedb4699a7138d6c07b71243d9ae9bff720c99925f9', + trie.root.toString('hex'), + ) t.end() }) }) - it('should store this value under the extention ', function (t) { - trie.put(new Buffer('done'), new Buffer('finished'), function () { - t.equal('409cff4d820b394ed3fb1cd4497bdd19ffa68d30ae34157337a7043c94a3e8cb', trie.root.toString('hex')) + it('should store this value under the extention ', function(t) { + trie.put(new Buffer('done'), new Buffer('finished'), function() { + t.equal( + '409cff4d820b394ed3fb1cd4497bdd19ffa68d30ae34157337a7043c94a3e8cb', + trie.root.toString('hex'), + ) t.end() }) }) }) -tape('testing Extentions and branches - reverse', function (tester) { +tape('testing Extentions and branches - reverse', function(tester) { var it = tester.test var trie = new Trie() - it('should create extention to store this value', function (t) { + it('should create extention to store this value', function(t) { trie.put(new Buffer('do'), new Buffer('verb'), t.end) }) - it('should store a value', function (t) { + it('should store a value', function(t) { trie.put(new Buffer('doge'), new Buffer('coin'), t.end) }) - it('should store this value under the extention ', function (t) { - trie.put(new Buffer('done'), new Buffer('finished'), function () { - t.equal('409cff4d820b394ed3fb1cd4497bdd19ffa68d30ae34157337a7043c94a3e8cb', trie.root.toString('hex')) + it('should store this value under the extention ', function(t) { + trie.put(new Buffer('done'), new Buffer('finished'), function() { + t.equal( + '409cff4d820b394ed3fb1cd4497bdd19ffa68d30ae34157337a7043c94a3e8cb', + trie.root.toString('hex'), + ) t.end() }) }) }) -tape('testing deletions cases', function (tester) { +tape('testing deletions cases', function(tester) { var it = tester.test var trie = new Trie() - it('should delete from a branch->branch-branch', function (t) { - async.parallel([ - async.apply(trie.put.bind(trie), new Buffer([11, 11, 11]), 'first'), - async.apply(trie.put.bind(trie), new Buffer([12, 22, 22]), 'create the first branch'), - async.apply(trie.put.bind(trie), new Buffer([12, 34, 44]), 'create the last branch') - ], function () { - trie.del(new Buffer([12, 22, 22]), function () { - trie.get(new Buffer([12, 22, 22]), function (err, val) { - t.equal(null, val) - trie = new Trie() - t.end(err) + it('should delete from a branch->branch-branch', function(t) { + async.parallel( + [ + async.apply(trie.put.bind(trie), new Buffer([11, 11, 11]), Buffer.from('first')), + async.apply( + trie.put.bind(trie), + new Buffer([12, 22, 22]), + Buffer.from('create the first branch'), + ), + async.apply( + trie.put.bind(trie), + new Buffer([12, 34, 44]), + Buffer.from('create the last branch'), + ), + ], + function() { + trie.del(new Buffer([12, 22, 22]), function() { + trie.get(new Buffer([12, 22, 22]), function(err, val) { + t.equal(null, val) + trie = new Trie() + t.end(err) + }) }) - }) - }) + }, + ) }) - it('should delete from a branch->branch-extention', function (t) { - async.parallel([ - async.apply(trie.put.bind(trie), new Buffer([11, 11, 11]), 'first'), - async.apply(trie.put.bind(trie), new Buffer([12, 22, 22]), 'create the first branch'), - async.apply(trie.put.bind(trie), new Buffer([12, 33, 33]), 'create the middle branch'), - async.apply(trie.put.bind(trie), new Buffer([12, 33, 44]), 'create the last branch') - ], function () { - trie.del(new Buffer([12, 22, 22]), function () { - trie.get(new Buffer([12, 22, 22]), function (err, val) { - t.equal(null, val) - t.end(err) + it('should delete from a branch->branch-extention', function(t) { + async.parallel( + [ + async.apply(trie.put.bind(trie), new Buffer([11, 11, 11]), Buffer.from('first')), + async.apply( + trie.put.bind(trie), + new Buffer([12, 22, 22]), + Buffer.from('create the first branch'), + ), + async.apply( + trie.put.bind(trie), + new Buffer([12, 33, 33]), + Buffer.from('create the middle branch'), + ), + async.apply( + trie.put.bind(trie), + new Buffer([12, 33, 44]), + Buffer.from('create the last branch'), + ), + ], + function() { + trie.del(new Buffer([12, 22, 22]), function() { + trie.get(new Buffer([12, 22, 22]), function(err, val) { + t.equal(null, val) + t.end(err) + }) }) - }) - }) + }, + ) }) - it('should delete from a extention->branch-extention', function (t) { - trie.put(new Buffer([11, 11, 11]), 'first', function () { + it('should delete from a extention->branch-extention', function(t) { + trie.put(new Buffer([11, 11, 11]), Buffer.from('first'), function() { // create the top branch - trie.put(new Buffer([12, 22, 22]), 'create the first branch', function () { + trie.put(new Buffer([12, 22, 22]), Buffer.from('create the first branch'), function() { // crete the middle branch - trie.put(new Buffer([12, 33, 33]), 'create the middle branch', function () { - trie.put(new Buffer([12, 33, 44]), 'create the last branch', function () { + trie.put(new Buffer([12, 33, 33]), Buffer.from('create the middle branch'), function() { + trie.put(new Buffer([12, 33, 44]), Buffer.from('create the last branch'), function() { // delete the middle branch - trie.del(new Buffer([11, 11, 11]), function () { - trie.get(new Buffer([11, 11, 11]), function (err, val) { + trie.del(new Buffer([11, 11, 11]), function() { + trie.get(new Buffer([11, 11, 11]), function(err, val) { t.equal(null, val) t.end(err) }) @@ -209,16 +247,16 @@ tape('testing deletions cases', function (tester) { }) }) - it('should delete from a extention->branch-branch', function (t) { - trie.put(new Buffer([11, 11, 11]), 'first', function () { + it('should delete from a extention->branch-branch', function(t) { + trie.put(new Buffer([11, 11, 11]), Buffer.from('first'), function() { // create the top branch - trie.put(new Buffer([12, 22, 22]), 'create the first branch', function () { + trie.put(new Buffer([12, 22, 22]), Buffer.from('create the first branch'), function() { // crete the middle branch - trie.put(new Buffer([12, 33, 33]), 'create the middle branch', function () { - trie.put(new Buffer([12, 34, 44]), 'create the last branch', function () { + trie.put(new Buffer([12, 33, 33]), Buffer.from('create the middle branch'), function() { + trie.put(new Buffer([12, 34, 44]), Buffer.from('create the last branch'), function() { // delete the middle branch - trie.del(new Buffer([11, 11, 11]), function () { - trie.get(new Buffer([11, 11, 11]), function (err, val) { + trie.del(new Buffer([11, 11, 11]), function() { + trie.get(new Buffer([11, 11, 11]), function(err, val) { t.equal(null, val) t.end(err) }) @@ -230,7 +268,7 @@ tape('testing deletions cases', function (tester) { }) }) -tape('it should create the genesis state root from ethereum', function (tester) { +tape('it should create the genesis state root from ethereum', function(tester) { var it = tester.test var trie4 = new Trie() var g = new Buffer('8a40bfaa73256b60764c1bf40675a99083efb075', 'hex') @@ -245,16 +283,17 @@ tape('it should create the genesis state root from ethereum', function (tester) startAmount[0] = 1 var account = [startAmount, 0, stateRoot, ethUtil.keccak256()] var rlpAccount = rlp.encode(account) - var cppRlp = 'f85e9a010000000000000000000000000000000000000000000000000080a00000000000000000000000000000000000000000000000000000000000000000a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' + var cppRlp = + 'f85e9a010000000000000000000000000000000000000000000000000080a00000000000000000000000000000000000000000000000000000000000000000a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' var genesisStateRoot = '2f4399b08efe68945c1cf90ffe85bbe3ce978959da753f9e649f034015b8817d' tester.equal(cppRlp, rlpAccount.toString('hex')) - it('shall match the root', function (t) { - trie4.put(g, rlpAccount, function () { - trie4.put(j, rlpAccount, function () { - trie4.put(v, rlpAccount, function () { - trie4.put(a, rlpAccount, function () { + it('shall match the root', function(t) { + trie4.put(g, rlpAccount, function() { + trie4.put(j, rlpAccount, function() { + trie4.put(v, rlpAccount, function() { + trie4.put(a, rlpAccount, function() { t.equal(trie4.root.toString('hex'), genesisStateRoot) t.end() }) diff --git a/test/offical.js b/test/offical.js index 31590ee..2514826 100644 --- a/test/offical.js +++ b/test/offical.js @@ -2,58 +2,76 @@ const Trie = require('../dist/index').CheckpointTrie const async = require('async') const tape = require('tape') -tape('offical tests', function (t) { +tape('offical tests', function(t) { const jsonTests = require('./fixture/trietest.json').tests const testNames = Object.keys(jsonTests) let trie = new Trie() - async.eachSeries(testNames, function (i, done) { - let inputs = jsonTests[i].in - let expect = jsonTests[i].root - - async.eachSeries(inputs, function (input, done) { - for (i = 0; i < 2; i++) { - if (input[i] && input[i].slice(0, 2) === '0x') { - input[i] = new Buffer(input[i].slice(2), 'hex') - } - } - - trie.put(new Buffer(input[0]), input[1], function () { - done() - }) - }, function () { - t.equal('0x' + trie.root.toString('hex'), expect) - trie = new Trie() - done() - }) - }, t.end) + async.eachSeries( + testNames, + function(i, done) { + let inputs = jsonTests[i].in + let expect = jsonTests[i].root + + async.eachSeries( + inputs, + function(input, done) { + for (i = 0; i < 2; i++) { + if (input[i] && input[i].slice(0, 2) === '0x') { + input[i] = new Buffer(input[i].slice(2), 'hex') + } else if (input[i] && typeof input[i] === 'string') { + input[i] = Buffer.from(input[i]) + } + } + + trie.put(new Buffer(input[0]), input[1], function() { + done() + }) + }, + function() { + t.equal('0x' + trie.root.toString('hex'), expect) + trie = new Trie() + done() + }, + ) + }, + t.end, + ) }) -tape('offical tests any order', function (t) { +tape('offical tests any order', function(t) { const jsonTests = require('./fixture/trieanyorder.json').tests var testNames = Object.keys(jsonTests) var trie = new Trie() - async.eachSeries(testNames, function (i, done) { - var test = jsonTests[i] - var keys = Object.keys(test.in) - - async.eachSeries(keys, function (key, done) { - var val = test.in[key] - - if (key.slice(0, 2) === '0x') { - key = new Buffer(key.slice(2), 'hex') - } - - if (val && val.slice(0, 2) === '0x') { - val = new Buffer(val.slice(2), 'hex') - } - - trie.put(new Buffer(key), new Buffer(val), function () { - done() - }) - }, function () { - t.equal('0x' + trie.root.toString('hex'), test.root) - trie = new Trie() - done() - }) - }, t.end) + async.eachSeries( + testNames, + function(i, done) { + var test = jsonTests[i] + var keys = Object.keys(test.in) + + async.eachSeries( + keys, + function(key, done) { + var val = test.in[key] + + if (key.slice(0, 2) === '0x') { + key = new Buffer(key.slice(2), 'hex') + } + + if (val && val.slice(0, 2) === '0x') { + val = new Buffer(val.slice(2), 'hex') + } + + trie.put(new Buffer(key), new Buffer(val), function() { + done() + }) + }, + function() { + t.equal('0x' + trie.root.toString('hex'), test.root) + trie = new Trie() + done() + }, + ) + }, + t.end, + ) }) diff --git a/test/proof.js b/test/proof.js index 9a22980..7cd6a28 100644 --- a/test/proof.js +++ b/test/proof.js @@ -2,239 +2,276 @@ const Trie = require('../dist/index').CheckpointTrie const async = require('async') const tape = require('tape') -tape('simple merkle proofs generation and verification', function (tester) { +tape('simple merkle proofs generation and verification', function(tester) { var it = tester.test - it('create a merkle proof and verify it', function (t) { + it('create a merkle proof and verify it', function(t) { var trie = new Trie() - async.series([ - function (cb) { - trie.put('key1aa', '0123456789012345678901234567890123456789xx', cb) - }, - function (cb) { - trie.put('key2bb', 'aval2', cb) - }, - function (cb) { - trie.put('key3cc', 'aval3', cb) - }, - function (cb) { - Trie.prove(trie, 'key2bb', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'key2bb', prove, function (err, val) { + async.series( + [ + function(cb) { + trie.put( + Buffer.from('key1aa'), + Buffer.from('0123456789012345678901234567890123456789xx'), + cb, + ) + }, + function(cb) { + trie.put(Buffer.from('key2bb'), Buffer.from('aval2'), cb) + }, + function(cb) { + trie.put(Buffer.from('key3cc'), Buffer.from('aval3'), cb) + }, + function(cb) { + Trie.prove(trie, Buffer.from('key2bb'), function(err, prove) { if (err) return cb(err) - t.equal(val.toString('utf8'), 'aval2') - cb() + Trie.verifyProof(trie.root, Buffer.from('key2bb'), prove, function(err, val) { + if (err) return cb(err) + t.equal(val.toString('utf8'), 'aval2') + cb() + }) }) - }) - }, - function (cb) { - Trie.prove(trie, 'key1aa', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'key1aa', prove, function (err, val) { + }, + function(cb) { + Trie.prove(trie, Buffer.from('key1aa'), function(err, prove) { if (err) return cb(err) - t.equal(val.toString('utf8'), '0123456789012345678901234567890123456789xx') - cb() + Trie.verifyProof(trie.root, Buffer.from('key1aa'), prove, function(err, val) { + if (err) return cb(err) + t.equal(val.toString('utf8'), '0123456789012345678901234567890123456789xx') + cb() + }) }) - }) - }, - function (cb) { - Trie.prove(trie, 'key2bb', function (err, prove) { - t.equal(err, null, 'Path to key2 should create valid proof of absence') - if (err) return cb(err) - Trie.verifyProof(trie.root, 'key2', prove, function (err, val) { - // In this case, the proof _happens_ to contain enough nodes to prove `key2` because - // traversing into `key22` would touch all the same nodes as traversing into `key2` - t.equal(val, null, 'Expected value at a random key to be null') - t.equal(err, null, 'Path to key2 should show a null value') - cb() + }, + function(cb) { + Trie.prove(trie, Buffer.from('key2bb'), function(err, prove) { + t.equal(err, null, 'Path to key2 should create valid proof of absence') + if (err) return cb(err) + Trie.verifyProof(trie.root, Buffer.from('key2'), prove, function(err, val) { + // In this case, the proof _happens_ to contain enough nodes to prove `key2` because + // traversing into `key22` would touch all the same nodes as traversing into `key2` + t.equal(val, null, 'Expected value at a random key to be null') + t.equal(err, null, 'Path to key2 should show a null value') + cb() + }) }) - }) - }, - function (cb) { - let myKey = 'anyrandomkey' - Trie.prove(trie, myKey, function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, myKey, prove, function (err, val) { - t.equal(val, null, 'Expected value to be null') - t.equal(err, null, err) - cb() + }, + function(cb) { + let myKey = Buffer.from('anyrandomkey') + Trie.prove(trie, myKey, function(err, prove) { + if (err) return cb(err) + Trie.verifyProof(trie.root, myKey, prove, function(err, val) { + t.equal(val, null, 'Expected value to be null') + t.equal(err, null, err) + cb() + }) }) - }) - }, - function (cb) { - let myKey = 'anothergarbagekey' // should generate a valid proof of null - Trie.prove(trie, myKey, function (err, prove) { - if (err) return cb(err) - prove.push(Buffer.from('123456'))// extra nodes are just ignored - Trie.verifyProof(trie.root, myKey, prove, function (err, val) { - t.equal(val, null, 'Expected value to be null') - t.equal(err, null, err) - cb() + }, + function(cb) { + let myKey = Buffer.from('anothergarbagekey') // should generate a valid proof of null + Trie.prove(trie, myKey, function(err, prove) { + if (err) return cb(err) + prove.push(Buffer.from('123456')) // extra nodes are just ignored + Trie.verifyProof(trie.root, myKey, prove, function(err, val) { + t.equal(val, null, 'Expected value to be null') + t.equal(err, null, err) + cb() + }) }) - }) - }, - function (cb) { - trie.put('another', '3498h4riuhgwe', cb) - }, - function (cb) { - // to throw an error we need to request proof for one key - Trie.prove(trie, 'another', function (err, prove) { - if (err) return cb(err) - // and try to use that proof on another key - Trie.verifyProof(trie.root, 'key1aa', prove, function (err, val) { - t.equal(val, null, 'Expected value: to be null ') - // this proof would be insignificant to prove `key1aa` - t.notEqual(err, null, 'Expected error: Missing node in DB') - t.notEqual(err, undefined, 'Expected error: Missing node in DB') - cb() + }, + function(cb) { + trie.put(Buffer.from('another'), Buffer.from('3498h4riuhgwe'), cb) + }, + function(cb) { + // to throw an error we need to request proof for one key + Trie.prove(trie, Buffer.from('another'), function(err, prove) { + if (err) return cb(err) + // and try to use that proof on another key + Trie.verifyProof(trie.root, Buffer.from('key1aa'), prove, function(err, val) { + t.equal(val, null, 'Expected value: to be null ') + // this proof would be insignificant to prove `key1aa` + t.notEqual(err, null, 'Expected error: Missing node in DB') + t.notEqual(err, undefined, 'Expected error: Missing node in DB') + cb() + }) }) - }) - } - ], function (err) { - t.end(err) - }) + }, + ], + function(err) { + t.end(err) + }, + ) }) - it('create a merkle proof and verify it with a single long key', function (t) { + it('create a merkle proof and verify it with a single long key', function(t) { var trie = new Trie() - async.series([ - function (cb) { - trie.put('key1aa', '0123456789012345678901234567890123456789xx', cb) - }, - function (cb) { - Trie.prove(trie, 'key1aa', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'key1aa', prove, function (err, val) { + async.series( + [ + function(cb) { + trie.put( + Buffer.from('key1aa'), + Buffer.from('0123456789012345678901234567890123456789xx'), + cb, + ) + }, + function(cb) { + Trie.prove(trie, Buffer.from('key1aa'), function(err, prove) { if (err) return cb(err) - t.equal(val.toString('utf8'), '0123456789012345678901234567890123456789xx') - cb() + Trie.verifyProof(trie.root, Buffer.from('key1aa'), prove, function(err, val) { + if (err) return cb(err) + t.equal(val.toString('utf8'), '0123456789012345678901234567890123456789xx') + cb() + }) }) - }) - } - ], function (err) { - t.end(err) - }) + }, + ], + function(err) { + t.end(err) + }, + ) }) - it('create a merkle proof and verify it with a single short key', function (t) { + it('create a merkle proof and verify it with a single short key', function(t) { var trie = new Trie() - async.series([ - function (cb) { - trie.put('key1aa', '01234', cb) - }, - function (cb) { - Trie.prove(trie, 'key1aa', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'key1aa', prove, function (err, val) { + async.series( + [ + function(cb) { + trie.put(Buffer.from('key1aa'), Buffer.from('01234'), cb) + }, + function(cb) { + Trie.prove(trie, Buffer.from('key1aa'), function(err, prove) { if (err) return cb(err) - t.equal(val.toString('utf8'), '01234') - cb() + Trie.verifyProof(trie.root, Buffer.from('key1aa'), prove, function(err, val) { + if (err) return cb(err) + t.equal(val.toString('utf8'), '01234') + cb() + }) }) - }) - } - ], function (err) { - t.end(err) - }) + }, + ], + function(err) { + t.end(err) + }, + ) }) - it('create a merkle proof and verify it whit keys in the midle', function (t) { + it('create a merkle proof and verify it with keys in the middle', function(t) { var trie = new Trie() - async.series([ - function (cb) { - trie.put('key1aa', '0123456789012345678901234567890123456789xxx', cb) - }, - function (cb) { - trie.put('key1', '0123456789012345678901234567890123456789Very_Long', cb) - }, - function (cb) { - trie.put('key2bb', 'aval3', cb) - }, - function (cb) { - trie.put('key2', 'short', cb) - }, - function (cb) { - trie.put('key3cc', 'aval3', cb) - }, - function (cb) { - trie.put('key3', '1234567890123456789012345678901', cb) - }, - function (cb) { - Trie.prove(trie, 'key1', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'key1', prove, function (err, val) { + async.series( + [ + function(cb) { + trie.put( + Buffer.from('key1aa'), + Buffer.from('0123456789012345678901234567890123456789xxx'), + cb, + ) + }, + function(cb) { + trie.put( + Buffer.from('key1'), + Buffer.from('0123456789012345678901234567890123456789Very_Long'), + cb, + ) + }, + function(cb) { + trie.put(Buffer.from('key2bb'), Buffer.from('aval3'), cb) + }, + function(cb) { + trie.put(Buffer.from('key2'), Buffer.from('short'), cb) + }, + function(cb) { + trie.put(Buffer.from('key3cc'), Buffer.from('aval3'), cb) + }, + function(cb) { + trie.put(Buffer.from('key3'), Buffer.from('1234567890123456789012345678901'), cb) + }, + function(cb) { + Trie.prove(trie, 'key1', function(err, prove) { if (err) return cb(err) - t.equal(val.toString('utf8'), '0123456789012345678901234567890123456789Very_Long') - cb() + Trie.verifyProof(trie.root, Buffer.from('key1'), prove, function(err, val) { + if (err) return cb(err) + t.equal(val.toString('utf8'), '0123456789012345678901234567890123456789Very_Long') + cb() + }) }) - }) - }, - function (cb) { - Trie.prove(trie, 'key2', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'key2', prove, function (err, val) { + }, + function(cb) { + Trie.prove(trie, 'key2', function(err, prove) { if (err) return cb(err) - t.equal(val.toString('utf8'), 'short') - cb() + Trie.verifyProof(trie.root, Buffer.from('key2'), prove, function(err, val) { + if (err) return cb(err) + t.equal(val.toString('utf8'), 'short') + cb() + }) }) - }) - }, - function (cb) { - Trie.prove(trie, 'key3', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'key3', prove, function (err, val) { + }, + function(cb) { + Trie.prove(trie, 'key3', function(err, prove) { if (err) return cb(err) - t.equal(val.toString('utf8'), '1234567890123456789012345678901') - cb() + Trie.verifyProof(trie.root, Buffer.from('key3'), prove, function(err, val) { + if (err) return cb(err) + t.equal(val.toString('utf8'), '1234567890123456789012345678901') + cb() + }) }) - }) - } - ], function (err) { - t.end(err) - }) + }, + ], + function(err) { + t.end(err) + }, + ) }) - it('should succeed with a simple embedded extension-branch', function (t) { + it('should succeed with a simple embedded extension-branch', function(t) { var trie = new Trie() - async.series([ - (cb) => { - trie.put('a', 'a', cb) - }, (cb) => { - trie.put('b', 'b', cb) - }, (cb) => { - trie.put('c', 'c', cb) - }, (cb) => { - Trie.prove(trie, 'a', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'a', prove, function (err, val) { + async.series( + [ + cb => { + trie.put(Buffer.from('a'), Buffer.from('a'), cb) + }, + cb => { + trie.put(Buffer.from('b'), Buffer.from('b'), cb) + }, + cb => { + trie.put(Buffer.from('c'), Buffer.from('c'), cb) + }, + cb => { + Trie.prove(trie, Buffer.from('a'), function(err, prove) { if (err) return cb(err) - t.equal(val.toString('utf8'), 'a') - cb() + Trie.verifyProof(trie.root, Buffer.from('a'), prove, function(err, val) { + if (err) return cb(err) + t.equal(val.toString('utf8'), 'a') + cb() + }) }) - }) - }, (cb) => { - Trie.prove(trie, 'b', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'b', prove, function (err, val) { + }, + cb => { + Trie.prove(trie, Buffer.from('b'), function(err, prove) { if (err) return cb(err) - t.equal(val.toString('utf8'), 'b') - cb() + Trie.verifyProof(trie.root, Buffer.from('b'), prove, function(err, val) { + if (err) return cb(err) + t.equal(val.toString('utf8'), 'b') + cb() + }) }) - }) - }, (cb) => { - Trie.prove(trie, 'c', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'c', prove, function (err, val) { + }, + cb => { + Trie.prove(trie, Buffer.from('c'), function(err, prove) { if (err) return cb(err) - t.equal(val.toString('utf8'), 'c') - cb() + Trie.verifyProof(trie.root, Buffer.from('c'), prove, function(err, val) { + if (err) return cb(err) + t.equal(val.toString('utf8'), 'c') + cb() + }) }) - }) - }], function (err) { - t.end(err) - }) + }, + ], + function(err) { + t.end(err) + }, + ) }) }) diff --git a/test/secure.js b/test/secure.js index a1bf705..4417008 100644 --- a/test/secure.js +++ b/test/secure.js @@ -2,14 +2,14 @@ const Trie = require('../dist/secure').SecureTrie const async = require('async') const tape = require('tape') -tape('SecureTrie', function (t) { +tape('SecureTrie', function(t) { const trie = new Trie() const k = Buffer.from('foo') const v = Buffer.from('bar') - t.test('put and get value', function (st) { - trie.put(k, v, function () { - trie.get(k, function (err, res) { + t.test('put and get value', function(st) { + trie.put(k, v, function() { + trie.get(k, function(err, res) { st.error(err) st.ok(v.equals(res)) st.end() @@ -17,9 +17,9 @@ tape('SecureTrie', function (t) { }) }) - t.test('copy trie', function (st) { + t.test('copy trie', function(st) { const t = trie.copy() - t.get(k, function (err, res) { + t.get(k, function(err, res) { st.error(err) st.ok(v.equals(res)) st.end() @@ -27,64 +27,79 @@ tape('SecureTrie', function (t) { }) }) -tape('SecureTrie proof', function (t) { - t.test('create a merkle proof and verify it with a single short key', function (st) { +tape('SecureTrie proof', function(t) { + t.test('create a merkle proof and verify it with a single short key', function(st) { const trie = new Trie() - async.series([ - function (cb) { - trie.put('key1aa', '01234', cb) - }, - function (cb) { - Trie.prove(trie, 'key1aa', function (err, prove) { - if (err) return cb(err) - Trie.verifyProof(trie.root, 'key1aa', prove, function (err, val) { + async.series( + [ + function(cb) { + trie.put(Buffer.from('key1aa'), Buffer.from('01234'), cb) + }, + function(cb) { + Trie.prove(trie, Buffer.from('key1aa'), function(err, prove) { if (err) return cb(err) - st.equal(val.toString('utf8'), '01234') - cb() + Trie.verifyProof(trie.root, Buffer.from('key1aa'), prove, function(err, val) { + if (err) return cb(err) + st.equal(val.toString('utf8'), '01234') + cb() + }) }) - }) - } - ], function (err) { - st.end(err) - }) + }, + ], + function(err) { + st.end(err) + }, + ) }) }) -tape('secure tests', function (it) { +tape('secure tests', function(it) { let trie = new Trie() const jsonTests = require('./fixture/trietest_secureTrie.json').tests - it.test('empty values', function (t) { - async.eachSeries(jsonTests.emptyValues.in, function (row, cb) { - trie.put(new Buffer(row[0]), row[1], cb) - }, function (err) { - t.equal('0x' + trie.root.toString('hex'), jsonTests.emptyValues.root) - t.end(err) - }) + it.test('empty values', function(t) { + async.eachSeries( + jsonTests.emptyValues.in, + function(row, cb) { + trie.put(Buffer.from(row[0]), row[1] ? Buffer.from(row[1]) : null, cb) + }, + function(err) { + t.equal('0x' + trie.root.toString('hex'), jsonTests.emptyValues.root) + t.end(err) + }, + ) }) - it.test('branchingTests', function (t) { + it.test('branchingTests', function(t) { trie = new Trie() - async.eachSeries(jsonTests.branchingTests.in, function (row, cb) { - trie.put(row[0], row[1], cb) - }, function () { - t.equal('0x' + trie.root.toString('hex'), jsonTests.branchingTests.root) - t.end() - }) + async.eachSeries( + jsonTests.branchingTests.in, + function(row, cb) { + trie.put(Buffer.from(row[0]), row[1] ? Buffer.from(row[1]) : null, cb) + }, + function() { + t.equal('0x' + trie.root.toString('hex'), jsonTests.branchingTests.root) + t.end() + }, + ) }) - it.test('jeff', function (t) { - async.eachSeries(jsonTests.jeff.in, function (row, cb) { - var val = row[1] - if (val) { - val = new Buffer(row[1].slice(2), 'hex') - } + it.test('jeff', function(t) { + async.eachSeries( + jsonTests.jeff.in, + function(row, cb) { + var val = row[1] + if (val) { + val = new Buffer(row[1].slice(2), 'hex') + } - trie.put(new Buffer(row[0].slice(2), 'hex'), val, cb) - }, function () { - t.equal('0x' + trie.root.toString('hex'), jsonTests.jeff.root) - t.end() - }) + trie.put(new Buffer(row[0].slice(2), 'hex'), val, cb) + }, + function() { + t.equal('0x' + trie.root.toString('hex'), jsonTests.jeff.root.toString('hex')) + t.end() + }, + ) }) }) diff --git a/test/streams.js b/test/streams.js index c5b6169..dfb0d5d 100644 --- a/test/streams.js +++ b/test/streams.js @@ -1,96 +1,114 @@ const Trie = require('../dist/index').CheckpointTrie const describe = require('tape') -describe('kv stream test', function (tester) { +describe('kv stream test', function(tester) { var it = tester.test var trie = new Trie() - var init = [{ - type: 'del', - key: 'father' - }, { - type: 'put', - key: 'name', - value: 'Yuri Irsenovich Kim' - }, { - type: 'put', - key: 'dob', - value: '16 February 1941' - }, { - type: 'put', - key: 'spouse', - value: 'Kim Young-sook' - }, { - type: 'put', - key: 'occupation', - value: 'Clown' - }, { - type: 'put', - key: 'nameads', - value: 'Yuri Irsenovich Kim' - }, { - type: 'put', - key: 'namfde', - value: 'Yuri Irsenovich Kim' - }, { - type: 'put', - key: 'namsse', - value: 'Yuri Irsenovich Kim' - }, { - type: 'put', - key: 'dofab', - value: '16 February 1941' - }, { - type: 'put', - key: 'spoudse', - value: 'Kim Young-sook' - }, { - type: 'put', - key: 'occupdsation', - value: 'Clown' - }, { - type: 'put', - key: 'dozzzb', - value: '16 February 1941' - }, { - type: 'put', - key: 'spouszze', - value: 'Kim Young-sook' - }, { - type: 'put', - key: 'occupatdfion', - value: 'Clown' - }, { - type: 'put', - key: 'dssob', - value: '16 February 1941' - }, { - type: 'put', - key: 'spossuse', - value: 'Kim Young-sook' - }, { - type: 'put', - key: 'occupssation', - value: 'Clown' - }] + var init = [ + { + type: 'del', + key: Buffer.from('father'), + }, + { + type: 'put', + key: Buffer.from('name'), + value: Buffer.from('Yuri Irsenovich Kim'), + }, + { + type: 'put', + key: Buffer.from('dob'), + value: Buffer.from('16 February 1941'), + }, + { + type: 'put', + key: Buffer.from('spouse'), + value: Buffer.from('Kim Young-sook'), + }, + { + type: 'put', + key: Buffer.from('occupation'), + value: Buffer.from('Clown'), + }, + { + type: 'put', + key: Buffer.from('nameads'), + value: Buffer.from('Yuri Irsenovich Kim'), + }, + { + type: 'put', + key: Buffer.from('namfde'), + value: Buffer.from('Yuri Irsenovich Kim'), + }, + { + type: 'put', + key: Buffer.from('namsse'), + value: Buffer.from('Yuri Irsenovich Kim'), + }, + { + type: 'put', + key: Buffer.from('dofab'), + value: Buffer.from('16 February 1941'), + }, + { + type: 'put', + key: Buffer.from('spoudse'), + value: Buffer.from('Kim Young-sook'), + }, + { + type: 'put', + key: Buffer.from('occupdsation'), + value: Buffer.from('Clown'), + }, + { + type: 'put', + key: Buffer.from('dozzzb'), + value: Buffer.from('16 February 1941'), + }, + { + type: 'put', + key: Buffer.from('spouszze'), + value: Buffer.from('Kim Young-sook'), + }, + { + type: 'put', + key: Buffer.from('occupatdfion'), + value: Buffer.from('Clown'), + }, + { + type: 'put', + key: Buffer.from('dssob'), + value: Buffer.from('16 February 1941'), + }, + { + type: 'put', + key: Buffer.from('spossuse'), + value: Buffer.from('Kim Young-sook'), + }, + { + type: 'put', + key: Buffer.from('occupssation'), + value: Buffer.from('Clown'), + }, + ] var valObj = {} - init.forEach(function (i) { + init.forEach(function(i) { if (i.type === 'put') valObj[i.key] = i.value }) - it('should populate trie', function (t) { - trie.batch(init, function () { + it('should populate trie', function(t) { + trie.batch(init, function() { t.end() }) }) - it('should fetch all of the nodes', function (t) { + it('should fetch all of the nodes', function(t) { var stream = trie.createReadStream() - stream.on('data', function (d) { - t.equal(valObj[d.key.toString()], d.value.toString()) + stream.on('data', function(d) { + t.equal(valObj[d.key.toString()].toString(), d.value.toString()) delete valObj[d.key.toString()] }) - stream.on('end', function () { + stream.on('end', function() { var keys = Object.keys(valObj) t.equal(keys.length, 0) t.end() @@ -98,56 +116,63 @@ describe('kv stream test', function (tester) { }) }) -describe('db stream test', function (tester) { +describe('db stream test', function(tester) { var it = tester.test var trie = new Trie() - var init = [{ - type: 'put', - key: 'color', - value: 'purple' - }, { - type: 'put', - key: 'food', - value: 'sushi' - }, { - type: 'put', - key: 'fight', - value: 'fire' - }, { - type: 'put', - key: 'colo', - value: 'trolo' - }, { - type: 'put', - key: 'color', - value: 'blue' - }, { - type: 'put', - key: 'color', - value: 'pink' - }] + var init = [ + { + type: 'put', + key: Buffer.from('color'), + value: Buffer.from('purple'), + }, + { + type: 'put', + key: Buffer.from('food'), + value: Buffer.from('sushi'), + }, + { + type: 'put', + key: Buffer.from('fight'), + value: Buffer.from('fire'), + }, + { + type: 'put', + key: Buffer.from('colo'), + value: Buffer.from('trolo'), + }, + { + type: 'put', + key: Buffer.from('color'), + value: Buffer.from('blue'), + }, + { + type: 'put', + key: Buffer.from('color'), + value: Buffer.from('pink'), + }, + ] var expectedNodes = { '3c38d9aa6ad288c8e27da701e17fe99a5b67c8b12fd0469651c80494d36bc4c1': true, - 'd5f61e1ff2b918d1c2a2c4b1732a3c68bd7e3fd64f35019f2f084896d4546298': true, - 'e64329dadee2fb8a113b4c88cfe973aeaa9b523d4dc8510b84ca23f9d5bfbd90': true, - 'c916d458bfb5f27603c5bd93b00f022266712514a59cde749f19220daffc743f': true, - '2386bfb0de9cf93902a110f5ab07b917ffc0b9ea599cb7f4f8bb6fd1123c866c': true + d5f61e1ff2b918d1c2a2c4b1732a3c68bd7e3fd64f35019f2f084896d4546298: true, + e64329dadee2fb8a113b4c88cfe973aeaa9b523d4dc8510b84ca23f9d5bfbd90: true, + c916d458bfb5f27603c5bd93b00f022266712514a59cde749f19220daffc743f: true, + '2386bfb0de9cf93902a110f5ab07b917ffc0b9ea599cb7f4f8bb6fd1123c866c': true, } - it('should populate trie', function (t) { + it('should populate trie', function(t) { trie.checkpoint() trie.batch(init, t.end) }) - it('should only fetch nodes in the current trie', function (t) { + it('should only fetch nodes in the current trie', function(t) { var stream = trie._createScratchReadStream() - stream.on('data', function (d) { + stream.on('data', function(d) { var key = d.key.toString('hex') t.ok(!!expectedNodes[key]) delete expectedNodes[key] }) - stream.on('end', function () { + stream.on('end', function() { t.equal(Object.keys(expectedNodes).length, 0) t.end() }) diff --git a/typedoc.json b/typedoc.json index 9a9761a..f955bae 100644 --- a/typedoc.json +++ b/typedoc.json @@ -1,8 +1,9 @@ { + "inputFiles": ["src/*.ts"], "out": "docs", "mode": "file", + "plugin": "typedoc-plugin-markdown", "readme": "none", - "theme": "markdown", - "mdEngine": "github", + "gitRevision": "master", "excludeNotExported": true } From b2c6fe9824582d2c509d28d1d58991654894fc72 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Mon, 10 Feb 2020 09:55:40 -0800 Subject: [PATCH 2/8] Use typedoc library mode --- docs/README.md | 413 +----------------- docs/classes/{trie.md => _basetrie_.trie.md} | 150 +++---- ....md => _checkpointtrie_.checkpointtrie.md} | 235 +++++----- .../{securetrie.md => _secure_.securetrie.md} | 261 ++++++----- docs/classes/branchnode.md | 169 ------- docs/classes/db.md | 147 ------- docs/classes/extensionnode.md | 181 -------- docs/classes/leafnode.md | 181 -------- docs/classes/prioritizedtaskexecutor.md | 92 ---- docs/classes/scratchdb.md | 167 ------- docs/classes/scratchreadstream.md | 66 --- docs/classes/triereadstream.md | 66 --- docs/interfaces/delbatch.md | 30 -- docs/interfaces/putbatch.md | 39 -- docs/interfaces/task.md | 30 -- docs/modules/_basetrie_.md | 9 + docs/modules/_checkpointtrie_.md | 9 + docs/modules/_secure_.md | 9 + package.json | 2 +- typedoc.json | 10 +- 20 files changed, 342 insertions(+), 1924 deletions(-) rename docs/classes/{trie.md => _basetrie_.trie.md} (72%) rename docs/classes/{checkpointtrie.md => _checkpointtrie_.checkpointtrie.md} (65%) rename docs/classes/{securetrie.md => _secure_.securetrie.md} (60%) delete mode 100644 docs/classes/branchnode.md delete mode 100644 docs/classes/db.md delete mode 100644 docs/classes/extensionnode.md delete mode 100644 docs/classes/leafnode.md delete mode 100644 docs/classes/prioritizedtaskexecutor.md delete mode 100644 docs/classes/scratchdb.md delete mode 100644 docs/classes/scratchreadstream.md delete mode 100644 docs/classes/triereadstream.md delete mode 100644 docs/interfaces/delbatch.md delete mode 100644 docs/interfaces/putbatch.md delete mode 100644 docs/interfaces/task.md create mode 100644 docs/modules/_basetrie_.md create mode 100644 docs/modules/_checkpointtrie_.md create mode 100644 docs/modules/_secure_.md diff --git a/docs/README.md b/docs/README.md index a0362db..b93a80e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,413 +4,8 @@ ## Index -### Classes +### Modules -* [BranchNode](classes/branchnode.md) -* [CheckpointTrie](classes/checkpointtrie.md) -* [DB](classes/db.md) -* [ExtensionNode](classes/extensionnode.md) -* [LeafNode](classes/leafnode.md) -* [PrioritizedTaskExecutor](classes/prioritizedtaskexecutor.md) -* [ScratchDB](classes/scratchdb.md) -* [ScratchReadStream](classes/scratchreadstream.md) -* [SecureTrie](classes/securetrie.md) -* [Trie](classes/trie.md) -* [TrieReadStream](classes/triereadstream.md) - -### Interfaces - -* [DelBatch](interfaces/delbatch.md) -* [PutBatch](interfaces/putbatch.md) -* [Task](interfaces/task.md) - -### Type aliases - -* [BatchDBOp](README.md#batchdbop) -* [EmbeddedNode](README.md#embeddednode) -* [ErrorCallback](README.md#errorcallback) -* [Nibbles](README.md#nibbles) -* [TrieNode](README.md#trienode) - -### Variables - -* [Readable](README.md#const-readable) -* [WriteStream](README.md#const-writestream) -* [assert](README.md#const-assert) -* [async](README.md#const-async) -* [level](README.md#const-level) -* [semaphore](README.md#const-semaphore) - -### Functions - -* [addHexPrefix](README.md#addhexprefix) -* [asyncFirstSeries](README.md#asyncfirstseries) -* [callTogether](README.md#calltogether) -* [decodeNode](README.md#decodenode) -* [decodeRawNode](README.md#decoderawnode) -* [doKeysMatch](README.md#dokeysmatch) -* [isRawNode](README.md#israwnode) -* [isTerminator](README.md#private-isterminator) -* [matchingNibbleLength](README.md#private-matchingnibblelength) -* [nibblesToBuffer](README.md#private-nibblestobuffer) -* [removeHexPrefix](README.md#private-removehexprefix) -* [stringToNibbles](README.md#private-stringtonibbles) - -### Object literals - -* [ENCODING_OPTS](README.md#const-encoding_opts) - -## Type aliases - -### BatchDBOp - -Ƭ **BatchDBOp**: *[PutBatch](interfaces/putbatch.md) | [DelBatch](interfaces/delbatch.md)* - -*Defined in [db.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L7)* - -___ - -### EmbeddedNode - -Ƭ **EmbeddedNode**: *Buffer | Buffer[]* - -*Defined in [trieNode.ts:10](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L10)* - -___ - -### ErrorCallback - -Ƭ **ErrorCallback**: *function* - -*Defined in [types.ts:1](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/types.ts#L1)* - -#### Type declaration: - -▸ (`err?`: Error): *void* - -**Parameters:** - -Name | Type | ------- | ------ | -`err?` | Error | - -___ - -### Nibbles - -Ƭ **Nibbles**: *number[]* - -*Defined in [trieNode.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L7)* - -___ - -### TrieNode - -Ƭ **TrieNode**: *[BranchNode](classes/branchnode.md) | [ExtensionNode](classes/extensionnode.md) | [LeafNode](classes/leafnode.md)* - -*Defined in [trieNode.ts:6](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L6)* - -## Variables - -### `Const` Readable - -• **Readable**: *any* = require('readable-stream').Readable - -*Defined in [readStream.ts:4](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/readStream.ts#L4)* - -*Defined in [scratchReadStream.ts:3](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratchReadStream.ts#L3)* - -___ - -### `Const` WriteStream - -• **WriteStream**: *any* = require('level-ws') - -*Defined in [checkpointTrie.ts:9](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L9)* - -___ - -### `Const` assert - -• **assert**: *any* = require('assert') - -*Defined in [baseTrie.ts:19](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L19)* - -___ - -### `Const` async - -• **async**: *any* = require('async') - -*Defined in [util/async.ts:1](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/async.ts#L1)* - -*Defined in [baseTrie.ts:20](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L20)* - -*Defined in [checkpointTrie.ts:8](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L8)* - -___ - -### `Const` level - -• **level**: *any* = require('level-mem') - -*Defined in [db.ts:3](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L3)* - -___ - -### `Const` semaphore - -• **semaphore**: *any* = require('semaphore') - -*Defined in [baseTrie.ts:21](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L21)* - -## Functions - -### addHexPrefix - -▸ **addHexPrefix**(`key`: number[], `terminator`: boolean): *number[]* - -*Defined in [util/hex.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/hex.ts#L7)* - -Prepends hex prefix to an array of nibbles. - -**`method`** addHexPrefix - -**Parameters:** - -Name | Type | ------- | ------ | -`key` | number[] | -`terminator` | boolean | - -**Returns:** *number[]* - -- returns buffer of encoded data - -___ - -### asyncFirstSeries - -▸ **asyncFirstSeries**(`array`: any[], `iterator`: Function, `cb`: Function): *void* - -*Defined in [util/async.ts:32](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/async.ts#L32)* - -Take a collection of async fns, call the cb on the first to return a truthy value. -If all run without a truthy result, return undefined - -**Parameters:** - -Name | Type | ------- | ------ | -`array` | any[] | -`iterator` | Function | -`cb` | Function | - -**Returns:** *void* - -___ - -### callTogether - -▸ **callTogether**(...`funcs`: Function[]): *(Anonymous function)* - -*Defined in [util/async.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/async.ts#L7)* - -Take two or more functions and returns a function that will execute all of -the given functions - -**Parameters:** - -Name | Type | ------- | ------ | -`...funcs` | Function[] | - -**Returns:** *(Anonymous function)* - -___ - -### decodeNode - -▸ **decodeNode**(`raw`: Buffer): *[TrieNode](README.md#trienode)* - -*Defined in [trieNode.ts:12](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L12)* - -**Parameters:** - -Name | Type | ------- | ------ | -`raw` | Buffer | - -**Returns:** *[TrieNode](README.md#trienode)* - -___ - -### decodeRawNode - -▸ **decodeRawNode**(`raw`: Buffer[]): *[TrieNode](README.md#trienode)* - -*Defined in [trieNode.ts:20](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L20)* - -**Parameters:** - -Name | Type | ------- | ------ | -`raw` | Buffer[] | - -**Returns:** *[TrieNode](README.md#trienode)* - -___ - -### doKeysMatch - -▸ **doKeysMatch**(`keyA`: number[], `keyB`: number[]): *boolean* - -*Defined in [util/nibbles.ts:56](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/nibbles.ts#L56)* - -Compare two nibble array keys. - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`keyA` | number[] | - | -`keyB` | number[] | | - -**Returns:** *boolean* - -___ - -### isRawNode - -▸ **isRawNode**(`n`: any): *boolean* - -*Defined in [trieNode.ts:34](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L34)* - -**Parameters:** - -Name | Type | ------- | ------ | -`n` | any | - -**Returns:** *boolean* - -___ - -### `Private` isTerminator - -▸ **isTerminator**(`key`: number[]): *boolean* - -*Defined in [util/hex.ts:46](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/hex.ts#L46)* - -Returns true if hexprefixed path is for a terminating (leaf) node. - -**`method`** isTerminator - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`key` | number[] | an hexprefixed array of nibbles | - -**Returns:** *boolean* - -___ - -### `Private` matchingNibbleLength - -▸ **matchingNibbleLength**(`nib1`: number[], `nib2`: number[]): *number* - -*Defined in [util/nibbles.ts:43](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/nibbles.ts#L43)* - -Returns the number of in order matching nibbles of two give nibble arrays. - -**`method`** matchingNibbleLength - -**Parameters:** - -Name | Type | ------- | ------ | -`nib1` | number[] | -`nib2` | number[] | - -**Returns:** *number* - -___ - -### `Private` nibblesToBuffer - -▸ **nibblesToBuffer**(`arr`: number[]): *Buffer* - -*Defined in [util/nibbles.ts:27](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/nibbles.ts#L27)* - -Converts a nibble array into a buffer. - -**`method`** nibblesToBuffer - -**Parameters:** - -Name | Type | ------- | ------ | -`arr` | number[] | - -**Returns:** *Buffer* - -___ - -### `Private` removeHexPrefix - -▸ **removeHexPrefix**(`val`: number[]): *number[]* - -*Defined in [util/hex.ts:30](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/hex.ts#L30)* - -Removes hex prefix of an array of nibbles. - -**`method`** removeHexPrefix - -**Parameters:** - -Name | Type | ------- | ------ | -`val` | number[] | - -**Returns:** *number[]* - -___ - -### `Private` stringToNibbles - -▸ **stringToNibbles**(`key`: Buffer): *number[]* - -*Defined in [util/nibbles.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/util/nibbles.ts#L7)* - -Converts a string OR a buffer to a nibble array. - -**`method`** stringToNibbles - -**Parameters:** - -Name | Type | ------- | ------ | -`key` | Buffer | - -**Returns:** *number[]* - -## Object literals - -### `Const` ENCODING_OPTS - -### ▪ **ENCODING_OPTS**: *object* - -*Defined in [db.ts:5](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L5)* - -### keyEncoding - -• **keyEncoding**: *string* = "binary" - -*Defined in [db.ts:5](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L5)* - -### valueEncoding - -• **valueEncoding**: *string* = "binary" - -*Defined in [db.ts:5](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L5)* +* ["baseTrie"](modules/_basetrie_.md) +* ["checkpointTrie"](modules/_checkpointtrie_.md) +* ["secure"](modules/_secure_.md) diff --git a/docs/classes/trie.md b/docs/classes/_basetrie_.trie.md similarity index 72% rename from docs/classes/trie.md rename to docs/classes/_basetrie_.trie.md index 226b52e..78cddf7 100644 --- a/docs/classes/trie.md +++ b/docs/classes/_basetrie_.trie.md @@ -1,4 +1,4 @@ -[merkle-patricia-tree](../README.md) › [Trie](trie.md) +[merkle-patricia-tree](../README.md) › ["baseTrie"](../modules/_basetrie_.md) › [Trie](_basetrie_.trie.md) # Class: Trie @@ -19,58 +19,56 @@ If the db is `null` or left undefined, then the trie will be stored in memory vi * **Trie** - ↳ [CheckpointTrie](checkpointtrie.md) + ↳ [CheckpointTrie](_checkpointtrie_.checkpointtrie.md) ## Index ### Constructors -* [constructor](trie.md#constructor) +* [constructor](_basetrie_.trie.md#constructor) ### Properties -* [EMPTY_TRIE_ROOT](trie.md#empty_trie_root) -* [_root](trie.md#private-_root) -* [db](trie.md#db) -* [sem](trie.md#protected-sem) +* [EMPTY_TRIE_ROOT](_basetrie_.trie.md#empty_trie_root) +* [db](_basetrie_.trie.md#db) ### Accessors -* [root](trie.md#root) +* [root](_basetrie_.trie.md#root) ### Methods -* [_createInitialNode](trie.md#_createinitialnode) -* [_deleteNode](trie.md#_deletenode) -* [_findDbNodes](trie.md#_finddbnodes) -* [_findValueNodes](trie.md#_findvaluenodes) -* [_formatNode](trie.md#_formatnode) -* [_lookupNode](trie.md#_lookupnode) -* [_putNode](trie.md#_putnode) -* [_saveStack](trie.md#private-_savestack) -* [_updateNode](trie.md#private-_updatenode) -* [_walkTrie](trie.md#_walktrie) -* [batch](trie.md#batch) -* [checkRoot](trie.md#checkroot) -* [copy](trie.md#copy) -* [createReadStream](trie.md#createreadstream) -* [del](trie.md#del) -* [delRaw](trie.md#delraw) -* [findPath](trie.md#findpath) -* [get](trie.md#get) -* [getRaw](trie.md#getraw) -* [put](trie.md#put) -* [putRaw](trie.md#putraw) -* [setRoot](trie.md#setroot) -* [fromProof](trie.md#static-fromproof) -* [prove](trie.md#static-prove) -* [verifyProof](trie.md#static-verifyproof) +* [_createInitialNode](_basetrie_.trie.md#_createinitialnode) +* [_deleteNode](_basetrie_.trie.md#_deletenode) +* [_findDbNodes](_basetrie_.trie.md#_finddbnodes) +* [_findValueNodes](_basetrie_.trie.md#_findvaluenodes) +* [_formatNode](_basetrie_.trie.md#_formatnode) +* [_lookupNode](_basetrie_.trie.md#_lookupnode) +* [_putNode](_basetrie_.trie.md#_putnode) +* [_saveStack](_basetrie_.trie.md#private-_savestack) +* [_updateNode](_basetrie_.trie.md#private-_updatenode) +* [_walkTrie](_basetrie_.trie.md#_walktrie) +* [batch](_basetrie_.trie.md#batch) +* [checkRoot](_basetrie_.trie.md#checkroot) +* [copy](_basetrie_.trie.md#copy) +* [createReadStream](_basetrie_.trie.md#createreadstream) +* [del](_basetrie_.trie.md#del) +* [delRaw](_basetrie_.trie.md#delraw) +* [findPath](_basetrie_.trie.md#findpath) +* [get](_basetrie_.trie.md#get) +* [getRaw](_basetrie_.trie.md#getraw) +* [put](_basetrie_.trie.md#put) +* [putRaw](_basetrie_.trie.md#putraw) +* [setRoot](_basetrie_.trie.md#setroot) +* [fromProof](_basetrie_.trie.md#static-fromproof) +* [prove](_basetrie_.trie.md#static-prove) +* [verifyProof](_basetrie_.trie.md#static-verifyproof) ## Constructors ### constructor -\+ **new Trie**(`db?`: LevelUp | null, `root?`: Buffer): *[Trie](trie.md)* +\+ **new Trie**(`db?`: LevelUp | null, `root?`: Buffer): *[Trie](_basetrie_.trie.md)* *Defined in [baseTrie.ts:37](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L37)* @@ -81,7 +79,7 @@ Name | Type | `db?` | LevelUp | null | `root?` | Buffer | -**Returns:** *[Trie](trie.md)* +**Returns:** *[Trie](_basetrie_.trie.md)* ## Properties @@ -93,28 +91,12 @@ Name | Type | ___ -### `Private` _root - -• **_root**: *Buffer* - -*Defined in [baseTrie.ts:37](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L37)* - -___ - ### db -• **db**: *[DB](db.md)* +• **db**: *DB* *Defined in [baseTrie.ts:35](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L35)* -___ - -### `Protected` sem - -• **sem**: *any* - -*Defined in [baseTrie.ts:36](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L36)* - ## Accessors ### root @@ -141,7 +123,7 @@ Name | Type | ### _createInitialNode -▸ **_createInitialNode**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_createInitialNode**(`key`: Buffer, `value`: Buffer, `cb`: ErrorCallback): *void* *Defined in [baseTrie.ts:735](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L735)* @@ -151,7 +133,7 @@ Name | Type | ------ | ------ | `key` | Buffer | `value` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -159,7 +141,7 @@ ___ ### _deleteNode -▸ **_deleteNode**(`k`: Buffer, `stack`: [TrieNode](../README.md#trienode)[], `cb`: Function): *any* +▸ **_deleteNode**(`k`: Buffer, `stack`: TrieNode[], `cb`: Function): *any* *Defined in [baseTrie.ts:617](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L617)* @@ -168,7 +150,7 @@ ___ Name | Type | ------ | ------ | `k` | Buffer | -`stack` | [TrieNode](../README.md#trienode)[] | +`stack` | TrieNode[] | `cb` | Function | **Returns:** *any* @@ -211,7 +193,7 @@ ___ ### _formatNode -▸ **_formatNode**(`node`: [TrieNode](../README.md#trienode), `topLevel`: boolean, `opStack`: [BatchDBOp](../README.md#batchdbop)[], `remove`: boolean): *Buffer | null | Buffer‹› | Buffer‹›[][]* +▸ **_formatNode**(`node`: TrieNode, `topLevel`: boolean, `opStack`: BatchDBOp[], `remove`: boolean): *Buffer | null | Buffer‹› | Buffer‹›[][]* *Defined in [baseTrie.ts:743](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L743)* @@ -219,9 +201,9 @@ ___ Name | Type | Default | ------ | ------ | ------ | -`node` | [TrieNode](../README.md#trienode) | - | +`node` | TrieNode | - | `topLevel` | boolean | - | -`opStack` | [BatchDBOp](../README.md#batchdbop)[] | - | +`opStack` | BatchDBOp[] | - | `remove` | boolean | false | **Returns:** *Buffer | null | Buffer‹› | Buffer‹›[][]* @@ -247,7 +229,7 @@ ___ ### _putNode -▸ **_putNode**(`node`: [TrieNode](../README.md#trienode), `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_putNode**(`node`: TrieNode, `cb`: ErrorCallback): *void* *Defined in [baseTrie.ts:247](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L247)* @@ -255,8 +237,8 @@ ___ Name | Type | ------ | ------ | -`node` | [TrieNode](../README.md#trienode) | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`node` | TrieNode | +`cb` | ErrorCallback | **Returns:** *void* @@ -264,7 +246,7 @@ ___ ### `Private` _saveStack -▸ **_saveStack**(`key`: number[], `stack`: [TrieNode](../README.md#trienode)[], `opStack`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_saveStack**(`key`: number[], `stack`: TrieNode[], `opStack`: BatchDBOp[], `cb`: ErrorCallback): *void* *Defined in [baseTrie.ts:588](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L588)* @@ -277,9 +259,9 @@ saves a stack Name | Type | Description | ------ | ------ | ------ | `key` | number[] | the key. Should follow the stack | -`stack` | [TrieNode](../README.md#trienode)[] | a stack of nodes to the value given by the key | -`opStack` | [BatchDBOp](../README.md#batchdbop)[] | a stack of levelup operations to commit at the end of this funciton | -`cb` | [ErrorCallback](../README.md#errorcallback) | | +`stack` | TrieNode[] | a stack of nodes to the value given by the key | +`opStack` | BatchDBOp[] | a stack of levelup operations to commit at the end of this funciton | +`cb` | ErrorCallback | | **Returns:** *void* @@ -287,7 +269,7 @@ ___ ### `Private` _updateNode -▸ **_updateNode**(`k`: Buffer, `value`: Buffer, `keyRemainder`: number[], `stack`: [TrieNode](../README.md#trienode)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_updateNode**(`k`: Buffer, `value`: Buffer, `keyRemainder`: number[], `stack`: TrieNode[], `cb`: ErrorCallback): *void* *Defined in [baseTrie.ts:370](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L370)* @@ -302,8 +284,8 @@ Name | Type | Description | `k` | Buffer | - | `value` | Buffer | - | `keyRemainder` | number[] | - | -`stack` | [TrieNode](../README.md#trienode)[] | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | the callback | +`stack` | TrieNode[] | - | +`cb` | ErrorCallback | the callback | **Returns:** *void* @@ -329,7 +311,7 @@ ___ ### batch -▸ **batch**(`ops`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **batch**(`ops`: BatchDBOp[], `cb`: ErrorCallback): *void* *Defined in [baseTrie.ts:799](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L799)* @@ -353,8 +335,8 @@ trie.batch(ops) Name | Type | Description | ------ | ------ | ------ | -`ops` | [BatchDBOp](../README.md#batchdbop)[] | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | | +`ops` | BatchDBOp[] | - | +`cb` | ErrorCallback | | **Returns:** *void* @@ -381,11 +363,11 @@ ___ ### copy -▸ **copy**(): *[Trie](trie.md)* +▸ **copy**(): *[Trie](_basetrie_.trie.md)* *Defined in [baseTrie.ts:778](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L778)* -**Returns:** *[Trie](trie.md)* +**Returns:** *[Trie](_basetrie_.trie.md)* ___ @@ -432,7 +414,7 @@ ___ ### delRaw -▸ **delRaw**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **delRaw**(`key`: Buffer, `cb`: ErrorCallback): *void* *Defined in [baseTrie.ts:225](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L225)* @@ -445,7 +427,7 @@ Deletes key directly from underlying key/value db. Name | Type | ------ | ------ | `key` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -521,7 +503,7 @@ ___ ### put -▸ **put**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **put**(`key`: Buffer, `value`: Buffer, `cb`: ErrorCallback): *void* *Defined in [baseTrie.ts:147](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L147)* @@ -537,7 +519,7 @@ Name | Type | Description | ------ | ------ | ------ | `key` | Buffer | - | `value` | Buffer | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function` which is given the argument `err` - for errors that may have occured | +`cb` | ErrorCallback | A callback `Function` which is given the argument `err` - for errors that may have occured | **Returns:** *void* @@ -545,7 +527,7 @@ ___ ### putRaw -▸ **putRaw**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **putRaw**(`key`: Buffer, `value`: Buffer, `cb`: ErrorCallback): *void* *Defined in [baseTrie.ts:217](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L217)* @@ -560,7 +542,7 @@ Name | Type | ------ | ------ | `key` | Buffer | `value` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -584,7 +566,7 @@ ___ ### `Static` fromProof -▸ **fromProof**(`proofNodes`: Buffer[], `cb`: Function, `proofTrie?`: [Trie](trie.md)): *void* +▸ **fromProof**(`proofNodes`: Buffer[], `cb`: Function, `proofTrie?`: [Trie](_basetrie_.trie.md)): *void* *Defined in [baseTrie.ts:49](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L49)* @@ -594,7 +576,7 @@ Name | Type | ------ | ------ | `proofNodes` | Buffer[] | `cb` | Function | -`proofTrie?` | [Trie](trie.md) | +`proofTrie?` | [Trie](_basetrie_.trie.md) | **Returns:** *void* @@ -602,7 +584,7 @@ ___ ### `Static` prove -▸ **prove**(`trie`: [Trie](trie.md), `key`: Buffer, `cb`: Function): *void* +▸ **prove**(`trie`: [Trie](_basetrie_.trie.md), `key`: Buffer, `cb`: Function): *void* *Defined in [baseTrie.ts:70](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L70)* @@ -610,7 +592,7 @@ ___ Name | Type | ------ | ------ | -`trie` | [Trie](trie.md) | +`trie` | [Trie](_basetrie_.trie.md) | `key` | Buffer | `cb` | Function | diff --git a/docs/classes/checkpointtrie.md b/docs/classes/_checkpointtrie_.checkpointtrie.md similarity index 65% rename from docs/classes/checkpointtrie.md rename to docs/classes/_checkpointtrie_.checkpointtrie.md index 6584957..93bb5aa 100644 --- a/docs/classes/checkpointtrie.md +++ b/docs/classes/_checkpointtrie_.checkpointtrie.md @@ -1,76 +1,75 @@ -[merkle-patricia-tree](../README.md) › [CheckpointTrie](checkpointtrie.md) +[merkle-patricia-tree](../README.md) › ["checkpointTrie"](../modules/_checkpointtrie_.md) › [CheckpointTrie](_checkpointtrie_.checkpointtrie.md) # Class: CheckpointTrie ## Hierarchy -* [Trie](trie.md) +* [Trie](_basetrie_.trie.md) ↳ **CheckpointTrie** - ↳ [SecureTrie](securetrie.md) + ↳ [SecureTrie](_secure_.securetrie.md) ## Index ### Constructors -* [constructor](checkpointtrie.md#constructor) +* [constructor](_checkpointtrie_.checkpointtrie.md#constructor) ### Properties -* [EMPTY_TRIE_ROOT](checkpointtrie.md#empty_trie_root) -* [_checkpoints](checkpointtrie.md#_checkpoints) -* [_mainDB](checkpointtrie.md#_maindb) -* [_scratch](checkpointtrie.md#_scratch) -* [db](checkpointtrie.md#db) -* [sem](checkpointtrie.md#protected-sem) +* [EMPTY_TRIE_ROOT](_checkpointtrie_.checkpointtrie.md#empty_trie_root) +* [_checkpoints](_checkpointtrie_.checkpointtrie.md#_checkpoints) +* [_mainDB](_checkpointtrie_.checkpointtrie.md#_maindb) +* [_scratch](_checkpointtrie_.checkpointtrie.md#_scratch) +* [db](_checkpointtrie_.checkpointtrie.md#db) ### Accessors -* [isCheckpoint](checkpointtrie.md#ischeckpoint) -* [root](checkpointtrie.md#root) +* [isCheckpoint](_checkpointtrie_.checkpointtrie.md#ischeckpoint) +* [root](_checkpointtrie_.checkpointtrie.md#root) ### Methods -* [_createInitialNode](checkpointtrie.md#_createinitialnode) -* [_createScratchReadStream](checkpointtrie.md#private-_createscratchreadstream) -* [_deleteNode](checkpointtrie.md#_deletenode) -* [_enterCpMode](checkpointtrie.md#private-_entercpmode) -* [_exitCpMode](checkpointtrie.md#private-_exitcpmode) -* [_findDbNodes](checkpointtrie.md#_finddbnodes) -* [_findValueNodes](checkpointtrie.md#_findvaluenodes) -* [_formatNode](checkpointtrie.md#_formatnode) -* [_lookupNode](checkpointtrie.md#_lookupnode) -* [_putNode](checkpointtrie.md#_putnode) -* [_saveStack](checkpointtrie.md#private-_savestack) -* [_updateNode](checkpointtrie.md#private-_updatenode) -* [_walkTrie](checkpointtrie.md#_walktrie) -* [batch](checkpointtrie.md#batch) -* [checkRoot](checkpointtrie.md#checkroot) -* [checkpoint](checkpointtrie.md#checkpoint) -* [commit](checkpointtrie.md#commit) -* [copy](checkpointtrie.md#copy) -* [createReadStream](checkpointtrie.md#createreadstream) -* [del](checkpointtrie.md#del) -* [delRaw](checkpointtrie.md#delraw) -* [findPath](checkpointtrie.md#findpath) -* [get](checkpointtrie.md#get) -* [getRaw](checkpointtrie.md#getraw) -* [put](checkpointtrie.md#put) -* [putRaw](checkpointtrie.md#putraw) -* [revert](checkpointtrie.md#revert) -* [setRoot](checkpointtrie.md#setroot) -* [fromProof](checkpointtrie.md#static-fromproof) -* [prove](checkpointtrie.md#static-prove) -* [verifyProof](checkpointtrie.md#static-verifyproof) +* [_createInitialNode](_checkpointtrie_.checkpointtrie.md#_createinitialnode) +* [_createScratchReadStream](_checkpointtrie_.checkpointtrie.md#private-_createscratchreadstream) +* [_deleteNode](_checkpointtrie_.checkpointtrie.md#_deletenode) +* [_enterCpMode](_checkpointtrie_.checkpointtrie.md#private-_entercpmode) +* [_exitCpMode](_checkpointtrie_.checkpointtrie.md#private-_exitcpmode) +* [_findDbNodes](_checkpointtrie_.checkpointtrie.md#_finddbnodes) +* [_findValueNodes](_checkpointtrie_.checkpointtrie.md#_findvaluenodes) +* [_formatNode](_checkpointtrie_.checkpointtrie.md#_formatnode) +* [_lookupNode](_checkpointtrie_.checkpointtrie.md#_lookupnode) +* [_putNode](_checkpointtrie_.checkpointtrie.md#_putnode) +* [_saveStack](_checkpointtrie_.checkpointtrie.md#private-_savestack) +* [_updateNode](_checkpointtrie_.checkpointtrie.md#private-_updatenode) +* [_walkTrie](_checkpointtrie_.checkpointtrie.md#_walktrie) +* [batch](_checkpointtrie_.checkpointtrie.md#batch) +* [checkRoot](_checkpointtrie_.checkpointtrie.md#checkroot) +* [checkpoint](_checkpointtrie_.checkpointtrie.md#checkpoint) +* [commit](_checkpointtrie_.checkpointtrie.md#commit) +* [copy](_checkpointtrie_.checkpointtrie.md#copy) +* [createReadStream](_checkpointtrie_.checkpointtrie.md#createreadstream) +* [del](_checkpointtrie_.checkpointtrie.md#del) +* [delRaw](_checkpointtrie_.checkpointtrie.md#delraw) +* [findPath](_checkpointtrie_.checkpointtrie.md#findpath) +* [get](_checkpointtrie_.checkpointtrie.md#get) +* [getRaw](_checkpointtrie_.checkpointtrie.md#getraw) +* [put](_checkpointtrie_.checkpointtrie.md#put) +* [putRaw](_checkpointtrie_.checkpointtrie.md#putraw) +* [revert](_checkpointtrie_.checkpointtrie.md#revert) +* [setRoot](_checkpointtrie_.checkpointtrie.md#setroot) +* [fromProof](_checkpointtrie_.checkpointtrie.md#static-fromproof) +* [prove](_checkpointtrie_.checkpointtrie.md#static-prove) +* [verifyProof](_checkpointtrie_.checkpointtrie.md#static-verifyproof) ## Constructors ### constructor -\+ **new CheckpointTrie**(...`args`: any): *[CheckpointTrie](checkpointtrie.md)* +\+ **new CheckpointTrie**(...`args`: any): *[CheckpointTrie](_checkpointtrie_.checkpointtrie.md)* -*Overrides [Trie](trie.md).[constructor](trie.md#constructor)* +*Overrides [Trie](_basetrie_.trie.md).[constructor](_basetrie_.trie.md#constructor)* *Defined in [checkpointTrie.ts:14](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L14)* @@ -80,7 +79,7 @@ Name | Type | ------ | ------ | `...args` | any | -**Returns:** *[CheckpointTrie](checkpointtrie.md)* +**Returns:** *[CheckpointTrie](_checkpointtrie_.checkpointtrie.md)* ## Properties @@ -88,7 +87,7 @@ Name | Type | • **EMPTY_TRIE_ROOT**: *Buffer* -*Inherited from [Trie](trie.md).[EMPTY_TRIE_ROOT](trie.md#empty_trie_root)* +*Inherited from [Trie](_basetrie_.trie.md).[EMPTY_TRIE_ROOT](_basetrie_.trie.md#empty_trie_root)* *Defined in [baseTrie.ts:34](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L34)* @@ -104,7 +103,7 @@ ___ ### _mainDB -• **_mainDB**: *[DB](db.md)* +• **_mainDB**: *DB* *Defined in [checkpointTrie.ts:12](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L12)* @@ -112,7 +111,7 @@ ___ ### _scratch -• **_scratch**: *[ScratchDB](scratchdb.md) | null* +• **_scratch**: *ScratchDB | null* *Defined in [checkpointTrie.ts:13](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L13)* @@ -120,22 +119,12 @@ ___ ### db -• **db**: *[DB](db.md)* +• **db**: *DB* -*Inherited from [Trie](trie.md).[db](trie.md#db)* +*Inherited from [Trie](_basetrie_.trie.md).[db](_basetrie_.trie.md#db)* *Defined in [baseTrie.ts:35](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L35)* -___ - -### `Protected` sem - -• **sem**: *any* - -*Inherited from [Trie](trie.md).[sem](trie.md#protected-sem)* - -*Defined in [baseTrie.ts:36](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L36)* - ## Accessors ### isCheckpoint @@ -154,7 +143,7 @@ ___ • **get root**(): *Buffer* -*Inherited from [Trie](trie.md).[root](trie.md#root)* +*Inherited from [Trie](_basetrie_.trie.md).[root](_basetrie_.trie.md#root)* *Defined in [baseTrie.ts:103](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L103)* @@ -162,7 +151,7 @@ ___ • **set root**(`value`: Buffer): *void* -*Inherited from [Trie](trie.md).[root](trie.md#root)* +*Inherited from [Trie](_basetrie_.trie.md).[root](_basetrie_.trie.md#root)* *Defined in [baseTrie.ts:99](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L99)* @@ -178,9 +167,9 @@ Name | Type | ### _createInitialNode -▸ **_createInitialNode**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_createInitialNode**(`key`: Buffer, `value`: Buffer, `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[_createInitialNode](trie.md#_createinitialnode)* +*Inherited from [Trie](_basetrie_.trie.md).[_createInitialNode](_basetrie_.trie.md#_createinitialnode)* *Defined in [baseTrie.ts:735](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L735)* @@ -190,7 +179,7 @@ Name | Type | ------ | ------ | `key` | Buffer | `value` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -198,7 +187,7 @@ ___ ### `Private` _createScratchReadStream -▸ **_createScratchReadStream**(`scratch`: [ScratchDB](scratchdb.md)): *[ScratchReadStream](scratchreadstream.md)‹›* +▸ **_createScratchReadStream**(`scratch`: ScratchDB): *ScratchReadStream‹›* *Defined in [checkpointTrie.ts:154](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L154)* @@ -211,17 +200,17 @@ since checkpoint. Name | Type | ------ | ------ | -`scratch` | [ScratchDB](scratchdb.md) | +`scratch` | ScratchDB | -**Returns:** *[ScratchReadStream](scratchreadstream.md)‹›* +**Returns:** *ScratchReadStream‹›* ___ ### _deleteNode -▸ **_deleteNode**(`k`: Buffer, `stack`: [TrieNode](../README.md#trienode)[], `cb`: Function): *any* +▸ **_deleteNode**(`k`: Buffer, `stack`: TrieNode[], `cb`: Function): *any* -*Inherited from [Trie](trie.md).[_deleteNode](trie.md#_deletenode)* +*Inherited from [Trie](_basetrie_.trie.md).[_deleteNode](_basetrie_.trie.md#_deletenode)* *Defined in [baseTrie.ts:617](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L617)* @@ -230,7 +219,7 @@ ___ Name | Type | ------ | ------ | `k` | Buffer | -`stack` | [TrieNode](../README.md#trienode)[] | +`stack` | TrieNode[] | `cb` | Function | **Returns:** *any* @@ -272,7 +261,7 @@ ___ ▸ **_findDbNodes**(`onFound`: Function, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[_findDbNodes](trie.md#_finddbnodes)* +*Inherited from [Trie](_basetrie_.trie.md).[_findDbNodes](_basetrie_.trie.md#_finddbnodes)* *Defined in [baseTrie.ts:346](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L346)* @@ -291,7 +280,7 @@ ___ ▸ **_findValueNodes**(`onFound`: Function, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[_findValueNodes](trie.md#_findvaluenodes)* +*Inherited from [Trie](_basetrie_.trie.md).[_findValueNodes](_basetrie_.trie.md#_findvaluenodes)* *Defined in [baseTrie.ts:320](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L320)* @@ -308,9 +297,9 @@ ___ ### _formatNode -▸ **_formatNode**(`node`: [TrieNode](../README.md#trienode), `topLevel`: boolean, `opStack`: [BatchDBOp](../README.md#batchdbop)[], `remove`: boolean): *Buffer‹› | null | Buffer‹› | Buffer‹›[][]* +▸ **_formatNode**(`node`: TrieNode, `topLevel`: boolean, `opStack`: BatchDBOp[], `remove`: boolean): *Buffer‹› | null | Buffer‹› | Buffer‹›[][]* -*Overrides [Trie](trie.md).[_formatNode](trie.md#_formatnode)* +*Overrides [Trie](_basetrie_.trie.md).[_formatNode](_basetrie_.trie.md#_formatnode)* *Defined in [checkpointTrie.ts:163](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L163)* @@ -318,9 +307,9 @@ ___ Name | Type | Default | ------ | ------ | ------ | -`node` | [TrieNode](../README.md#trienode) | - | +`node` | TrieNode | - | `topLevel` | boolean | - | -`opStack` | [BatchDBOp](../README.md#batchdbop)[] | - | +`opStack` | BatchDBOp[] | - | `remove` | boolean | false | **Returns:** *Buffer‹› | null | Buffer‹› | Buffer‹›[][]* @@ -331,7 +320,7 @@ ___ ▸ **_lookupNode**(`node`: Buffer | Buffer[], `cb`: Function): *void* -*Inherited from [Trie](trie.md).[_lookupNode](trie.md#_lookupnode)* +*Inherited from [Trie](_basetrie_.trie.md).[_lookupNode](_basetrie_.trie.md#_lookupnode)* *Defined in [baseTrie.ts:230](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L230)* @@ -348,9 +337,9 @@ ___ ### _putNode -▸ **_putNode**(`node`: [TrieNode](../README.md#trienode), `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_putNode**(`node`: TrieNode, `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[_putNode](trie.md#_putnode)* +*Inherited from [Trie](_basetrie_.trie.md).[_putNode](_basetrie_.trie.md#_putnode)* *Defined in [baseTrie.ts:247](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L247)* @@ -358,8 +347,8 @@ ___ Name | Type | ------ | ------ | -`node` | [TrieNode](../README.md#trienode) | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`node` | TrieNode | +`cb` | ErrorCallback | **Returns:** *void* @@ -367,9 +356,9 @@ ___ ### `Private` _saveStack -▸ **_saveStack**(`key`: number[], `stack`: [TrieNode](../README.md#trienode)[], `opStack`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_saveStack**(`key`: number[], `stack`: TrieNode[], `opStack`: BatchDBOp[], `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[_saveStack](trie.md#private-_savestack)* +*Inherited from [Trie](_basetrie_.trie.md).[_saveStack](_basetrie_.trie.md#private-_savestack)* *Defined in [baseTrie.ts:588](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L588)* @@ -382,9 +371,9 @@ saves a stack Name | Type | Description | ------ | ------ | ------ | `key` | number[] | the key. Should follow the stack | -`stack` | [TrieNode](../README.md#trienode)[] | a stack of nodes to the value given by the key | -`opStack` | [BatchDBOp](../README.md#batchdbop)[] | a stack of levelup operations to commit at the end of this funciton | -`cb` | [ErrorCallback](../README.md#errorcallback) | | +`stack` | TrieNode[] | a stack of nodes to the value given by the key | +`opStack` | BatchDBOp[] | a stack of levelup operations to commit at the end of this funciton | +`cb` | ErrorCallback | | **Returns:** *void* @@ -392,9 +381,9 @@ ___ ### `Private` _updateNode -▸ **_updateNode**(`k`: Buffer, `value`: Buffer, `keyRemainder`: number[], `stack`: [TrieNode](../README.md#trienode)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_updateNode**(`k`: Buffer, `value`: Buffer, `keyRemainder`: number[], `stack`: TrieNode[], `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[_updateNode](trie.md#private-_updatenode)* +*Inherited from [Trie](_basetrie_.trie.md).[_updateNode](_basetrie_.trie.md#private-_updatenode)* *Defined in [baseTrie.ts:370](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L370)* @@ -409,8 +398,8 @@ Name | Type | Description | `k` | Buffer | - | `value` | Buffer | - | `keyRemainder` | number[] | - | -`stack` | [TrieNode](../README.md#trienode)[] | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | the callback | +`stack` | TrieNode[] | - | +`cb` | ErrorCallback | the callback | **Returns:** *void* @@ -420,7 +409,7 @@ ___ ▸ **_walkTrie**(`root`: Buffer, `onNode`: Function, `onDone`: Function): *any* -*Inherited from [Trie](trie.md).[_walkTrie](trie.md#_walktrie)* +*Inherited from [Trie](_basetrie_.trie.md).[_walkTrie](_basetrie_.trie.md#_walktrie)* *Defined in [baseTrie.ts:473](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L473)* @@ -438,9 +427,9 @@ ___ ### batch -▸ **batch**(`ops`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **batch**(`ops`: BatchDBOp[], `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[batch](trie.md#batch)* +*Inherited from [Trie](_basetrie_.trie.md).[batch](_basetrie_.trie.md#batch)* *Defined in [baseTrie.ts:799](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L799)* @@ -464,8 +453,8 @@ trie.batch(ops) Name | Type | Description | ------ | ------ | ------ | -`ops` | [BatchDBOp](../README.md#batchdbop)[] | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | | +`ops` | BatchDBOp[] | - | +`cb` | ErrorCallback | | **Returns:** *void* @@ -475,7 +464,7 @@ ___ ▸ **checkRoot**(`root`: Buffer, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[checkRoot](trie.md#checkroot)* +*Inherited from [Trie](_basetrie_.trie.md).[checkRoot](_basetrie_.trie.md#checkroot)* *Defined in [baseTrie.ts:819](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L819)* @@ -532,9 +521,9 @@ ___ ### copy -▸ **copy**(`includeCheckpoints`: boolean): *[CheckpointTrie](checkpointtrie.md)* +▸ **copy**(`includeCheckpoints`: boolean): *[CheckpointTrie](_checkpointtrie_.checkpointtrie.md)* -*Overrides [Trie](trie.md).[copy](trie.md#copy)* +*Overrides [Trie](_basetrie_.trie.md).[copy](_basetrie_.trie.md#copy)* *Defined in [checkpointTrie.ts:101](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L101)* @@ -548,7 +537,7 @@ Name | Type | Default | Description | ------ | ------ | ------ | ------ | `includeCheckpoints` | boolean | true | If true and during a checkpoint, the copy will contain the checkpointing metadata and will use the same scratch as underlying db. | -**Returns:** *[CheckpointTrie](checkpointtrie.md)* +**Returns:** *[CheckpointTrie](_checkpointtrie_.checkpointtrie.md)* ___ @@ -556,7 +545,7 @@ ___ ▸ **createReadStream**(): *ReadStream* -*Inherited from [Trie](trie.md).[createReadStream](trie.md#createreadstream)* +*Inherited from [Trie](_basetrie_.trie.md).[createReadStream](_basetrie_.trie.md#createreadstream)* *Defined in [baseTrie.ts:772](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L772)* @@ -576,7 +565,7 @@ ___ ▸ **del**(`key`: Buffer, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[del](trie.md#del)* +*Inherited from [Trie](_basetrie_.trie.md).[del](_basetrie_.trie.md#del)* *Defined in [baseTrie.ts:183](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L183)* @@ -599,9 +588,9 @@ ___ ### delRaw -▸ **delRaw**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **delRaw**(`key`: Buffer, `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[delRaw](trie.md#delraw)* +*Inherited from [Trie](_basetrie_.trie.md).[delRaw](_basetrie_.trie.md#delraw)* *Defined in [baseTrie.ts:225](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L225)* @@ -614,7 +603,7 @@ Deletes key directly from underlying key/value db. Name | Type | ------ | ------ | `key` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -624,7 +613,7 @@ ___ ▸ **findPath**(`key`: Buffer, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[findPath](trie.md#findpath)* +*Inherited from [Trie](_basetrie_.trie.md).[findPath](_basetrie_.trie.md#findpath)* *Defined in [baseTrie.ts:266](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L266)* @@ -650,7 +639,7 @@ ___ ▸ **get**(`key`: Buffer, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[get](trie.md#get)* +*Inherited from [Trie](_basetrie_.trie.md).[get](_basetrie_.trie.md#get)* *Defined in [baseTrie.ts:125](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L125)* @@ -675,7 +664,7 @@ ___ ▸ **getRaw**(`key`: Buffer, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[getRaw](trie.md#getraw)* +*Inherited from [Trie](_basetrie_.trie.md).[getRaw](_basetrie_.trie.md#getraw)* *Defined in [baseTrie.ts:208](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L208)* @@ -696,9 +685,9 @@ ___ ### put -▸ **put**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **put**(`key`: Buffer, `value`: Buffer, `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[put](trie.md#put)* +*Inherited from [Trie](_basetrie_.trie.md).[put](_basetrie_.trie.md#put)* *Defined in [baseTrie.ts:147](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L147)* @@ -714,7 +703,7 @@ Name | Type | Description | ------ | ------ | ------ | `key` | Buffer | - | `value` | Buffer | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function` which is given the argument `err` - for errors that may have occured | +`cb` | ErrorCallback | A callback `Function` which is given the argument `err` - for errors that may have occured | **Returns:** *void* @@ -722,9 +711,9 @@ ___ ### putRaw -▸ **putRaw**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **putRaw**(`key`: Buffer, `value`: Buffer, `cb`: ErrorCallback): *void* -*Overrides [Trie](trie.md).[putRaw](trie.md#putraw)* +*Overrides [Trie](_basetrie_.trie.md).[putRaw](_basetrie_.trie.md#putraw)* *Defined in [checkpointTrie.ts:117](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L117)* @@ -739,7 +728,7 @@ Name | Type | ------ | ------ | `key` | Buffer | `value` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -769,7 +758,7 @@ ___ ▸ **setRoot**(`value?`: Buffer): *void* -*Inherited from [Trie](trie.md).[setRoot](trie.md#setroot)* +*Inherited from [Trie](_basetrie_.trie.md).[setRoot](_basetrie_.trie.md#setroot)* *Defined in [baseTrie.ts:107](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L107)* @@ -785,9 +774,9 @@ ___ ### `Static` fromProof -▸ **fromProof**(`proofNodes`: Buffer[], `cb`: Function, `proofTrie?`: [Trie](trie.md)): *void* +▸ **fromProof**(`proofNodes`: Buffer[], `cb`: Function, `proofTrie?`: [Trie](_basetrie_.trie.md)): *void* -*Inherited from [Trie](trie.md).[fromProof](trie.md#static-fromproof)* +*Inherited from [Trie](_basetrie_.trie.md).[fromProof](_basetrie_.trie.md#static-fromproof)* *Defined in [baseTrie.ts:49](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L49)* @@ -797,7 +786,7 @@ Name | Type | ------ | ------ | `proofNodes` | Buffer[] | `cb` | Function | -`proofTrie?` | [Trie](trie.md) | +`proofTrie?` | [Trie](_basetrie_.trie.md) | **Returns:** *void* @@ -805,9 +794,9 @@ ___ ### `Static` prove -▸ **prove**(`trie`: [Trie](trie.md), `key`: Buffer, `cb`: Function): *void* +▸ **prove**(`trie`: [Trie](_basetrie_.trie.md), `key`: Buffer, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[prove](trie.md#static-prove)* +*Inherited from [Trie](_basetrie_.trie.md).[prove](_basetrie_.trie.md#static-prove)* *Defined in [baseTrie.ts:70](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L70)* @@ -815,7 +804,7 @@ ___ Name | Type | ------ | ------ | -`trie` | [Trie](trie.md) | +`trie` | [Trie](_basetrie_.trie.md) | `key` | Buffer | `cb` | Function | @@ -827,7 +816,7 @@ ___ ▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proofNodes`: Buffer[], `cb`: Function): *void* -*Inherited from [Trie](trie.md).[verifyProof](trie.md#static-verifyproof)* +*Inherited from [Trie](_basetrie_.trie.md).[verifyProof](_basetrie_.trie.md#static-verifyproof)* *Defined in [baseTrie.ts:85](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L85)* diff --git a/docs/classes/securetrie.md b/docs/classes/_secure_.securetrie.md similarity index 60% rename from docs/classes/securetrie.md rename to docs/classes/_secure_.securetrie.md index b59a1e2..6e48425 100644 --- a/docs/classes/securetrie.md +++ b/docs/classes/_secure_.securetrie.md @@ -1,4 +1,4 @@ -[merkle-patricia-tree](../README.md) › [SecureTrie](securetrie.md) +[merkle-patricia-tree](../README.md) › ["secure"](../modules/_secure_.md) › [SecureTrie](_secure_.securetrie.md) # Class: SecureTrie @@ -12,7 +12,7 @@ It has the same methods and constructor as `Trie`. ## Hierarchy - ↳ [CheckpointTrie](checkpointtrie.md) + ↳ [CheckpointTrie](_checkpointtrie_.checkpointtrie.md) ↳ **SecureTrie** @@ -20,63 +20,62 @@ It has the same methods and constructor as `Trie`. ### Constructors -* [constructor](securetrie.md#constructor) +* [constructor](_secure_.securetrie.md#constructor) ### Properties -* [EMPTY_TRIE_ROOT](securetrie.md#empty_trie_root) -* [_checkpoints](securetrie.md#_checkpoints) -* [_mainDB](securetrie.md#_maindb) -* [_scratch](securetrie.md#_scratch) -* [db](securetrie.md#db) -* [sem](securetrie.md#protected-sem) +* [EMPTY_TRIE_ROOT](_secure_.securetrie.md#empty_trie_root) +* [_checkpoints](_secure_.securetrie.md#_checkpoints) +* [_mainDB](_secure_.securetrie.md#_maindb) +* [_scratch](_secure_.securetrie.md#_scratch) +* [db](_secure_.securetrie.md#db) ### Accessors -* [isCheckpoint](securetrie.md#ischeckpoint) -* [root](securetrie.md#root) +* [isCheckpoint](_secure_.securetrie.md#ischeckpoint) +* [root](_secure_.securetrie.md#root) ### Methods -* [_createInitialNode](securetrie.md#_createinitialnode) -* [_createScratchReadStream](securetrie.md#private-_createscratchreadstream) -* [_deleteNode](securetrie.md#_deletenode) -* [_enterCpMode](securetrie.md#private-_entercpmode) -* [_exitCpMode](securetrie.md#private-_exitcpmode) -* [_findDbNodes](securetrie.md#_finddbnodes) -* [_findValueNodes](securetrie.md#_findvaluenodes) -* [_formatNode](securetrie.md#_formatnode) -* [_lookupNode](securetrie.md#_lookupnode) -* [_putNode](securetrie.md#_putnode) -* [_saveStack](securetrie.md#private-_savestack) -* [_updateNode](securetrie.md#private-_updatenode) -* [_walkTrie](securetrie.md#_walktrie) -* [batch](securetrie.md#batch) -* [checkRoot](securetrie.md#checkroot) -* [checkpoint](securetrie.md#checkpoint) -* [commit](securetrie.md#commit) -* [copy](securetrie.md#copy) -* [createReadStream](securetrie.md#createreadstream) -* [del](securetrie.md#del) -* [delRaw](securetrie.md#delraw) -* [findPath](securetrie.md#findpath) -* [get](securetrie.md#get) -* [getRaw](securetrie.md#getraw) -* [put](securetrie.md#put) -* [putRaw](securetrie.md#putraw) -* [revert](securetrie.md#revert) -* [setRoot](securetrie.md#setroot) -* [fromProof](securetrie.md#static-fromproof) -* [prove](securetrie.md#static-prove) -* [verifyProof](securetrie.md#static-verifyproof) +* [_createInitialNode](_secure_.securetrie.md#_createinitialnode) +* [_createScratchReadStream](_secure_.securetrie.md#private-_createscratchreadstream) +* [_deleteNode](_secure_.securetrie.md#_deletenode) +* [_enterCpMode](_secure_.securetrie.md#private-_entercpmode) +* [_exitCpMode](_secure_.securetrie.md#private-_exitcpmode) +* [_findDbNodes](_secure_.securetrie.md#_finddbnodes) +* [_findValueNodes](_secure_.securetrie.md#_findvaluenodes) +* [_formatNode](_secure_.securetrie.md#_formatnode) +* [_lookupNode](_secure_.securetrie.md#_lookupnode) +* [_putNode](_secure_.securetrie.md#_putnode) +* [_saveStack](_secure_.securetrie.md#private-_savestack) +* [_updateNode](_secure_.securetrie.md#private-_updatenode) +* [_walkTrie](_secure_.securetrie.md#_walktrie) +* [batch](_secure_.securetrie.md#batch) +* [checkRoot](_secure_.securetrie.md#checkroot) +* [checkpoint](_secure_.securetrie.md#checkpoint) +* [commit](_secure_.securetrie.md#commit) +* [copy](_secure_.securetrie.md#copy) +* [createReadStream](_secure_.securetrie.md#createreadstream) +* [del](_secure_.securetrie.md#del) +* [delRaw](_secure_.securetrie.md#delraw) +* [findPath](_secure_.securetrie.md#findpath) +* [get](_secure_.securetrie.md#get) +* [getRaw](_secure_.securetrie.md#getraw) +* [put](_secure_.securetrie.md#put) +* [putRaw](_secure_.securetrie.md#putraw) +* [revert](_secure_.securetrie.md#revert) +* [setRoot](_secure_.securetrie.md#setroot) +* [fromProof](_secure_.securetrie.md#static-fromproof) +* [prove](_secure_.securetrie.md#static-prove) +* [verifyProof](_secure_.securetrie.md#static-verifyproof) ## Constructors ### constructor -\+ **new SecureTrie**(...`args`: any): *[SecureTrie](securetrie.md)* +\+ **new SecureTrie**(...`args`: any): *[SecureTrie](_secure_.securetrie.md)* -*Overrides [CheckpointTrie](checkpointtrie.md).[constructor](checkpointtrie.md#constructor)* +*Overrides [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[constructor](_checkpointtrie_.checkpointtrie.md#constructor)* *Defined in [secure.ts:13](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L13)* @@ -86,7 +85,7 @@ Name | Type | ------ | ------ | `...args` | any | -**Returns:** *[SecureTrie](securetrie.md)* +**Returns:** *[SecureTrie](_secure_.securetrie.md)* ## Properties @@ -94,7 +93,7 @@ Name | Type | • **EMPTY_TRIE_ROOT**: *Buffer* -*Inherited from [Trie](trie.md).[EMPTY_TRIE_ROOT](trie.md#empty_trie_root)* +*Inherited from [Trie](_basetrie_.trie.md).[EMPTY_TRIE_ROOT](_basetrie_.trie.md#empty_trie_root)* *Defined in [baseTrie.ts:34](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L34)* @@ -104,7 +103,7 @@ ___ • **_checkpoints**: *Buffer[]* -*Inherited from [CheckpointTrie](checkpointtrie.md).[_checkpoints](checkpointtrie.md#_checkpoints)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[_checkpoints](_checkpointtrie_.checkpointtrie.md#_checkpoints)* *Defined in [checkpointTrie.ts:14](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L14)* @@ -112,9 +111,9 @@ ___ ### _mainDB -• **_mainDB**: *[DB](db.md)* +• **_mainDB**: *DB* -*Inherited from [CheckpointTrie](checkpointtrie.md).[_mainDB](checkpointtrie.md#_maindb)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[_mainDB](_checkpointtrie_.checkpointtrie.md#_maindb)* *Defined in [checkpointTrie.ts:12](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L12)* @@ -122,9 +121,9 @@ ___ ### _scratch -• **_scratch**: *[ScratchDB](scratchdb.md) | null* +• **_scratch**: *ScratchDB | null* -*Inherited from [CheckpointTrie](checkpointtrie.md).[_scratch](checkpointtrie.md#_scratch)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[_scratch](_checkpointtrie_.checkpointtrie.md#_scratch)* *Defined in [checkpointTrie.ts:13](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L13)* @@ -132,29 +131,19 @@ ___ ### db -• **db**: *[DB](db.md)* +• **db**: *DB* -*Inherited from [Trie](trie.md).[db](trie.md#db)* +*Inherited from [Trie](_basetrie_.trie.md).[db](_basetrie_.trie.md#db)* *Defined in [baseTrie.ts:35](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L35)* -___ - -### `Protected` sem - -• **sem**: *any* - -*Inherited from [Trie](trie.md).[sem](trie.md#protected-sem)* - -*Defined in [baseTrie.ts:36](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L36)* - ## Accessors ### isCheckpoint • **get isCheckpoint**(): *boolean* -*Inherited from [CheckpointTrie](checkpointtrie.md).[isCheckpoint](checkpointtrie.md#ischeckpoint)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[isCheckpoint](_checkpointtrie_.checkpointtrie.md#ischeckpoint)* *Defined in [checkpointTrie.ts:29](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L29)* @@ -168,7 +157,7 @@ ___ • **get root**(): *Buffer* -*Inherited from [Trie](trie.md).[root](trie.md#root)* +*Inherited from [Trie](_basetrie_.trie.md).[root](_basetrie_.trie.md#root)* *Defined in [baseTrie.ts:103](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L103)* @@ -176,7 +165,7 @@ ___ • **set root**(`value`: Buffer): *void* -*Inherited from [Trie](trie.md).[root](trie.md#root)* +*Inherited from [Trie](_basetrie_.trie.md).[root](_basetrie_.trie.md#root)* *Defined in [baseTrie.ts:99](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L99)* @@ -192,9 +181,9 @@ Name | Type | ### _createInitialNode -▸ **_createInitialNode**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_createInitialNode**(`key`: Buffer, `value`: Buffer, `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[_createInitialNode](trie.md#_createinitialnode)* +*Inherited from [Trie](_basetrie_.trie.md).[_createInitialNode](_basetrie_.trie.md#_createinitialnode)* *Defined in [baseTrie.ts:735](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L735)* @@ -204,7 +193,7 @@ Name | Type | ------ | ------ | `key` | Buffer | `value` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -212,9 +201,9 @@ ___ ### `Private` _createScratchReadStream -▸ **_createScratchReadStream**(`scratch`: [ScratchDB](scratchdb.md)): *[ScratchReadStream](scratchreadstream.md)‹›* +▸ **_createScratchReadStream**(`scratch`: ScratchDB): *ScratchReadStream‹›* -*Inherited from [CheckpointTrie](checkpointtrie.md).[_createScratchReadStream](checkpointtrie.md#private-_createscratchreadstream)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[_createScratchReadStream](_checkpointtrie_.checkpointtrie.md#private-_createscratchreadstream)* *Defined in [checkpointTrie.ts:154](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L154)* @@ -227,17 +216,17 @@ since checkpoint. Name | Type | ------ | ------ | -`scratch` | [ScratchDB](scratchdb.md) | +`scratch` | ScratchDB | -**Returns:** *[ScratchReadStream](scratchreadstream.md)‹›* +**Returns:** *ScratchReadStream‹›* ___ ### _deleteNode -▸ **_deleteNode**(`k`: Buffer, `stack`: [TrieNode](../README.md#trienode)[], `cb`: Function): *any* +▸ **_deleteNode**(`k`: Buffer, `stack`: TrieNode[], `cb`: Function): *any* -*Inherited from [Trie](trie.md).[_deleteNode](trie.md#_deletenode)* +*Inherited from [Trie](_basetrie_.trie.md).[_deleteNode](_basetrie_.trie.md#_deletenode)* *Defined in [baseTrie.ts:617](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L617)* @@ -246,7 +235,7 @@ ___ Name | Type | ------ | ------ | `k` | Buffer | -`stack` | [TrieNode](../README.md#trienode)[] | +`stack` | TrieNode[] | `cb` | Function | **Returns:** *any* @@ -257,7 +246,7 @@ ___ ▸ **_enterCpMode**(): *void* -*Inherited from [CheckpointTrie](checkpointtrie.md).[_enterCpMode](checkpointtrie.md#private-_entercpmode)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[_enterCpMode](_checkpointtrie_.checkpointtrie.md#private-_entercpmode)* *Defined in [checkpointTrie.ts:125](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L125)* @@ -271,7 +260,7 @@ ___ ▸ **_exitCpMode**(`commitState`: boolean, `cb`: Function): *void* -*Inherited from [CheckpointTrie](checkpointtrie.md).[_exitCpMode](checkpointtrie.md#private-_exitcpmode)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[_exitCpMode](_checkpointtrie_.checkpointtrie.md#private-_exitcpmode)* *Defined in [checkpointTrie.ts:134](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L134)* @@ -292,7 +281,7 @@ ___ ▸ **_findDbNodes**(`onFound`: Function, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[_findDbNodes](trie.md#_finddbnodes)* +*Inherited from [Trie](_basetrie_.trie.md).[_findDbNodes](_basetrie_.trie.md#_finddbnodes)* *Defined in [baseTrie.ts:346](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L346)* @@ -311,7 +300,7 @@ ___ ▸ **_findValueNodes**(`onFound`: Function, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[_findValueNodes](trie.md#_findvaluenodes)* +*Inherited from [Trie](_basetrie_.trie.md).[_findValueNodes](_basetrie_.trie.md#_findvaluenodes)* *Defined in [baseTrie.ts:320](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L320)* @@ -328,11 +317,11 @@ ___ ### _formatNode -▸ **_formatNode**(`node`: [TrieNode](../README.md#trienode), `topLevel`: boolean, `opStack`: [BatchDBOp](../README.md#batchdbop)[], `remove`: boolean): *Buffer‹› | null | Buffer‹› | Buffer‹›[][]* +▸ **_formatNode**(`node`: TrieNode, `topLevel`: boolean, `opStack`: BatchDBOp[], `remove`: boolean): *Buffer‹› | null | Buffer‹› | Buffer‹›[][]* -*Inherited from [CheckpointTrie](checkpointtrie.md).[_formatNode](checkpointtrie.md#_formatnode)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[_formatNode](_checkpointtrie_.checkpointtrie.md#_formatnode)* -*Overrides [Trie](trie.md).[_formatNode](trie.md#_formatnode)* +*Overrides [Trie](_basetrie_.trie.md).[_formatNode](_basetrie_.trie.md#_formatnode)* *Defined in [checkpointTrie.ts:163](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L163)* @@ -340,9 +329,9 @@ ___ Name | Type | Default | ------ | ------ | ------ | -`node` | [TrieNode](../README.md#trienode) | - | +`node` | TrieNode | - | `topLevel` | boolean | - | -`opStack` | [BatchDBOp](../README.md#batchdbop)[] | - | +`opStack` | BatchDBOp[] | - | `remove` | boolean | false | **Returns:** *Buffer‹› | null | Buffer‹› | Buffer‹›[][]* @@ -353,7 +342,7 @@ ___ ▸ **_lookupNode**(`node`: Buffer | Buffer[], `cb`: Function): *void* -*Inherited from [Trie](trie.md).[_lookupNode](trie.md#_lookupnode)* +*Inherited from [Trie](_basetrie_.trie.md).[_lookupNode](_basetrie_.trie.md#_lookupnode)* *Defined in [baseTrie.ts:230](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L230)* @@ -370,9 +359,9 @@ ___ ### _putNode -▸ **_putNode**(`node`: [TrieNode](../README.md#trienode), `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_putNode**(`node`: TrieNode, `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[_putNode](trie.md#_putnode)* +*Inherited from [Trie](_basetrie_.trie.md).[_putNode](_basetrie_.trie.md#_putnode)* *Defined in [baseTrie.ts:247](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L247)* @@ -380,8 +369,8 @@ ___ Name | Type | ------ | ------ | -`node` | [TrieNode](../README.md#trienode) | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`node` | TrieNode | +`cb` | ErrorCallback | **Returns:** *void* @@ -389,9 +378,9 @@ ___ ### `Private` _saveStack -▸ **_saveStack**(`key`: number[], `stack`: [TrieNode](../README.md#trienode)[], `opStack`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_saveStack**(`key`: number[], `stack`: TrieNode[], `opStack`: BatchDBOp[], `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[_saveStack](trie.md#private-_savestack)* +*Inherited from [Trie](_basetrie_.trie.md).[_saveStack](_basetrie_.trie.md#private-_savestack)* *Defined in [baseTrie.ts:588](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L588)* @@ -404,9 +393,9 @@ saves a stack Name | Type | Description | ------ | ------ | ------ | `key` | number[] | the key. Should follow the stack | -`stack` | [TrieNode](../README.md#trienode)[] | a stack of nodes to the value given by the key | -`opStack` | [BatchDBOp](../README.md#batchdbop)[] | a stack of levelup operations to commit at the end of this funciton | -`cb` | [ErrorCallback](../README.md#errorcallback) | | +`stack` | TrieNode[] | a stack of nodes to the value given by the key | +`opStack` | BatchDBOp[] | a stack of levelup operations to commit at the end of this funciton | +`cb` | ErrorCallback | | **Returns:** *void* @@ -414,9 +403,9 @@ ___ ### `Private` _updateNode -▸ **_updateNode**(`k`: Buffer, `value`: Buffer, `keyRemainder`: number[], `stack`: [TrieNode](../README.md#trienode)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **_updateNode**(`k`: Buffer, `value`: Buffer, `keyRemainder`: number[], `stack`: TrieNode[], `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[_updateNode](trie.md#private-_updatenode)* +*Inherited from [Trie](_basetrie_.trie.md).[_updateNode](_basetrie_.trie.md#private-_updatenode)* *Defined in [baseTrie.ts:370](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L370)* @@ -431,8 +420,8 @@ Name | Type | Description | `k` | Buffer | - | `value` | Buffer | - | `keyRemainder` | number[] | - | -`stack` | [TrieNode](../README.md#trienode)[] | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | the callback | +`stack` | TrieNode[] | - | +`cb` | ErrorCallback | the callback | **Returns:** *void* @@ -442,7 +431,7 @@ ___ ▸ **_walkTrie**(`root`: Buffer, `onNode`: Function, `onDone`: Function): *any* -*Inherited from [Trie](trie.md).[_walkTrie](trie.md#_walktrie)* +*Inherited from [Trie](_basetrie_.trie.md).[_walkTrie](_basetrie_.trie.md#_walktrie)* *Defined in [baseTrie.ts:473](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L473)* @@ -460,9 +449,9 @@ ___ ### batch -▸ **batch**(`ops`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **batch**(`ops`: BatchDBOp[], `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[batch](trie.md#batch)* +*Inherited from [Trie](_basetrie_.trie.md).[batch](_basetrie_.trie.md#batch)* *Defined in [baseTrie.ts:799](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L799)* @@ -486,8 +475,8 @@ trie.batch(ops) Name | Type | Description | ------ | ------ | ------ | -`ops` | [BatchDBOp](../README.md#batchdbop)[] | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | | +`ops` | BatchDBOp[] | - | +`cb` | ErrorCallback | | **Returns:** *void* @@ -497,7 +486,7 @@ ___ ▸ **checkRoot**(`root`: Buffer, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[checkRoot](trie.md#checkroot)* +*Inherited from [Trie](_basetrie_.trie.md).[checkRoot](_basetrie_.trie.md#checkroot)* *Defined in [baseTrie.ts:819](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L819)* @@ -518,7 +507,7 @@ ___ ▸ **checkpoint**(): *void* -*Inherited from [CheckpointTrie](checkpointtrie.md).[checkpoint](checkpointtrie.md#checkpoint)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[checkpoint](_checkpointtrie_.checkpointtrie.md#checkpoint)* *Defined in [checkpointTrie.ts:39](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L39)* @@ -535,7 +524,7 @@ ___ ▸ **commit**(`cb`: Function): *void* -*Inherited from [CheckpointTrie](checkpointtrie.md).[commit](checkpointtrie.md#commit)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[commit](_checkpointtrie_.checkpointtrie.md#commit)* *Defined in [checkpointTrie.ts:56](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L56)* @@ -558,13 +547,13 @@ ___ ### copy -▸ **copy**(): *[SecureTrie](securetrie.md)* +▸ **copy**(): *[SecureTrie](_secure_.securetrie.md)* -*Overrides [CheckpointTrie](checkpointtrie.md).[copy](checkpointtrie.md#copy)* +*Overrides [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[copy](_checkpointtrie_.checkpointtrie.md#copy)* *Defined in [secure.ts:28](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L28)* -**Returns:** *[SecureTrie](securetrie.md)* +**Returns:** *[SecureTrie](_secure_.securetrie.md)* ___ @@ -572,7 +561,7 @@ ___ ▸ **createReadStream**(): *ReadStream* -*Inherited from [Trie](trie.md).[createReadStream](trie.md#createreadstream)* +*Inherited from [Trie](_basetrie_.trie.md).[createReadStream](_basetrie_.trie.md#createreadstream)* *Defined in [baseTrie.ts:772](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L772)* @@ -590,9 +579,9 @@ ___ ### del -▸ **del**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **del**(`key`: Buffer, `cb`: ErrorCallback): *void* -*Overrides [Trie](trie.md).[del](trie.md#del)* +*Overrides [Trie](_basetrie_.trie.md).[del](_basetrie_.trie.md#del)* *Defined in [secure.ts:52](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L52)* @@ -601,7 +590,7 @@ ___ Name | Type | ------ | ------ | `key` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -609,9 +598,9 @@ ___ ### delRaw -▸ **delRaw**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **delRaw**(`key`: Buffer, `cb`: ErrorCallback): *void* -*Inherited from [Trie](trie.md).[delRaw](trie.md#delraw)* +*Inherited from [Trie](_basetrie_.trie.md).[delRaw](_basetrie_.trie.md#delraw)* *Defined in [baseTrie.ts:225](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L225)* @@ -624,7 +613,7 @@ Deletes key directly from underlying key/value db. Name | Type | ------ | ------ | `key` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -634,7 +623,7 @@ ___ ▸ **findPath**(`key`: Buffer, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[findPath](trie.md#findpath)* +*Inherited from [Trie](_basetrie_.trie.md).[findPath](_basetrie_.trie.md#findpath)* *Defined in [baseTrie.ts:266](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L266)* @@ -660,7 +649,7 @@ ___ ▸ **get**(`key`: Buffer, `cb`: Function): *void* -*Overrides [Trie](trie.md).[get](trie.md#get)* +*Overrides [Trie](_basetrie_.trie.md).[get](_basetrie_.trie.md#get)* *Defined in [secure.ts:34](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L34)* @@ -679,7 +668,7 @@ ___ ▸ **getRaw**(`key`: Buffer, `cb`: Function): *void* -*Inherited from [Trie](trie.md).[getRaw](trie.md#getraw)* +*Inherited from [Trie](_basetrie_.trie.md).[getRaw](_basetrie_.trie.md#getraw)* *Defined in [baseTrie.ts:208](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L208)* @@ -700,9 +689,9 @@ ___ ### put -▸ **put**(`key`: Buffer, `val`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **put**(`key`: Buffer, `val`: Buffer, `cb`: ErrorCallback): *void* -*Overrides [Trie](trie.md).[put](trie.md#put)* +*Overrides [Trie](_basetrie_.trie.md).[put](_basetrie_.trie.md#put)* *Defined in [secure.ts:43](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L43)* @@ -715,7 +704,7 @@ Name | Type | ------ | ------ | `key` | Buffer | `val` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -723,11 +712,11 @@ ___ ### putRaw -▸ **putRaw**(`key`: Buffer, `value`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* +▸ **putRaw**(`key`: Buffer, `value`: Buffer, `cb`: ErrorCallback): *void* -*Inherited from [CheckpointTrie](checkpointtrie.md).[putRaw](checkpointtrie.md#putraw)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[putRaw](_checkpointtrie_.checkpointtrie.md#putraw)* -*Overrides [Trie](trie.md).[putRaw](trie.md#putraw)* +*Overrides [Trie](_basetrie_.trie.md).[putRaw](_basetrie_.trie.md#putraw)* *Defined in [checkpointTrie.ts:117](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L117)* @@ -742,7 +731,7 @@ Name | Type | ------ | ------ | `key` | Buffer | `value` | Buffer | -`cb` | [ErrorCallback](../README.md#errorcallback) | +`cb` | ErrorCallback | **Returns:** *void* @@ -752,7 +741,7 @@ ___ ▸ **revert**(`cb`: Function): *void* -*Inherited from [CheckpointTrie](checkpointtrie.md).[revert](checkpointtrie.md#revert)* +*Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[revert](_checkpointtrie_.checkpointtrie.md#revert)* *Defined in [checkpointTrie.ts:78](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L78)* @@ -774,7 +763,7 @@ ___ ▸ **setRoot**(`value?`: Buffer): *void* -*Inherited from [Trie](trie.md).[setRoot](trie.md#setroot)* +*Inherited from [Trie](_basetrie_.trie.md).[setRoot](_basetrie_.trie.md#setroot)* *Defined in [baseTrie.ts:107](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L107)* @@ -790,9 +779,9 @@ ___ ### `Static` fromProof -▸ **fromProof**(`proofNodes`: Buffer[], `cb`: Function, `proofTrie?`: [Trie](trie.md)): *void* +▸ **fromProof**(`proofNodes`: Buffer[], `cb`: Function, `proofTrie?`: [Trie](_basetrie_.trie.md)): *void* -*Inherited from [Trie](trie.md).[fromProof](trie.md#static-fromproof)* +*Inherited from [Trie](_basetrie_.trie.md).[fromProof](_basetrie_.trie.md#static-fromproof)* *Defined in [baseTrie.ts:49](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L49)* @@ -802,7 +791,7 @@ Name | Type | ------ | ------ | `proofNodes` | Buffer[] | `cb` | Function | -`proofTrie?` | [Trie](trie.md) | +`proofTrie?` | [Trie](_basetrie_.trie.md) | **Returns:** *void* @@ -810,9 +799,9 @@ ___ ### `Static` prove -▸ **prove**(`trie`: [SecureTrie](securetrie.md), `key`: Buffer, `cb`: Function): *void* +▸ **prove**(`trie`: [SecureTrie](_secure_.securetrie.md), `key`: Buffer, `cb`: Function): *void* -*Overrides [Trie](trie.md).[prove](trie.md#static-prove)* +*Overrides [Trie](_basetrie_.trie.md).[prove](_basetrie_.trie.md#static-prove)* *Defined in [secure.ts:18](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L18)* @@ -820,7 +809,7 @@ ___ Name | Type | ------ | ------ | -`trie` | [SecureTrie](securetrie.md) | +`trie` | [SecureTrie](_secure_.securetrie.md) | `key` | Buffer | `cb` | Function | @@ -832,7 +821,7 @@ ___ ▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proof`: Buffer[], `cb`: Function): *void* -*Overrides [Trie](trie.md).[verifyProof](trie.md#static-verifyproof)* +*Overrides [Trie](_basetrie_.trie.md).[verifyProof](_basetrie_.trie.md#static-verifyproof)* *Defined in [secure.ts:23](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/secure.ts#L23)* diff --git a/docs/classes/branchnode.md b/docs/classes/branchnode.md deleted file mode 100644 index bab0aab..0000000 --- a/docs/classes/branchnode.md +++ /dev/null @@ -1,169 +0,0 @@ -[merkle-patricia-tree](../README.md) › [BranchNode](branchnode.md) - -# Class: BranchNode - -## Hierarchy - -* **BranchNode** - -## Index - -### Constructors - -* [constructor](branchnode.md#constructor) - -### Properties - -* [_branches](branchnode.md#_branches) -* [_value](branchnode.md#_value) - -### Accessors - -* [value](branchnode.md#value) - -### Methods - -* [getBranch](branchnode.md#getbranch) -* [getChildren](branchnode.md#getchildren) -* [hash](branchnode.md#hash) -* [raw](branchnode.md#raw) -* [serialize](branchnode.md#serialize) -* [setBranch](branchnode.md#setbranch) -* [fromArray](branchnode.md#static-fromarray) - -## Constructors - -### constructor - -\+ **new BranchNode**(): *[BranchNode](branchnode.md)* - -*Defined in [trieNode.ts:40](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L40)* - -**Returns:** *[BranchNode](branchnode.md)* - -## Properties - -### _branches - -• **_branches**: *null | Buffer‹› | Buffer‹›[][]* - -*Defined in [trieNode.ts:39](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L39)* - -___ - -### _value - -• **_value**: *Buffer | null* - -*Defined in [trieNode.ts:40](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L40)* - -## Accessors - -### value - -• **get value**(): *Buffer | null* - -*Defined in [trieNode.ts:54](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L54)* - -**Returns:** *Buffer | null* - -• **set value**(`v`: Buffer | null): *void* - -*Defined in [trieNode.ts:58](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L58)* - -**Parameters:** - -Name | Type | ------- | ------ | -`v` | Buffer | null | - -**Returns:** *void* - -## Methods - -### getBranch - -▸ **getBranch**(`i`: number): *null | Buffer‹› | Buffer‹›[]* - -*Defined in [trieNode.ts:78](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L78)* - -**Parameters:** - -Name | Type | ------- | ------ | -`i` | number | - -**Returns:** *null | Buffer‹› | Buffer‹›[]* - -___ - -### getChildren - -▸ **getChildren**(): *[number, [EmbeddedNode](../README.md#embeddednode)][]* - -*Defined in [trieNode.ts:87](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L87)* - -**Returns:** *[number, [EmbeddedNode](../README.md#embeddednode)][]* - -___ - -### hash - -▸ **hash**(): *Buffer* - -*Defined in [trieNode.ts:74](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L74)* - -**Returns:** *Buffer* - -___ - -### raw - -▸ **raw**(): *null | Buffer‹› | Buffer‹›[][]* - -*Defined in [trieNode.ts:66](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L66)* - -**Returns:** *null | Buffer‹› | Buffer‹›[][]* - -___ - -### serialize - -▸ **serialize**(): *Buffer* - -*Defined in [trieNode.ts:70](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L70)* - -**Returns:** *Buffer* - -___ - -### setBranch - -▸ **setBranch**(`i`: number, `v`: [EmbeddedNode](../README.md#embeddednode) | null): *void* - -*Defined in [trieNode.ts:62](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L62)* - -**Parameters:** - -Name | Type | ------- | ------ | -`i` | number | -`v` | [EmbeddedNode](../README.md#embeddednode) | null | - -**Returns:** *void* - -___ - -### `Static` fromArray - -▸ **fromArray**(`arr`: Buffer[]): *[BranchNode](branchnode.md)* - -*Defined in [trieNode.ts:47](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L47)* - -**Parameters:** - -Name | Type | ------- | ------ | -`arr` | Buffer[] | - -**Returns:** *[BranchNode](branchnode.md)* diff --git a/docs/classes/db.md b/docs/classes/db.md deleted file mode 100644 index d6d3394..0000000 --- a/docs/classes/db.md +++ /dev/null @@ -1,147 +0,0 @@ -[merkle-patricia-tree](../README.md) › [DB](db.md) - -# Class: DB - -DB is a thin wrapper around the underlying levelup db, -which validates inputs and sets encoding type. - -## Hierarchy - -* **DB** - - ↳ [ScratchDB](scratchdb.md) - -## Index - -### Constructors - -* [constructor](db.md#constructor) - -### Properties - -* [_leveldb](db.md#_leveldb) - -### Methods - -* [batch](db.md#batch) -* [copy](db.md#copy) -* [del](db.md#del) -* [get](db.md#get) -* [put](db.md#put) - -## Constructors - -### constructor - -\+ **new DB**(`leveldb?`: LevelUp): *[DB](db.md)* - -*Defined in [db.ts:23](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L23)* - -Initialize a DB instance. If `leveldb` is not provided, DB -defaults to an [in-memory store](https://github.com/Level/memdown). - -**Parameters:** - -Name | Type | ------- | ------ | -`leveldb?` | LevelUp | - -**Returns:** *[DB](db.md)* - -## Properties - -### _leveldb - -• **_leveldb**: *LevelUp* - -*Defined in [db.ts:23](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L23)* - -## Methods - -### batch - -▸ **batch**(`opStack`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* - -*Defined in [db.ts:85](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L85)* - -Performs a batch operation on db. - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`opStack` | [BatchDBOp](../README.md#batchdbop)[] | A stack of levelup operations | -`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | - -**Returns:** *void* - -___ - -### copy - -▸ **copy**(): *[DB](db.md)* - -*Defined in [db.ts:95](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L95)* - -Returns a copy of the DB instance, with a reference -to the **same** underlying leveldb instance. - -**Returns:** *[DB](db.md)* - -___ - -### del - -▸ **del**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* - -*Defined in [db.ts:73](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L73)* - -Removes a raw value in the underlying leveldb. - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`key` | Buffer | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | - -**Returns:** *void* - -___ - -### get - -▸ **get**(`key`: Buffer, `cb`: Function): *void* - -*Defined in [db.ts:41](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L41)* - -Retrieves a raw value from leveldb. - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`key` | Buffer | - | -`cb` | Function | A callback `Function`, which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null`. | - -**Returns:** *void* - -___ - -### put - -▸ **put**(`key`: Buffer, `val`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* - -*Defined in [db.ts:60](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L60)* - -Writes a value directly to leveldb. - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`key` | Buffer | The key as a `Buffer` or `String` | -`val` | Buffer | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | - -**Returns:** *void* diff --git a/docs/classes/extensionnode.md b/docs/classes/extensionnode.md deleted file mode 100644 index fc568d7..0000000 --- a/docs/classes/extensionnode.md +++ /dev/null @@ -1,181 +0,0 @@ -[merkle-patricia-tree](../README.md) › [ExtensionNode](extensionnode.md) - -# Class: ExtensionNode - -## Hierarchy - -* **ExtensionNode** - -## Index - -### Constructors - -* [constructor](extensionnode.md#constructor) - -### Properties - -* [_nibbles](extensionnode.md#_nibbles) -* [_value](extensionnode.md#_value) - -### Accessors - -* [key](extensionnode.md#key) -* [value](extensionnode.md#value) - -### Methods - -* [encodedKey](extensionnode.md#encodedkey) -* [hash](extensionnode.md#hash) -* [raw](extensionnode.md#raw) -* [serialize](extensionnode.md#serialize) -* [decodeKey](extensionnode.md#static-decodekey) -* [encodeKey](extensionnode.md#static-encodekey) - -## Constructors - -### constructor - -\+ **new ExtensionNode**(`nibbles`: [Nibbles](../README.md#nibbles), `value`: Buffer): *[ExtensionNode](extensionnode.md)* - -*Defined in [trieNode.ts:101](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L101)* - -**Parameters:** - -Name | Type | ------- | ------ | -`nibbles` | [Nibbles](../README.md#nibbles) | -`value` | Buffer | - -**Returns:** *[ExtensionNode](extensionnode.md)* - -## Properties - -### _nibbles - -• **_nibbles**: *[Nibbles](../README.md#nibbles)* - -*Defined in [trieNode.ts:100](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L100)* - -___ - -### _value - -• **_value**: *Buffer* - -*Defined in [trieNode.ts:101](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L101)* - -## Accessors - -### key - -• **get key**(): *[Nibbles](../README.md#nibbles)* - -*Defined in [trieNode.ts:116](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L116)* - -**Returns:** *[Nibbles](../README.md#nibbles)* - -• **set key**(`k`: [Nibbles](../README.md#nibbles)): *void* - -*Defined in [trieNode.ts:120](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L120)* - -**Parameters:** - -Name | Type | ------- | ------ | -`k` | [Nibbles](../README.md#nibbles) | - -**Returns:** *void* - -___ - -### value - -• **get value**(): *Buffer* - -*Defined in [trieNode.ts:124](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L124)* - -**Returns:** *Buffer* - -• **set value**(`v`: Buffer): *void* - -*Defined in [trieNode.ts:128](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L128)* - -**Parameters:** - -Name | Type | ------- | ------ | -`v` | Buffer | - -**Returns:** *void* - -## Methods - -### encodedKey - -▸ **encodedKey**(): *[Nibbles](../README.md#nibbles)* - -*Defined in [trieNode.ts:132](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L132)* - -**Returns:** *[Nibbles](../README.md#nibbles)* - -___ - -### hash - -▸ **hash**(): *Buffer* - -*Defined in [trieNode.ts:144](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L144)* - -**Returns:** *Buffer* - -___ - -### raw - -▸ **raw**(): *[Buffer, Buffer]* - -*Defined in [trieNode.ts:136](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L136)* - -**Returns:** *[Buffer, Buffer]* - -___ - -### serialize - -▸ **serialize**(): *Buffer* - -*Defined in [trieNode.ts:140](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L140)* - -**Returns:** *Buffer* - -___ - -### `Static` decodeKey - -▸ **decodeKey**(`key`: [Nibbles](../README.md#nibbles)): *[Nibbles](../README.md#nibbles)* - -*Defined in [trieNode.ts:112](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L112)* - -**Parameters:** - -Name | Type | ------- | ------ | -`key` | [Nibbles](../README.md#nibbles) | - -**Returns:** *[Nibbles](../README.md#nibbles)* - -___ - -### `Static` encodeKey - -▸ **encodeKey**(`key`: [Nibbles](../README.md#nibbles)): *[Nibbles](../README.md#nibbles)* - -*Defined in [trieNode.ts:108](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L108)* - -**Parameters:** - -Name | Type | ------- | ------ | -`key` | [Nibbles](../README.md#nibbles) | - -**Returns:** *[Nibbles](../README.md#nibbles)* diff --git a/docs/classes/leafnode.md b/docs/classes/leafnode.md deleted file mode 100644 index 021fab9..0000000 --- a/docs/classes/leafnode.md +++ /dev/null @@ -1,181 +0,0 @@ -[merkle-patricia-tree](../README.md) › [LeafNode](leafnode.md) - -# Class: LeafNode - -## Hierarchy - -* **LeafNode** - -## Index - -### Constructors - -* [constructor](leafnode.md#constructor) - -### Properties - -* [_nibbles](leafnode.md#_nibbles) -* [_value](leafnode.md#_value) - -### Accessors - -* [key](leafnode.md#key) -* [value](leafnode.md#value) - -### Methods - -* [encodedKey](leafnode.md#encodedkey) -* [hash](leafnode.md#hash) -* [raw](leafnode.md#raw) -* [serialize](leafnode.md#serialize) -* [decodeKey](leafnode.md#static-decodekey) -* [encodeKey](leafnode.md#static-encodekey) - -## Constructors - -### constructor - -\+ **new LeafNode**(`nibbles`: [Nibbles](../README.md#nibbles), `value`: Buffer): *[LeafNode](leafnode.md)* - -*Defined in [trieNode.ts:151](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L151)* - -**Parameters:** - -Name | Type | ------- | ------ | -`nibbles` | [Nibbles](../README.md#nibbles) | -`value` | Buffer | - -**Returns:** *[LeafNode](leafnode.md)* - -## Properties - -### _nibbles - -• **_nibbles**: *[Nibbles](../README.md#nibbles)* - -*Defined in [trieNode.ts:150](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L150)* - -___ - -### _value - -• **_value**: *Buffer* - -*Defined in [trieNode.ts:151](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L151)* - -## Accessors - -### key - -• **get key**(): *[Nibbles](../README.md#nibbles)* - -*Defined in [trieNode.ts:166](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L166)* - -**Returns:** *[Nibbles](../README.md#nibbles)* - -• **set key**(`k`: [Nibbles](../README.md#nibbles)): *void* - -*Defined in [trieNode.ts:170](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L170)* - -**Parameters:** - -Name | Type | ------- | ------ | -`k` | [Nibbles](../README.md#nibbles) | - -**Returns:** *void* - -___ - -### value - -• **get value**(): *Buffer* - -*Defined in [trieNode.ts:174](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L174)* - -**Returns:** *Buffer* - -• **set value**(`v`: Buffer): *void* - -*Defined in [trieNode.ts:178](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L178)* - -**Parameters:** - -Name | Type | ------- | ------ | -`v` | Buffer | - -**Returns:** *void* - -## Methods - -### encodedKey - -▸ **encodedKey**(): *[Nibbles](../README.md#nibbles)* - -*Defined in [trieNode.ts:182](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L182)* - -**Returns:** *[Nibbles](../README.md#nibbles)* - -___ - -### hash - -▸ **hash**(): *Buffer* - -*Defined in [trieNode.ts:194](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L194)* - -**Returns:** *Buffer* - -___ - -### raw - -▸ **raw**(): *[Buffer, Buffer]* - -*Defined in [trieNode.ts:186](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L186)* - -**Returns:** *[Buffer, Buffer]* - -___ - -### serialize - -▸ **serialize**(): *Buffer* - -*Defined in [trieNode.ts:190](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L190)* - -**Returns:** *Buffer* - -___ - -### `Static` decodeKey - -▸ **decodeKey**(`encodedKey`: [Nibbles](../README.md#nibbles)): *[Nibbles](../README.md#nibbles)* - -*Defined in [trieNode.ts:162](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L162)* - -**Parameters:** - -Name | Type | ------- | ------ | -`encodedKey` | [Nibbles](../README.md#nibbles) | - -**Returns:** *[Nibbles](../README.md#nibbles)* - -___ - -### `Static` encodeKey - -▸ **encodeKey**(`key`: [Nibbles](../README.md#nibbles)): *[Nibbles](../README.md#nibbles)* - -*Defined in [trieNode.ts:158](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/trieNode.ts#L158)* - -**Parameters:** - -Name | Type | ------- | ------ | -`key` | [Nibbles](../README.md#nibbles) | - -**Returns:** *[Nibbles](../README.md#nibbles)* diff --git a/docs/classes/prioritizedtaskexecutor.md b/docs/classes/prioritizedtaskexecutor.md deleted file mode 100644 index c271c0b..0000000 --- a/docs/classes/prioritizedtaskexecutor.md +++ /dev/null @@ -1,92 +0,0 @@ -[merkle-patricia-tree](../README.md) › [PrioritizedTaskExecutor](prioritizedtaskexecutor.md) - -# Class: PrioritizedTaskExecutor - -## Hierarchy - -* **PrioritizedTaskExecutor** - -## Index - -### Constructors - -* [constructor](prioritizedtaskexecutor.md#private-constructor) - -### Properties - -* [currentPoolSize](prioritizedtaskexecutor.md#private-currentpoolsize) -* [maxPoolSize](prioritizedtaskexecutor.md#private-maxpoolsize) -* [queue](prioritizedtaskexecutor.md#private-queue) - -### Methods - -* [execute](prioritizedtaskexecutor.md#private-execute) - -## Constructors - -### `Private` constructor - -\+ **new PrioritizedTaskExecutor**(`maxPoolSize`: number): *[PrioritizedTaskExecutor](prioritizedtaskexecutor.md)* - -*Defined in [prioritizedTaskExecutor.ts:9](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L9)* - -Executes tasks up to maxPoolSize at a time, other items are put in a priority queue. - -**`class`** PrioritizedTaskExecutor - -**`prop`** {Number} maxPoolSize The maximum size of the pool - -**`prop`** {Number} currentPoolSize The current size of the pool - -**`prop`** {Array} queue The task queue - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`maxPoolSize` | number | The maximum size of the pool | - -**Returns:** *[PrioritizedTaskExecutor](prioritizedtaskexecutor.md)* - -## Properties - -### `Private` currentPoolSize - -• **currentPoolSize**: *number* - -*Defined in [prioritizedTaskExecutor.ts:8](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L8)* - -___ - -### `Private` maxPoolSize - -• **maxPoolSize**: *number* - -*Defined in [prioritizedTaskExecutor.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L7)* - -___ - -### `Private` queue - -• **queue**: *[Task](../interfaces/task.md)[]* - -*Defined in [prioritizedTaskExecutor.ts:9](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L9)* - -## Methods - -### `Private` execute - -▸ **execute**(`priority`: number, `fn`: Function): *void* - -*Defined in [prioritizedTaskExecutor.ts:32](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L32)* - -Executes the task. - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`priority` | number | The priority of the task | -`fn` | Function | The function that accepts the callback, which must be called upon the task completion. | - -**Returns:** *void* diff --git a/docs/classes/scratchdb.md b/docs/classes/scratchdb.md deleted file mode 100644 index 4e2174b..0000000 --- a/docs/classes/scratchdb.md +++ /dev/null @@ -1,167 +0,0 @@ -[merkle-patricia-tree](../README.md) › [ScratchDB](scratchdb.md) - -# Class: ScratchDB - -An in-memory wrap over `DB` with an upstream DB -which will be queried when a key is not found -in the in-memory scratch. This class is used to implement -checkpointing functionality in CheckpointTrie. - -## Hierarchy - -* [DB](db.md) - - ↳ **ScratchDB** - -## Index - -### Constructors - -* [constructor](scratchdb.md#constructor) - -### Properties - -* [_leveldb](scratchdb.md#_leveldb) -* [_upstream](scratchdb.md#private-_upstream) - -### Methods - -* [batch](scratchdb.md#batch) -* [copy](scratchdb.md#copy) -* [del](scratchdb.md#del) -* [get](scratchdb.md#get) -* [put](scratchdb.md#put) - -## Constructors - -### constructor - -\+ **new ScratchDB**(`upstreamDB`: [DB](db.md)): *[ScratchDB](scratchdb.md)* - -*Overrides [DB](db.md).[constructor](db.md#constructor)* - -*Defined in [scratch.ts:11](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratch.ts#L11)* - -**Parameters:** - -Name | Type | ------- | ------ | -`upstreamDB` | [DB](db.md) | - -**Returns:** *[ScratchDB](scratchdb.md)* - -## Properties - -### _leveldb - -• **_leveldb**: *LevelUp* - -*Inherited from [DB](db.md).[_leveldb](db.md#_leveldb)* - -*Defined in [db.ts:23](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L23)* - -___ - -### `Private` _upstream - -• **_upstream**: *[DB](db.md)* - -*Defined in [scratch.ts:11](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratch.ts#L11)* - -## Methods - -### batch - -▸ **batch**(`opStack`: [BatchDBOp](../README.md#batchdbop)[], `cb`: [ErrorCallback](../README.md#errorcallback)): *void* - -*Inherited from [DB](db.md).[batch](db.md#batch)* - -*Defined in [db.ts:85](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L85)* - -Performs a batch operation on db. - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`opStack` | [BatchDBOp](../README.md#batchdbop)[] | A stack of levelup operations | -`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | - -**Returns:** *void* - -___ - -### copy - -▸ **copy**(): *[ScratchDB](scratchdb.md)* - -*Overrides [DB](db.md).[copy](db.md#copy)* - -*Defined in [scratch.ts:39](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratch.ts#L39)* - -**Returns:** *[ScratchDB](scratchdb.md)* - -___ - -### del - -▸ **del**(`key`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* - -*Inherited from [DB](db.md).[del](db.md#del)* - -*Defined in [db.ts:73](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L73)* - -Removes a raw value in the underlying leveldb. - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`key` | Buffer | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | - -**Returns:** *void* - -___ - -### get - -▸ **get**(`key`: Buffer, `cb`: Function): *void* - -*Overrides [DB](db.md).[get](db.md#get)* - -*Defined in [scratch.ts:22](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratch.ts#L22)* - -Similar to `DB.get`, but first searches in-memory -scratch DB, if key not found, searches upstream DB. - -**Parameters:** - -Name | Type | ------- | ------ | -`key` | Buffer | -`cb` | Function | - -**Returns:** *void* - -___ - -### put - -▸ **put**(`key`: Buffer, `val`: Buffer, `cb`: [ErrorCallback](../README.md#errorcallback)): *void* - -*Inherited from [DB](db.md).[put](db.md#put)* - -*Defined in [db.ts:60](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L60)* - -Writes a value directly to leveldb. - -**Parameters:** - -Name | Type | Description | ------- | ------ | ------ | -`key` | Buffer | The key as a `Buffer` or `String` | -`val` | Buffer | - | -`cb` | [ErrorCallback](../README.md#errorcallback) | A callback `Function`, which is given the argument `err` - for errors that may have occured | - -**Returns:** *void* diff --git a/docs/classes/scratchreadstream.md b/docs/classes/scratchreadstream.md deleted file mode 100644 index c6562fb..0000000 --- a/docs/classes/scratchreadstream.md +++ /dev/null @@ -1,66 +0,0 @@ -[merkle-patricia-tree](../README.md) › [ScratchReadStream](scratchreadstream.md) - -# Class: ScratchReadStream - -## Hierarchy - -* any - - ↳ **ScratchReadStream** - -## Index - -### Constructors - -* [constructor](scratchreadstream.md#constructor) - -### Properties - -* [_started](scratchreadstream.md#private-_started) -* [trie](scratchreadstream.md#private-trie) - -### Methods - -* [_read](scratchreadstream.md#_read) - -## Constructors - -### constructor - -\+ **new ScratchReadStream**(`trie`: BaseTrie): *[ScratchReadStream](scratchreadstream.md)* - -*Defined in [scratchReadStream.ts:10](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratchReadStream.ts#L10)* - -**Parameters:** - -Name | Type | ------- | ------ | -`trie` | BaseTrie | - -**Returns:** *[ScratchReadStream](scratchreadstream.md)* - -## Properties - -### `Private` _started - -• **_started**: *boolean* - -*Defined in [scratchReadStream.ts:10](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratchReadStream.ts#L10)* - -___ - -### `Private` trie - -• **trie**: *BaseTrie* - -*Defined in [scratchReadStream.ts:9](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratchReadStream.ts#L9)* - -## Methods - -### _read - -▸ **_read**(): *void* - -*Defined in [scratchReadStream.ts:19](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/scratchReadStream.ts#L19)* - -**Returns:** *void* diff --git a/docs/classes/triereadstream.md b/docs/classes/triereadstream.md deleted file mode 100644 index df2946d..0000000 --- a/docs/classes/triereadstream.md +++ /dev/null @@ -1,66 +0,0 @@ -[merkle-patricia-tree](../README.md) › [TrieReadStream](triereadstream.md) - -# Class: TrieReadStream - -## Hierarchy - -* any - - ↳ **TrieReadStream** - -## Index - -### Constructors - -* [constructor](triereadstream.md#constructor) - -### Properties - -* [_started](triereadstream.md#private-_started) -* [trie](triereadstream.md#private-trie) - -### Methods - -* [_read](triereadstream.md#_read) - -## Constructors - -### constructor - -\+ **new TrieReadStream**(`trie`: BaseTrie): *[TrieReadStream](triereadstream.md)* - -*Defined in [readStream.ts:8](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/readStream.ts#L8)* - -**Parameters:** - -Name | Type | ------- | ------ | -`trie` | BaseTrie | - -**Returns:** *[TrieReadStream](triereadstream.md)* - -## Properties - -### `Private` _started - -• **_started**: *boolean* - -*Defined in [readStream.ts:8](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/readStream.ts#L8)* - -___ - -### `Private` trie - -• **trie**: *BaseTrie* - -*Defined in [readStream.ts:7](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/readStream.ts#L7)* - -## Methods - -### _read - -▸ **_read**(): *void* - -*Defined in [readStream.ts:17](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/readStream.ts#L17)* - -**Returns:** *void* diff --git a/docs/interfaces/delbatch.md b/docs/interfaces/delbatch.md deleted file mode 100644 index b45922a..0000000 --- a/docs/interfaces/delbatch.md +++ /dev/null @@ -1,30 +0,0 @@ -[merkle-patricia-tree](../README.md) › [DelBatch](delbatch.md) - -# Interface: DelBatch - -## Hierarchy - -* **DelBatch** - -## Index - -### Properties - -* [key](delbatch.md#key) -* [type](delbatch.md#type) - -## Properties - -### key - -• **key**: *Buffer* - -*Defined in [db.ts:15](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L15)* - -___ - -### type - -• **type**: *"del"* - -*Defined in [db.ts:14](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L14)* diff --git a/docs/interfaces/putbatch.md b/docs/interfaces/putbatch.md deleted file mode 100644 index 9d22c24..0000000 --- a/docs/interfaces/putbatch.md +++ /dev/null @@ -1,39 +0,0 @@ -[merkle-patricia-tree](../README.md) › [PutBatch](putbatch.md) - -# Interface: PutBatch - -## Hierarchy - -* **PutBatch** - -## Index - -### Properties - -* [key](putbatch.md#key) -* [type](putbatch.md#type) -* [value](putbatch.md#value) - -## Properties - -### key - -• **key**: *Buffer* - -*Defined in [db.ts:10](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L10)* - -___ - -### type - -• **type**: *"put"* - -*Defined in [db.ts:9](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L9)* - -___ - -### value - -• **value**: *Buffer* - -*Defined in [db.ts:11](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/db.ts#L11)* diff --git a/docs/interfaces/task.md b/docs/interfaces/task.md deleted file mode 100644 index a86fea9..0000000 --- a/docs/interfaces/task.md +++ /dev/null @@ -1,30 +0,0 @@ -[merkle-patricia-tree](../README.md) › [Task](task.md) - -# Interface: Task - -## Hierarchy - -* **Task** - -## Index - -### Properties - -* [fn](task.md#fn) -* [priority](task.md#priority) - -## Properties - -### fn - -• **fn**: *Function* - -*Defined in [prioritizedTaskExecutor.ts:3](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L3)* - -___ - -### priority - -• **priority**: *number* - -*Defined in [prioritizedTaskExecutor.ts:2](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/prioritizedTaskExecutor.ts#L2)* diff --git a/docs/modules/_basetrie_.md b/docs/modules/_basetrie_.md new file mode 100644 index 0000000..dcd7e84 --- /dev/null +++ b/docs/modules/_basetrie_.md @@ -0,0 +1,9 @@ +[merkle-patricia-tree](../README.md) › ["baseTrie"](_basetrie_.md) + +# Module: "baseTrie" + +## Index + +### Classes + +* [Trie](../classes/_basetrie_.trie.md) diff --git a/docs/modules/_checkpointtrie_.md b/docs/modules/_checkpointtrie_.md new file mode 100644 index 0000000..0982f98 --- /dev/null +++ b/docs/modules/_checkpointtrie_.md @@ -0,0 +1,9 @@ +[merkle-patricia-tree](../README.md) › ["checkpointTrie"](_checkpointtrie_.md) + +# Module: "checkpointTrie" + +## Index + +### Classes + +* [CheckpointTrie](../classes/_checkpointtrie_.checkpointtrie.md) diff --git a/docs/modules/_secure_.md b/docs/modules/_secure_.md new file mode 100644 index 0000000..b12ae9d --- /dev/null +++ b/docs/modules/_secure_.md @@ -0,0 +1,9 @@ +[merkle-patricia-tree](../README.md) › ["secure"](_secure_.md) + +# Module: "secure" + +## Index + +### Classes + +* [SecureTrie](../classes/_secure_.securetrie.md) diff --git a/package.json b/package.json index 1b504fc..f537b2c 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "prettier": "^1.18.2", "tape": "^4.10.1", "tslint": "^5.18.0", - "typedoc": "^0.16.9", + "typedoc": "next", "typedoc-plugin-markdown": "^2.2.16", "typescript": "^3.5.3", "typestrict": "^1.0.2" diff --git a/typedoc.json b/typedoc.json index f955bae..09d7f85 100644 --- a/typedoc.json +++ b/typedoc.json @@ -1,9 +1,13 @@ { - "inputFiles": ["src/*.ts"], + "inputFiles": ["src/index.ts"], "out": "docs", - "mode": "file", + "mode": "library", "plugin": "typedoc-plugin-markdown", "readme": "none", "gitRevision": "master", - "excludeNotExported": true + "exclude": "src/**/!(secure|checkpointTrie|baseTrie).ts", + "excludeNotExported": true, + "excludeExternals": true, + "excludePrivate": true, + "excludeProtected": true } From 0c915c1234bc0c63a4e34b4548ba7b78de8010fc Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Tue, 24 Mar 2020 15:58:02 -0700 Subject: [PATCH 3/8] Upgrade from Travis to GH Actions Upgrade karma test runner and devDeps --- .github/workflows/build.yml | 32 ++++++++++++++++++++++++++++++++ .nycrc | 10 ---------- .travis.yml | 34 ---------------------------------- README.md | 25 ++++++++++++------------- karma.conf.js | 17 +++++++---------- package.json | 29 ++++++++++++++--------------- src/baseTrie.ts | 18 +++++++++--------- src/checkpointTrie.ts | 4 +--- src/util/async.ts | 10 +++++----- 9 files changed, 80 insertions(+), 99 deletions(-) create mode 100644 .github/workflows/build.yml delete mode 100644 .nycrc delete mode 100644 .travis.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..d2bd7a6 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,32 @@ +name: Build +on: + push: + branches: + - master + tags: + - '*' + pull_request: + types: [opened, reopened, synchronize] +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [10.x, 12.x, 13.x] + + steps: + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - uses: actions/checkout@v1 + - run: npm install + - run: npm run lint + - run: npm run coverage + - run: npm run test:browser + + - name: Upload coverage to Coveralls + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.nycrc b/.nycrc deleted file mode 100644 index af39578..0000000 --- a/.nycrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "@ethereumjs/config-nyc", - "include": [ - "dist/**/*.js" - ], - "extension": [ - ".js" - ], - "source-map": false -} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index f637413..0000000 --- a/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -language: node_js -node_js: - - "8" - - "9" - - "10" - - "12" -env: - - CXX=g++-4.8 -services: - - xvfb -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 -env: - global: - - DISPLAY=:99.0 - matrix: - - CXX=g++-4.8 TEST_SUITE=test:node -matrix: - fast_finish: true - include: - - os: linux - node_js: "8" - env: CXX=g++-4.8 TEST_SUITE=coveralls - - os: linux - node_js: "8" - env: CXX=g++-4.8 TEST_SUITE=lint - - os: linux - node_js: "8" - env: CXX=g++-4.8 TEST_SUITE=test:browser -script: npm run build && npm run $TEST_SUITE diff --git a/README.md b/README.md index ac6e0f3..f4b8a51 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,15 @@ # SYNOPSIS [![NPM Package](https://img.shields.io/npm/v/merkle-patricia-tree)](https://www.npmjs.org/package/merkle-patricia-tree) -[![Build Status](https://img.shields.io/travis/ethereumjs/merkle-patricia-tree/master)](https://travis-ci.org/ethereumjs/merkle-patricia-tree) +[![Actions Status](https://github.com/ethereumjs/ethereumjs-util/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-lib.svg)](https://gitter.im/ethereum/ethereumjs-lib) [![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) -This is an implementation of the modified merkle patricia tree as specified in the [Ethereum's yellow paper](http://gavwood.com/Paper.pdf). +This is an implementation of the modified merkle patricia tree as specified in the [Ethereum's Yellow Paper](http://gavwood.com/Paper.pdf): -> 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 +> 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. @@ -30,8 +29,8 @@ const Trie = require('merkle-patricia-tree').BaseTrie, db = level('./testdb'), trie = new Trie(db) -trie.put(Buffer.from('test'), Buffer.from('one'), function() { - trie.get(Buffer.from('test'), function(err, value) { +trie.put(Buffer.from('test'), Buffer.from('one'), function () { + trie.get(Buffer.from('test'), function (err, value) { if (value) console.log(value.toString()) }) }) @@ -40,9 +39,9 @@ trie.put(Buffer.from('test'), Buffer.from('one'), function() { ## Merkle Proofs ```javascript -Trie.prove(trie, Buffer.from('test'), function(err, prove) { +Trie.prove(trie, Buffer.from('test'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('test'), prove, function(err, value) { + Trie.verifyProof(trie.root, Buffer.from('test'), prove, function (err, value) { if (err) return cb(err) console.log(value.toString()) cb() @@ -63,10 +62,10 @@ var trie = new Trie(db, stateRoot) trie .createReadStream() - .on('data', function(data) { + .on('data', function (data) { console.log(data) }) - .on('end', function() { + .on('end', function () { console.log('End.') }) ``` @@ -89,7 +88,7 @@ var trie = new Trie(db, stateRoot) var address = 'AN_ETHEREUM_ACCOUNT_ADDRESS' -trie.get(address, function(err, data) { +trie.get(address, function (err, data) { if (err) return cb(err) var acc = new Account(data) @@ -105,11 +104,11 @@ trie.get(address, function(err, data) { console.log('------Storage------') var stream = storageTrie.createReadStream() stream - .on('data', function(data) { + .on('data', function (data) { console.log(`key: ${ethutil.bufferToHex(data.key)}`) console.log(`Value: ${ethutil.bufferToHex(rlp.decode(data.value))}`) }) - .on('end', function() { + .on('end', function () { console.log('Finished reading storage.') }) }) diff --git a/karma.conf.js b/karma.conf.js index 0490154..a46e6cb 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,19 +1,16 @@ module.exports = function(config) { config.set({ - browserNoActivityTimeout: 60000, - frameworks: ['browserify', 'detectBrowsers', 'tap'], + browserDisconnectTimeout: 100000, + browserNoActivityTimeout: 100000, + frameworks: ['browserify', 'tap'], + plugins: ['karma-browserify', 'karma-tap', 'karma-chrome-launcher', 'karma-firefox-launcher'], files: ['./test/*.js'], preprocessors: { './dist/**/*.js': ['browserify'], - './test/**/*.js': ['browserify'] + './test/**/*.js': ['browserify'], }, + colors: true, + browsers: ['FirefoxHeadless', 'ChromeHeadless'], singleRun: true, - detectBrowsers: { - enabled: true, - usePhantomJS: false, - postDetection: function(availableBrowsers) { - return ['Firefox'] - }, - } }) } diff --git a/package.json b/package.json index f537b2c..89f4a42 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,7 @@ "scripts": { "build": "ethereumjs-config-build", "prepublishOnly": "npm run test && npm run build", - "coverage": "nyc npm run test:node && nyc report --reporter=text-lcov > .nyc_output/lcov.info", - "coveralls": "npm run coverage && coveralls < .nyc_output/lcov.info", + "coverage": "nyc --reporter=lcov npm run test:node", "docs:build": "npx typedoc", "tslint": "ethereumjs-config-tslint", "tslint:fix": "ethereumjs-config-tslint-fix", @@ -21,9 +20,9 @@ "format:fix": "ethereumjs-config-format-fix", "formatTest": "node ./scripts/formatTest", "tsc": "ethereumjs-config-tsc", - "test": "npm run build && npm run test:node && npm run test:browser", + "test": "npm run test:node && npm run test:browser", "test:browser": "npm run build && karma start karma.conf.js", - "test:node": "npm run build && tape ./test/*.js" + "test:node": "npm run build && tape test/*.js | tap-prettify -" }, "husky": { "hooks": { @@ -64,17 +63,17 @@ "@ethereumjs/config-tslint": "^1.1.1", "@types/bn.js": "^4.11.5", "@types/levelup": "^3.1.1", - "browserify": "^13.0.0", - "coveralls": "^3.0.5", - "husky": "^2.1.0", - "karma": "^1.7.1", - "karma-browserify": "^5.0.0", - "karma-detect-browsers": "^2.0.2", - "karma-firefox-launcher": "^1.0.1", - "karma-tap": "^1.0.3", - "nyc": "^14.1.1", - "prettier": "^1.18.2", - "tape": "^4.10.1", + "browserify": "^16.5.0", + "husky": "^4.2.3", + "karma": "^4.4.1", + "karma-browserify": "^7.0.0", + "karma-chrome-launcher": "^3.1.0", + "karma-firefox-launcher": "^1.3.0", + "karma-tap": "^4.2.0", + "nyc": "^15.0.0", + "prettier": "^2.0.2", + "tap-prettify": "^0.0.2", + "tape": "^4.13.0", "tslint": "^5.18.0", "typedoc": "next", "typedoc-plugin-markdown": "^2.2.16", diff --git a/src/baseTrie.ts b/src/baseTrie.ts index 4661fe9..abaab5e 100644 --- a/src/baseTrie.ts +++ b/src/baseTrie.ts @@ -47,7 +47,7 @@ export class Trie { } static fromProof(proofNodes: Buffer[], cb: Function, proofTrie?: Trie) { - let opStack = proofNodes.map(nodeValue => { + let opStack = proofNodes.map((nodeValue) => { return { type: 'put', key: ethUtil.keccak(nodeValue), @@ -68,14 +68,14 @@ export class Trie { } static prove(trie: Trie, key: Buffer, cb: Function) { - trie.findPath(key, function( + trie.findPath(key, function ( err: Error, node: TrieNode, remaining: number[], stack: TrieNode[], ) { if (err) return cb(err) - let p = stack.map(stackElem => { + let p = stack.map((stackElem) => { return stackElem.serialize() }) cb(null, p) @@ -473,7 +473,7 @@ export class Trie { _walkTrie(root: Buffer, onNode: Function, onDone: Function) { const self = this root = root || this.root - onDone = onDone || function() {} + onDone = onDone || function () {} let aborted = false let returnValues: any = [] @@ -507,17 +507,17 @@ export class Trie { let stopped = false const walkController = { - stop: function() { + stop: function () { stopped = true cb() }, // end all traversal and return values to the onDone cb - return: function(...args: any) { + return: function (...args: any) { aborted = true returnValues = args cb() }, - next: function() { + next: function () { if (aborted || stopped) { return cb() } @@ -530,7 +530,7 @@ export class Trie { if (node instanceof ExtensionNode) { children = [[node.key, node.value]] } else if (node instanceof BranchNode) { - children = node.getChildren().map(b => [[b[0]], b[1]]) + children = node.getChildren().map((b) => [[b[0]], b[1]]) } async.forEachOf( children, @@ -552,7 +552,7 @@ export class Trie { cb, ) }, - only: function(childIndex: number) { + only: function (childIndex: number) { if (!(node instanceof BranchNode)) { return cb(new Error('Expected branch node')) } diff --git a/src/checkpointTrie.ts b/src/checkpointTrie.ts index 4a5b71f..c4a3f67 100644 --- a/src/checkpointTrie.ts +++ b/src/checkpointTrie.ts @@ -137,9 +137,7 @@ export class CheckpointTrie extends BaseTrie { this.db = this._mainDB if (commitState) { - this._createScratchReadStream(scratch) - .pipe(WriteStream(this.db._leveldb)) - .on('close', cb) + this._createScratchReadStream(scratch).pipe(WriteStream(this.db._leveldb)).on('close', cb) } else { async.nextTick(cb) } diff --git a/src/util/async.ts b/src/util/async.ts index 2a4cc58..3a7ddc4 100644 --- a/src/util/async.ts +++ b/src/util/async.ts @@ -9,10 +9,10 @@ export function callTogether(...funcs: Function[]) { const index = length if (!length) { - return function() {} + return function () {} } - return function(this: any, ...args: any) { + return function (this: any, ...args: any) { length = index while (length--) { @@ -33,9 +33,9 @@ export function asyncFirstSeries(array: any[], iterator: Function, cb: Function) var didComplete = false async.eachSeries( array, - function(item: any, next: Function) { + function (item: any, next: Function) { if (didComplete) return next - iterator(item, function(err: Error, result: any) { + iterator(item, function (err: Error, result: any) { if (result) { didComplete = true process.nextTick(cb.bind(null, null, result)) @@ -43,7 +43,7 @@ export function asyncFirstSeries(array: any[], iterator: Function, cb: Function) next(err) }) }, - function() { + function () { if (!didComplete) { cb() } From a956fd31ea819a5a1a434621ddfc100df28f808c Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Wed, 25 Mar 2020 12:53:07 -0700 Subject: [PATCH 4/8] Separate ci jobs into lint, coverage, test --- .github/workflows/build.yml | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d2bd7a6..4633006 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,25 +8,36 @@ on: pull_request: types: [opened, reopened, synchronize] jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/setup-node@v1 + - uses: actions/checkout@v1 + - run: npm install + - run: npm run lint + + coverage: + runs-on: ubuntu-latest + steps: + - uses: actions/setup-node@v1 + - uses: actions/checkout@v1 + - run: npm install + - run: npm run coverage + - name: Upload coverage to Coveralls + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + test: runs-on: ubuntu-latest strategy: matrix: node-version: [10.x, 12.x, 13.x] - steps: - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - uses: actions/checkout@v1 - run: npm install - - run: npm run lint - - run: npm run coverage - - run: npm run test:browser - - - name: Upload coverage to Coveralls - uses: coverallsapp/github-action@master - with: - github-token: ${{ secrets.GITHUB_TOKEN }} + - run: npm run test From 4f3db5274b1e1e71917cf4cfd0622785d38e8f7f Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Wed, 25 Mar 2020 12:55:33 -0700 Subject: [PATCH 5/8] Update gitter link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4b8a51..c4b9a52 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![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/ethereumjs-util/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-lib.svg)](https://gitter.im/ethereum/ethereumjs-lib) +[![Gitter](https://img.shields.io/gitter/room/ethereum/ethereumjs.svg)](https://gitter.im/ethereum/ethereumjs) [![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) From 469e88e8ad34aeb1e2512c7289db86f0f906ce8d Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Thu, 26 Mar 2020 13:33:29 -0700 Subject: [PATCH 6/8] Upgrade tests to TS --- benchmarks/checkpointing.js | 52 +++-- benchmarks/index.ts | 2 + benchmarks/random.js | 15 +- docs/classes/_basetrie_.trie.md | 20 +- .../_checkpointtrie_.checkpointtrie.md | 24 +- docs/classes/_secure_.securetrie.md | 20 +- karma.conf.js | 22 +- package.json | 12 +- src/baseTrie.ts | 22 +- src/db.ts | 4 +- src/scratch.ts | 3 +- src/secure.ts | 8 +- src/types.ts | 4 +- src/util/nibbles.ts | 6 +- test/checkpoint.js | 87 +++---- test/db.js | 14 +- test/{encodeing.js => encoding.js} | 8 +- test/failingRefactorTests.js | 137 ++++++----- .../hex_encoded_securetrie_test.json | 0 test/{fixture => fixtures}/trieanyorder.json | 0 .../trieanyorder_secureTrie.json | 0 test/{fixture => fixtures}/trietest.json | 0 .../trietest_secureTrie.json | 0 .../trietestnextprev.json | 0 test/index.js | 217 +++++++++--------- test/offical.js | 36 +-- test/prioritizedTaskExecutor.js | 10 +- test/proof.js | 184 ++++++++------- test/scratch.js | 14 +- test/secure.js | 79 ++++--- test/streams.js | 40 ++-- tsconfig.json | 2 +- 32 files changed, 567 insertions(+), 475 deletions(-) create mode 100644 benchmarks/index.ts rename test/{encodeing.js => encoding.js} (52%) rename test/{fixture => fixtures}/hex_encoded_securetrie_test.json (100%) rename test/{fixture => fixtures}/trieanyorder.json (100%) rename test/{fixture => fixtures}/trieanyorder_secureTrie.json (100%) rename test/{fixture => fixtures}/trietest.json (100%) rename test/{fixture => fixtures}/trietest_secureTrie.json (100%) rename test/{fixture => fixtures}/trietestnextprev.json (100%) diff --git a/benchmarks/checkpointing.js b/benchmarks/checkpointing.js index 644fb82..0aad208 100644 --- a/benchmarks/checkpointing.js +++ b/benchmarks/checkpointing.js @@ -1,14 +1,14 @@ +import * as async from 'async' +import * as crypto from 'crypto' +var Trie = require('../dist/index.js').CheckpointTrie + var iterations = 500 var samples = 20 - -var async = require('async') -var crypto = require('crypto') -var Trie = require('../index.js') var i -function iterTest (numOfIter, cb) { - var vals = [] - var keys = [] +function iterTest(numOfIter, cb) { + var vals = [] as any + var keys = [] as any for (i = 0; i <= numOfIter; i++) { vals.push(crypto.pseudoRandomBytes(32)) @@ -22,7 +22,7 @@ function iterTest (numOfIter, cb) { for (i = 0; i < numOfIter; i++) { trie.put(vals[i], keys[i], function () { trie.checkpoint() - trie.get('test', function () { + trie.get(Buffer.from('test'), function () { numOfOps++ if (numOfOps === numOfIter) { var hrend = process.hrtime(hrstart) @@ -36,17 +36,25 @@ function iterTest (numOfIter, cb) { i = 0 var avg = [0, 0] -async.whilst(function () { - i++ - return i <= samples -}, function (done) { - iterTest(iterations, function (hrend) { - avg[0] += hrend[0] - avg[1] += hrend[1] - - console.info('Execution time (hr): %ds %dms', hrend[0], hrend[1] / 1000000) - done() - }) -}, function () { - console.info('Average Execution time (hr): %ds %dms', avg[0] / samples, avg[1] / 1000000 / samples) -}) +async.whilst( + function () { + i++ + return i <= samples + }, + function (done) { + iterTest(iterations, function (hrend) { + avg[0] += hrend[0] + avg[1] += hrend[1] + + console.info('Execution time (hr): %ds %dms', hrend[0], hrend[1] / 1000000) + done() + }) + }, + function () { + console.info( + 'Average Execution time (hr): %ds %dms', + avg[0] / samples, + avg[1] / 1000000 / samples, + ) + }, +) diff --git a/benchmarks/index.ts b/benchmarks/index.ts new file mode 100644 index 0000000..e9424c7 --- /dev/null +++ b/benchmarks/index.ts @@ -0,0 +1,2 @@ +require('./checkpointing') +require('./random') diff --git a/benchmarks/random.js b/benchmarks/random.js index 071a994..12214c2 100644 --- a/benchmarks/random.js +++ b/benchmarks/random.js @@ -1,15 +1,15 @@ // https://github.com/ethereum/wiki/wiki/Benchmarks 'use strict' -const Trie = require('../') -const ethUtil = require('ethereumjs-util') -const async = require('async') +import * as async from 'async' +import * as ethUtil from 'ethereumjs-util' +const Trie = require('../dist/index.js').BaseTrie const ROUNDS = 1000 const SYMMETRIC = true const ERA_SIZE = 1000 let trie = new Trie() -let seed = new Buffer(32).fill(0) +let seed = Buffer.alloc(32).fill(0) let testName = 'rounds ' + ROUNDS + ' ' + ERA_SIZE + ' ' + SYMMETRIC ? 'sys' : 'rand' console.time(testName) @@ -17,7 +17,7 @@ run(() => { console.timeEnd(testName) }) -function run (cb) { +function run(cb) { let i = 0 async.whilst( () => { @@ -33,12 +33,13 @@ function run (cb) { trie.put(seed, val, genRoot) } - function genRoot () { + function genRoot() { if (i % ERA_SIZE === 0) { seed = trie.root } done() } - }, cb + }, + cb, ) } diff --git a/docs/classes/_basetrie_.trie.md b/docs/classes/_basetrie_.trie.md index 78cddf7..997ac8a 100644 --- a/docs/classes/_basetrie_.trie.md +++ b/docs/classes/_basetrie_.trie.md @@ -391,7 +391,7 @@ ___ ### del -▸ **del**(`key`: Buffer, `cb`: Function): *void* +▸ **del**(`key`: Buffer, `cb`: ErrorCallback): *void* *Defined in [baseTrie.ts:183](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L183)* @@ -406,7 +406,7 @@ deletes a value given a `key` Name | Type | ------ | ------ | `key` | Buffer | -`cb` | Function | +`cb` | ErrorCallback | **Returns:** *void* @@ -459,7 +459,7 @@ ___ ### get -▸ **get**(`key`: Buffer, `cb`: Function): *void* +▸ **get**(`key`: Buffer, `cb`: BufferCallback): *void* *Defined in [baseTrie.ts:125](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L125)* @@ -474,7 +474,7 @@ Gets a value given a `key` Name | Type | Description | ------ | ------ | ------ | `key` | Buffer | the key to search for | -`cb` | Function | A callback `Function` which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null` | +`cb` | BufferCallback | A callback `Function` which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null` | **Returns:** *void* @@ -482,7 +482,7 @@ ___ ### getRaw -▸ **getRaw**(`key`: Buffer, `cb`: Function): *void* +▸ **getRaw**(`key`: Buffer, `cb`: BufferCallback): *void* *Defined in [baseTrie.ts:208](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L208)* @@ -495,7 +495,7 @@ Retrieves a value directly from key/value db. Name | Type | ------ | ------ | `key` | Buffer | -`cb` | Function | +`cb` | BufferCallback | **Returns:** *void* @@ -584,7 +584,7 @@ ___ ### `Static` prove -▸ **prove**(`trie`: [Trie](_basetrie_.trie.md), `key`: Buffer, `cb`: Function): *void* +▸ **prove**(`trie`: [Trie](_basetrie_.trie.md), `key`: Buffer, `cb`: ProveCallback): *void* *Defined in [baseTrie.ts:70](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L70)* @@ -594,7 +594,7 @@ Name | Type | ------ | ------ | `trie` | [Trie](_basetrie_.trie.md) | `key` | Buffer | -`cb` | Function | +`cb` | ProveCallback | **Returns:** *void* @@ -602,7 +602,7 @@ ___ ### `Static` verifyProof -▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proofNodes`: Buffer[], `cb`: Function): *void* +▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proofNodes`: Buffer[], `cb`: BufferCallback): *void* *Defined in [baseTrie.ts:85](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/baseTrie.ts#L85)* @@ -613,6 +613,6 @@ Name | Type | `rootHash` | Buffer | `key` | Buffer | `proofNodes` | Buffer[] | -`cb` | Function | +`cb` | BufferCallback | **Returns:** *void* diff --git a/docs/classes/_checkpointtrie_.checkpointtrie.md b/docs/classes/_checkpointtrie_.checkpointtrie.md index 93bb5aa..8aa1c02 100644 --- a/docs/classes/_checkpointtrie_.checkpointtrie.md +++ b/docs/classes/_checkpointtrie_.checkpointtrie.md @@ -189,7 +189,7 @@ ___ ▸ **_createScratchReadStream**(`scratch`: ScratchDB): *ScratchReadStream‹›* -*Defined in [checkpointTrie.ts:154](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L154)* +*Defined in [checkpointTrie.ts:152](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L152)* Returns a `ScratchReadStream` based on the state updates since checkpoint. @@ -301,7 +301,7 @@ ___ *Overrides [Trie](_basetrie_.trie.md).[_formatNode](_basetrie_.trie.md#_formatnode)* -*Defined in [checkpointTrie.ts:163](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L163)* +*Defined in [checkpointTrie.ts:161](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L161)* **Parameters:** @@ -563,7 +563,7 @@ ___ ### del -▸ **del**(`key`: Buffer, `cb`: Function): *void* +▸ **del**(`key`: Buffer, `cb`: ErrorCallback): *void* *Inherited from [Trie](_basetrie_.trie.md).[del](_basetrie_.trie.md#del)* @@ -580,7 +580,7 @@ deletes a value given a `key` Name | Type | ------ | ------ | `key` | Buffer | -`cb` | Function | +`cb` | ErrorCallback | **Returns:** *void* @@ -637,7 +637,7 @@ ___ ### get -▸ **get**(`key`: Buffer, `cb`: Function): *void* +▸ **get**(`key`: Buffer, `cb`: BufferCallback): *void* *Inherited from [Trie](_basetrie_.trie.md).[get](_basetrie_.trie.md#get)* @@ -654,7 +654,7 @@ Gets a value given a `key` Name | Type | Description | ------ | ------ | ------ | `key` | Buffer | the key to search for | -`cb` | Function | A callback `Function` which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null` | +`cb` | BufferCallback | A callback `Function` which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null` | **Returns:** *void* @@ -662,7 +662,7 @@ ___ ### getRaw -▸ **getRaw**(`key`: Buffer, `cb`: Function): *void* +▸ **getRaw**(`key`: Buffer, `cb`: BufferCallback): *void* *Inherited from [Trie](_basetrie_.trie.md).[getRaw](_basetrie_.trie.md#getraw)* @@ -677,7 +677,7 @@ Retrieves a value directly from key/value db. Name | Type | ------ | ------ | `key` | Buffer | -`cb` | Function | +`cb` | BufferCallback | **Returns:** *void* @@ -794,7 +794,7 @@ ___ ### `Static` prove -▸ **prove**(`trie`: [Trie](_basetrie_.trie.md), `key`: Buffer, `cb`: Function): *void* +▸ **prove**(`trie`: [Trie](_basetrie_.trie.md), `key`: Buffer, `cb`: ProveCallback): *void* *Inherited from [Trie](_basetrie_.trie.md).[prove](_basetrie_.trie.md#static-prove)* @@ -806,7 +806,7 @@ Name | Type | ------ | ------ | `trie` | [Trie](_basetrie_.trie.md) | `key` | Buffer | -`cb` | Function | +`cb` | ProveCallback | **Returns:** *void* @@ -814,7 +814,7 @@ ___ ### `Static` verifyProof -▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proofNodes`: Buffer[], `cb`: Function): *void* +▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proofNodes`: Buffer[], `cb`: BufferCallback): *void* *Inherited from [Trie](_basetrie_.trie.md).[verifyProof](_basetrie_.trie.md#static-verifyproof)* @@ -827,6 +827,6 @@ Name | Type | `rootHash` | Buffer | `key` | Buffer | `proofNodes` | Buffer[] | -`cb` | Function | +`cb` | BufferCallback | **Returns:** *void* diff --git a/docs/classes/_secure_.securetrie.md b/docs/classes/_secure_.securetrie.md index 6e48425..680f127 100644 --- a/docs/classes/_secure_.securetrie.md +++ b/docs/classes/_secure_.securetrie.md @@ -205,7 +205,7 @@ ___ *Inherited from [CheckpointTrie](_checkpointtrie_.checkpointtrie.md).[_createScratchReadStream](_checkpointtrie_.checkpointtrie.md#private-_createscratchreadstream)* -*Defined in [checkpointTrie.ts:154](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L154)* +*Defined in [checkpointTrie.ts:152](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L152)* Returns a `ScratchReadStream` based on the state updates since checkpoint. @@ -323,7 +323,7 @@ ___ *Overrides [Trie](_basetrie_.trie.md).[_formatNode](_basetrie_.trie.md#_formatnode)* -*Defined in [checkpointTrie.ts:163](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L163)* +*Defined in [checkpointTrie.ts:161](https://github.com/ethereumjs/merkle-patricia-tree/blob/master/src/checkpointTrie.ts#L161)* **Parameters:** @@ -647,7 +647,7 @@ ___ ### get -▸ **get**(`key`: Buffer, `cb`: Function): *void* +▸ **get**(`key`: Buffer, `cb`: BufferCallback): *void* *Overrides [Trie](_basetrie_.trie.md).[get](_basetrie_.trie.md#get)* @@ -658,7 +658,7 @@ ___ Name | Type | ------ | ------ | `key` | Buffer | -`cb` | Function | +`cb` | BufferCallback | **Returns:** *void* @@ -666,7 +666,7 @@ ___ ### getRaw -▸ **getRaw**(`key`: Buffer, `cb`: Function): *void* +▸ **getRaw**(`key`: Buffer, `cb`: BufferCallback): *void* *Inherited from [Trie](_basetrie_.trie.md).[getRaw](_basetrie_.trie.md#getraw)* @@ -681,7 +681,7 @@ Retrieves a value directly from key/value db. Name | Type | ------ | ------ | `key` | Buffer | -`cb` | Function | +`cb` | BufferCallback | **Returns:** *void* @@ -799,7 +799,7 @@ ___ ### `Static` prove -▸ **prove**(`trie`: [SecureTrie](_secure_.securetrie.md), `key`: Buffer, `cb`: Function): *void* +▸ **prove**(`trie`: [SecureTrie](_secure_.securetrie.md), `key`: Buffer, `cb`: ProveCallback): *void* *Overrides [Trie](_basetrie_.trie.md).[prove](_basetrie_.trie.md#static-prove)* @@ -811,7 +811,7 @@ Name | Type | ------ | ------ | `trie` | [SecureTrie](_secure_.securetrie.md) | `key` | Buffer | -`cb` | Function | +`cb` | ProveCallback | **Returns:** *void* @@ -819,7 +819,7 @@ ___ ### `Static` verifyProof -▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proof`: Buffer[], `cb`: Function): *void* +▸ **verifyProof**(`rootHash`: Buffer, `key`: Buffer, `proof`: Buffer[], `cb`: BufferCallback): *void* *Overrides [Trie](_basetrie_.trie.md).[verifyProof](_basetrie_.trie.md#static-verifyproof)* @@ -832,6 +832,6 @@ Name | Type | `rootHash` | Buffer | `key` | Buffer | `proof` | Buffer[] | -`cb` | Function | +`cb` | BufferCallback | **Returns:** *void* diff --git a/karma.conf.js b/karma.conf.js index a46e6cb..d872533 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,16 +1,22 @@ -module.exports = function(config) { +module.exports = function (config) { config.set({ - browserDisconnectTimeout: 100000, - browserNoActivityTimeout: 100000, - frameworks: ['browserify', 'tap'], - plugins: ['karma-browserify', 'karma-tap', 'karma-chrome-launcher', 'karma-firefox-launcher'], - files: ['./test/*.js'], + frameworks: ['karma-typescript', 'tap'], + files: ['src/**/*.ts', 'test/**/*.ts'], preprocessors: { - './dist/**/*.js': ['browserify'], - './test/**/*.js': ['browserify'], + '**/*.ts': ['karma-typescript'], + }, + plugins: ['karma-typescript', 'karma-tap', 'karma-chrome-launcher', 'karma-firefox-launcher'], + karmaTypescriptConfig: { + bundlerOptions: { + entrypoints: /\.spec\.ts$/, + }, }, colors: true, browsers: ['FirefoxHeadless', 'ChromeHeadless'], singleRun: true, + concurrency: Infinity, + // Fail after timeout + browserDisconnectTimeout: 100000, + browserNoActivityTimeout: 100000, }) } diff --git a/package.json b/package.json index 89f4a42..42d18c7 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "dist/**/*" ], "scripts": { + "benchmarks": "npm run build && ts-node benchmarks/index.ts", "build": "ethereumjs-config-build", "prepublishOnly": "npm run test && npm run build", "coverage": "nyc --reporter=lcov npm run test:node", @@ -22,7 +23,7 @@ "tsc": "ethereumjs-config-tsc", "test": "npm run test:node && npm run test:browser", "test:browser": "npm run build && karma start karma.conf.js", - "test:node": "npm run build && tape test/*.js | tap-prettify -" + "test:node": "npm run build && tape -r ts-node/register test/*.ts | tap-prettify -" }, "husky": { "hooks": { @@ -48,6 +49,7 @@ ], "license": "MPL-2.0", "dependencies": { + "@types/async": "^3.0.8", "async": "^2.6.1", "ethereumjs-util": "^6.1.0", "level-mem": "^3.0.1", @@ -63,21 +65,23 @@ "@ethereumjs/config-tslint": "^1.1.1", "@types/bn.js": "^4.11.5", "@types/levelup": "^3.1.1", + "@types/tape": "^4.2.34", "browserify": "^16.5.0", "husky": "^4.2.3", "karma": "^4.4.1", - "karma-browserify": "^7.0.0", "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", "tap-prettify": "^0.0.2", - "tape": "^4.13.0", + "tape": "^4.13.2", + "ts-node": "^8.8.1", "tslint": "^5.18.0", "typedoc": "next", "typedoc-plugin-markdown": "^2.2.16", - "typescript": "^3.5.3", + "typescript": "^3.7.5", "typestrict": "^1.0.2" }, "contributors": [ diff --git a/src/baseTrie.ts b/src/baseTrie.ts index abaab5e..1937afd 100644 --- a/src/baseTrie.ts +++ b/src/baseTrie.ts @@ -5,7 +5,7 @@ import { TrieReadStream as ReadStream } from './readStream' import { PrioritizedTaskExecutor } from './prioritizedTaskExecutor' import { callTogether } from './util/async' import { stringToNibbles, matchingNibbleLength, doKeysMatch } from './util/nibbles' -import { ErrorCallback } from './types' +import { BufferCallback, ProveCallback, ErrorCallback } from './types' import { TrieNode, decodeNode, @@ -62,12 +62,12 @@ export class Trie { } } - proofTrie.db.batch(opStack, (e?: Error) => { - cb(e, proofTrie) + proofTrie.db.batch(opStack, (err) => { + cb(err, proofTrie) }) } - static prove(trie: Trie, key: Buffer, cb: Function) { + static prove(trie: Trie, key: Buffer, cb: ProveCallback) { trie.findPath(key, function ( err: Error, node: TrieNode, @@ -82,13 +82,13 @@ export class Trie { }) } - static verifyProof(rootHash: Buffer, key: Buffer, proofNodes: Buffer[], cb: Function) { + static verifyProof(rootHash: Buffer, key: Buffer, proofNodes: Buffer[], cb: BufferCallback) { let proofTrie = new Trie(null, rootHash) Trie.fromProof( proofNodes, (error: Error, proofTrie: Trie) => { if (error) cb(new Error('Invalid proof nodes given'), null) - proofTrie.get(key, (e: Error, r: Buffer | null) => { + proofTrie.get(key, (e, r) => { return cb(e, r) }) }, @@ -122,7 +122,7 @@ export class Trie { * @param {Buffer} key - the key to search for * @param {Function} cb A callback `Function` which is given the arguments `err` - for errors that may have occured and `value` - the found value in a `Buffer` or if no value was found `null` */ - get(key: Buffer, cb: Function) { + get(key: Buffer, cb: BufferCallback) { key = ethUtil.toBuffer(key) this.findPath(key, (err: Error, node: TrieNode, remainder: number[], stack: TrieNode[]) => { @@ -180,7 +180,7 @@ export class Trie { * @param {Buffer} key * @param {Function} callback the callback `Function` */ - del(key: Buffer, cb: Function) { + del(key: Buffer, cb: ErrorCallback) { key = ethUtil.toBuffer(key) cb = callTogether(cb, this.sem.leave) @@ -205,7 +205,7 @@ export class Trie { * Retrieves a value directly from key/value db. * @deprecated */ - getRaw(key: Buffer, cb: Function) { + getRaw(key: Buffer, cb: BufferCallback) { this.db.get(key, cb) } @@ -231,8 +231,8 @@ export class Trie { if (isRawNode(node)) { cb(null, decodeRawNode(node as Buffer[])) } else { - this.db.get(node as Buffer, (err: Error, value: Buffer | null) => { - let node = null + this.db.get(node as Buffer, (err, value) => { + let node = null as any if (value) { node = decodeNode(value) } else { diff --git a/src/db.ts b/src/db.ts index a5db3ab..52c55cd 100644 --- a/src/db.ts +++ b/src/db.ts @@ -1,5 +1,5 @@ import { LevelUp } from 'levelup' -import { ErrorCallback } from './types' +import { ErrorCallback, BufferCallback } from './types' const level = require('level-mem') export const ENCODING_OPTS = { keyEncoding: 'binary', valueEncoding: 'binary' } @@ -38,7 +38,7 @@ export class DB { * `err` - for errors that may have occured * and `value` - the found value in a `Buffer` or if no value was found `null`. */ - get(key: Buffer, cb: Function) { + get(key: Buffer, cb: BufferCallback) { if (!Buffer.isBuffer(key)) throw new Error('Invalid input: expected buffer') this._leveldb.get(key, ENCODING_OPTS, (err?: Error, v?: Buffer) => { diff --git a/src/scratch.ts b/src/scratch.ts index 15efee4..3ba4697 100644 --- a/src/scratch.ts +++ b/src/scratch.ts @@ -1,5 +1,6 @@ import { DB, ENCODING_OPTS } from './db' import { asyncFirstSeries } from './util/async' +import { BufferCallback } from './types' /** * An in-memory wrap over `DB` with an upstream DB @@ -19,7 +20,7 @@ export class ScratchDB extends DB { * Similar to `DB.get`, but first searches in-memory * scratch DB, if key not found, searches upstream DB. */ - get(key: Buffer, cb: Function) { + get(key: Buffer, cb: BufferCallback) { const getDBs = this._upstream._leveldb ? [this._leveldb, this._upstream._leveldb] : [this._leveldb] diff --git a/src/secure.ts b/src/secure.ts index bda35a8..1eff0c2 100644 --- a/src/secure.ts +++ b/src/secure.ts @@ -1,6 +1,6 @@ import { keccak256 } from 'ethereumjs-util' import { CheckpointTrie } from './checkpointTrie' -import { ErrorCallback } from './types' +import { BufferCallback, ProveCallback, ErrorCallback } from './types' /** * You can create a secure Trie where the keys are automatically hashed @@ -15,12 +15,12 @@ export class SecureTrie extends CheckpointTrie { super(...args) } - static prove(trie: SecureTrie, key: Buffer, cb: Function) { + static prove(trie: SecureTrie, key: Buffer, cb: ProveCallback) { const hash = keccak256(key) super.prove(trie, hash, cb) } - static verifyProof(rootHash: Buffer, key: Buffer, proof: Buffer[], cb: Function) { + static verifyProof(rootHash: Buffer, key: Buffer, proof: Buffer[], cb: BufferCallback) { const hash = keccak256(key) super.verifyProof(rootHash, hash, proof, cb) } @@ -31,7 +31,7 @@ export class SecureTrie extends CheckpointTrie { return new SecureTrie(db._leveldb, this.root) } - get(key: Buffer, cb: Function) { + get(key: Buffer, cb: BufferCallback) { const hash = keccak256(key) super.get(hash, cb) } diff --git a/src/types.ts b/src/types.ts index 9a0dd91..354c379 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1 +1,3 @@ -export type ErrorCallback = (err?: Error) => void +export type BufferCallback = (err?: Error | null, value?: Buffer | null) => void +export type ProveCallback = (err?: Error | null, proof?: Buffer[] | null) => void +export type ErrorCallback = (err?: Error | null) => void diff --git a/src/util/nibbles.ts b/src/util/nibbles.ts index 33c20d3..3f1778d 100644 --- a/src/util/nibbles.ts +++ b/src/util/nibbles.ts @@ -5,8 +5,8 @@ * @private */ export function stringToNibbles(key: Buffer): number[] { - const bkey = new Buffer(key) - let nibbles = [] + const bkey = Buffer.from(key) + let nibbles = [] as any for (let i = 0; i < bkey.length; i++) { let q = i * 2 @@ -25,7 +25,7 @@ export function stringToNibbles(key: Buffer): number[] { * @private */ export function nibblesToBuffer(arr: number[]): Buffer { - let buf = new Buffer(arr.length / 2) + let buf = Buffer.alloc(arr.length / 2) for (let i = 0; i < buf.length; i++) { let q = i * 2 buf[i] = (arr[q] << 4) + arr[++q] diff --git a/test/checkpoint.js b/test/checkpoint.js index 6020f94..eb7ad6f 100644 --- a/test/checkpoint.js +++ b/test/checkpoint.js @@ -1,98 +1,103 @@ -const tape = require('tape') +import * as tape from 'tape' const Trie = require('../dist/checkpointTrie').CheckpointTrie +import { CheckpointTrie } from '../dist/checkpointTrie' -tape('testing checkpoints', function(tester) { - let trie, preRoot, postRoot, trieCopy +tape('testing checkpoints', function (tester) { const it = tester.test - it('setup', function(t) { + let trie: CheckpointTrie + let trieCopy: CheckpointTrie + let preRoot: String + let postRoot: String + + it('setup', function (t) { trie = new Trie() - trie.put(Buffer.from('do'), Buffer.from('verb'), function() { - trie.put(Buffer.from('doge'), Buffer.from('coin'), function() { + trie.put(Buffer.from('do'), Buffer.from('verb'), function () { + trie.put(Buffer.from('doge'), Buffer.from('coin'), function () { preRoot = trie.root.toString('hex') t.end() }) }) }) - it('should copy trie and get value before checkpoint', function(t) { + it('should copy trie and get value before checkpoint', function (t) { trieCopy = trie.copy() t.equal(trieCopy.root.toString('hex'), preRoot) - trieCopy.get(Buffer.from('do'), function(err, res) { + trieCopy.get(Buffer.from('do'), function (err, res) { t.error(err) - t.ok(Buffer.from('verb').equals(res)) + t.ok(Buffer.from('verb').equals(Buffer.from(res!))) t.end() }) }) - it('should create a checkpoint', function(t) { + it('should create a checkpoint', function (t) { trie.checkpoint() t.end() }) - it('should save to the cache', function(t) { - trie.put(Buffer.from('test'), Buffer.from('something'), function() { - trie.put(Buffer.from('love'), Buffer.from('emotion'), function() { + it('should save to the cache', function (t) { + trie.put(Buffer.from('test'), Buffer.from('something'), function () { + trie.put(Buffer.from('love'), Buffer.from('emotion'), function () { postRoot = trie.root.toString('hex') t.end() }) }) }) - it('should get values from before checkpoint', function(t) { - trie.get(Buffer.from('doge'), function(err, res) { + it('should get values from before checkpoint', function (t) { + trie.get(Buffer.from('doge'), function (err, res) { t.error(err) - t.ok(Buffer.from('coin').equals(res)) + t.ok(Buffer.from('coin').equals(Buffer.from(res!))) t.end() }) }) - it('should get values from cache', function(t) { - trie.get(Buffer.from('love'), function(err, res) { + it('should get values from cache', function (t) { + trie.get(Buffer.from('love'), function (err, res) { t.error(err) - t.ok(Buffer.from('emotion').equals(res)) + t.ok(Buffer.from('emotion').equals(Buffer.from(res!))) t.end() }) }) - it('should copy trie and get upstream and cache values after checkpoint', function(t) { + it('should copy trie and get upstream and cache values after checkpoint', function (t) { trieCopy = trie.copy() t.equal(trieCopy.root.toString('hex'), postRoot) t.equal(trieCopy._checkpoints.length, 1) t.ok(trieCopy.isCheckpoint) - trieCopy.get(Buffer.from('do'), function(err, res) { + trieCopy.get(Buffer.from('do'), function (err, res) { t.error(err) - t.ok(Buffer.from('verb').equals(res)) - trieCopy.get(Buffer.from('love'), function(err, res) { + t.ok(Buffer.from('verb').equals(Buffer.from(res!))) + trieCopy.get(Buffer.from('love'), function (err, res) { t.error(err) - t.ok(Buffer.from('emotion').equals(res)) + t.ok(Buffer.from('emotion').equals(Buffer.from(res!))) t.end() }) }) }) - it('should revert to the orginal root', function(t) { + it('should revert to the orginal root', function (t) { t.equal(trie.isCheckpoint, true) - trie.revert(function() { + trie.revert(function () { t.equal(trie.root.toString('hex'), preRoot) t.equal(trie.isCheckpoint, false) t.end() }) }) - it('should not get values from cache after revert', function(t) { - trie.get(Buffer.from('love'), function(err, res) { + it('should not get values from cache after revert', function (t) { + trie.get(Buffer.from('love'), function (err, res) { t.error(err) t.notOk(res) t.end() }) }) - it('should commit a checkpoint', function(t) { + it('should commit a checkpoint', function (t) { trie.checkpoint() - trie.put(Buffer.from('test'), Buffer.from('something'), function() { - trie.put(Buffer.from('love'), Buffer.from('emotion'), function() { - trie.commit(function() { + trie.put(Buffer.from('test'), Buffer.from('something'), function () { + trie.put(Buffer.from('love'), Buffer.from('emotion'), function () { + trie.commit(function () { t.equal(trie.isCheckpoint, false) t.equal(trie.root.toString('hex'), postRoot) t.end() @@ -101,23 +106,23 @@ tape('testing checkpoints', function(tester) { }) }) - it('should get new values after commit', function(t) { - trie.get(Buffer.from('love'), function(err, res) { + it('should get new values after commit', function (t) { + trie.get(Buffer.from('love'), function (err, res) { t.error(err) - t.ok(Buffer.from('emotion').equals(res)) + t.ok(Buffer.from('emotion').equals(Buffer.from(res!))) t.end() }) }) - it('should commit a nested checkpoint', function(t) { + it('should commit a nested checkpoint', function (t) { trie.checkpoint() - var root - trie.put(Buffer.from('test'), Buffer.from('something else'), function() { + let root: Buffer + trie.put(Buffer.from('test'), Buffer.from('something else'), function () { root = trie.root trie.checkpoint() - trie.put(Buffer.from('the feels'), Buffer.from('emotion'), function() { - trie.revert() - trie.commit(function() { + trie.put(Buffer.from('the feels'), Buffer.from('emotion'), function () { + trie.revert(() => {}) + trie.commit(function () { t.equal(trie.isCheckpoint, false) t.equal(trie.root.toString('hex'), root.toString('hex')) t.end() diff --git a/test/db.js b/test/db.js index b7096ff..13014d2 100644 --- a/test/db.js +++ b/test/db.js @@ -1,8 +1,9 @@ -const tape = require('tape') +import * as tape from 'tape' const DB = require('../dist/db').DB +import { DB as IDB, BatchDBOp } from '../dist/db' tape('DB basic functionality', (t) => { - const db = new DB() + const db = new DB() as IDB const k = Buffer.from('foo') const v = Buffer.from('bar') @@ -11,7 +12,7 @@ tape('DB basic functionality', (t) => { db.put(k, v, () => { db.get(k, (err, res) => { st.error(err) - st.ok(v.equals(res)) + st.ok(v.equals(res!)) st.end() }) }) @@ -30,12 +31,15 @@ tape('DB basic functionality', (t) => { t.test('batch ops', (st) => { const k2 = Buffer.from('bar') const v2 = Buffer.from('baz') - const ops = [{ type: 'put', key: k, value: v }, { type: 'put', key: k2, value: v2 }] + const ops = [ + { type: 'put', key: k, value: v }, + { type: 'put', key: k2, value: v2 }, + ] as BatchDBOp[] db.batch(ops, (err) => { st.error(err) db.get(k2, (err, res) => { st.error(err) - st.ok(v2.equals(res)) + st.ok(v2.equals(res!)) st.end() }) }) diff --git a/test/encodeing.js b/test/encoding.js similarity index 52% rename from test/encodeing.js rename to test/encoding.js index 3bcb8e9..e82923e 100644 --- a/test/encodeing.js +++ b/test/encoding.js @@ -1,12 +1,12 @@ +import * as tape from 'tape' const Trie = require('../dist/index').CheckpointTrie -const tape = require('tape') const trie = new Trie() const trie2 = new Trie() const hex = 'FF44A3B3' -tape('encoding hexprefixes ', function(t) { - trie.put(new Buffer(hex, 'hex'), Buffer.from('test'), function() { - trie2.put('0x' + hex, Buffer.from('test'), function() { +tape('encoding hexprefixes', function (t) { + trie.put(Buffer.from(hex, 'hex'), Buffer.from('test'), function () { + trie2.put('0x' + hex, Buffer.from('test'), function () { t.equal(trie.root.toString('hex'), trie2.root.toString('hex')) t.end() }) diff --git a/test/failingRefactorTests.js b/test/failingRefactorTests.js index d5c1f30..d02ecd2 100644 --- a/test/failingRefactorTests.js +++ b/test/failingRefactorTests.js @@ -1,69 +1,92 @@ -const async = require('async') -const tape = require('tape') - +import * as tape from 'tape' +import * as async from 'async' const Trie = require('../dist/secure').SecureTrie + const trie = new Trie() -const a = new Buffer('f8448080a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0a155280bc3c09fd31b0adebbdd4ef3d5128172c0d2008be964dc9e10e0f0fedf', 'hex') -const ak = new Buffer('095e7baea6a6c7c4c2dfeb977efac326af552d87', 'hex') +const a = Buffer.from( + 'f8448080a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0a155280bc3c09fd31b0adebbdd4ef3d5128172c0d2008be964dc9e10e0f0fedf', + 'hex', +) +const ak = Buffer.from('095e7baea6a6c7c4c2dfeb977efac326af552d87', 'hex') -const b = new Buffer('f844802ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0db94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab', 'hex') -const bk = new Buffer('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex') +const b = Buffer.from( + 'f844802ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0db94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab', + 'hex', +) +const bk = Buffer.from('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex') -const c = new Buffer('f84c80880de0b6b3a7640000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', 'hex') -const ck = new Buffer('a94f5374fce5edbc8e2a8697c15331677e6ebf0b', 'hex') - // checkpoint - // checkpoint - // commit -const d = new Buffer('f8488084535500b1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0a155280bc3c09fd31b0adebbdd4ef3d5128172c0d2008be964dc9e10e0f0fedf', 'hex') -const dk = new Buffer('095e7baea6a6c7c4c2dfeb977efac326af552d87', 'hex') +const c = Buffer.from( + 'f84c80880de0b6b3a7640000a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', + 'hex', +) +const ck = Buffer.from('a94f5374fce5edbc8e2a8697c15331677e6ebf0b', 'hex') +// checkpoint +// checkpoint +// commit +const d = Buffer.from( + 'f8488084535500b1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0a155280bc3c09fd31b0adebbdd4ef3d5128172c0d2008be964dc9e10e0f0fedf', + 'hex', +) +const dk = Buffer.from('095e7baea6a6c7c4c2dfeb977efac326af552d87', 'hex') -const e = new Buffer('f8478083010851a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0db94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab', 'hex') -const ek = new Buffer('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex') +const e = Buffer.from( + 'f8478083010851a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0db94dc4aab9b6a1a11956906ea34f3252f394576aece12199b23b269bb2738ab', + 'hex', +) +const ek = Buffer.from('945304eb96065b2a98b57a48a06ae28d285a71b5', 'hex') -const f = new Buffer('f84c01880de0b6b3540df72ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', 'hex') -const fk = new Buffer('a94f5374fce5edbc8e2a8697c15331677e6ebf0b', 'hex') +const f = Buffer.from( + 'f84c01880de0b6b3540df72ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470', + 'hex', +) +const fk = Buffer.from('a94f5374fce5edbc8e2a8697c15331677e6ebf0b', 'hex') // commit -const g = new Buffer('f8488084535500b1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0a155280bc3c09fd31b0adebbdd4ef3d5128172c0d2008be964dc9e10e0f0fedf', 'hex') -const gk = new Buffer('095e7baea6a6c7c4c2dfeb977efac326af552d87', 'hex') +const g = Buffer.from( + 'f8488084535500b1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0a155280bc3c09fd31b0adebbdd4ef3d5128172c0d2008be964dc9e10e0f0fedf', + 'hex', +) +const gk = Buffer.from('095e7baea6a6c7c4c2dfeb977efac326af552d87', 'hex') tape('secure tests shouldnt crash ', function (t) { - async.series([ - - function (done) { - console.log('done') - trie.put(ak, a, done) - }, - function (done) { - trie.put(bk, b, done) - }, - function (done) { - trie.put(ck, c, done) - }, - function (done) { - trie.checkpoint() - trie.checkpoint() - done() - }, - function (done) { - trie.commit(done) - }, - function (done) { - trie.put(dk, d, done) - }, - function (done) { - trie.put(ek, e, done) - }, - function (done) { - trie.put(fk, f, done) - }, - function (done) { - trie.commit(done) + async.series( + [ + function (done) { + console.log('done') + trie.put(ak, a, done) + }, + function (done) { + trie.put(bk, b, done) + }, + function (done) { + trie.put(ck, c, done) + }, + function (done) { + trie.checkpoint() + trie.checkpoint() + done() + }, + function (done) { + trie.commit(done) + }, + function (done) { + trie.put(dk, d, done) + }, + function (done) { + trie.put(ek, e, done) + }, + function (done) { + trie.put(fk, f, done) + }, + function (done) { + trie.commit(done) + }, + function (done) { + trie.put(gk, g, done) + }, + ], + function () { + t.end() }, - function (done) { - trie.put(gk, g, done) - } - ], function () { - t.end() - }) + ) }) diff --git a/test/fixture/hex_encoded_securetrie_test.json b/test/fixtures/hex_encoded_securetrie_test.json similarity index 100% rename from test/fixture/hex_encoded_securetrie_test.json rename to test/fixtures/hex_encoded_securetrie_test.json diff --git a/test/fixture/trieanyorder.json b/test/fixtures/trieanyorder.json similarity index 100% rename from test/fixture/trieanyorder.json rename to test/fixtures/trieanyorder.json diff --git a/test/fixture/trieanyorder_secureTrie.json b/test/fixtures/trieanyorder_secureTrie.json similarity index 100% rename from test/fixture/trieanyorder_secureTrie.json rename to test/fixtures/trieanyorder_secureTrie.json diff --git a/test/fixture/trietest.json b/test/fixtures/trietest.json similarity index 100% rename from test/fixture/trietest.json rename to test/fixtures/trietest.json diff --git a/test/fixture/trietest_secureTrie.json b/test/fixtures/trietest_secureTrie.json similarity index 100% rename from test/fixture/trietest_secureTrie.json rename to test/fixtures/trietest_secureTrie.json diff --git a/test/fixture/trietestnextprev.json b/test/fixtures/trietestnextprev.json similarity index 100% rename from test/fixture/trietestnextprev.json rename to test/fixtures/trietestnextprev.json diff --git a/test/index.js b/test/index.js index 37e5338..e30ed11 100644 --- a/test/index.js +++ b/test/index.js @@ -1,66 +1,71 @@ +import * as tape from 'tape' +import * as async from 'async' +import * as rlp from 'rlp' +import * as ethUtil from 'ethereumjs-util' const Trie = require('../dist/index').CheckpointTrie -const async = require('async') -const rlp = require('rlp') -const tape = require('tape') -const ethUtil = require('ethereumjs-util') +import { CheckpointTrie } from '../dist/checkpointTrie' -tape('simple save and retrive', function(tester) { +tape('simple save and retrive', function (tester) { var it = tester.test - it('should not crash if given a non-existant root', function(t) { - var root = new Buffer('3f4399b08efe68945c1cf90ffe85bbe3ce978959da753f9e649f034015b8817d', 'hex') - var trie = new Trie(null, root) + it('should not crash if given a non-existant root', function (t) { + var root = Buffer.from( + '3f4399b08efe68945c1cf90ffe85bbe3ce978959da753f9e649f034015b8817d', + 'hex', + ) + var trie = new Trie(null, root) as CheckpointTrie - trie.get(Buffer.from('test'), function(err, value) { + trie.get(Buffer.from('test'), function (err, value) { t.equal(value, null) t.notEqual(err, null) t.end() }) }) - var trie = new Trie() - it('save a value', function(t) { + var trie = new Trie() as CheckpointTrie + + it('save a value', function (t) { trie.put(Buffer.from('test'), Buffer.from('one'), t.end) }) - it('should get a value', function(t) { - trie.get(Buffer.from('test'), function(err, value) { - t.equal(value.toString(), 'one') + it('should get a value', function (t) { + trie.get(Buffer.from('test'), function (err, value) { + t.equal(value!.toString(), 'one') t.end(err) }) }) - it('should update a value', function(t) { - trie.put(Buffer.from('test'), Buffer.from('two'), function() { - trie.get(Buffer.from('test'), function(err, value) { - t.equal(value.toString(), 'two') + it('should update a value', function (t) { + trie.put(Buffer.from('test'), Buffer.from('two'), function () { + trie.get(Buffer.from('test'), function (err, value) { + t.equal(value!.toString(), 'two') t.end(err) }) }) }) - it('should delete a value', function(t) { - trie.del(Buffer.from('test'), function(stack) { - trie.get(Buffer.from('test'), function(err, value) { + it('should delete a value', function (t) { + trie.del(Buffer.from('test'), function (err) { + trie.get(Buffer.from('test'), function (err, value) { t.notok(value) t.end(err) }) }) }) - it('should recreate a value', function(t) { - trie.put(new Buffer('test'), new Buffer('one'), t.end) + it('should recreate a value', function (t) { + trie.put(Buffer.from('test'), Buffer.from('one'), t.end) }) - it('should get updated a value', function(t) { - trie.get(Buffer.from('test'), function(err, value) { - t.equal(value.toString(), 'one') + it('should get updated a value', function (t) { + trie.get(Buffer.from('test'), function (err, value) { + t.equal(value!.toString(), 'one') t.end(err) }) }) - it('should create a branch here', function(t) { - trie.put(new Buffer('doge'), new Buffer('coin'), function() { + it('should create a branch here', function (t) { + trie.put(Buffer.from('doge'), Buffer.from('coin'), function () { t.equal( 'de8a34a8c1d558682eae1528b47523a483dd8685d6db14b291451a66066bf0fc', trie.root.toString('hex'), @@ -69,16 +74,16 @@ tape('simple save and retrive', function(tester) { }) }) - it('should get a value that is in a branch', function(t) { - trie.get(new Buffer('doge'), function(err, value) { - t.equal(value.toString(), 'coin') + it('should get a value that is in a branch', function (t) { + trie.get(Buffer.from('doge'), function (err, value) { + t.equal(value!.toString(), 'coin') t.end(err) }) }) - it('should delete from a branch', function(t) { - trie.del(Buffer.from('doge'), function(err1, stack) { - trie.get(Buffer.from('doge'), function(err2, value) { + it('should delete from a branch', function (t) { + trie.del(Buffer.from('doge'), function (err1) { + trie.get(Buffer.from('doge'), function (err2, value) { t.equal(value, null) t.end(err1 || err2) }) @@ -86,43 +91,43 @@ tape('simple save and retrive', function(tester) { }) }) -tape('storing longer values', function(tester) { +tape('storing longer values', function (tester) { var it = tester.test - var trie = new Trie() + var trie = new Trie() as CheckpointTrie var longString = 'this will be a really really really long value' var longStringRoot = 'b173e2db29e79c78963cff5196f8a983fbe0171388972106b114ef7f5c24dfa3' - it('should store a longer string', function(t) { - trie.put(new Buffer('done'), new Buffer(longString), function(err1, value) { - trie.put(new Buffer('doge'), new Buffer('coin'), function(err2, value) { + it('should store a longer string', function (t) { + trie.put(Buffer.from('done'), Buffer.from(longString), function (err1) { + trie.put(Buffer.from('doge'), Buffer.from('coin'), function (err2) { t.equal(longStringRoot, trie.root.toString('hex')) t.end(err1 || err2) }) }) }) - it('should retreive a longer value', function(t) { - trie.get(new Buffer('done'), function(err, value) { - t.equal(value.toString(), longString) + it('should retreive a longer value', function (t) { + trie.get(Buffer.from('done'), function (err, value) { + t.equal(value!.toString(), longString) t.end(err) }) }) - it('should when being modiefied delete the old value', function(t) { - trie.put(new Buffer('done'), new Buffer('test'), t.end) + it('should when being modiefied delete the old value', function (t) { + trie.put(Buffer.from('done'), Buffer.from('test'), t.end) }) }) -tape('testing Extentions and branches', function(tester) { - var trie = new Trie() +tape('testing Extentions and branches', function (tester) { + var trie = new Trie() as CheckpointTrie var it = tester.test - it('should store a value', function(t) { - trie.put(new Buffer('doge'), new Buffer('coin'), t.end) + it('should store a value', function (t) { + trie.put(Buffer.from('doge'), Buffer.from('coin'), t.end) }) - it('should create extention to store this value', function(t) { - trie.put(new Buffer('do'), new Buffer('verb'), function() { + it('should create extention to store this value', function (t) { + trie.put(Buffer.from('do'), Buffer.from('verb'), function () { t.equal( 'f803dfcb7e8f1afd45e88eedb4699a7138d6c07b71243d9ae9bff720c99925f9', trie.root.toString('hex'), @@ -131,8 +136,8 @@ tape('testing Extentions and branches', function(tester) { }) }) - it('should store this value under the extention ', function(t) { - trie.put(new Buffer('done'), new Buffer('finished'), function() { + it('should store this value under the extention ', function (t) { + trie.put(Buffer.from('done'), Buffer.from('finished'), function () { t.equal( '409cff4d820b394ed3fb1cd4497bdd19ffa68d30ae34157337a7043c94a3e8cb', trie.root.toString('hex'), @@ -142,20 +147,20 @@ tape('testing Extentions and branches', function(tester) { }) }) -tape('testing Extentions and branches - reverse', function(tester) { +tape('testing Extentions and branches - reverse', function (tester) { var it = tester.test - var trie = new Trie() + var trie = new Trie() as CheckpointTrie - it('should create extention to store this value', function(t) { - trie.put(new Buffer('do'), new Buffer('verb'), t.end) + it('should create extention to store this value', function (t) { + trie.put(Buffer.from('do'), Buffer.from('verb'), t.end) }) - it('should store a value', function(t) { - trie.put(new Buffer('doge'), new Buffer('coin'), t.end) + it('should store a value', function (t) { + trie.put(Buffer.from('doge'), Buffer.from('coin'), t.end) }) - it('should store this value under the extention ', function(t) { - trie.put(new Buffer('done'), new Buffer('finished'), function() { + it('should store this value under the extention ', function (t) { + trie.put(Buffer.from('done'), Buffer.from('finished'), function () { t.equal( '409cff4d820b394ed3fb1cd4497bdd19ffa68d30ae34157337a7043c94a3e8cb', trie.root.toString('hex'), @@ -165,30 +170,30 @@ tape('testing Extentions and branches - reverse', function(tester) { }) }) -tape('testing deletions cases', function(tester) { +tape('testing deletions cases', function (tester) { var it = tester.test - var trie = new Trie() + var trie = new Trie() as CheckpointTrie - it('should delete from a branch->branch-branch', function(t) { + it('should delete from a branch->branch-branch', function (t) { async.parallel( [ - async.apply(trie.put.bind(trie), new Buffer([11, 11, 11]), Buffer.from('first')), + async.apply(trie.put.bind(trie), Buffer.from([11, 11, 11]), Buffer.from('first')), async.apply( trie.put.bind(trie), - new Buffer([12, 22, 22]), + Buffer.from([12, 22, 22]), Buffer.from('create the first branch'), ), async.apply( trie.put.bind(trie), - new Buffer([12, 34, 44]), + Buffer.from([12, 34, 44]), Buffer.from('create the last branch'), ), ], - function() { - trie.del(new Buffer([12, 22, 22]), function() { - trie.get(new Buffer([12, 22, 22]), function(err, val) { + function () { + trie.del(Buffer.from([12, 22, 22]), function () { + trie.get(Buffer.from([12, 22, 22]), function (err, val) { t.equal(null, val) - trie = new Trie() + trie = new Trie() as CheckpointTrie t.end(err) }) }) @@ -196,29 +201,29 @@ tape('testing deletions cases', function(tester) { ) }) - it('should delete from a branch->branch-extention', function(t) { + it('should delete from a branch->branch-extention', function (t) { async.parallel( [ - async.apply(trie.put.bind(trie), new Buffer([11, 11, 11]), Buffer.from('first')), + async.apply(trie.put.bind(trie), Buffer.from([11, 11, 11]), Buffer.from('first')), async.apply( trie.put.bind(trie), - new Buffer([12, 22, 22]), + Buffer.from([12, 22, 22]), Buffer.from('create the first branch'), ), async.apply( trie.put.bind(trie), - new Buffer([12, 33, 33]), + Buffer.from([12, 33, 33]), Buffer.from('create the middle branch'), ), async.apply( trie.put.bind(trie), - new Buffer([12, 33, 44]), + Buffer.from([12, 33, 44]), Buffer.from('create the last branch'), ), ], - function() { - trie.del(new Buffer([12, 22, 22]), function() { - trie.get(new Buffer([12, 22, 22]), function(err, val) { + function () { + trie.del(Buffer.from([12, 22, 22]), function () { + trie.get(Buffer.from([12, 22, 22]), function (err, val) { t.equal(null, val) t.end(err) }) @@ -227,16 +232,16 @@ tape('testing deletions cases', function(tester) { ) }) - it('should delete from a extention->branch-extention', function(t) { - trie.put(new Buffer([11, 11, 11]), Buffer.from('first'), function() { + it('should delete from a extention->branch-extention', function (t) { + trie.put(Buffer.from([11, 11, 11]), Buffer.from('first'), function () { // create the top branch - trie.put(new Buffer([12, 22, 22]), Buffer.from('create the first branch'), function() { + trie.put(Buffer.from([12, 22, 22]), Buffer.from('create the first branch'), function () { // crete the middle branch - trie.put(new Buffer([12, 33, 33]), Buffer.from('create the middle branch'), function() { - trie.put(new Buffer([12, 33, 44]), Buffer.from('create the last branch'), function() { + trie.put(Buffer.from([12, 33, 33]), Buffer.from('create the middle branch'), function () { + trie.put(Buffer.from([12, 33, 44]), Buffer.from('create the last branch'), function () { // delete the middle branch - trie.del(new Buffer([11, 11, 11]), function() { - trie.get(new Buffer([11, 11, 11]), function(err, val) { + trie.del(Buffer.from([11, 11, 11]), function () { + trie.get(Buffer.from([11, 11, 11]), function (err, val) { t.equal(null, val) t.end(err) }) @@ -247,16 +252,16 @@ tape('testing deletions cases', function(tester) { }) }) - it('should delete from a extention->branch-branch', function(t) { - trie.put(new Buffer([11, 11, 11]), Buffer.from('first'), function() { + it('should delete from a extention->branch-branch', function (t) { + trie.put(Buffer.from([11, 11, 11]), Buffer.from('first'), function () { // create the top branch - trie.put(new Buffer([12, 22, 22]), Buffer.from('create the first branch'), function() { + trie.put(Buffer.from([12, 22, 22]), Buffer.from('create the first branch'), function () { // crete the middle branch - trie.put(new Buffer([12, 33, 33]), Buffer.from('create the middle branch'), function() { - trie.put(new Buffer([12, 34, 44]), Buffer.from('create the last branch'), function() { + trie.put(Buffer.from([12, 33, 33]), Buffer.from('create the middle branch'), function () { + trie.put(Buffer.from([12, 34, 44]), Buffer.from('create the last branch'), function () { // delete the middle branch - trie.del(new Buffer([11, 11, 11]), function() { - trie.get(new Buffer([11, 11, 11]), function(err, val) { + trie.del(Buffer.from([11, 11, 11]), function () { + trie.get(Buffer.from([11, 11, 11]), function (err, val) { t.equal(null, val) t.end(err) }) @@ -268,20 +273,20 @@ tape('testing deletions cases', function(tester) { }) }) -tape('it should create the genesis state root from ethereum', function(tester) { +tape('it should create the genesis state root from ethereum', function (tester) { var it = tester.test - var trie4 = new Trie() - var g = new Buffer('8a40bfaa73256b60764c1bf40675a99083efb075', 'hex') - var j = new Buffer('e6716f9544a56c530d868e4bfbacb172315bdead', 'hex') - var v = new Buffer('1e12515ce3e0f817a4ddef9ca55788a1d66bd2df', 'hex') - var a = new Buffer('1a26338f0d905e295fccb71fa9ea849ffa12aaf4', 'hex') - var stateRoot = new Buffer(32) + var trie4 = new Trie() as CheckpointTrie + var g = Buffer.from('8a40bfaa73256b60764c1bf40675a99083efb075', 'hex') + var j = Buffer.from('e6716f9544a56c530d868e4bfbacb172315bdead', 'hex') + var v = Buffer.from('1e12515ce3e0f817a4ddef9ca55788a1d66bd2df', 'hex') + var a = Buffer.from('1a26338f0d905e295fccb71fa9ea849ffa12aaf4', 'hex') + var stateRoot = Buffer.alloc(32) stateRoot.fill(0) - var startAmount = new Buffer(26) + var startAmount = Buffer.alloc(26) startAmount.fill(0) startAmount[0] = 1 - var account = [startAmount, 0, stateRoot, ethUtil.keccak256()] + var account = [startAmount, 0, stateRoot, ethUtil.KECCAK256_NULL] var rlpAccount = rlp.encode(account) var cppRlp = 'f85e9a010000000000000000000000000000000000000000000000000080a00000000000000000000000000000000000000000000000000000000000000000a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' @@ -289,11 +294,11 @@ tape('it should create the genesis state root from ethereum', function(tester) { var genesisStateRoot = '2f4399b08efe68945c1cf90ffe85bbe3ce978959da753f9e649f034015b8817d' tester.equal(cppRlp, rlpAccount.toString('hex')) - it('shall match the root', function(t) { - trie4.put(g, rlpAccount, function() { - trie4.put(j, rlpAccount, function() { - trie4.put(v, rlpAccount, function() { - trie4.put(a, rlpAccount, function() { + it('shall match the root', function (t) { + trie4.put(g, rlpAccount, function () { + trie4.put(j, rlpAccount, function () { + trie4.put(v, rlpAccount, function () { + trie4.put(a, rlpAccount, function () { t.equal(trie4.root.toString('hex'), genesisStateRoot) t.end() }) diff --git a/test/offical.js b/test/offical.js index 2514826..67b677f 100644 --- a/test/offical.js +++ b/test/offical.js @@ -1,33 +1,33 @@ +import * as tape from 'tape' +import * as async from 'async' const Trie = require('../dist/index').CheckpointTrie -const async = require('async') -const tape = require('tape') -tape('offical tests', function(t) { - const jsonTests = require('./fixture/trietest.json').tests +tape('offical tests', function (t) { + const jsonTests = require('./fixtures/trietest.json').tests const testNames = Object.keys(jsonTests) let trie = new Trie() async.eachSeries( testNames, - function(i, done) { + function (i, done) { let inputs = jsonTests[i].in let expect = jsonTests[i].root async.eachSeries( inputs, - function(input, done) { - for (i = 0; i < 2; i++) { + function (input: any, done) { + for (let i = 0; i < 2; i++) { if (input[i] && input[i].slice(0, 2) === '0x') { - input[i] = new Buffer(input[i].slice(2), 'hex') + input[i] = Buffer.from(input[i].slice(2), 'hex') } else if (input[i] && typeof input[i] === 'string') { input[i] = Buffer.from(input[i]) } } - trie.put(new Buffer(input[0]), input[1], function() { + trie.put(Buffer.from(input[0]), input[1], function () { done() }) }, - function() { + function () { t.equal('0x' + trie.root.toString('hex'), expect) trie = new Trie() done() @@ -38,34 +38,34 @@ tape('offical tests', function(t) { ) }) -tape('offical tests any order', function(t) { - const jsonTests = require('./fixture/trieanyorder.json').tests +tape('offical tests any order', function (t) { + const jsonTests = require('./fixtures/trieanyorder.json').tests var testNames = Object.keys(jsonTests) var trie = new Trie() async.eachSeries( testNames, - function(i, done) { + function (i, done) { var test = jsonTests[i] var keys = Object.keys(test.in) async.eachSeries( keys, - function(key, done) { + function (key: any, done) { var val = test.in[key] if (key.slice(0, 2) === '0x') { - key = new Buffer(key.slice(2), 'hex') + key = Buffer.from(key.slice(2), 'hex') } if (val && val.slice(0, 2) === '0x') { - val = new Buffer(val.slice(2), 'hex') + val = Buffer.from(val.slice(2), 'hex') } - trie.put(new Buffer(key), new Buffer(val), function() { + trie.put(Buffer.from(key), Buffer.from(val), function () { done() }) }, - function() { + function () { t.equal('0x' + trie.root.toString('hex'), test.root) trie = new Trie() done() diff --git a/test/prioritizedTaskExecutor.js b/test/prioritizedTaskExecutor.js index 88b1488..99b7b03 100644 --- a/test/prioritizedTaskExecutor.js +++ b/test/prioritizedTaskExecutor.js @@ -1,19 +1,19 @@ +import * as tape from 'tape' const PrioritizedTaskExecutor = require('../dist/prioritizedTaskExecutor').PrioritizedTaskExecutor -const tape = require('tape') const taskExecutor = new PrioritizedTaskExecutor(2) tape('prioritized task executor test', function (t) { var tasks = [1, 2, 3, 4] - var callbacks = [] - var executionOrder = [] + var callbacks = [] as any + var executionOrder = [] as any tasks.forEach(function (task) { - taskExecutor.execute(task, function (cb) { + taskExecutor.execute(task, function (cb: Function) { executionOrder.push(task) callbacks.push(cb) }) }) - callbacks.forEach(function (callback) { + callbacks.forEach(function (callback: Function) { callback() }) diff --git a/test/proof.js b/test/proof.js index 7cd6a28..e19afcb 100644 --- a/test/proof.js +++ b/test/proof.js @@ -1,52 +1,59 @@ +import * as tape from 'tape' +import * as async from 'async' const Trie = require('../dist/index').CheckpointTrie -const async = require('async') -const tape = require('tape') +import { CheckpointTrie } from '../dist/checkpointTrie' -tape('simple merkle proofs generation and verification', function(tester) { +tape('simple merkle proofs generation and verification', function (tester) { var it = tester.test - it('create a merkle proof and verify it', function(t) { - var trie = new Trie() + it('create a merkle proof and verify it', function (t) { + var trie = new Trie() as CheckpointTrie async.series( [ - function(cb) { + function (cb) { trie.put( Buffer.from('key1aa'), Buffer.from('0123456789012345678901234567890123456789xx'), cb, ) }, - function(cb) { + function (cb) { trie.put(Buffer.from('key2bb'), Buffer.from('aval2'), cb) }, - function(cb) { + function (cb) { trie.put(Buffer.from('key3cc'), Buffer.from('aval3'), cb) }, - function(cb) { - Trie.prove(trie, Buffer.from('key2bb'), function(err, prove) { + function (cb) { + CheckpointTrie.prove(trie, Buffer.from('key2bb'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('key2bb'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('key2bb'), prove!, function ( + err, + val, + ) { if (err) return cb(err) - t.equal(val.toString('utf8'), 'aval2') + t.equal(val!.toString('utf8'), 'aval2') cb() }) }) }, - function(cb) { - Trie.prove(trie, Buffer.from('key1aa'), function(err, prove) { + function (cb) { + CheckpointTrie.prove(trie, Buffer.from('key1aa'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('key1aa'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('key1aa'), prove!, function ( + err, + val, + ) { if (err) return cb(err) - t.equal(val.toString('utf8'), '0123456789012345678901234567890123456789xx') + t.equal(val!.toString('utf8'), '0123456789012345678901234567890123456789xx') cb() }) }) }, - function(cb) { - Trie.prove(trie, Buffer.from('key2bb'), function(err, prove) { + function (cb) { + CheckpointTrie.prove(trie, Buffer.from('key2bb'), function (err, prove) { t.equal(err, null, 'Path to key2 should create valid proof of absence') if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('key2'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('key2'), prove!, function (err, val) { // In this case, the proof _happens_ to contain enough nodes to prove `key2` because // traversing into `key22` would touch all the same nodes as traversing into `key2` t.equal(val, null, 'Expected value at a random key to be null') @@ -55,38 +62,41 @@ tape('simple merkle proofs generation and verification', function(tester) { }) }) }, - function(cb) { + function (cb) { let myKey = Buffer.from('anyrandomkey') - Trie.prove(trie, myKey, function(err, prove) { + CheckpointTrie.prove(trie, myKey, function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, myKey, prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, myKey, prove!, function (err, val) { t.equal(val, null, 'Expected value to be null') - t.equal(err, null, err) + t.equal(err, null, err ? err.toString() : undefined) cb() }) }) }, - function(cb) { + function (cb) { let myKey = Buffer.from('anothergarbagekey') // should generate a valid proof of null - Trie.prove(trie, myKey, function(err, prove) { + CheckpointTrie.prove(trie, myKey, function (err, prove) { if (err) return cb(err) - prove.push(Buffer.from('123456')) // extra nodes are just ignored - Trie.verifyProof(trie.root, myKey, prove, function(err, val) { + prove!.push(Buffer.from('123456')) // extra nodes are just ignored + CheckpointTrie.verifyProof(trie.root, myKey, prove!, function (err, val) { t.equal(val, null, 'Expected value to be null') - t.equal(err, null, err) + t.equal(err, null, err ? err.toString() : undefined) cb() }) }) }, - function(cb) { + function (cb) { trie.put(Buffer.from('another'), Buffer.from('3498h4riuhgwe'), cb) }, - function(cb) { + function (cb) { // to throw an error we need to request proof for one key - Trie.prove(trie, Buffer.from('another'), function(err, prove) { + CheckpointTrie.prove(trie, Buffer.from('another'), function (err, prove) { if (err) return cb(err) // and try to use that proof on another key - Trie.verifyProof(trie.root, Buffer.from('key1aa'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('key1aa'), prove!, function ( + err, + val, + ) { t.equal(val, null, 'Expected value: to be null ') // this proof would be insignificant to prove `key1aa` t.notEqual(err, null, 'Expected error: Missing node in DB') @@ -96,180 +106,186 @@ tape('simple merkle proofs generation and verification', function(tester) { }) }, ], - function(err) { + function (err) { t.end(err) }, ) }) - it('create a merkle proof and verify it with a single long key', function(t) { + it('create a merkle proof and verify it with a single long key', function (t) { var trie = new Trie() async.series( [ - function(cb) { + function (cb) { trie.put( Buffer.from('key1aa'), Buffer.from('0123456789012345678901234567890123456789xx'), cb, ) }, - function(cb) { - Trie.prove(trie, Buffer.from('key1aa'), function(err, prove) { + function (cb) { + CheckpointTrie.prove(trie, Buffer.from('key1aa'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('key1aa'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('key1aa'), prove!, function ( + err, + val, + ) { if (err) return cb(err) - t.equal(val.toString('utf8'), '0123456789012345678901234567890123456789xx') + t.equal(val!.toString('utf8'), '0123456789012345678901234567890123456789xx') cb() }) }) }, ], - function(err) { + function (err) { t.end(err) }, ) }) - it('create a merkle proof and verify it with a single short key', function(t) { + it('create a merkle proof and verify it with a single short key', function (t) { var trie = new Trie() async.series( [ - function(cb) { + function (cb) { trie.put(Buffer.from('key1aa'), Buffer.from('01234'), cb) }, - function(cb) { - Trie.prove(trie, Buffer.from('key1aa'), function(err, prove) { + function (cb) { + CheckpointTrie.prove(trie, Buffer.from('key1aa'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('key1aa'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('key1aa'), prove!, function ( + err, + val, + ) { if (err) return cb(err) - t.equal(val.toString('utf8'), '01234') + t.equal(val!.toString('utf8'), '01234') cb() }) }) }, ], - function(err) { + function (err) { t.end(err) }, ) }) - it('create a merkle proof and verify it with keys in the middle', function(t) { + it('create a merkle proof and verify it with keys in the middle', function (t) { var trie = new Trie() async.series( [ - function(cb) { + function (cb) { trie.put( Buffer.from('key1aa'), Buffer.from('0123456789012345678901234567890123456789xxx'), cb, ) }, - function(cb) { + function (cb) { trie.put( Buffer.from('key1'), Buffer.from('0123456789012345678901234567890123456789Very_Long'), cb, ) }, - function(cb) { + function (cb) { trie.put(Buffer.from('key2bb'), Buffer.from('aval3'), cb) }, - function(cb) { + function (cb) { trie.put(Buffer.from('key2'), Buffer.from('short'), cb) }, - function(cb) { + function (cb) { trie.put(Buffer.from('key3cc'), Buffer.from('aval3'), cb) }, - function(cb) { + function (cb) { trie.put(Buffer.from('key3'), Buffer.from('1234567890123456789012345678901'), cb) }, - function(cb) { - Trie.prove(trie, 'key1', function(err, prove) { + function (cb) { + CheckpointTrie.prove(trie, Buffer.from('key1'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('key1'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('key1'), prove!, function (err, val) { if (err) return cb(err) - t.equal(val.toString('utf8'), '0123456789012345678901234567890123456789Very_Long') + t.equal(val!.toString('utf8'), '0123456789012345678901234567890123456789Very_Long') cb() }) }) }, - function(cb) { - Trie.prove(trie, 'key2', function(err, prove) { + function (cb) { + CheckpointTrie.prove(trie, Buffer.from('key2'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('key2'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('key2'), prove!, function (err, val) { if (err) return cb(err) - t.equal(val.toString('utf8'), 'short') + t.equal(val!.toString('utf8'), 'short') cb() }) }) }, - function(cb) { - Trie.prove(trie, 'key3', function(err, prove) { + function (cb) { + CheckpointTrie.prove(trie, Buffer.from('key3'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('key3'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('key3'), prove!, function (err, val) { if (err) return cb(err) - t.equal(val.toString('utf8'), '1234567890123456789012345678901') + t.equal(val!.toString('utf8'), '1234567890123456789012345678901') cb() }) }) }, ], - function(err) { + function (err) { t.end(err) }, ) }) - it('should succeed with a simple embedded extension-branch', function(t) { + it('should succeed with a simple embedded extension-branch', function (t) { var trie = new Trie() async.series( [ - cb => { + (cb) => { trie.put(Buffer.from('a'), Buffer.from('a'), cb) }, - cb => { + (cb) => { trie.put(Buffer.from('b'), Buffer.from('b'), cb) }, - cb => { + (cb) => { trie.put(Buffer.from('c'), Buffer.from('c'), cb) }, - cb => { - Trie.prove(trie, Buffer.from('a'), function(err, prove) { + (cb) => { + CheckpointTrie.prove(trie, Buffer.from('a'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('a'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('a'), prove!, function (err, val) { if (err) return cb(err) - t.equal(val.toString('utf8'), 'a') + t.equal(val!.toString('utf8'), 'a') cb() }) }) }, - cb => { - Trie.prove(trie, Buffer.from('b'), function(err, prove) { + (cb) => { + CheckpointTrie.prove(trie, Buffer.from('b'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('b'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('b'), prove!, function (err, val) { if (err) return cb(err) - t.equal(val.toString('utf8'), 'b') + t.equal(val!.toString('utf8'), 'b') cb() }) }) }, - cb => { - Trie.prove(trie, Buffer.from('c'), function(err, prove) { + (cb) => { + CheckpointTrie.prove(trie, Buffer.from('c'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('c'), prove, function(err, val) { + CheckpointTrie.verifyProof(trie.root, Buffer.from('c'), prove!, function (err, val) { if (err) return cb(err) - t.equal(val.toString('utf8'), 'c') + t.equal(val!.toString('utf8'), 'c') cb() }) }) }, ], - function(err) { + function (err) { t.end(err) }, ) diff --git a/test/scratch.js b/test/scratch.js index 9bd6905..4a9a3e7 100644 --- a/test/scratch.js +++ b/test/scratch.js @@ -1,10 +1,12 @@ -const tape = require('tape') +import * as tape from 'tape' const ScratchDB = require('../dist/scratch').ScratchDB const DB = require('../dist/db').DB +import { DB as IDB } from '../dist/db' +import { ScratchDB as IScratchDB } from '../dist/scratch' tape('ScratchDB', (t) => { - const upstream = new DB() - const scratch = new ScratchDB(upstream) + const upstream = new DB() as IDB + const scratch = new ScratchDB(upstream) as IScratchDB const k = Buffer.from('foo') const v = Buffer.from('bar') @@ -23,7 +25,7 @@ tape('ScratchDB', (t) => { scratch.put(k, v, () => { scratch.get(k, (err, res) => { st.error(err) - st.ok(v.equals(res)) + st.ok(v.equals(res!)) st.end() }) }) @@ -41,7 +43,7 @@ tape('ScratchDB', (t) => { upstream.put(k2, v2, () => { upstream.get(k2, (err, res) => { st.error(err) - st.ok(v2.equals(res)) + st.ok(v2.equals(res!)) st.end() }) }) @@ -50,7 +52,7 @@ tape('ScratchDB', (t) => { t.test('scratch should get value from upstream', (st) => { scratch.get(k2, (err, res) => { st.error(err) - st.ok(v2.equals(res)) + st.ok(v2.equals(res!)) st.end() }) }) diff --git a/test/secure.js b/test/secure.js index 4417008..128e870 100644 --- a/test/secure.js +++ b/test/secure.js @@ -1,102 +1,111 @@ +import * as tape from 'tape' +import * as async from 'async' const Trie = require('../dist/secure').SecureTrie -const async = require('async') -const tape = require('tape') +import { SecureTrie } from '../dist/secure' -tape('SecureTrie', function(t) { - const trie = new Trie() +tape('SecureTrie', function (t) { + const trie = new Trie() as SecureTrie const k = Buffer.from('foo') const v = Buffer.from('bar') - t.test('put and get value', function(st) { - trie.put(k, v, function() { - trie.get(k, function(err, res) { + t.test('put and get value', function (st) { + trie.put(k, v, function () { + trie.get(k, function (err, res) { st.error(err) - st.ok(v.equals(res)) + st.ok(v.equals(res!)) st.end() }) }) }) - t.test('copy trie', function(st) { + t.test('copy trie', function (st) { const t = trie.copy() - t.get(k, function(err, res) { + t.get(k, function (err, res) { st.error(err) - st.ok(v.equals(res)) + st.ok(v.equals(res!)) st.end() }) }) }) -tape('SecureTrie proof', function(t) { - t.test('create a merkle proof and verify it with a single short key', function(st) { +tape('SecureTrie proof', function (t) { + t.test('create a merkle proof and verify it with a single short key', function (st) { const trie = new Trie() async.series( [ - function(cb) { + function (cb) { trie.put(Buffer.from('key1aa'), Buffer.from('01234'), cb) }, - function(cb) { - Trie.prove(trie, Buffer.from('key1aa'), function(err, prove) { + function (cb) { + SecureTrie.prove(trie, Buffer.from('key1aa'), function (err, prove) { if (err) return cb(err) - Trie.verifyProof(trie.root, Buffer.from('key1aa'), prove, function(err, val) { + SecureTrie.verifyProof(trie.root, Buffer.from('key1aa'), prove!, function (err, val) { if (err) return cb(err) - st.equal(val.toString('utf8'), '01234') + st.equal(val!.toString('utf8'), '01234') cb() }) }) }, ], - function(err) { + function (err) { st.end(err) }, ) }) }) -tape('secure tests', function(it) { - let trie = new Trie() - const jsonTests = require('./fixture/trietest_secureTrie.json').tests +tape('secure tests', function (it) { + let trie = new Trie() as SecureTrie + const jsonTests = require('./fixtures/trietest_secureTrie.json').tests - it.test('empty values', function(t) { + it.test('empty values', function (t) { async.eachSeries( jsonTests.emptyValues.in, - function(row, cb) { - trie.put(Buffer.from(row[0]), row[1] ? Buffer.from(row[1]) : null, cb) + function (row: any, cb) { + trie.put( + Buffer.from(row[0]), + row[1] ? Buffer.from(row[1]) : ((null as unknown) as Buffer), + cb, + ) }, - function(err) { + function (err) { t.equal('0x' + trie.root.toString('hex'), jsonTests.emptyValues.root) t.end(err) }, ) }) - it.test('branchingTests', function(t) { + it.test('branchingTests', function (t) { trie = new Trie() async.eachSeries( jsonTests.branchingTests.in, - function(row, cb) { - trie.put(Buffer.from(row[0]), row[1] ? Buffer.from(row[1]) : null, cb) + function (row: any, cb) { + trie.put( + Buffer.from(row[0]), + row[1] ? Buffer.from(row[1]) : ((null as unknown) as Buffer), + cb, + ) }, - function() { + function () { t.equal('0x' + trie.root.toString('hex'), jsonTests.branchingTests.root) t.end() }, ) }) - it.test('jeff', function(t) { + it.test('jeff', function (t) { async.eachSeries( jsonTests.jeff.in, - function(row, cb) { + function (row: any, cb) { var val = row[1] if (val) { - val = new Buffer(row[1].slice(2), 'hex') + val = Buffer.from(row[1].slice(2), 'hex') } - trie.put(new Buffer(row[0].slice(2), 'hex'), val, cb) + trie.put(Buffer.from(row[0].slice(2), 'hex'), val, cb) }, - function() { + function () { t.equal('0x' + trie.root.toString('hex'), jsonTests.jeff.root.toString('hex')) t.end() }, diff --git a/test/streams.js b/test/streams.js index dfb0d5d..23aa9dc 100644 --- a/test/streams.js +++ b/test/streams.js @@ -1,9 +1,11 @@ +import * as tape from 'tape' const Trie = require('../dist/index').CheckpointTrie -const describe = require('tape') +import { CheckpointTrie } from '../dist/checkpointTrie' +import { BatchDBOp } from '../dist/db' -describe('kv stream test', function(tester) { +tape('kv stream test', function (tester) { var it = tester.test - var trie = new Trie() + var trie = new Trie() as CheckpointTrie var init = [ { type: 'del', @@ -89,26 +91,28 @@ describe('kv stream test', function(tester) { key: Buffer.from('occupssation'), value: Buffer.from('Clown'), }, - ] + ] as BatchDBOp[] - var valObj = {} - init.forEach(function(i) { - if (i.type === 'put') valObj[i.key] = i.value + var valObj = {} as any + init.forEach(function (i) { + if (i.type === 'put') { + valObj[String(i.key)] = i.value + } }) - it('should populate trie', function(t) { - trie.batch(init, function() { + it('should populate trie', function (t) { + trie.batch(init, function () { t.end() }) }) - it('should fetch all of the nodes', function(t) { + it('should fetch all of the nodes', function (t) { var stream = trie.createReadStream() - stream.on('data', function(d) { + stream.on('data', function (d: any) { t.equal(valObj[d.key.toString()].toString(), d.value.toString()) delete valObj[d.key.toString()] }) - stream.on('end', function() { + stream.on('end', function () { var keys = Object.keys(valObj) t.equal(keys.length, 0) t.end() @@ -116,7 +120,7 @@ describe('kv stream test', function(tester) { }) }) -describe('db stream test', function(tester) { +tape('db stream test', function (tester) { var it = tester.test var trie = new Trie() var init = [ @@ -158,21 +162,21 @@ describe('db stream test', function(tester) { e64329dadee2fb8a113b4c88cfe973aeaa9b523d4dc8510b84ca23f9d5bfbd90: true, c916d458bfb5f27603c5bd93b00f022266712514a59cde749f19220daffc743f: true, '2386bfb0de9cf93902a110f5ab07b917ffc0b9ea599cb7f4f8bb6fd1123c866c': true, - } + } as any - it('should populate trie', function(t) { + it('should populate trie', function (t) { trie.checkpoint() trie.batch(init, t.end) }) - it('should only fetch nodes in the current trie', function(t) { + it('should only fetch nodes in the current trie', function (t) { var stream = trie._createScratchReadStream() - stream.on('data', function(d) { + stream.on('data', function (d: any) { var key = d.key.toString('hex') t.ok(!!expectedNodes[key]) delete expectedNodes[key] }) - stream.on('end', function() { + stream.on('end', function () { t.equal(Object.keys(expectedNodes).length, 0) t.end() }) diff --git a/tsconfig.json b/tsconfig.json index 68b5c24..4782753 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "@ethereumjs/config-tsc", - "include": ["src/**/*.ts"] + "include": ["src/**/*.ts"], } From 5d7565377393940a59fd668472f2431a6959c517 Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Thu, 26 Mar 2020 16:57:58 -0700 Subject: [PATCH 7/8] Rename files --- benchmarks/{checkpointing.js => checkpointing.ts} | 0 benchmarks/{random.js => random.ts} | 0 test/{checkpoint.js => checkpoint.spec.ts} | 0 test/{db.js => db.spec.ts} | 0 test/{encoding.js => encoding.spec.ts} | 0 test/{failingRefactorTests.js => failingRefactorTests.spec.ts} | 0 test/{index.js => index.spec.ts} | 0 test/{offical.js => offical.spec.ts} | 0 ...prioritizedTaskExecutor.js => prioritizedTaskExecutor.spec.ts} | 0 test/{proof.js => proof.spec.ts} | 0 test/{scratch.js => scratch.spec.ts} | 0 test/{secure.js => secure.spec.ts} | 0 test/{streams.js => streams.spec.ts} | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename benchmarks/{checkpointing.js => checkpointing.ts} (100%) rename benchmarks/{random.js => random.ts} (100%) rename test/{checkpoint.js => checkpoint.spec.ts} (100%) rename test/{db.js => db.spec.ts} (100%) rename test/{encoding.js => encoding.spec.ts} (100%) rename test/{failingRefactorTests.js => failingRefactorTests.spec.ts} (100%) rename test/{index.js => index.spec.ts} (100%) rename test/{offical.js => offical.spec.ts} (100%) rename test/{prioritizedTaskExecutor.js => prioritizedTaskExecutor.spec.ts} (100%) rename test/{proof.js => proof.spec.ts} (100%) rename test/{scratch.js => scratch.spec.ts} (100%) rename test/{secure.js => secure.spec.ts} (100%) rename test/{streams.js => streams.spec.ts} (100%) diff --git a/benchmarks/checkpointing.js b/benchmarks/checkpointing.ts similarity index 100% rename from benchmarks/checkpointing.js rename to benchmarks/checkpointing.ts diff --git a/benchmarks/random.js b/benchmarks/random.ts similarity index 100% rename from benchmarks/random.js rename to benchmarks/random.ts diff --git a/test/checkpoint.js b/test/checkpoint.spec.ts similarity index 100% rename from test/checkpoint.js rename to test/checkpoint.spec.ts diff --git a/test/db.js b/test/db.spec.ts similarity index 100% rename from test/db.js rename to test/db.spec.ts diff --git a/test/encoding.js b/test/encoding.spec.ts similarity index 100% rename from test/encoding.js rename to test/encoding.spec.ts diff --git a/test/failingRefactorTests.js b/test/failingRefactorTests.spec.ts similarity index 100% rename from test/failingRefactorTests.js rename to test/failingRefactorTests.spec.ts diff --git a/test/index.js b/test/index.spec.ts similarity index 100% rename from test/index.js rename to test/index.spec.ts diff --git a/test/offical.js b/test/offical.spec.ts similarity index 100% rename from test/offical.js rename to test/offical.spec.ts diff --git a/test/prioritizedTaskExecutor.js b/test/prioritizedTaskExecutor.spec.ts similarity index 100% rename from test/prioritizedTaskExecutor.js rename to test/prioritizedTaskExecutor.spec.ts diff --git a/test/proof.js b/test/proof.spec.ts similarity index 100% rename from test/proof.js rename to test/proof.spec.ts diff --git a/test/scratch.js b/test/scratch.spec.ts similarity index 100% rename from test/scratch.js rename to test/scratch.spec.ts diff --git a/test/secure.js b/test/secure.spec.ts similarity index 100% rename from test/secure.js rename to test/secure.spec.ts diff --git a/test/streams.js b/test/streams.spec.ts similarity index 100% rename from test/streams.js rename to test/streams.spec.ts From 67e1b582d80cfe83b7c6970d2f0d90487724ecff Mon Sep 17 00:00:00 2001 From: Ryan Ghods Date: Mon, 30 Mar 2020 11:23:32 -0700 Subject: [PATCH 8/8] Fix benchmark implicit type errors --- benchmarks/checkpointing.ts | 26 +++++++++++++------------- benchmarks/random.ts | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/benchmarks/checkpointing.ts b/benchmarks/checkpointing.ts index 0aad208..39c8b41 100644 --- a/benchmarks/checkpointing.ts +++ b/benchmarks/checkpointing.ts @@ -1,23 +1,23 @@ import * as async from 'async' import * as crypto from 'crypto' -var Trie = require('../dist/index.js').CheckpointTrie +const Trie = require('../dist/index.js').CheckpointTrie -var iterations = 500 -var samples = 20 -var i +let iterations = 500 +let samples = 20 +let i = 0 -function iterTest(numOfIter, cb) { - var vals = [] as any - var keys = [] as any +function iterTest(numOfIter: number, cb: Function) { + let vals = [] as any + let keys = [] as any for (i = 0; i <= numOfIter; i++) { vals.push(crypto.pseudoRandomBytes(32)) keys.push(crypto.pseudoRandomBytes(32)) } - var hrstart = process.hrtime() - var numOfOps = 0 - var trie = new Trie() + let hrstart = process.hrtime() + let numOfOps = 0 + let trie = new Trie() for (i = 0; i < numOfIter; i++) { trie.put(vals[i], keys[i], function () { @@ -25,7 +25,7 @@ function iterTest(numOfIter, cb) { trie.get(Buffer.from('test'), function () { numOfOps++ if (numOfOps === numOfIter) { - var hrend = process.hrtime(hrstart) + const hrend = process.hrtime(hrstart) cb(hrend) } }) @@ -34,7 +34,7 @@ function iterTest(numOfIter, cb) { } i = 0 -var avg = [0, 0] +let avg = [0, 0] async.whilst( function () { @@ -42,7 +42,7 @@ async.whilst( return i <= samples }, function (done) { - iterTest(iterations, function (hrend) { + iterTest(iterations, function (hrend: Array) { avg[0] += hrend[0] avg[1] += hrend[1] diff --git a/benchmarks/random.ts b/benchmarks/random.ts index 12214c2..7c3f749 100644 --- a/benchmarks/random.ts +++ b/benchmarks/random.ts @@ -17,7 +17,7 @@ run(() => { console.timeEnd(testName) }) -function run(cb) { +function run(cb: any) { let i = 0 async.whilst( () => {