- Notifications
You must be signed in to change notification settings - Fork1
A Crystal shard for base encoding / decoding of any given alphabet with optional bitcoin-style leading zero compression.
License
wout/base_x
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A Crystal shard for base encoding/decoding of any given alphabet with optionalbitcoin-style leading zero compression.
Because this library also decodes to integers, it relies onBigInt
, whichimplies a significant performance impact. If you are looking to decode/encodebase58 and you don't need to decode to integers,wyhaines/base58.cr is a betteralternative as it's a lot faster.
Base | Alphabet |
---|---|
2 | 01 |
8 | 01234567 |
11 | 0123456789a |
26 | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
26 | abcdefghijklmnopqrstuvwxyz (lowercase) |
32 | ybndrfg8ejkmcpqxot1uwisza345h769 (z-base-32) |
36 | 0123456789abcdefghijklmnopqrstuvwxyz |
45 | 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./: |
52 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
58 | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz (bitcoin) |
58 | 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ (flickr) |
58 | rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz (ripple) |
62 | 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ |
67 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.!~ |
- Add the dependency to your
shard.yml
:
dependencies:base_x:github:wout/base_x
- Run
shards install
require"base_x"
BaseX::Base58.decode("6hKMCS")# => Bytes[206, 233, 57, 134]BaseX::Base58.encode(Bytes[206,233,57,134])# => "6hKMCS"
or:
BaseX::Base45.decode("5R%/+F5SZ6LLW+J60D")# => Bytes[231, 5, 88, 240, 215, 89, 21, 180, 87, 179, 227, 86]BaseX::Base45.encode(Bytes[231,5,88,240,215,89,21,180,87,179,227,86])# => "5R%/+F5SZ6LLW+J60D"
Note:BaseX::BaseXX.decode
is the same asBaseX::BaseXX.decode_bytes
.
BaseX::Base58.decode_int("6hKMCS")# => 3471391110BaseX::Base58.encode(3471391110)# => "6hKMCS"
base_16_alphabet="0123456789abcdef"BaseX.decode("ff3300", base_16_alphabet)# => Bytes[255, 51, 0]BaseX.encode(Bytes[255,51,0], base_16_alphabet)# => "ff3300"
Some protocols, such as Bitcoin, require leading zeros to be encoded. Passingtrue
to the third argument ofBaseX::Base58.encode
will enable thisbehaviour.
bitcoin_address_hex="00000000000000000000123456789ABCDEF0"bitcoin_address_bytes=String.new(bitcoin_address_hex.hexbytes)BaseX::Base58.encode(bitcoin_address_bytes,leading_zeroes:true)# => 111111111143c9JGph3DZ
Make sure you haveGuardian.cr installed. Thenrun:
$ guardian
This will automatically:
- run ameba for src and spec files
- run the relevant spec for any file in the src dir
- run spec a file whenever it's saved
- Fork it (https://github.com/wout/base_x/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
- Wout - creator and maintainer
This shard pulls inspiration from the following projects:
About
A Crystal shard for base encoding / decoding of any given alphabet with optional bitcoin-style leading zero compression.