Background

crates.io is a central repository for Rust crates (binary applications and libraries).

`iroha` crate name on crates.io with `iroha-derive` and `iroha-internal` were occupied so we need to find another name for our main crate. 

Problem

crates.io has no ability to delete already created crates, so the only way is to use new names to be published there.

Solution

As a solution we propose to publish a following set of crates:

  • iroha - binary application to start Iroha Peer, this crate's artifacts will be used for docker images
  • iroha_core - library containing Iroha "backend" or peer-side logic
  • iroha_client - library containing Iroha Rust clients API
  • iroha_client_cli - binary application which provides command line interface on top of iroha_client
  • iroha_crypto - library containing Iroha crypto related logic (Key Pairs generators, Hashing algorithms, etc.)
  • iroha_crypto_cli - binary application which provides command line interface on top of iroha_crypto
  • iroha_data_model - library containing domain entities like  Domain and Account, Iroha Special Instructions and Iroha Queries
  • iroha_dsl - library containing Domain Language specific entities like macroses, popular compositions of instructions and examples
  • iroha_http_server - library containing HTTP related functionality 
  • iroha_logger - library containing logging related functionality
  • iroha_macro - library containing Iroha macroses

Decisions

  • use new names for iroha crates
  • get on top of crates.io search index by providing a lot of downloads for our crates

Alternatives

  • Get in touch with https://crates.io/users/dark-flames and ask to provide credentials for current crates with an ability to put new versions with our Iroha on top of already existing
  • Use private cargo registry

Concerns

At start people may use `iroha` crate instead of `irohad`.

Assumptions

We will provide information about this situation on our web pages.

Risks

  • 3rd party malicious agent can take `iroha` to fight our reputation.

Additional Information

https://crates.io/crates/iroha

https://doc.rust-lang.org/cargo/faq.html

  • No labels

16 Comments

  1. Sara Garifullina  Sara, correct me if I am wrong, but seems like we can involve Hyperledger here in the aim to solve these naming (and "cybersquatting") issue

    Also, we can use "hyperledger_iroha" as a base part for our crates, which is probably even better

    1. I think it shouldn't be such an issue if we indicate which crate is the real one in our repo and docs.

      But I can contact trademark department of HL (although not sure they'll know much about those rust-specific things).

      How is it managed btw? 'Cause I believe we might need to give the admin rights for that to HL guys 

      1. Nikita Puzankov Please, check the ways how we can share the control for that crate with JHL admins in future.

        1. We just need to have tokens in Github CI.

    2. Looks like HL do not really bothered by this issue https://crates.io/crates/hyperledger - Ry already took HL crate a year ago and still didn't use it

  2. I personally do not like the "irohad" name, as it sounds confusing a bit.

    I think it is better to name it "iroha_main" or "iroha_run" or "iroha_daemon"

    Andrei Lebedev also proposed "iroha_core", but for me it has a bit different semantics.

    1. Could you elaborate on semantics of `iroha_core`?

      1. Sure! 

        For me, the "core" should be for the main functionality of the blockchain solution, the core code which glues together all detachable modules. In our case, the "Iroha_peer" can be also named as "iroha_core" semantically.

  3. I think the second best option after Iroha (which is taken) would be HL Iroha - basically, it's a full name of the project. 

    1. The package name is an identifier used to refer to the package. It is used when listed as a dependency in another package, and as the default name of inferred lib and bin targets.

      The name must use only alphanumeric characters or - or _, and cannot be empty. Note that cargo new and cargo init impose some additional restrictions on the package name, such as enforcing that it is a valid Rust identifier and not a keyword. crates.io imposes even more restrictions, such as enforcing only ASCII characters, not a reserved name, not a special Windows name such as "nul", is not too long, etc.

      1. Rephrasing the silent meaning, we can have "hl-iroha" or "hl_iroha" but not "HL Iroha"

        1. maybe even hliroha? I mean the general idea - iroha-core and such does not look that straightforward. It sounds like a component of iroha (that is not iroha really)

  4. hyperledger-iroha or hyperledger_iroha is a good name for the crate

    1. Good, hence we can proceed with that decision – to put the "hyperledger_" as a prefix for all crates, and change "irohad" to "hyperledger_iroha".

      1. Did we contact the current crate owner?

  5. Later it was discussed and decided to use `iroha_core` for library and just `iroha` for binary. Other names remain the same.