How Moonlet prevents users from sending native ZILs to ETH addresses

To prevent users from sending native ZILs to ETH addresses, we implemented Zilliqa’s checksum function within Moonlet wallet.

For a complete picture, it would be useful to know that every ZIL address has two versions, one that includes uppercase letters and one that doesn’t, namely a checksummed and non-checksummed version. Now, what you need to remember is that the case-sensitivity is used for checksum validation, but I’m not going into technical details in order to keep it simple and effective.

Here are some examples of both type of ZIL addresses and an ETH one:

  • ZIL non-checksummed version: 0x69bc329871e525091ff8cf1d292255f5f8a37767
  • ZIL checksummed version: 0x69bc329871e525091FF8Cf1D292255F5f8a37767
  • ETH checksummed version: 0x32Be343B94f860124dC4fEe278FDCBD38C102D88

Both ZIL addresses are valid, as you might already noticed. Also, another thing is that it’s pretty hard to differentiate the two since are not human readable, namely an ZIL address from an ETH one, something that Moonlet is going to address it together with Unstoppable Domains, but I’ll get back to this one on my next blog post.

In order to be able to differentiate them, the Zilliqa checksum function uses the 6 * i-th bit to branch instead of Ethereum’s 4 * i-th. In plain language, this function will be able to differentiate an ZIL checksummed address from an ETH one.

From now on, each time when you fill the “Recipient” field from Moonlet’s “Send” page, the checksum function checks if the address is valid, which could save you a lot of money. However, it comes with a downside from user experience point of view that I’m going to explain it below:

Scenario no.1

If the user fills “Recipient” filed with an ETH address, Moonlet will display an error message as in the example below. Therefore, Moonlet will prevent user to send native ZILs to an ETH address that might be still used by some exchanges or wallets since during the swap phase both native ZIL tokens and ERC-20(ETH) ZIL tokens are tradable.

Scenario no.2

If user fills “Recipient” filed with a checksummed ZIL address, Moonlet will allow to send tokens to that specific address. This is the happy flow.

Scenario no.3

If user fills “Recipient” filed with a non-checksummed ZIL address, Moonlet will display an error message as in Scenario no.1.

This might add a bit of hassle for user since even if the address is valid, it would require to checksum it and then add it again into Moonlet’s “Recipient” field. In order to do that, our suggestion is to follow these steps:

Step 1: Access Zilliqa explorer https://viewblock.io/zilliqa

Step 2: Copy/Paste non-checksummed address into explorer search field

Step 3: Click Search

Step 4: Click “Copy to clipboard” icon underneath “Address” text

Step 5: Paste it into Moonlet’s “Recipient” field

Step 6: That’s it!

Basically what you need to do is to checksum a valid address using Zilliqa’s explorer. I personally admit that it is not an ideal user experience, but definitely beats losing funds. Hope you agree.

Please stay tuned for more updates about Moonlet. We are going to push live soon human readable domain names support.

➤ Follow us on Twitter

➤ Check our Website

➤ Check our GitHub