#base58 #monero #base58-check

no-std base58-monero

Library with support for encoding/decoding Monero base58 strings

9 releases (2 stable)

2.0.0 Sep 15, 2023
1.1.0 Mar 11, 2023
1.0.0 Jun 27, 2022
0.3.2 Nov 15, 2021
0.1.1 Mar 9, 2019

#2 in #monero

Download history 12840/week @ 2024-07-21 14512/week @ 2024-07-28 15000/week @ 2024-08-04 13687/week @ 2024-08-11 13799/week @ 2024-08-18 16517/week @ 2024-08-25 22184/week @ 2024-09-01 19661/week @ 2024-09-08 18250/week @ 2024-09-15 17487/week @ 2024-09-22 15945/week @ 2024-09-29 9270/week @ 2024-10-06 18068/week @ 2024-10-13 19288/week @ 2024-10-20 17782/week @ 2024-10-27 18236/week @ 2024-11-03

73,752 downloads per month
Used in 38 crates (13 directly)

MIT license

65KB
1K SLoC

Build Status Codecov branch unsafe forbidden Crates.io Documentation License: MIT MSRV

Rust Monero Base58

Library with support for encoding/decoding Monero base58 strings, with and without checksum verification.

Bitcoin base58 vs Monero base58

Monero base58 is not like Bitcoin base58, bytes are converted in 8-byte blocks. The last block can have less than 8 bytes, but at least 1 byte. Eight bytes converts to 11 or less Base58 characters; if a particular block converts to <11 characters, the conversion pads it with "1"s (1 is 0 in Base58). Likewise, the final block can convert to 11 or less Base58 digits.

Due to the conditional padding, the 69-byte string, like Monero addresses, will always convert to 95 Base58 characters (8 * 11 + 7); where 7 is length of the last block of 5 bytes.

The alphabet is composed of 58 characters visually not similar to avoid confusion, e.g. both 1 and l are not part of the alphabet together, only 1 is present. The full alphabet is composed of: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Features

By default only the std feature is enabled. If you want to opt-out remove default features features in your project:

[dependencies.base58-monero]
version = "2"
default-features = false

std

Disable this feature if you want to build in a no_std environment. This feature is required when steam is enabled.

check

Enables encode_check and decode_check functions. By default check feature is disabled.

stream

This feature is not extensively tested and have performance issues, use it at your own risk!

Enables encode_stream and decode_stream functions. By default stream feature is not enable. This feature enables async stream for encoding/decoding bytes. This should be used when encoding larger amount of data or in asyncronous environment. stream can be used with check to enable encode_stream_check and decode_stream_check. To use stream feature you can add in your Cargo.toml:

[dependencies.base58-monero]
version = "2"
features = ["stream"]

This feature enables the std feature.

Tests

Doctests needs stream feature to run, run tests with all features:

cargo test --all-features

Benchmarks

Results obtained on an Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz with a standard Monero address as data source. Performances are shown in nanosecond per iteration of compute, the smaller the better:

Operation Regular _check
encode 652 ns (+/- 107) 1,272 ns (+/- 760)
decode 612 ns (+/- 82) 1,187 ns (+/- 541)

Check versions compute or verify the checksum while encoding or decoding the data.

Benchmarks can be found under /benches and run with

cargo +nightly bench --all-features

Releases and Changelog

See CHANGELOG.md and RELEASING.md.

About

This started as a research project sponsored by TrueLevel SA. It is now maintained by community members.

Licensing

The code in this project is licensed under the MIT License

Dependencies

~0–5.5MB
~26K SLoC