Zano auditable wallets: What are they and how do they work?

Unlike traditional bitcoin-like blockchains, (where anyone can watch balances and track the movement of coins in any wallet) privacy blockchains are very difficult or even entirely impossible to view without special access keys. Nevertheless, there are cases in which someone needs to be able to disclose the balance and movement of funds to interested third parties, while not allowing access to spend their funds. Such functionality for Zano will be presented today.

We’re happy to announce that as of version 1.1.7.96 Zano will feature auditable wallets.

Balance and transaction history of an auditable wallet can be tracked by a third party — an auditor — if and only if they receive a special key (called a “tracking seed”) from the wallet’s owner. The tracking seed may be published so everyone can watch the transaction history and balance (e.g. this could be useful in the case of a foundation), or shared with only a limited number of users. Its important to note that the tracking seed has the same level of security as a typical wallet seed phrase thus it is impossible for anyone to derive a tracking seed by knowing only the basic address.

The technical side of auditable wallets is covered by an article we published recently. But in short, it is powered by the fact that each Zano transaction output may be restricted in its participation in the outputs’ global mixing process in two ways: it can be required to mix an output with no less than a specific number of others or an output can be prevented from being used in mixing at all. The auditable scheme utilizes the last one so an auditor can easily detect outgoing transfers. As a tradeoff, we need to restrict mixing when sending coins from an auditable wallet. This obviously limits untraceability for spends from an auditable wallet but we believe it would work well in the main field of application for auditable wallets: to be used by foundations which want to convince others they have no fewer coins available than they show.

The method of the audit implementation that we have chosen requires a sender to set a mixing restriction flag for each tx output when sending coins to an auditable wallet. This is why auditable addresses look different — to inform senders about this requirement.

As it is up to a sender, it is technically possible to modify the code and not to set such a flag. Such outputs cannot be tracked by an auditor when the auditing wallet will spend them, but an auditor will inevitably detect the fact of receiving such outputs and ignore them in balance calculation.

Simply put, it is possible to cheat and send coins to an auditable wallet in such a way that an auditor won’t see it, but it is impossible to spend coins from an auditable wallet without letting an auditor know about it. An auditor can be assured that there are no less unspent coins in the auditing wallet than the auditor sees.

Thus if a foundation uses a Zano auditable wallet for keeping their funds, everyone using a corresponding auditable watch-only wallet can make sure that the foundation has no fewer funds than are shown.

Using auditable wallets

Let’s look at the basic example of how to use an auditable wallet in Zano.

An auditable wallet expects that each transaction output it receives has a mixing restriction flag set on in order to make sure the corresponding tracking wallet will be able to work correctly. That is why we need a special address format for an auditable wallet. And also that is why you cannot convert your existing wallet into an auditable, you rather need to generate it from scratch.

At the moment it’s not possible to create an auditable wallet in the GUI (we may add this later) for now you will need to use the command-line wallet called simplewallet as follows:

>simplewallet.exe --generate-new-auditable-wallet my_auditable_wallet_xZano_testnet wallet v1.1.7.96[3e463b0]
password: ***
Generated new AUDITABLE wallet: aZxb9v1DFtaK6Z4bW7UUuaZcmq7MZBzz875eZ5N3vSRa2vWz9wBVE3vVKFGNH8414TTjhiwPz7PTV5ttuZP7GsdDQeWbewpmMaX
view key: 3dd8fd870c694818194c1e7a095a51e2e65486e212baca77fce4157f39287f05
tracking seed:
aZxb9v1DFtaK6Z4bW7UUuaZcmq7MZBzz875eZ5N3vSRa2vWz9wBVE3vVKFGNH8414TTjhiwPz7PTV5ttuZP7GsdDQeWbewpmMaX:3dd8fd870c694818194c1e7a095a51e2e65486e212baca77fce4157f39287f05:1595429852
********************************************************************

Your wallet has been generated.
********************************************************************

Please note, an auditable wallet’s address looks different — it starts with “aZx” rather than “Zx” for ordinary wallet:

aZxb9v1DFtaK6Z4bW7UUuaZcmq7MZBzz875eZ5N3vSRa2vWz9wBVE3vVKFGNH8414TTjhiwPz7PTV5ttuZP7GsdDQeWbewpmMaX

Now anyone who knows the address, secret view key, and creation timestamp is able to track the balance and the transaction history for this wallet. For convenience we combine all three components together into a what we call tracking seed:

aZxb9v1DFtaK6Z4bW7UUuaZcmq7MZBzz875eZ5N3vSRa2vWz9wBVE3vVKFGNH8414TTjhiwPz7PTV5ttuZP7GsdDQeWbewpmMaX:3dd8fd870c694818194c1e7a095a51e2e65486e212baca77fce4157f39287f05:1595429852

The tracking seed can be retrieved when you generate a new auditable wallet or at any moment later by entering the “tracking_seed” command into simplewallet’s CLI.

>simplewallet.exe --wallet-file my_auditable_wallet_xZano_testnet wallet v1.1.7.96[3e463b0]
password: ***
Opened auditable wallet: aZxb9v1DFtaK6Z4bW7UUuaZcmq7MZBzz875eZ5N3vSRa2vWz9wBVE3vVKFGNH8414TTjhiwPz7PTV5ttuZP7GsdDQeWbewpmMaX
Starting refresh...
Refresh done, blocks received: 0
balance: 0.000000000000, unlocked balance: 0.000000000000
********************************************************************
Use "help" command to see the list of available commands.
********************************************************************
[Zano wallet aZxb9v]: tracking_seed
Auditable watch-only tracking seed for this wallet is:
aZxb9v1DFtaK6Z4bW7UUuaZcmq7MZBzz875eZ5N3vSRa2vWz9wBVE3vVKFGNH8414TTjhiwPz7PTV5ttuZP7GsdDQeWbewpmMaX:3dd8fd870c694818194c1e7a095a51e2e65486e212baca77fce4157f39287f05:1595429852
Anyone having this tracking seed is able to watch your balance and transaction history, but unable to spend coins.

By having a tracking seed for an Auditable wallet you are able to open a watch-only representation of that wallet in the GUI, we call it a tracking wallet. It’s not an actual wallet as you can’t spend anything from it, you’re unable to start PoS mining, or make a contract using it. You can only track transaction history and watch the balance in realtime. Any new incoming or outgoing transactions from the auditable counterpart will be immediately shown in your tracking wallet.

Both auditable and tracking wallets can be opened in the Zano GUI application just like a normal Zano wallet. Also, both of them can be restored from a seed phrase or tracking seed respectively:

To avoid any confusion between wallet types, auditable wallets are highlighted with a green stripe and tracking wallets — with a violet one.

It’s important to note that auditable wallets can still participate in PoS mining just like normal wallets. This reflects on our belief that coins on the Zano network should always have the option to be put to good use, preferably in such a way that makes the network stronger! This is in fact exactly what staking is meant to be.

Also, just like you can make an integrated address for a normal wallet (incorporating a payment identifier into it) — it would start with “iZ” — you can make an integrated address for an auditable wallet. In such a case it would start with “aiZ”.

Conclusion

An auditable wallet in a privacy blockchain is a controversial topic. We understand that for many, having such wallets in Zano would look like a privacy threat.

It is important to emphasize that auditable wallets create their own separate subset of unmixable transaction outputs within the global set of all UTXOs.

This means that when coins are spent from an auditable wallet they can only be spent directly with a mixin of 0 (or anonymity set 0) thus they have no chance to get into a normal anonymous transaction (which uses mixing for the inputs).

With that said it’s understood that auditable wallet limits untraceability by a third party even if they don’t have a tracking key. Thus we assume that the primary users of auditable wallets will be public foundations that want to disclose their wallet’s balance and convince others that they have no fewer coins than are shown.

The main goal of implementing auditable wallets this way is our intention to provide for Zano community, holders, and potential investors a convenient way to track the Zano development funds. We understand how important it is and do our best to be transparent and straightforward!

For more info on creating and viewing auditable wallets check out our FAQ at
https://docs.zano.org/docs/auditable-wallets