#monero #base58 #base58-check


Library with support for encoding/decoding Monero base58 strings

7 releases

0.3.2 Nov 15, 2021
0.3.1 Sep 27, 2021
0.3.0 Apr 9, 2021
0.2.1 Mar 19, 2021
0.1.1 Mar 9, 2019

#80 in Magic Beans

Download history 1349/week @ 2021-09-27 1705/week @ 2021-10-04 1624/week @ 2021-10-11 1818/week @ 2021-10-18 1884/week @ 2021-10-25 1381/week @ 2021-11-01 829/week @ 2021-11-08 1540/week @ 2021-11-15 965/week @ 2021-11-22 1415/week @ 2021-11-29 1216/week @ 2021-12-06 1001/week @ 2021-12-13 843/week @ 2021-12-20 429/week @ 2021-12-27 644/week @ 2022-01-03 788/week @ 2022-01-10

2,790 downloads per month
Used in 19 crates (6 directly)

MIT license


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


By default both check and stream features are enabled. If you don't want to include all default features in your project:

version = "0.3"
default-features = false


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


Enables encode_stream and decode_stream functions. By default stream feature is 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.


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.

Releases and Changelog



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


The code in this project is licensed under the MIT License


~29K SLoC