ZILLIQA白皮书介绍

目前现有的加密货币和智能合约平台或多或少都有扩展性的问题,每秒能够处理的交易数量是有限的,一般少于每秒20次。
随着使用公共加密货币和智能合约平台的应用和用户数量的增长,需求用于每秒处理数百和数千次数量级的高交易速率正在增加。
ZILLIQA 就是问题的解决方案。它是一种旨在扩大交易速度的新的区块链平台,随着其的矿工人数的增加,其交易速度还会上升。在以太坊现有的3万名矿工的网络规模下,ZILLIQA 预计会处理以太坊交易速率的大约一千倍。

ZILLIQA白皮书一共分6层来介绍:

  • 密码层
  • 数据层
  • 网络层
  • 共识层
  • 智能合约层
  • 激励层

在ZILLIQA中一共有两种角色:用户和矿工。 ZILLIQA的采矿网络被进一步分成几个小网络,被称为分片。一名矿工被一组叫做DS节点分配给一个分片。这组DS节点也被称为DS委员会。每个分片和DS委员会都有一个领导者。领导者在ZILLIQA的共识协议和网络的整体运作中发挥重要作用。

1.密码层

在白皮书中,我们广泛使用SHA3哈希函数来展示我们的设计。

1.1 Schnorr 签名

简化的多重签名是如何工作的呢?

在介绍细节之前,让我们先了解一下背景:在多重签名方案中,我们有n个签名者,每个签名者都有一对密钥(公钥和私钥)、一个验证签名的验证者和一个汇总各方“签名”的聚合者(aggregator)。为了便于理解,我们现在简单假设所有节点都是诚实的,并且会配合签署消息。

验证者在检验汇总后的签名时,会检查所有签名者是否都正确地签了名。仅当验证者确认所有签名者都正确地签了名之后,验证才算通过,反之则验证失败。

接下来让我们深入细节。

多重签名方案基本上分两步进行。在协议的第一步中,每个节点将其公钥发送给聚合者,聚合者根据公钥的数学形式,通过简单的加法或乘法将之聚合为一个单一的公钥。

例如,聚合公钥= 公钥_1 + 公钥_2 + …+公钥_n。

然后聚合者将聚合公钥转发给验证者从而可以使后者验证聚合签名,与此同时聚合者也将聚合公钥发送给每个签名者让所有人签名。

在第二步中,聚合者启动与每个签名者的交互协议(interactive protocol)。这个交互协议总分包含三个阶段:

1、提交阶段(Commit phase):此阶段每个节点生成一些随机内容并提交给交互协议。加密提交(cryptographic commitment)可以通过这种类比的方式理解:每个节点都秘密地掷骰子,然后将结果写在一张纸上并将其放在一个盒子中锁好,最后发送给聚合者。聚合者无权打开盒子。

2、挑战阶段(Challenge phase):此阶段聚合者首先使用加法或乘法将所有的提交聚合为一个聚合提交,然后使用它以及聚合公钥、消息生成一个挑战,再将挑战发送到所有节点。之后挑战可用于确认所有节点都知道公钥对应的私钥。这与常规数字签名的工作方式类似,即由签名证明签名人确实知道私钥。

3、回应阶段(Response phase):所有节点为了应对挑战会向挑战发送私钥进行回应,之后聚合者将聚合所有的回应。因此回应可被视为签名者知道其公钥对应的私钥的证据。

因此,最后的聚合签名实际上是挑战和聚合回应的信息对,并能验证第一步生成的聚合公钥。

值得注意的是,聚合签名的大小不取决于签名者的数量,它是固定的。

当验证者检查聚合签名时,它检查的不是每个单独签名者是否都正确地遵守协议,而是检查所有签名者作为一个整体是否正确地遵守协议并知道私钥。因此,验证者做出的决定是全有或全无(all-or-nothing)。

1.2 工作证明

ZILLIQA的工作证明使用了以太坊1.0的Pow算法-Ethash.
该算法所采用的一般流程如下所示:

  1. 存在一个种子, 可以通过块高度直到该点来计算每个块。种子每隔30000块更新一次,称为1个epoch。下一轮的种子由前一轮种子通过SHA3-256计算得来。
  2. 从种子, 你可以计算一个 16 MB 的伪随机缓存, 用于轻客户端存储缓存。
  3. 从缓存中, 我们可以生成一个 1 GB 的数据集, 该属性表示数据集中的每个项只依赖于缓存中的少量项。完整的客户和矿工存储这个数据集。数据集会随时间线性增长。
  4. 挖矿涉及抓取数据集的随机切片并将它们一起哈希。可以通过使用缓存来重新生成所需的数据集的特定部分, 从而低内存的机器可以进行验证, 因为只需存储缓存即可验证。

2. 数据层

广义地说,数据层定义构成ZILLIQA全局状态的数据。

2.1 账户、地址、状态

ZILLIQA是基于账户的系统,一共有两种账户类型:普通账户和和合约账户。

每个帐户由不同类型的地址根据其类型来标识。普通帐户的地址是从帐户的私钥中导出的。对于给定的私钥SK,地址A是一个160位的值,计算为:
Anormal = LSB160 (SHA3-256(PubKey(sk))),
合同帐户的地址是从其创建者的地址和创建者帐户发送了多少交易,也叫做account nonce(下面描述)计算的:
Acontract = LSB160 (SHA3-256(address||nonce)),
其中address是创建者的账户地址,nonce是创建者的nonce值。

每个账户包括如下的状态值:

  • account nonce: 一个对从普通账户发送交易数量计数的计数器。对于合约账户&
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值