Wallet store

A flexible and extensible library for wallet data storage, supporting multiple storage engine implementations.

๐Ÿ“š Table of Contents

๐Ÿ” Overview

lib-wallet-store provides a consistent interface for wallet data storage, allowing developers to choose or implement the storage engine that best fits their needs. Whether you need in-memory storage, file-based persistence, or distributed data structures, lib-wallet-store offers a unified API to work with various backend technologies.

โœจ Features

  • ๐Ÿ”ข Consistent key-value storage API

  • ๐Ÿ”Œ Pluggable storage engine architecture

  • ๐Ÿ”„ Asynchronous operations

  • ๐Ÿงฉ Support for multiple instances

  • ๐Ÿ” Designed for wallet data management

๐Ÿ”ง Usage

Here's a quick example of how to use lib-wallet-store with the Hyperbee engine:

const { WalletStoreHyperbee } = require('lib-wallet-store');

async function example() {
  const store = new WalletStoreHyperbee({});
  await store.init();

  await store.put('key1', 'value1');
  const value = await store.get('key1');
  console.log(value); // Outputs: value1

  await store.close();
}

example();

๐Ÿ“˜ API

WalletStoreHyperbee

Hyperbee implementation of WalletStore.

Constructor

  • new WalletStoreHyperbee(config)

    • config.store_path: (optional) Storage path for Hypercore

    • config.hyperbee: (optional) Existing Hyperbee instance

    • config._cache: (optional) Custom cache Map instance

    • config.name: (optional) Store name, defaults to 'default'

Instance Methods

  • init()

    • Initializes the Hyperbee database

  • close()

    • Closes the database and cleans up cache

  • newInstance(opts)

    • Creates a new instance with shared cache

    • opts.name: (required) Name for the new instance

  • has(key)

    • Checks if key exists in store

    • key: Key to check

  • get(key)

    • Retrieves and parses a value

    • key: Key to retrieve

  • put(key, val, opts)

    • Stores a value, converting objects to JSON

    • key: Key to store under

    • val: Value to store

    • opts: (optional) Hyperbee put options

  • delete(key, opts)

    • Removes a value

    • key: Key to delete

    • opts: (optional) Hyperbee delete options

  • clear()

    • Clears all entries

  • import(snapshot)

    • Imports data from object

    • snapshot: Object with key-value pairs

  • some(cb, opts)

    • Iterates until callback returns true

    • cb: (key: string, value: any) => Promise<boolean>

    • opts: (optional) Hyperbee stream options

  • entries(cb, opts)

    • Iterates over all entries

    • cb: (key: string, value: any) => Promise<void>

    • opts: (optional) Hyperbee stream options

๐Ÿ’พ Storage Engines

lib-wallet-store currently supports the following storage engines:

  1. Hyperbee Engine: Utilizes the Hyperbee data structure for efficient and distributed storage.

To implement a new storage engine:

  1. Create a new class that extends the base WalletStore class.

  2. Implement the required methods: init(), get(), put(), delete(), clear(), close(), etc.

  3. Place your implementation in the project's root directory (e.g., wallet-store-yourenginename.js).

๐Ÿ›  Development

To set up the development environment:

  1. Clone the repository:

    git clone [email protected]:tetherto/lib-wallet-store.git
    cd lib-wallet-store
  2. Install dependencies:

    npm install
  3. Start coding! ๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ‘ฉโ€๐Ÿ’ป

๐Ÿงช Testing

We use the Brittle testing framework for our unit tests.

To run the tests:

  1. Make sure you have the testing dependencies installed:

    npm install brittle
  2. Run the tests:

    npm run test

๐Ÿค Contributing

Contributions are welcome! Here are some ways you can contribute:

  • Implement new storage engines

  • Improve existing implementations

  • Add more test cases

  • Enhance documentation

Last updated