2 releases

0.1.1 Dec 1, 2024
0.1.0 Nov 30, 2024

#9 in #name-service

Download history 207/week @ 2024-11-25 141/week @ 2024-12-02 96/week @ 2024-12-09

444 downloads per month

MIT license

2MB
1.5K SLoC

ens-normalize-rs

tests

A Rust implementation of ENS (Ethereum Name Service) name normalization.

Description

ens-normalize-rs is a robust Rust library for normalizing and validating ENS names according to ENSIP-15 specifications. It handles Unicode normalization, validation, beautification of ENS names ensuring correct, consistent and idempotent behavior.

Installation

cargo add ens-normalize-rs

Or add this to your project using Cargo:

[dependencies]
ens-normalize-rs = "0.1.1"

Usage

fn main() {
    fn main() {
    // Using normalizer to reuse preloaded data
    let normalizer = ens_normalize_rs::EnsNameNormalizer::default();
    let name = "🅰️🅱.eth";
    let processed = normalizer.process(name).unwrap();
    let beautified_name = processed.beautify();
    let normalized_name = processed.normalize();

    assert_eq!(normalized_name, "🅰🅱.eth");
    assert_eq!(beautified_name, "🅰️🅱️.eth");

    // Using normalize directly
    let normalized = normalizer.normalize("Levvv.eth").unwrap();
    assert_eq!(normalized, "levvv.eth");

    // Handling errors
    assert!(matches!(
        normalizer.normalize("Levvv..eth"),
        Err(ens_normalize_rs::ProcessError::DisallowedSequence(
            ens_normalize_rs::DisallowedSequence::EmptyLabel
        ))
    ));
    assert!(matches!(
        // U+200D ZERO WIDTH JOINER
        normalizer.normalize("Ni‍ck.ETH"),
        Err(ens_normalize_rs::ProcessError::DisallowedSequence(
            ens_normalize_rs::DisallowedSequence::InvisibleCharacter(0x200d)
        ))
    ));
}
}

Testing

Crate contains several types of tests:

To run all tests simply run:

cargo test

Roadmap

  • Tokenization
  • Normalization
  • Beautification
  • ENSIP-15 Validation Tests
  • Unicode Normalization Tests
  • CLI to update specs.json and nf.json
  • analog of ens_cure function
  • analog of ens_normalizations function

License

This project is licensed under the MIT License - see the LICENSE file for details.

Dependencies

~6–13MB
~170K SLoC