Skip to content

Latest commit

 

History

History
216 lines (145 loc) · 4.48 KB

DOC.md

File metadata and controls

216 lines (145 loc) · 4.48 KB

base58

import "github.com/fufuok/utils/base58"

Package base58 provides an API for working with modified base58 and Base58Check encodings.

Modified Base58 Encoding

Standard base58 encoding is similar to standard base64 encoding except, as the name implies, it uses a 58 character alphabet which results in an alphanumeric string and allows some characters which are problematic for humans to be excluded. Due to this, there can be various base58 alphabets.

The modified base58 alphabet used by Bitcoin, and hence this package, omits the 0, O, I, and l characters that look the same in many fonts and are therefore hard to humans to distinguish.

Base58Check Encoding Scheme

The Base58Check encoding scheme is primarily used for Bitcoin addresses at the time of this writing, however it can be used to generically encode arbitrary byte arrays into human-readable strings along with a version byte that can be used to differentiate the same payload. For Bitcoin addresses, the extra version is used to differentiate the network of otherwise identical public keys which helps prevent using an address intended for one network on another.

Index

Variables

ErrChecksum indicates that the checksum of a check-encoded string does not verify against the checksum.

var ErrChecksum = errors.New("checksum error")

ErrInvalidFormat indicates that the check-encoded string has an invalid format.

var ErrInvalidFormat = errors.New("invalid format: version and/or checksum bytes missing")

func CheckDecode

func CheckDecode(input string) (result []byte, version byte, err error)

CheckDecode decodes a string that was encoded with CheckEncode and verifies the checksum.

Example

This example demonstrates how to decode Base58Check encoded data.

package main

import (
	"fmt"
	"github.com/fufuok/utils/base58"
)

func main() {
	// Decode an example Base58Check encoded data.
	encoded := "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"
	decoded, version, err := base58.CheckDecode(encoded)
	if err != nil {
		fmt.Println(err)
		return
	}

	// Show the decoded data.
	fmt.Printf("Decoded data: %x\n", decoded)
	fmt.Println("Version Byte:", version)

}

Output

Decoded data: 62e907b15cbf27d5425399ebf6f0fb50ebb88f18
Version Byte: 0

func CheckEncode

func CheckEncode(input []byte, version byte) string

CheckEncode prepends a version byte and appends a four byte checksum.

Example

This example demonstrates how to encode data using the Base58Check encoding scheme.

package main

import (
	"fmt"
	"github.com/fufuok/utils/base58"
)

func main() {
	// Encode example data with the Base58Check encoding scheme.
	data := []byte("Test data")
	encoded := base58.CheckEncode(data, 0)

	// Show the encoded data.
	fmt.Println("Encoded Data:", encoded)

}

Output

Encoded Data: 182iP79GRURMp7oMHDU

func Decode

func Decode(b string) []byte

Decode decodes a modified base58 string to a byte slice.

Example

This example demonstrates how to decode modified base58 encoded data.

package main

import (
	"fmt"
	"github.com/fufuok/utils/base58"
)

func main() {
	// Decode example modified base58 encoded data.
	encoded := "25JnwSn7XKfNQ"
	decoded := base58.Decode(encoded)

	// Show the decoded data.
	fmt.Println("Decoded Data:", string(decoded))

}

Output

Decoded Data: Test data

func Encode

func Encode(b []byte) string

Encode encodes a byte slice to a modified base58 string.

Example

This example demonstrates how to encode data using the modified base58 encoding scheme.

package main

import (
	"fmt"
	"github.com/fufuok/utils/base58"
)

func main() {
	// Encode example data with the modified base58 encoding scheme.
	data := []byte("Test data")
	encoded := base58.Encode(data)

	// Show the encoded data.
	fmt.Println("Encoded Data:", encoded)

}

Output

Encoded Data: 25JnwSn7XKfNQ

Generated by gomarkdoc