- 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.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.