Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/emaringolo/pharo-base58

Base58/Base58Check encoder and decoder for Pharo
https://github.com/emaringolo/pharo-base58

bitcoin pharo smalltalk

Last synced: 16 days ago
JSON representation

Base58/Base58Check encoder and decoder for Pharo

Awesome Lists containing this project

README

        

# pharo-base58
Base58 and most importantly [Base58Check](https://en.bitcoin.it/wiki/Base58Check_encoding) encoder/decoder for [Pharo](https://pharo.org).

Base58 is mostly used in cryptocurrencies such as Bitcoin, but it was also used by Flickr. This encoder supports both alphabets.

## Installation

No Baseline yet, a single package with no external dependencies including one test class.

```
Gofer it
repository: (MCRepository fromUrl: 'github://eMaringolo/pharo-base58/src');
package: 'Base58-Core';
load.
```

## API

### `#encode: aByteArray`
Encodes aByteArray to a Base58 string
### `#decode: aString`
Decodes to a ByteArray a Base58 encoded string
### `encodeCheck: aByteArray version: anInteger`
Encodes aByteArray using Base58Check with anInteger as version byte.
### `encodeCheck: aByteArray`
Same as previous with `0` as version byte.
### `decodeCheck: aString`
Decodes a Base58Check encoded string, returns a `Base58CheckWrapper` instance, that responds to `version`, `payload` and `checksum`.

## Examples

### Generating a Bitcoin address
Converting the RIPEMD160 20 byte hash `010966776006953D5567439E5E39F86A0D273BEE` to a Bitcoin P2PKH address
```smalltalk
| encoder |
encoder := Base58Encoder new.
(encoder encodeCheck: ByteArray readHexFrom: '010966776006953D5567439E5E39F86A0D273BEE')
"'16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM'"
```

```smalltalk
| encoder |
encoder := Base58Encoder new.
(encoder decode: 'BJBRbygJtzBfp4gjJG2iqL') asString
"'Satoshi Nakamoto'"
```

See the test suite `Base58EncoderTest` for more examples.

### Remarks
Base58 converts leading zero bytes in the input to '1' characters in the output,
so an hex string `0001` or `#[0 0 0 1]` ByteArray will be encoded as `1112`,
so leading zeros in the input are significant.