merkle-btree
Version:
Content-addressed b-tree
99 lines (59 loc) • 3.47 kB
Markdown
# merkle-btree
> Content-addressed b-tree
[](https://www.npmjs.com/package/merkle-btree)
[](https://david-dm.org/mmalmi/merkle-btree)
[](https://travis-ci.org/mmalmi/merkle-btree)
### Description
Generic javascript library for writing and reading B-trees on content hash addressed storages. Includes storage adapters for [IPFS](https://ipfs.io/) nodes (read & write) and gateways (read only).
Based on https://github.com/ianopolous/merkle-btree.
### Installation
Install via [yarn](https://github.com/yarnpkg/yarn)
yarn add merkle-btree (--dev)
or npm
npm install merkle-btree (--save-dev)
If you don't use a package manager, you can [access `merkle-btree` via unpkg (CDN)](https://unpkg.com/merkle-btree/), download the source, or point your package manager to the url.
`merkle-btree` is compiled as a collection of [CommonJS](http://webpack.github.io/docs/commonjs.html) modules & [ES2015 modules](http://www.2ality.com/2014/09/es6-modules-final.html) for bundlers that support the `jsnext:main` or `module` field in package.json (Rollup, Webpack 2)
The `merkle-btree` package includes precompiled production and development [UMD](https://github.com/umdjs/umd) builds in the [`dist` folder](https://unpkg.com/merkle-btree/dist/). They can be used directly without a bundler and are thus compatible with many popular JavaScript module loaders and environments. You can drop a UMD build as a [`<script>` tag](https://unpkg.com/merkle-btree) on your page. The UMD builds make `merkle-btree` available as a `window.merkleBtree` global variable.
### Usage
```js
var ipfsAPI = require('ipfs-api');
var ipfs = ipfsAPI('localhost', '5001', {protocol: 'http'});
var lib = require('merkle-btree');
// Store entries into a merkle tree on IPFS
var storage = new lib.IPFSStorage(ipfs);
var tree = new lib.MerkleBTree(storage);
tree.put('key', 'value').then(console.log); // outputs tree IPFS file hash after inserting key
tree.get('key').then(console.log); // 'value'
tree.searchText('k').then(console.log); // [ { key: 'key', value: 'value' } ]
// Read-only storage using an IPFS gateway - good for serverless browser apps
var storage2 = new lib.IPFSGatewayStorage('https://identi.fi');
lib.MerkleBTree.getByHash('QmWXBTuicL68jxutngJhFjAW7obuS38Yi8H3bNNHUnrB1V/identities')
.then(function(tree2) {
return tree2.get('sirius@iki.fi');
})
.then(console.log);
```
### configuration
You can pass in extra options as a configuration object (➕ required, ➖ optional, ✏️ default).
```js
import merkleBtree from 'merkle-btree';
```
➖ **property** ( type ) ` ✏️ default `
<br/> 📝 description
<br/> ❗️ warning
<br/> ℹ️ info
<br/> 💡 example
### methods
#### #name
```js
merkleBtree
```
### Examples
See [`example`](example) folder or the [runkit](https://runkit.com/mmalmi/merkle-btree) example.
[Identi.fi](https://identi.fi) identity and message indexes are built on the library.
### License
The code is available under the [MIT](LICENSE) license.
### Contributing
We are open to contributions, see [CONTRIBUTING.md](CONTRIBUTING.md) for more info.
### Misc
This module was created using [generator-module-boilerplate](https://github.com/duivvv/generator-module-boilerplate).