Zcash remains poorly understood


#1

In the past couple of days I've had exchanges with two separate developers / operators of sites for browser based transaction signing and broadcasting. They were both under the impression that the Zcash blockchain and network consist entirely of shielded transactions and therefore adapting the code for their sites would be no simple task...

It also doesn't help that the people using these sites don't think to support them with donations so I don't get the impression that the initial enthusiasm that brought those sites forth is still there... But one of the reasons I think these sites are worthwhile is that they allow for cold wallet transactions. ie: transactions can be prepared on an online computer, then transferred for signing by an offline computer and then transferred back to be broadcast. So far as I know, it isn't trivial to do this with existing Zcash software.


#2

Thanks for the feedback!

Did you ask these services to view our Zcash Integration Guide?

If they have viewed that guide, but still didn't realize they could add support for transparent-only integration, how can we improve this situation? For example, which of these true statements would most help to make more prominent?

a. Zcash is largely backwards compatible with Bitcoin,
b. Zcash has t-addresses and z-addresses. A t-address is functionally identical to a Bitcoin address. The main difference is the encoding has a 't' prefix. Everything else is the same, including the cryptography and storing value in UTXOs.
c. The Zcashd RPC API is very similar to the Bitcoin Core RPC interface and is in fact based off a fork of Bitcoin Core 0.11.2. If you want to add Zcash support to a product or service that uses the Bitcoin core RPC interface, many cases will work out-of-the box.
d. A Zcash 'transparent-only' transaction is identical to a Bitcoin transaction except there is one extra empty null field. Signature schemes, opcodes, serialization formats are all otherwise identical.
e. If you need a product or service to support Zcash's transparent-only transactions, and that product/service already supports Bitcoin transactions, check that this new Zcash field is empty when parsing transactions, and when serialization transactions simply set this field to null.
f. If you want to support Zcash shielded transactions, this is the part that requires more effort.

We explicitly chose to retain a lot of compatibility with Bitcoin to make adding basic 'transparent-only' support to Zcash easy for Bitcoin products and services. That's exchanges and wallets were able to quickly integrate 'transparent-only' support.

BTW, we're discussing the ability to outsource shielded transactions to an external service, which could be a useful tool for some kinds of services or products. If that seems like it would help your use case, let us know on ticket #1113 . Before that is ready, services can also integrate with services that promise to forward funds to a z-address. In my personal opinion shapeshift.io has an excellent reputation for doing this and has taken various measures to limit the risk to users.

In the future, of course, we want to get more of the ecosystem using the advanced encryption that is Zcash's core value. Every (advanced cryptography) journey begins with the first (transparent Bitcoin-style support) step. :wink:

ps: A graphical way to demonstrate that not all value is shielded in Zcash is this pie chart. The green slice is unshielded value stored in UTXOs, just as it is in Bitcoin. The Red slice is fully shielded and the blue slice are funds that must be shielded before they can be transferred anywhere else. In the future, we want the whole pie red, but the green slice shows that our choice to offer Bitcoin compatibility enables a significant use of that compatibility.


#3

Hey - thank you for the detailed response. No, I didn't mention the integration guide but I did mention the protocol pdf on the coinbin github. The other conversation I had was more private but I'll go and add that link to it.


#4

@nathan-at-least wrote:

d. A Zcash 'transparent-only' transaction is identical to a Bitcoin transaction except there is one extra empty null field.

Actually a version 1 transaction is completely identical. Only version >= 2 transactions have the nJoinSplit and vJoinSplit fields.