Qitmeer 白皮书(中文版)

                           Qitmeer 白皮书:
                 信任的守护者,halalchain 核心网络
                            Qitmeer 团队
                            翻译:All in
                         paper@qitmeer.io
                         2019 年 6 月 30 日
                              版本 0.1

                               摘  要

比特币[1]的诞生是具有革命性的。它开创了一个新的世界,通过一个基于密码学的去中心化的支付网络,使货币发行变得公开和公平。此外,比特币的底层账本机制(比如区块链),由于其具有防篡改的功能,因此在金融领域将发挥重要的作用。作为世界金融的重要成员,伊斯兰金融也正在经历区块链的重新塑造。

在比特币诞生 10 周年到来之际,区块链基础设施正面临着来自于技术层面的各种挑战。Qitmeer 将开放性、公平性、容错性、可扩展性作为评估一个有前景的区块链范例的核心指标。而一个区块链系统如果在这些指标之间达到了理想的平衡,则被视为经典的区块链设定。

Qitmeer 共识选择 Spectre[2]作为其基本协议。Spectre 是一种可以快速确认并具有高吞吐量的 BlockDAG 协议,为高性能的支付网络提供保证。此外,Qitmeer 还引入了另一种高吞吐量的 BlockDAG 协议 GhostDAG[3],该协议强调了前所未有地支持交易的线性排序,避免了 Spectre 的低活跃度,并为奖励系统的公平方案提供服务。Qitmeer 共识符合经典区块链设定,通过工作量证明机制,可以自由进出网络。DAG Ledger 的协作模型保证矿工获得的奖励与其奉献相一致,与比特币有同样安全性能 50%的错误容忍度,强大的可扩展性,其性能受物理网络限制。除了共识算法外,挖矿算法本身也是公平性的重要来源。布谷环是一种基于工作证明挖矿算法的图形理论,由于内存计算困难,实际上是抗ASIC 的。

为了符合伊斯兰教法,Qitmeer 发起了一个基于 UTXO 模型的独特的代币保证方案,该方案有效地解决了两个主要问题:内在价值和资产认证。发行一定数量的资产必须消耗一定数量的本国货币;此外,实体必须获得资产发型许可证。Qitmeer 设计了一系列规范和协议(如钱包和矿工),涵盖整个伊斯兰金融生态系统。至于互操作性,Qitmeer 要求利用跨链协议集成各种加密货币并提供可靠的链下智能合约服务。

1.介绍

1.1 背景

信任是金融世界的基石。在传统方式中,多个不熟悉的个体需要一个值得信赖的第三方来保证交易的安全性。然而,这个第三方是中心化的,受到单点故障的影响,其诚信度也难以保证。

比特币是一个开放的 P2P 网络,也就是说,不存在中心化的服务器,每个节点都可以自由地加入或离开网络。计算量大但验证简单的工作量证明机制,旨在确保节点获得的奖励与其对网络运行和安全做出的贡献相一致。比特币的对现有金融体系的冲击推动了对其工作机制的大量研究。比特币有一个类似分类账本的哈希表来保证账本的篡改难度,进一步引入区块链的概念来代表这一机制,并且已经被普遍接受。由于其具有无需信任和和防篡改的特性,区块链在金融领域的应用越来越多,区块链正在重新塑造金融体系。

在比特币诞生 10 周年到来之际,区块链基础设施正面临着来自于技术层面的各种挑战并且已经背离了它的初衷。比特币不再是去中心化的,排名前 5 的矿池已经控制了全网绝大部分哈希算力,一旦他们找到理由,就很容易对网络发起攻击。矿工们必须加入采矿池,因为机会成本远远高于他们的贡献;换句话说,比特币网络不再公平。比特币网络不可扩展,每秒仅仅 7 笔交易吞吐量,1 小时的交易确认时间,高昂的交易费用,远远没有成为全球支付网络的希望。

比特币网络需要改进并回归其初衷。无数的解决方案已经出现,并声称已经解决了所有这些问题。然而,很少有人真正做到了这一点,只是将一个衡量标准与另一个度量标准进行权衡,例如牺牲去中心化(网络安全的核心)以实现可扩展性。比特币真正的初衷是什么,Qitmeer 有其自己的定义并命名为经典的区块链设定,这也是 Quimeer 的设计理念。

1.2 经典区块链设定

有太多的区块链项目,每个都有它对区块链的定义。Quimeer 更加尊重比特币的愿景,Qitmeer 认为它由 4 个部分组成,并将其命名为经典区块链设定。

1.2.1 开放性

开放性是许可链和非许可链(公有链)最关键的区别,公有链中每个节点都可以自由地加入和离开网络。

  • 预定义的特殊角色

    一个开放的网络允许存在不同的角色,在比特币网络中,节点可以自由选择成为 SPV 节点、全节点或者矿工,因此从协议的角度来看,比特币是开放的。而在委托工作量证明证明中,区块的生产者在链外投票产生,并且预先定义为配置,显然是不够开放的。

  • 实际状况

虽然按照协议,比特币是开放的,但在实践中却并非如此。矿工不再是独立的个体,必须加入矿池,这种趋势变得越来越糟。

1.2.2 公平

公平意味着节点获得的奖励与其对网络做出的贡献相一致。换句话说就是激励相容。

  • 机会成本

    独立的矿工和池采预期获得的回报从概率上讲是相同的。关键是,他们的机会成本相当高,要么是挖出一个区块以获得极高的回报,要么是等待很长时间而没有任何回报。

  • 成本效益

    主要指挖矿成本。挖矿成本主要包括电价和挖矿效率,后者因 ASIC 的快速发展而显得更为关键。ASIC 按照特定的挖矿算法定制,因此单位费用的挖矿效率比一般的计算机高出很多。例如,S9 矿机的每美元哈希运算速率大约是 GTX570 矿机的 20000 倍;个人计算机几乎不可能赢得哈希算力的竞争。

1.2.3 安全

安全性是指网络在抵御攻击方面的能力有多强大,主要指确认事务的溢出。

  • 去中心化

    去中心化是比特币与传统支付网络最显著的区别,去中心化可以避免单点失效对网络造成的影响。在去中心化的网络中,大部分节点之间的相互勾结几乎不可能发生的。

  • 容错

    网络应能能够容忍一定比例的功能异常的资源,容忍度是百分比的上限。

1.2.4 可扩展性

一个网络可以在规模增加的情况下提供相对稳定的服务,这种网络被认为是可扩展的。区块链网络包括以下服务:

  • 吞吐量

    吞吐量指当网络扩展时,每秒可以处理的交易笔数。比特币的吞吐量上限为7tps,不管网络中有多少个节点。

  • 交易确认

    交易确认指接受者需要等多久才能相信他的交易不可能溢出。确认时间不应随着网络规模的扩大而增加。

  • 交易成本

    交易成本的主要组成部分是交易费用,交易应该是合理的,如果交易费用过高,将使支付不切实际,而如果交易费用过低,将会遭到 Sybli 攻击。随着比特币挖矿难度的增加,比特币的交易费用越来越高,并不适合作为全球性的支付网络。截至本文完成时,比特币的平均价格大约为 2 美元。

1.3 规范

Qitmeer 的规范设计的宗旨在于遵守经典区块链设定。

1.3.1 开放性

Qitmeer 是一个开放的区块链网络,通过工作量证明机制来自由地加入网络,并且通过使用 BlockDAG 协议来避免矿池集中的风险。

  • 工作量证明

    到目前为止,工作量证明是加入区块链网络最开放的方式,因为电力是唯一需要贡献的资源,每个节点都拥有电力。此外,这种资源是物理的,换句话说,它是不可复制的。

  • 无预定义节点

    Qitmeer 没有预定义特别的网络节点,如超级节点。

1.3.2 公平

BlockDAG 是公平的,因为它是一种协作模式,而不是区块链的竞争模式。

  • 抵抗矿池

较高的机会造成了矿池资源的集中,这也是竞争模式的结果。Qitmeer 采用基于 BlockDAG 的协议 Spectre,Spectre 是一个协作模型,矿工独立挖矿的机会成本与矿池挖矿的机会成本是相同的,因此独立矿工不需要加入矿池,否则也将导致资源集中的风险。

  • 抗 ASIC 挖矿算法

    布谷鸟循环是工作量证明的图论,是抗 ASIC 的主流理论算法。Qitmeer 使用此算法来确保没有人具有过高的挖矿效率优势。

1.3.3 安全

Qitmeer 网络中,安全是首要的,Qitmeer 是一个完全去中心化的并且 50%容错机制的网络,这也是最严格的标准要求。因此,Qitmeer 没有因为其他指标而牺牲安全性。

  • 完全去中心化

    Qitmeers 网络中的所有节点都是对等节点,都可以参与网络共识。

  • 50%容错

    恶意的对手必须拥有 50%的哈希算力才能控制区块链网络。在 Spectre 或 GhostDAG 协议中,容错与吞吐量无关,然而比特币网络的安全性与吞吐量成反比关系。

1.3.4 可扩展性

Qitmeers 的混合 BlockDAG 协议具有扩展性好、确认速度快、吞吐量高、交易费用低的优点,这些优点保证了 Qitmeer 网络在相当长的时间内保持稳定运行。

  • 确认速度快

    Spectre 是一个可以快速确认的 BlockDAG 协议,Qitmeer 将其作为区块链网络的共识算法。

  • 高吞吐量

    Spectre 是一种 BLCOKDAG 协议,吞吐量可以增长到网络的物理极限,如网络带宽或传播延迟。

  • 交易成本低

    严格地说,由于交易费用随网络的扩展而仅仅略微的增加,因此成本没有明显增加。然而,平均成本将长期保持较低的可接受水平,因此,从合理性的角度来看,成本规模是可以接受的。

2. Qitmeer 代币设计

现有的区块链本质上是不符合伊斯兰教法的,因为它们在最初设计的时候没有考虑到这一点。Qitmeer 从一开始设计就考虑到了伊斯兰教法,并重新设计了一个有效的解决方案,命名为 OP_TOKEN。

2.1 概述

2.1.1 问题定义

区块链应该在两个主要关注点方面来遵守伊斯兰教法。

  • 内在价值

    资产必须具有潜在价值,不能凭空创造。在现有的代币发行平台上,如以太坊,个人可以毫无基础地发行任意数量的代币。

  • 资产认证

    不允许发行不合规的资产。现有区块链没有这方面的限制,无法进行必要的资产验证。

2.1.2 相关工作

OP_TOKEN 的灵感来源于彩色币理念,该理念通过使用 OP_RETURN 以及 OP_GROUP 来代表和管理比特币上的真实资产,这是由 Andrew Stone 设计的发行资产的参考实现。OP_TOKEN 具有资产可比性和价值相关性等独特功能,适用于各种不同的现实场景。下面详细介绍了一些相关概念:

2.1.3 UTXO 模型

UTXO 代表未花费的交易输出。换句话说,在 Qitmeer 网络中没有账户。用户拥有和花费的是一堆未花费的交易输出,我们可以通过汇总它们来计算余额。

第一比交易 tx1 有三个输出,其中第一个是支出,所以 tx1 有 2+3=5 个硬币余额。第二比交易 tx2 花费 tx1 的 2 个 utxo 并支付到 3 个地址,并创建 3 个新的 utxo。

注意: 现在旧的 utxos(tx1 的)已经不再是 utxo 了,所以以后不能再花费。

2.1.4 脚本系统

用户如何使用其 UTXOs 背后的机制是执行特定的脚本。输出存储了一半的脚本,我们必须展示另一半脚本,并将两者结合起来验证我们是否可以花费这些钱。前半部分脚本被称为锁定脚本,就像一个锁定的宝箱,后一部分脚本被称为解锁脚本,就像打开宝箱的唯一钥匙一样。

让我们来看一下(P2PKH)的典型实例[5]

UTXO 模型中的锁定脚本:

OP_DUPOP_HASH160<PUBLIC_KEY>OP_EQUALVERIFYOP_CHECKSIG

新创建的交易中的解锁脚本:

将解锁脚本与锁定脚本组合结合:

OP_DUPOP_HASH160<PUBLIC_KEY>OP_EQUALVERIFY OP_CHECKSIG

整个脚本执行包括两步.第一步: OP_HASH160<PUBLIC_KEY > OP_EQUALVERIFY 验证解锁脚本中的公钥是否与锁定脚本中的公钥匹配。第二部:OP_CHECKSIG 验证签名是否有效。

2.1.5 彩色币与 USDT

彩色币[6]是一种可以代表区块链上资产的方法,因此它可以利用区块链的防篡改能力。它使用 tx 脚本执行 OP_RETURN 中断脚本执行,这样我们就可以在它后面的资产上添加信息,同时不妨碍脚本的验证。

锁定脚本:

OP_RETURN

稳定币(USDT)也使用基于 OP_RETURN 的 OMNI 层协议来定义比特币上的资产。下面是一个典型的 USDT 交易与协议设计的细节

^1 OP_RETURN 6f6d6e69000000000000001f00000015c9054900

2.1.6 OP_GROUP

OP_RETURN 方案更适合应用于成熟的区块链,因为它不会改变底层区块链协议,也不会产生风险分叉。然而,缺点是矿工无法对协议进行验证,因此存在一定的安全风险。

OP_GROUP [8]是来自于 BU 的比特币现金(BCH)[9]资产发行提案。OP_GROUP 支持代币发行、传输、销毁等。由于 OP_GROUP 是 BCH 脚本系统的扩展,因此它是 BCH 协议的一部分,因此矿工可以进行更可靠的验证。

基本的彩色 pay 2 个公钥哈希脚本如下:

OP_DATA(groupaddress)
OP_GROUP
OP_DROP
OP_DUP
OP_HASH16
OP_DATA(pubkeyhash)
OP_EQUALVERIFY
OP_CHECKSIG

主要的区别很简单,只需添加一个组地址来区分不同的组,其他操作(如创建和销毁资产)是相似的。

2.2 OP_TOKEN 设计

2.2.1 概述

在 OP_TOKEN 中有一个名为 LICENSE 的独特的代币。由有公信力的知名专家或组织持有执照。任何打算发行代币的实体都需要获得核准的许可证。对等方可以转让许可证,因为它们也是代币。转让历史是公开的并且不可改变,因此发起人必须非常谨慎,以防转让错误。2.2.2 许可证发行许可证全部在创世区块内生成,并分发给 C 预留委员会成员。一个最小的单位(SAND)可以代表一个许可证,一个区块有 M 个 coin,一个 coin=N 个SAND,所以我们总共有 M*N 许可证,这足以满足发行资产需要。

# C = 100, M = 10, N = 10^8 (M*N = 10 billion), 
# all examples are based on this setting 
# Ex1: Distribute licenses to the commitee, 
# M*N/C = 100 million for each member. 
--
INPUTS: 
  INPUT: PREVIOUS_OUTPUT: # (COINBASE of GENESIS) 
      S: "DUP HASH160 [GEN] EQUALVERIFY CHECKSIG" 
      V: 10000000000 
  S: "[SIG] [GEN_PK]"
OUTPUTS:
  OUTPUT: 
    S: "[LIC] TOKEN DROP DUP HASH160 [COMM1] EQUALVERIFY CHECKSIG"
    V: 100000000 
  # ... ... (COMMITTEE MEMBER 2~99) 
  OUTPUT: 
    S: "[LIC] TOKEN DROP DUP HASH160 [COMM100] EQUALVERIFY CHECKSIG" 
    V:100000000 
  OUTPUT: 
    S: "RETURN [DATA]" 
    V: 0 

2.2.3 许可证批准

组织必须获得许可证才可以发行资产。他们可以向委员会的任何成员(C.M.)申请许可证。一旦许可证被批准并授予,他们将收到来自于(C.M.)委员会成员的特定代币,这个代币就是许可证。

# Ex2: C.M. warrant a license to the issuer (ISS),
# note the license change will go back to the C.M.
---
INPUTS:
  INPUT:
   PREVIOUS_OUTPUT:
     S: "[LIC] TOKEN DROP DUP HASH160 [COMM] EQUALVERIFY CHECKSIG"
     V: 100000000
   S: "[SIG] [COMM_PK]"
OUTPUTS:
  OUTPUT:
    S: "[LIC] TOKEN DROP DUP HASH160 [ISS] EQUALVERIFY CHECKSIG"
    V: 1
  OUTPUT: # License change
    S: "[LIC] TOKEN DROP DUP HASH160 [COMM] EQUALVERIFY CHECKSIG"
    V: 99999999
  OUTPUT:
    S: "RETURN [DATA]"
    V: 0

2.2.4 资产发行

一旦获得许可证,组织就可以发行资产;但是,他们不能任意设置代币总量。恰恰相反,要发行一定数量的资产,就需要转换相同数量的 SAND。Qitmeer 称此过程为“代币铸造”。 就像现实中的情况一样,铸造一枚金币需要同样重量的金沙,代币需要同样数量的 SANDs.

这一发行体系的第一个好处是保证代币基本的内在价值,从而显著减缓价格波动。另一个优势是,代币和本币不再是价值孤岛;它们运行在同一个生态系统内,这将提高资产流动性,使整个网络更加健康。

# Ex3: Convert 100000000 native SANDs, i.e. 1 Coin,
# to 100000000 sands of the new token,
# note the license will go back to the issuer for future issurance.
INPUTS:
  INPUT:
    PREVIOUS_OUTPUT: #(1 LICENSE)
      S: "[LIC] TOKEN DROP DUP HASH160 [ISS] EQUALVERIFY CHECKSIG"
      V: 1
    S: "[SIG] [LIC_PK]"
  INPUT:
    PREVIOUS_OUTPUT: #(1 Qitmeer Coin)
      S "DUP HASH160 [COIN] EQUALVERIFY CHECKSIG"
      V: 100000000
    S: "[SIG] [COIN_PK]"
OUTPUTS:
  OUTPUT: # License returns to the issuer
    S: "[LIC] TOKEN DROP DUP HASH160 [ISS] EQUALVERIFY CHECKSIG"
    V: 1
  OUTPUT:
    S: "[TOK] TOKEN DROP DUP HASH160 [PK] EQUALVERIFY CHECKSIG"
    V: 100000000
   OUTPUT:
    S: "RETURN [DATA]"
    V: 0

2.2.5 资产转让

双方可以相互转让资产。而且我们可以在一笔交易中转让多个资产。交易需要确保每个资产的输入总量等于每个资产的输出总量。

# Ex4: Alice exchanges her 100 RMB token with Bobs 20 USD token.
INPUTS:
  INPUT:
    PREVIOUS_OUTPUT:
      S: "[RMB] TOKEN DROP DUP HASH160 [A_PKH] EQUALVERIFY CHECKSIG"
      V: 100
    S: "[A_SIG] 0X83 [A_PK]"
  INPUT:
    PREVIOUS_OUTPUT:
      S: "[USD] TOKEN DROP DUP HASH160 [B_PKH] EQUALVERIFY CHECKSIG"
      V: 20
    S: "[B_SIG] 0X83 [B_PK]"
OUTPUTS:
  OUTPUT:
    S: "[USD] TOKEN DROP DUP HASH160 [A_PKH] CHECKSIG"
    V: 20
  OUTPUT:
    S: "[RMB] TOKEN DROP DUP HASH160 [B_PKH] CHECKIG"
    V: 100

2.2.6 熔币

熔币是造币的逆向过程,即从代币兑换为本国货币。沙子的总量是恒定的,无论是以本国沙子还是代币沙子的形式。因此,销毁代币是不允许的,只允许兑换代币。为了保持价格稳定,发行人可以熔币以降低代币的流动性,这对于实现稳定的代币是可行的。熔币保证了代币的基本价值,就像一枚金币的最小价值与相同重量的黄金一样。

# Ex5: Melt 100 token sands into 100 native sands
INPUTS: 
  INPUT: 
    PREVIOUS_OUTPUT: 
      S: "[TOK] TOKEN DROP DUP HASH160 [ISS] EQUALVERIFY CHECKSIG" 
      V: 100 S: "[SIG] [ISS_PK]" 
OUTPUTS: 
  OUTPUT: 
    S: "DUP HASH160 [COIN] EQUALVERIFY CHECKSIG" 
    V: 100 
  OUTPUT: 
    S: "RETURN [DATA]" 
  V: 0

3. 共识协议

3.1 从区块链到 BlockDAG

比特币所代表的区块链由于协议限制而无法扩展,在 Nakamoto 共识中,例如最长链规则、1MB 区块大小和 10 分钟的区块生成速率限制了比特币在不考虑带宽和传播延迟的情况下仅能达到 7tps 的理论吞吐量。

提高扩展性最直观的方法是缩短区块生成时间或增加区块大小,Satoshi 之所以没有采用着这种方法,是因为它带来了分叉,它分散了主链的哈希算力,从而导致了安全漏洞。

GHOST 协议引入了最重树共识,可以在保持分叉的同时不牺牲安全性。注意,这里的区块链已经变成了一个区块树,因为最大的子树集中了大部分的哈希算力,安全性和比特币一样高。主链的路径是:从创世区块开始到叶区块,这一路径上他的后代数量最多,其他区块都是链下区块。只有主链上的区块对吞吐量有贡献,链下区块则有助于增加安全性。由于具有较高的出块速率或较大的区块。

区块树显著的提高了吞吐量。但是,仍然存在着链下区块交易的浪费,这一点也应该有助于吞吐量的提高。包容性协议提出了一种新的分类账数据结构,每个数据区块对每个未确认的数据区块进行确认。这样的改进将区块树升级为BlockDAG。

从区块链到 BlockDAG 的历史可以看出,区块链只是 BlockDAG 在低吞吐量时的一个特例,本质上他们是相同的。因此,它是一种提高扩展性的方法,其范例最接近比特币。显而易见的好处是,它将是强大的,因为它继承比特币稳定的特征。此外,这种方法在协议方面是无限可扩展的,只受物理限制(如带宽限制)。一个健壮的公共链本身就是包含了进一步扩展方案,(如切分和状态通道)的最佳基础,因此 BlockDAG 是 Qitmeer 的首选扩展性解决方案。

3.2 共识

Qitmeer 采用了结合 SPECTRE 与 GHOSTDAG 的混合共识,以实现快速确认和高吞吐量。

3.2.1 SPECTRE

Spectre[2]是一种基于 BlockDAG 的协议,确认速度快并具有高的吞吐量,同时具备较强的抗 50%攻击能力。Spectre 保证了区块链的安全性能,这意味着一旦某个交易被网络接受,它就不可能被更改。此外,Spectre 还保证了对诚实用户的快速确认,而不是所有用户;换句话说,较低的活跃度。活跃度和快速确认之间存在一种权衡;由于较低的活跃度只影响恶意的用户,所以 Spectre 优先选择后者。Spectre 适用于支付模式。只有恶意用户会发起双重花费,因此只有他们的交易可能无限期延迟。

Spectre 是一个无状态的交易模型,因此不需要获得整个区块的总排序。只有当两个块冲突时才需要对区块排序。当两个区块冲突时,Spectre 使用投票算法来决定哪个区块获胜。假设区块 x 与区块 y 中的另一个交易冲突,并且假设块 z 按照以下规则对它们进行投票:

  1. 如果 z 区块在 x 区块的后面,而不是 y 区块的后面,z 对 x 投赞成票,表示为 x<y,反之亦然。

  2. 如果区块 z 同时在区块 x 和区块 y 的后面,那么 z 会遵循过去投的多数票。

  3. 如果区块 z 既不在在区块 x 后面,也不在区块 y 的后面,那么 z 会遵循未来的多数票。

  4. x 和 y 都投自己的票,除非其中一个在另一个的后面。

按照规则 4,区块 x 为自己投票 x<y, 区块 y 为自己投票 y<x。

按照规则 1,区块 6,7,8 为 x 投票 x<y,区块 9,10,11 为 y 投票 y<x。

按照规则 2,区块 12 按照他的过去进行投票。并不是所有过去的区块都进行投票,我们把全局视野切换为区块 12 的局部视野,这就意味着区块 10,11 被排除在外。

按照规则 3,区块 5 为 x 投票 x<y,y 因为他未来的大部分投票都倾向于 x。注意,当前视野是区块 12 的局部视野,区块 11 被排除在外,因此我们不能取得他的投票。

同时,按照规则 3,区块 1~4 为 x 投票 x<y。

现在区块 12 的所有过去区块已经完成投票。区块 x 得到了 10 票,区块 y 得到了 2 票,区块 12 遵循了多数票规则为 x 投票 x<y。

  • 确认时间

Spectre 论文提供了两种区块确认的方式,比如线上确认方式与线下确认方式。线上确认的方式更加简单。论文的仿真结果也采用了线上的方式。Qitmeer 同样采用线上的方式。

当节点 v 收到区块 x 时,他会循环计算这个区块上线的风险。当风险低于设定的阈值时,他才会接受这个区块。节点 v 的区块 x 的确认时间是:从节点 v 收到区块 x 开始到节点 v 接受区块 x 的时间。

下面的算法计算了区块 x 在 G 中的线上风险,G 是 v 在 t 时刻观察到的BlockDAG。

3.2.2 GHOSTDAG

由于 Qitmeer 作为付款工具,在大多数情况下,他足以为分类账中的数据区块提供部分排序或成对排序。但是,有时我们可能仍然需要获得所有区块的总(线性)排序,特别是当我们想要根据区块的顺序奖励它们时。

获取 DAG 分类账的总排序并不像区块链那样直观,因为 DAG 分类账包含由各种原因造成的分叉,例如网络传播延迟、并发区块创建、矿工错误。因此,作为 Qitmeer 共识协议的补充,我们使用 GHOSTDAG 来获得总排序以奖励排序中较早出现的区块。

除了完全排序之外,GHOSTDAG 还提供了活跃性保证,使共识协议更加健壮,这意味着诚实的区块和恶意的区块都可以在定义的时间内得到确认,尽管确认恶意的区块可能需要很长的时间。

假设网络传播延迟的上限和区块创建速率的是恒定的。很直观的是,如果节点是诚实的,它们就会形成一个子图,其中每个区块最多拥有一个常量数量的分叉。我们把这个常数表示为 k。K 可以根据传播时间和区块创建速率来计算。子图被表示为一个 k-cluter,最大的 k-cluster 被称为一个蓝色集合。

如果我们可以通过跟随一个区块中的父边引用,从区块 x 跨越到区到块 y,那么我们就说在 x 和 y 之间有一个部分排序,y 在 x 之前。例如在下图中,我们可以通过区块 B 区块跨越区块 J 到达区块 A,因此在区块 A 和区块 J 之间有一个部分排序,A 区块在 J 区块的前面。注意并非所有区块都与其他区块具有部分排序。例如,在区块 B,C,D 之间就不存在部分排序。我们称不存在部分排序的区块集和为反序区块集和,k 群中任何反序区块的大小最多为 k。

GHOSTDAG 以一种支持蓝色区块和惩罚红色区块的方式排序 DAG 分类账本。我们根据蓝色区块的部分排序和一些拓扑排序来确定它们之间的顺序。然后,对于任何蓝色区块 B,将过去所有尚未添加到排序中的在区块 B 前面的红色区块添加到区块 B 之前;这些红色区块也应添加拓扑排序。请注意,对于任何蓝色区块 B,如果我们将来从 DAG 区块中移除 B,B 过去的区块的顺序应该保持不变。

上图中的小的 DAG 分类账上 GHOSTDAG 过程的输出顺序示例:(A,D,C,G,B,F,I,E,J,H,K)。不幸的是,k-cluster 是非确定性的,因此 GHOSTDAG 对于一个不断增长的 DAG 分类账本来说是不太实际的,而且可能导致较长的确认时间。因此,GHOSTDAG 只被用于矿工的奖励机制,因为对于一个矿工来说,等待一段时间来获得他或她的挖矿奖励是可以接受的。可以接受的交易确认时间仍然采用 SPECTRE 方式定义。

3.3 挖矿算法

3.3.1 BlockDAG 与挖矿

在协议方面,BlockDAG 的协作模型比区块链的竞争模型更公平。每个节点都会根据其贡献获得相应的奖励,而不管它们拥有多少哈希算力。Qitmeer 认为公平比可扩展性的提高更重要,因为它代表了区块链的精神。中本聪共识的总值自是公平,即每个有电力的节点都可以投票;然而,只有一小部分矿池有机会参与共识。独立矿工花费了巨大的机会成本,因为他们不得不等待相当长的时间去挖出一个区块以弥补成本,最终他们不得不转向矿池。BlockDAG 整合了每一个矿工的区块,因此矿工们对他们的回报有着强烈的期望,并且他们强烈的愿望加入矿池。

除了协议之外,挖矿算法也是公平性的另一个因素,因此,如果没有公平的挖矿,协议的公平性就没有用处。挖矿公平性涉及到一系列的挖矿成本,如POW 中的电力成本,可以得出相应等价的哈希算力。实际上,ASIC 矿机的挖矿效率比其价格高很多。

3.3.2 布谷鸟循环-工作量证明

工作证明(POW)用于确认交易并生成新的区块,因此它是 POW 类型加密货币中一个非常重要的引擎。POW 不可以使一个参与者比另外一个参与者具有显著优势。这就是 Satoshi 所说的:“POW 本质上是一个 CPU 投一票。”

然而,与 CPU 和 GPU 相比,最广泛使用的工作证明算法(如 SHA-256、Blake2b、Scrypt)在 ASIC 设备上的效率更高。这可能会导致 ASIC 拥有者比CPU 和 GPU 拥有者拥有更大的投票权。它违反了“一个 CPU 一票”的原则。

我们引进了布谷鸟循环-工作量证明(一种图论工作证明算法),它具有抗 ASIC特性。布谷鸟循环-工作量证明用于在大型伪随机图中查找某些子图。我们希望这种算法具有抗 ASIC 的特性,它几乎利用到了硬件(如 GPU)的所有部分。

布谷鸟循环-工作量证明是 John Tromp 的作品,它的目的是在大型伪随机图中寻找某个子图。特别地,在具有 n 个节点 m 个边的二部图中搜索指定长度 l 的圈。如果找到一个循环,它的哈希难度小于目标难度,那么布谷鸟循环-工作量证明就完成了。

溢出

  • 1.外环

    a) 使用以下值生成区块头部:

    • 难度:tx 的目标难度
    • TxRoot:The merkle root of the tx tree
    • 时间戳:一个 Unix 时间戳
    • nonce:一个 64 位(8 字节)字段,其值由矿工调整。
    • 父根:上一个父块(DAG 层)的梅克尔根

    b)为内部循环设置尝试时间,当前配置为 60 秒。

    c)设置截止时间等于尝试时间添加当前 Unix 时间戳。

    d)内部循环

    1. 检查头部区块的哈希是最新头部区块的哈希,当前时间戳小于截止时间。
    2. 用一些共识值初始化布谷图,例如边缘位(图的大小)、证明大小(周期的长度)。
    3. blake2b 算法计算区块头部。
    4. 通过 SIPHASH 函数建立节点、区块头部的散列值和临时内部循环作为输入参数。
    5. 边缘修剪:它大大减少了边缘的数量,我们的基本算法必须处理。
    6. 查找循环算法试图在生成的图中找到一个解(例如,一个长度为42 的循环)
    7. 如果找到了解:
      a.blake2b 算法计算循环 nonce。
      b.将循环 nonce 的哈希难度与当前目标难度进行比较。
    8. 如果循环 nonce 的哈希难度大于或等于目标难度,则将区块发送到交易池,在对等节点之间传播以进行验证,然后在下一个区块上进行工作。
    9. 如果循环 nonces 的哈希难度小于目标难度,则证明被抛出并继续内部循环。

边缘(节点)生成

为了简单起见,我们为二部图定义了 32 个边。我们两次调用 SIPHASH 函数来创建两个边缘端点(U 和 V),第一个输入值以 2nonce 开始,第二个输入 值以 2nonce+1 开始。

修边

二部图中有一条特殊的边,我们称之为叶边。它永远不可能是循环的一部分。叶边有一个特征,它连接的节点必须至少有一个度数为一的节点。通过消除二部图中的叶边,可以大大降低图的复杂度,从而加快从二部图中寻找循环的速度。

  • 步骤 1:节点 0、节点 3 和节点 10 是一个度节点,消除边(0,13)、(6,3)和边(10,9)。

  • 步骤 2:节点 9 和节点 13 是一个度节点,消除了边(8、9)和边(2、13)。

  • 步骤 3:节点 8 是一个度节点,消除边(8,11)

循环检测

修边后,如果发现长度为 L 的循环,我们认为我们找到了解决这个问题的方法。我们将循环边存储在一个集合中,将生成的循环的 nonce 放入一个集合中,并作为循环检测的结果返回。

难度控制

在图中找到一个循环的难度与 M/N 成正比。这里 M 代表图的边,N 代表图的节点。然而,在一个变化的图中找到一个循环并不容易。对于加密货币,难度必须以精确控制的方式进行缩放。通常的做法是 M/N 的比率保持不变,比如M/N=1/2。因此,在实际使用中,它还添加了类似于比特币的哈希难度控制。循环 nonces 的概要是通过哈希函数得到的,然后与目标难度进行比较。

3.4 奖励

3.4.1 交易冲突

由于异步区块子任务的存在,BlockDAG 协议不可避免地会包含重复的交易,称为交易冲突。矿共倾向于用更高的费用打包交易,以实现利润最大化。这将导致区块的高重复率。重复的交易对吞吐量没有贡献,更重要的是,低的交易费用会导致无限期的等待确认。节点之间不能相互协调以避免冲突,只能设计一种完善的激励机制来惩罚自私的挖矿行为。

解决这个问题的直观方法是共享交易费用,这种方法将使所有的矿工达到纳什均衡,所有的矿工将从他们的交易池中随机选择交易。这种方法将大大减少交易冲突;但是,用户不再需要通过支付更高的费用来加速其交易确认。

Qitmeer 采用了包容协议中引入的最优激励机制。不同的交易,从交易池中被选择的概率不同,费用越高,被选择的概率越高。因此,紧急交易可以增加其交易费用以获得更好的矿工服务,而低费用交易仍然有机会确认。

3.4.2 先到先得

为鼓励矿工在创建区块的同时提交区块。交易费应属于合并交易中的第一个矿工。因此,这种奖励机制要求交易具有全球全局排序,这是由 GHOSTDAG 协议要求的。

包容性协议声明,这种机制存在一些安全隐患,因为它不会惩罚那些在私下挖矿的恶意区矿工。包容性协议通过只奖励那些偏离主链不是太多的区块来解决这个问题。Qitemeer 赞赏并采用包容性协议。

4. 协议与互操作性

区块链是去中心化金融的基础设施。当区块链成熟时,就会有一个新的经济体出现。本章介绍了在 Qitmeer 网络上的典型应用以及其与 Qitmeer 交互的协议。

4.1 挖矿协议

4.1.1 挖矿算法

我们希望可以防止挖矿算力的集中化,并且希望矿工能够利用所有的硬件(GPU、CPU)。因此,Qitmeer 使用了一种称为布谷鸟循环[11]的工作证明算法,这是一种内存硬算法。该算法用于在大型伪随机图中查找某些子图。本文介绍了 Qitmeer 的工作量证明。

4.1.2 矿工能力

目前,最快的 GPU 矿工是由 Qitmeer 开发人员开发的 Qitmeer 矿工软件。然而,Qitmeer 矿工软件仍处于开发的早期阶段,它不是一个深度优化的版本。我们希望社区最终能创造出更加优秀的矿工软件。

Qitmeer 矿工软件支持并行GPU 挖矿。您可以并行运行多个 Nvidia GPU 和 AMD GPU 进行挖矿。

兼容的 GPU 硬件:

  • Nvidia:GTX1060GTX1070,GTX1070ti,GTX1080,GTX1080ti,GTX2070,

GTX2080,GTX2080ti

  • AMD:RX570,RX580,Vega56,Vega64

原则上,只要图形内存大于 5GB,GPU 矿工就可以运行,Qitmeer 矿工既支持独立挖矿,也支持矿池挖矿。

独立挖矿

如果您决定在不加入矿池的情况下挖矿,那么这些是您自己实现独立挖矿的步骤。

  • 您需要运行一个完整的节点来验证交易。首先,安装 Qitmeer[13]并下载完整的区块链。Qitmeer 是一个完整的节点软件程序,可以全面验证交易和区块。

  • 下载并安装 Qitmeer-miner 等软件。对于独立矿工,挖矿软件连接了全节点的区块链。Miner 软件的主要工作是创建有效的工作量证明,并将区块广播给Qitmmeer 网络的其余部分。

  • 最后,启动 Qitmeer miner 软件,连接到 Qitmeer 网络,开始独立挖矿。

矿池挖矿

大多数矿池支持分层协议,因此您的矿工程序应该配置此协议。例如:

miner.exe-ostratum+tcp://serverIp:3177-mYourWalletAddress.YourMachineId

4.1.3 矿池能力

在 Qitmeer 中,工作证明算法非常适合于矿池。

4.2 钱包协议

4.2.1 概述

区块链钱包本身不存储任何数字货币,它主要是一个用于创建数字货币交易、跟踪钱包余额的计算机程序,使得用户方便进行地址和私钥管理。钱包软件是整个区块链生态发展的基础,任何产业服务都可以通过区块链钱包实现其价值,块链技术本身将以自己的方式重构传统的互联网商业模式。

Qitmeer 测试网和主网发布后,官方将同时发布不同用户的钱包应用程序。例如,在面向专业的命令行钱包中,用户只需根据相关指令输入相应的命令即可完成地址生成,发送交易,以及其他操作。普通用户的移动终端钱包,用户可以像其他应用一样,方便快捷地在手机上完成相关操作。

开放性

一个优秀的区块链公共链项目应该更具包容性和开放性。因此,除了自己的官方钱包之外,Qitmeer 在开发之初还为第三方钱包开发设计了所有接口和软件开发工具包。第三方钱包机构可以使用这些接口开发各种支持 Qitmeer 代币交易的钱包程序。括:HD 钱包、SPV 钱包、浏览器钱包,满足不同用户需求。

如何创建钱包

以下是一个简单的钱包创建和交易步骤:

  1. 生成播种机。
  2. 派生私钥。
  3. 派生公钥。
  4. 派生地址。
  5. 监控输出。
  6. 创建未签名的 Txes。
  7. 在 txes 上签名。
  8. 广播 txes。

要完成上述操作,我们需要依赖 Qitmeer 的 nx-sdk 和 RPC 接口。NX SDK 是集成加密、解密和签名功能的工具集合。

我们可以使用 NX SDK 开发以下功能:

  1. 生成播种机。
  2. 派生私钥。
  3. 派生公钥。
  4. 派生地址。
  5. 创建未签名的 Txes。
  6. 在 txes 上签名。

RPC 是基于 http 协议的网络接口,很容易与 Qitmeer 网络交互,我们可以使用 NX SDK 开发以下功能:

  1. 从 BlockDAG 或区块链获取区块数量。
  2. 获取区块数据与取块高度。
  3. 使用 txid 获取交易数据。
  4. 获取等待确认的所有交易数据
  5. 监控输出。
  6. 广播 txes。

4.3 跨链

Qitmeer 承担了整个伊斯兰分布式金融的流动性。因此,Qitmeer 的设计目标是建立一个简单而强大的基于 UTXO 模型的价值传输网络,这就是为什么Qitmeer 本身没有提供链上智能合约的原因;相反的,它更倾向于互操作性解决方案以便集成各种区块链和应用程序。最后,它们将成为 Qitmeers 生态系统的一部分,并可以相互作用。

4.3.1 UTXO 互操作性

跨链技术主要是解决不同主链之间数据交换的问题,最直接的跨链技术应用是“DEX:去中心化交易”,没有第三方参与的情况下将 BTC 与 HLC 进行交换,完成钱包到钱包的交易。

目前,Qitmeer 通过哈希锁定支持 P2SH 脚本合约和跨链功能。

原 理

跨链哈希锁定的实现过程如下:

  1. Alice 和 Bob 分别在 HLC 和 BTC 链上生成各自的地址
  2. Alice 生成自己的密钥和密钥哈希;
  3. Alice 将她的 HLC 令牌锁定到 HLC 主链的哈希锁定智能合约中。解锁条件是 Bob 持有密钥或在超过指定时间后将其返回给 Alice。
  4. Bob 检查 Alice 在 HLC 主链的智能合约,并在 BTC 中生成相应的智能合约,解锁条件是 Alice 持有密钥或在超过指定时间后将其返回给 Bob。
  5. Alice 删除 Bob 在哈希锁定智能合约中锁定的 BTC。
  6. Bob 获得 Alice 锁在哈希锁定合约中的 HLC,完成交易处理;

4.3.2 智能合约互操作性

基于智能合约类型的跨链解决方案,Qitmeer 通过哈希锁定智能合约完成Qitmeer 区块链资产对其他账户模型的跨链交易。

下面以 ETH 为例说明如何完成智能合约的跨链操作:

智能合约互操作性原理

  1. Alice 和 Bob 分别在 HLC 和 BTC 链上生成各自的地址
  2. Alice 生成自己的密钥和密钥哈希;
  3. Alice 将她的 HLC 令牌锁定到 HLC 主链的哈希锁定智能合约中。解锁条件是 Bob 持有密钥或在超过指定时间后将其返回给 Alice。
  4. Bob 检查 Alice 在 HLC 主链的智能合约,并在 BTC 中生成相应的智能合约,解锁条件是 Alice 持有密钥或在超过指定时间后将其返回给 Bob。
  5. Alice 删除 Bob 在哈希锁定智能合约中锁定的 BTC。
  6. Bob 获得 Alice 锁在哈希锁定合约中的 HLC,完成交易处理;

参考文献:

[1] Satoshi Nakamoto.Bitcoin:A Peer-to-Peer Electronic Cash System. .

[2]Yonatan Sompolinsky,Yoad Lewenberg,and Aviv Zohar. SPECTRE: Serialization of Proof-of-work Events: Confirming transactions via recursive elections. http://eprint.iacr,org/2016/1159.pdf.

[3] Yonatan Sompolinsky and Aviv Zohar.PHANTOM,GHOSTDAG:Two Scalable BlockDAG protocols. http://eprint.iacr,org/2016/104.pdf

[4] Ethereum is a global,open-source platform for decentralized applications. www.ethereum.org

[5] Pay-to-Pubkey Hash. http://en.bitcoinwiki.org/wiki/pay-to-pubkey_hash.

[6] Colored Coins. http://en.bitcoinwiki.org/wiki/colored_coin.

[7] Tether:Fiat currencies on the Bitcoin blockchain. http://tether.to/wp-content/uploads/2016/06/TetherWhitePaper.pdf.

[8] Andrew Stone.BUIP077:Enable representative tokens via OP_GROUP on Bitcoin Cash. https://github.com/bitcoinunlimited/buip/blob/master/077.mediawiki

[9] Peer-to-Peer Electronic Cash. https://www.bitccoincash.org

[10] Yoad Lewenberg,Yonatan Sompolinsky,and Aviv Zohar.Inclusive BlockChain Protocols. https://www.cs.huji.ac.il/~uoni_sompo/pubs/15/inclusive_full.pdf

[11] John Trump.Cuckoo Cycle:amemory bound graph-theoretic proof-of-work. https://github.com/tromp/cuckoo/blob/master/doc/cuckoo.pdf

[12] The HLC developers.Cuckoo Cycle POW,a Programmatic Proof-of-Work. https://github.com/halalchain/hips/blob/master/hips/hip-0005.asciidoc

[13] The HLC developers.Qitmeer blockchain. https://github.com/halalchain/qitmeer

Qitmeer 白皮书(中文版).pdf (3.0 MB)

此版修改了社区翻译版的展示格式。

Qitmeer中本版技术白皮书.pdf (1.3 MB)

新版本白皮书