Skip to content

Isomorphic JS encode/decode library using the Base58 (Bitcoin) encoding scheme (for Node.js and browsers).

License

Notifications You must be signed in to change notification settings

interop-alliance/base58-universal

Repository files navigation

Base58btc Isomorphic Encoder/Decoder for JS and TS (@interop/base58-universal)

Build status NPM Version

Isomorphic JS encode/decode library using the Base58 (Bitcoin) encoding scheme (for Node.js and browsers).

Table of Contents

Background

(Converted to TypeScript from Digital Bazaar's base58-universal repository.)

This library provides a TypeScript and JS encoder/decoder functions for the Base58 (Bitcoin) encoding scheme using an alphabet popularized by Bitcoin. It works in both Node.js and in Web browsers with no dependencies.

Security

TBD

Install

  • Node.js 12+.

NPM

To install via NPM:

npm install @interop/base58-universal

Development

To install locally (for development):

git clone https://github.com/interop-alliance/base58-universal.git
cd base58-universal
npm install

Usage

The library can be loaded with ESM or CommonJS:

import * as base58btc from '@interop/base58-universal'
const base58btc = require('@interop/base58-universal')

Encoding

  • encode(input: Uint8Array): string
    • Returns a base58 encoded string.
const input1 = Uint8Array([1, 2, 3, 4])
const encoded1 = base58btc.encode(input1)
// > 2VfUX

const input2 = Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
const encoded2 = base58btc.encode(input2)
// > 4HUtbHhN2TkpR

Decoding

  • decode(input: string): Uint8Array
    • input: string - string to decode
    • Returns a Uint8Array with the decoded bytes.
const input3 = '2VfUX'
const decoded3 = base58btc.decode(input3)
// > Uint8Array [ 1, 2, 3, 4 ]

const input4 = '4HUtbHhN2TkpR'
const decoded4 = base58btc.decode(input4)
// > Uint8Array [
//   1, 2, 3, 4,  5,
//   6, 7, 8, 9, 10
// ]

String Handling

This library uses Uint8Array for encoder input and decoder output. Conversion to and from strings can be done with a variety of tools.

Browser

const input5 = new TextEncoder().encode('abc')
const encoded5 = base58btc.encode(input5)
// > ZiCa

const decoded6 = base58btc.decode(encoded5)
const output6 = new TextDecoder().decode(decoded6)
// > abc

Node.js

// Using TextEncoder/TextDecoder (included in Node.js since v12)
const input7 = new TextEncoder().encode('abc')
const encoded7 = base58btc.encode(input7)
// > ZiCa

const decoded8 = base58btc.decode(encoded7)
const output8 = new TextDecoder().decode(decoded8)
// > abc

// Using Buffer (which is a Uint8Array)
const input9 = Buffer.from('616263', 'hex')
const encoded9 = base58btc.encode(input9)
const decoded9 = base58btc.decode(encoded9)
Buffer.from(decoded9).toString()
// > abc
Buffer.from(decoded9).toString('hex')
// > 616263

Contribute

PRs accepted.

License

TypeScript conversion: MIT License © 2021 Interop Alliance and Dmitri Zagidulin.

Isomorphic JS implementation from Digital Bazaar/base58-universal under the New BSD License (3-clause).

Encoder/decoder original implementation from base-x under the MIT License.

About

Isomorphic JS encode/decode library using the Base58 (Bitcoin) encoding scheme (for Node.js and browsers).

Resources

License

Stars

Watchers

Forks

Packages

No packages published