Project: Zenon Ledger App

Concerning the sign transaction design UI flows.

Receive transactions

Unlike other cryptocurrencies, Zenon requires unreceived transactions to be signed. The proposal mentioned that the send flow is applicable for both transaction types. This is partially true, because unreceived transactions do not contain the same information. Therefore, the UI flow cannot show the amount and the from address. In order to show this information , a separate “from” transaction needs to be supplied.

The current implementation accepts one transaction for signing, namely the transaction to be signed. Future versions may extend this for unreceived transactions.

This means that the UI flow for signing receive transactions will be different, see below:

send tx = blocktype 2 & 4
receive tx = blocktype 1, 3 & 5

A send transaction has the following flow:

  1. Review transaction
  2. Type (display send)
  3. Amount (display amount and token symbol ZNN, QSR or ZTS)
  4. Address (display to zenon address)
  5. Approve or Refuse

A receive transaction has the following flow:

  1. Review transaction
  2. Type (display receive)
  3. Hash (display tx hash as hexidecimals)
  4. Approve or Refuse

Blind signing

The proposal also mentioned the following about blind signing.

Signing unreceived transactions or interacting with Embedded Smart Contracts will possibly require a blind signing setting.

It turns out that blind signing is not required for both mentioned types of transactions. However, it can be used to sign unknown data formats. For example, if the ledger app doesn’t recognise the send tx data, it will hash and display it for approval. The option could be useful if you want to sign something other than transactions.

In order to use the blind signing option it needs to be implemented and enabled by the user. This option is considered a could have and is not required for the first version.

Unattended signing

Unattended signing signs a transaction without any user (display) interaction. This is a bit controversial and while technically possible, I haven’t seen any implementations of it.

I’m currently considering this option as a won’t.