ZCash介绍|ZCash运作原理

ZCash介绍

在讲解ZCash前让我们复习一下Bitcoin 是如何运作的,因为两者间的概念差不多。

比特币的UTXO(Unspent Transaction Output)

UTXO就是进进出出
  1. 一个比特币交易接受数个输入(Transaction Input, TI),同时产生数个输出(Transaction Output, TO)。
  2. TI, TO是相对特定交易而言的。
    因为一个交易的TO可能是另一个交易的TI,换句话说就是一个将收到的钱再花出去的过程。
    在还没花出去前,这些钱是Unspent的状态,尚未成为下一笔交易的TI的TO称为UTXO(Unspent Transaction Output),此为比特币交易的基本单位。
  3. 交易付款方需证明自己有权使用此UTXO。
    如何证明?要提供私钥进行验证,因为每个TO都会指定收款人的公钥来保证只有收款人可以继续消费此TO。若不太了解公钥、私钥的观念应该算是走错棚了,可以先去补一下非对称式加密(Asymmetric Encryption)。

ZCash运作原理

ZCash的交易模型基本上与比特币相同,但是其中的UTXO被note所代替,note为ZCash的基本交易单位。一个交易的输入和输出都是数个note,我们后面将以note=(PK, v, r)来表示note,PK为公钥(Public Key)、v是金额(Value)、r是序列号(Random Serial Number)。

ZCash的节点会包含两个集合,每个集合都包含:

  1. Note Commitment (签发通知)
    交易的输出,表示一张新的note被发出,一张有效的commitment即为一张note的存在证明,此commitment为hash(note),因此可以确保他人不知道所有者、金额。
  2. Nullifier Commitment (废止通知)
    交易的输入,表示要将一张note花掉了,一个nullifier对应唯一的commitment,为了要知道是哪个commitment,nullifier为hash(r)。现在大家应该知道为什么需要序列号了吧!

透过commitment与nullifier,交易的双方从路人皆知变成双方的心照不宣。

ZCash实例

此为Zcash网站上的一个例子,从比较high level的角度讲解他们的屏蔽交易(Shielding Transaction)。

首先,Alice 想向Bob发送ZEC(ZCash所发的代币), Alice可以控制PK1(她的公钥)而Bob可以控制PK2(他的公钥)。与比特币相比,Zcash的一个不同之处在于Alice生成一个零知识证明来证明她有权使用Note1。

过程如下:

  1. Alice随机选择一个序列号(r) 并定义一个新的Note4。
  2. 她将Note4 发送给Bob。
  3. Alice 通过将Nullifier发送到所有节点来使Note1无效。
  4. Alice 将新Note4的hash发送给所有节点
  5. Alice 发布一个​​证明(proof-string)告诉节点,Note1的Hash存在于Hash集合中,sk1是PK1的私钥,而hash(r) 是Note1的Nullifier。

为了发送ZEC,通过组合交易的输入和输出的描述来创建交易。

交易的输入如下,消费掉前一笔note:

  • cv: 提交输入的值。cv为commit value
  • anchor: commitment tree 的merkle tree root。此处先不解释
  • note — rk(步骤1–2)。
  • nullifier — 销毁(步骤3),此步骤防止双重消费。
  • zkproof — 证明(步骤5)。
  • sendAuthSig — 授权支出。

交易的输出如下,创建一个新的note。

  • cv-value 提交输出的值。
  • anchor — 输出前一个块的Sapling tree状态。Sapling tree的概念有兴趣可以去查查,有点像区块链。
  • cm — 提交。cm为note commitment缩写。
  • outCiphertext — 允许公私钥都有的持有者打开note。
  • zkproof — — 证明。

这就是ZCash的交易流程啦。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。