Git Product home page Git Product logo

js-multibase's Introduction

js-multibase

Dependency Status js-standard-style Build Status codecov

JavaScript implementation of the multibase specification

Lead Maintainer

Oli Evans

Table of Contents

Install

In Node.js through npm

> npm install --save multibase

Browser: Browserify, Webpack, other bundlers

The code published to npm that gets loaded on require is in fact an ES5 transpiled version with the right shims added. This means that you can require it and use with your favourite bundler without having to adjust asset management process.

const multibase = require('multibase')

In the Browser through <script> tag

Loading this module through a script tag will make the Multibase obj available in the global namespace.

<script src="https://unpkg.com/multibase/dist/index.min.js"></script>
<!-- OR -->
<script src="https://unpkg.com/multibase/dist/index.js"></script>

Gotchas

You will need to use Node.js Buffer API compatible, if you are running inside the browser, you can access it by multibase.Buffer or you can load Feross's Buffer module.

Usage

Example

const multibase = require('multibase')

const encodedBuf = multibase.encode('base58btc', new Buffer('hey, how is it going'))

const decodedBuf = multibase.decode(encodedBuf)
console.log(decodedBuf.toString())
// hey, how it going

API

https://multiformats.github.io/js-multibase/

multibase - Prefixes an encoded buffer with its multibase code

const multibased = multibase(<nameOrCode>, encodedBuf)

multibase.encode - Encodes a buffer into one of the supported encodings, prefixing it with the multibase code

const encodedBuf = multibase.encode(<nameOrCode>, <buf>)

multibase.decode - Decodes a buffer or string

const decodedBuf = multibase.decode(bufOrString)

multibase.isEncoded - Checks if buffer or string is encoded

const value = multibase.isEncoded(bufOrString)
// value is the name of the encoding if it is encoded, false otherwise

multibase.names

A frozen Array of supported base encoding names.

multibase.codes

A frozen Array of supported base encoding codes.

Supported Encodings, see src/constants.js

Architecture and Encoding/Decoding

Multibase package defines all the supported bases and the location of their implementation in the constants.js file. A base is a class with a name, a code, an implementation and an alphabet.

class Base {
  constructor (name, code, implementation, alphabet) {
    //...
  }
  // ...
}

The implementation is an object where the encoding/decoding functions are implemented. It must take one argument, (the alphabet) following the base-x module architecture.

The alphabet is the ordered set of defined symbols for a given base.

The idea behind this is that several bases may have implementations from different locations/modules so it's useful to have an object (and a summary) of all of them in one location (hence the constants.js).

All the supported bases are currently using the npm base-x module as their implementation. It is using bitwise maipulation to go from one base to another, so this module does not support padding at the moment.

Adding additional bases

If the base you are looking for is not supported yet in js-multibase and you know a good encoding/decoding algorithm, you can add support for this base easily by editing the constants.js file (you'll need to create an issue about that beforehand since a code and a canonical name have to be defined):

const baseX = require('base-x')
//const newPackage = require('your-package-name')

const constants = [
  ['base1', '1', '', '1'],
  ['base2', '0', baseX, '01'],
  ['base8', '7', baseX, '01234567'],
  // ... [ 'your-base-name', 'code-to-be-defined', newPackage, 'alphabet']
]

The required package defines the implementation of the encoding/decoding process. It must comply by these rules :

  • encode and decode functions with to-be-encoded buffer as the only expected argument
  • the require call use the alphabet given as an argument for the encoding/decoding process

If no package is specified (such as for base1 in the above example, it means the base is not implemented yet)

Adding a new base requires the tests to be updated. Test files to be updated are :

  • constants.spec.js
describe('constants', () => {
  it('constants indexed by name', () => {
    const names = constants.names
    expect(Object.keys(names).length).to.equal(constants-count) // currently 12
  })

  it('constants indexed by code', () => {
    const codes = constants.codes
    expect(Object.keys(codes).length).to.equal(constants-count)
  })
})
  • multibase.spec.js
    • if the base is implemented
    const supportedBases = [
      ['base2', 'yes mani !', '01111001011001010111001100100000011011010110000101101110011010010010000000100001'],
      ['base8', 'yes mani !', '7171312714403326055632220041'],
      ['base10', 'yes mani !', '9573277761329450583662625'],
      // ... ['your-base-name', 'what you want', 'expected output']
    • if the base is not implemented yet
    const supportedBases = [
      // ... ['your-base-name']

Contribute

Contributions welcome. Please check out the issues.

Check out our contributing document for more information on how we work, and about contributing in general. Please be aware that all interactions related to multiformats are subject to the IPFS Code of Conduct.

Small note: If editing the README, please conform to the standard-readme specification.

License

MIT © 2016 Protocol Labs Inc.

js-multibase's People

Contributors

alanshaw avatar daviddias avatar dignifiedquire avatar greenkeeper[bot] avatar hacdias avatar npmcdn-to-unpkg-bot avatar olizilla avatar richardlitt avatar theobat avatar victorb avatar wolfgang42 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.