Qtum量子链关键技术解读

即Qtum量子链开发者meetup——深圳站演讲实录html

做者:钟文斌git

今天咱们将就如下几个主要的问题来进行探讨:github

1. 为何要创建Qtum量子链web

2. Qtum量子链的技术基础算法

3. Qtum量子链的技术创新数据库

4. Qtum量子链的生态系统编程

1.为何要创建Qtum量子链

首先不少熟悉区块链的开发者朋友确定会有这样的疑惑,咱们已经有了比特币和以太坊为何还要创建Qtum量子链呢?若是要给Qtum量子链一个定义的话,我我的的理解是:Qtum量子链是首个基于UTXO模型,并采用PoS共识机制的智能合约平台。其中包含了三个概念:UTXO模型、共识机制PoS还有智能合约平台,稍后我会对他们一一进行详解。浏览器

Qtum量子链项目从2016年3月就已经开始筹划和执行,2017年6月时发布了初版测试网络,2017年9月时主网正式上线,因此Qtum量子链在产品的更新迭代方面仍是比较快的。另外Qtum量子链也能够说是站在了巨人的肩膀上,结合一些成熟的区块链生态的优点,稍后也会解释。安全

先来看一下Qtum的一些基本参数,区块大小:2MB;出块时间:128秒;共识机制: MPoS;网络

链上理论最大TPS: 70~100 笔交易/秒;初始发行量:100,000,000 QTUM;当前挖矿奖励:4 QTUM,每四年减半;挖矿奖励总额:约 7,884,000 QTUM;基础代码框架:比特币Bitcoin core;支持以太坊虚拟机EVM。

关于Qtum的设计理念,不得不提比特币和以太坊。首先要简单解释一下这二者,比特币是点对点的电子货币系统,它主要考虑的是货币属性,所以会主要考虑安全、稳定、去中心化以及存储、传输价值的特性。此外,从安全性方面考虑,比特币脚本被设计成非图灵完备的。做为数字货币,比特币其实是比较成功的,从2009年至今,并无出现过任何一笔错帐。但除此以外,你很难再在比特币之上创建复杂应用,由于它从设计之初就仅仅考虑了其货币属性。

而以太坊则是目前全球第二大的区块链生态,是以平台的角度去设计的。平台必须可以保证其可扩展性和TPS,从而支持成千上万种DApps。它同时也是个智能合约平台,有用于执行智能合约的环境,好比EVM, x86VM。同时以太坊也须要有合理的经济模型激励开发者,从而促进生态发展。做为平台,多样性、隐私性(不受网络中其余应用的影响)也是须要考虑的问题。以太坊有一套图灵完备的语言,简单说来就是能够支持循环,从而能够实现比较复杂的智能合约逻辑。

以太坊做为一台平台可能并不那么成功,首先它的TPS 不够高。举个简单的例子以前在以太坊上有个应用叫云撸猫,就把以太坊给搞宕机了。在安卓系统上你很难想象一个应用会由于另外一个应用得影响而遭殃,可是在区块链上这种多是存在的。就比如云撸猫,TPS都被用于撸猫,那么正常的交易就没法被保证了。以太坊做为一个智能合约平台,它得智能合约功能的确是能支持一些简单的逻辑,可是编程语言仅仅局限于Solidity(还有几种语言基本无人使用),而不是你们比较熟悉得主流编程语言,因此在这一点上有所欠缺。

比特币和以太坊各有优缺点,但做为全球最大的两个区块链生态,它们是相互独立的,没有太多交集。Qtum设计的初衷是但愿打通比特币和以太坊这两大生态,使开发者既能享受到货币的稳定性和安全性,又能具有去中心化应用平台的便利。根据开源软件思想,Qtum量子链决定不重复造轮子,取比特币和以太坊的精华并在此基础上继续演进。

在此以前,在比特币上运行图灵完备的脚本语言是不可能的,因此Qtum创建了一个逻辑上的抽象层使之成为分层的结构也就是AAL帐户抽象层。还有就是目前全部的公有链的通病在于治理协议比较混乱,所谓的治理协议其实就是软件的升级和迭代。在中心化的公司或者平台好比App store上面开发者只要把更新好的App上传供用户下载就能够了,可是在去中心化的系统上就不同了。一个用户要对软件进行更新,其余人不必定会支持,那么就须要一个治理协议去决定整个生态应该如何进行治理。Qtum量子链对这个问题有本身的想法,也就是DGP分布式治理协议,可以自行对区块链参数进行动态调整而没必要进行硬分叉,实现了区块链的自治。

从共识角度来讲,咱们知道比特币和以太坊所使用的都是PoW共识机制,优势你们很清楚就不赘述了,可是缺点一样突出那就是对能源消耗巨大。好比矿机很是耗电,这些电力也成为了比特币的挖矿成本。因此Qtum量子链使用的使PoS共识机制做为更好的替代方案,其实它已经被提出好久的时间,目前Qtum用到如今通过不少次迭代也运行良好。另一个使用PoS的缘由是移动设备和物联网设备上很难实现PoW。另外正如以前提到的以太坊虚拟机仅支持Solidity这个比较冷门、年轻的语言,有多少开发者会去为了智能合约的编程再去从新学习一门全新的语言?因此Qtum目前在研发x86虚拟机,能让大部分开发者用熟悉的主流编程语言好比C、C++更简单地开发智能合约。这样就能大大提升社区内开发者的工做效率,让更多去中心化应用可以落地。

2. Qtum量子链的技术基础

首先是UTXO模型,英文是Unspent Transaction Output(未花费的交易输出)。咱们来看一下比特币和以太坊网络上的两个典型交易。以太坊上的交易对于普通人来讲相对好理解,就是从一个地址到另外一个地址,一笔Token的传输。而比特币交易就没那么简单了,它是由若干个input和output组成的,Output当它未被花费的时候就是UTXO,将成为下一笔交易的输入。因此全部比特币网络上的交易都是由input和output串联起来的。UTXO的可取之处在于:

l 安全性 (解决双花问题,支持原生多重签名)

l 匿名性 (拥有多个地址,找零地址)

l 可扩展性(并行,离线交易)

l 轻钱包 (SPV,支持移动端验证交易的合法性)

目前除了Qtum之外基于UTXO模型的各类币的底层脚本语言都不是图灵完备的,,因此Qtum量子链才会开发帐户抽象层AAL使UTXO模型与以太坊虚拟机帐户模型可以无缝交互。

再来讲一下共识机制的问题,首先回顾一下什么叫区块链,刚才提到交易,接下来用户对每一笔交易进行签名以保证其安全性,拥有私钥才能花费一笔资产。每十分钟内的全部交易被打包为区块,每一个区块中全部交易的组织形式为Merkle树(https://zhidao.baidu.com/question/1047592469520906459.html),它是一个二叉树,每一个叶子节点都表明一笔交易,而非叶子节点均为其子节点的哈希值,任何一笔交易被篡改都会影响根节点的哈希值。最后,每一个区块都有一个指向上一区块的哈希指针。因此简单来讲区块链就是一个不可篡改的分布式数据库,那为何须要挖矿呢?这里以PoW挖矿为例。首先,区块链主要分为:公有链、私有链和联盟链。它们的核心区别在于记帐权,公有链是去中心化的,赋予网络上的每一个节点记帐的权力,而私有链和联盟链的记帐节点为少数几个指定节点。只有公有链才须要挖矿,由于要维持节点不断地在网络上记帐,那么挖矿就成了网络对记帐节点的激励机制。依靠区块奖励鼓励节点记帐,共同维护区块链网络的生态。那为何你们挖矿用户也要去监听记录别人的交易呢?由于手续费也会做为区块奖励。挖矿的另外一个缘由了保证记帐节点的的随机性,不然固定的记帐节点很容易被DoS攻击。另外,挖矿也是一个代币分发的过程,从而把币随机地分发出去,而不是只在个别人手中。整个比特币的精髓就在于它的激励机制,但PoW共识机制也并不是没有问题,好比:

l 加入网络的门槛较高,须要花费不少钱买矿机才能成为比特币的全节点进行挖矿

l 愈来愈趋性中心化,大部分的挖矿所得被少数几个大矿池占据

l 能源耗费巨大

基于这些问题,2012年时有人提出PoS(权益证实机制),原理很简单,只要用户拥有该网络的Token并证实这一点,就能够参与记帐。另外,代币持有人也更有动力维护网络的安全。PoS机制一样也能达到比特币的随机性、安全性和Token分发等功能,并且相比于PoW来讲显得更加去中心化。中本聪在设计PoW共识机制时并无想到会有矿机的出现从而使得比特币愈来愈中心化,而PoS的挖矿根本不须要使用矿机,只须要一台普通电脑、树莓派就能够参与。

除此以外还有几种共识机制好比DPoS(代理权益机制)选出一些代理人来进行记帐。pBFT,dBFT等则是改进后的拜占庭容错机制解决方案。上述几个共识机制都是相对比较偏中心化的,比较容易致使一些中心化的问题或者被攻击。像某些网络的计算节点比较少,一些节点挂掉就会致使整个网络瘫痪,但这些在比特币或者Qtum上都没有发生过。

第三个技术基础就是智能合约,简单来讲就是能够在区块链上运行且达成共识的一段代码。以太坊是目前最流行的智能合约平台,目前以太坊虚拟机也是惟一一个能够真正意义上运行智能合约的虚拟机,可是它却有很多缺点:

l 移动端不友好

l solidity等少数语言,具备局限性

l 安全性(DAO,Parity)

第四个技术基础是去中心化网络。只有在去中心化的网络上Token才有它的价值,不然就跟Q币没什么区别,只能在腾讯的体系内使用而并不会有什么价值的提高。说了去中心化那么多好,也来谈谈它的缺点。在分布式领域有个CAP理论也就是一致性、可用性和分区容忍性不能同时知足。因此去中心化的程度与TPS是有矛盾的,去中心化程度越高越难达成共识,那就很难再很短期内达到交易的确认。因此若是用户但愿追求比较高的TPS,那必然会牺牲去中心化。但若是真的想要二者兼得,则要借助分层网络来实现,闪电网络、雷电网络这些技术都可以用来实现较高的TPS。比特币上的闪电网络和以太坊的雷电网络目前都在开发中且发布了测试版。而Qtum量子链由于可以兼容这两个生态,因此往后这两个技术开发完备以后Qtum也都能使用。

3. Qtum量子链的技术创新

首先是AAL帐户抽象层,由于Qtum量子链兼容两种生态,UXTO模型不支持智能合约功能,因此咱们须要帐户抽象层的上层兼容以太坊虚拟机编写智能合约。这种分层设计可以让上层的应用层和底层相互解耦,Qtum设计的抽象层使上下层可以通讯适配。

至于如何实现实际上是在比特币脚本中增长3个新的opcode:OP_CREATE:建立智能合约、

OP_CALL:调用智能合约(向合约发送QTUM)以及OP_SPEND:花费智能合约中的QTUM。这样一来比特币底层就能够识别上述三种操做,并将他们做为信号发送给上层的以太坊虚拟机,使其在运行智能合约的同时也能将一些信息反馈回底层。

因此对于开发者来讲,这仍是一个比较容易理解的帐户模型,而它的底层仍是跑在UTXO这样一个比较安全的模型上的。帐户抽象层的优点以下:

l 容许EVM在UTXO模型上运行

l 兼容多种虚拟机(不只是以太坊虚拟机,还有目前以太坊,eos正在研发的webassembly和将来Qtum的 x86虚拟机)

l 底层具备比特币的安全性

l 智能合约开发者只须要关注“帐户模型”

l 解除底层协议与上层应用的耦合

这里我想再强调一下PoS共识机制,它一共经历了3次大的迭代:

l PoS1.0:依赖“币龄”,长期不在线,双花问题

l PoS2.0:移除“币龄”,加强安全性

l PoS3.0:针对“short-range”攻击,采用区块时间和交易时间确认UTXO的年龄

想解释一下为何Qtum没有用PoS3.0,由于它存在一个问题,攻击者能够经过支付比较昂贵的gas发起一些恶意的智能合约从而伤害到整个网络。刚刚也提到矿工是能够得到transaction中的gas做为奖励的,那也就是说这些攻击者可以将他们用于攻击的gas所有收回,那么他们就能够不断地进行攻击。

可是为什么现有用PoS共识机制的区块链项目就不会有这个问题,由于它们大部分只支持非图灵完备的脚本语言,可是在Qtum上既要保证PoS,又要可以调用智能合约有可能出现这个问题。因此Qtum的解决办法就是:经过和其余节点分享收益并将收益延迟化,增长攻击的成本。换句话说,攻击的成本若是能很快还给攻击者,那么他会不断进行攻击,但若是延迟五个小时再还给他,那么势必能有效下降攻击的频率,让攻击者要花上不少倍的成本进行攻击。

接下来我再解释一下咱们的MPoS机制,它基于基于PoS 3.0: 修改激励机制,每一个区块所得10人平分,其他奖励延迟500区块。1/10 奖励马上得到,其他9/10奖励在500个区块以后连续9个块中得到。挖矿奖励 = 区块所得+手续费+运行智能合约gas费用。这是Qtum在激励机制上作的一个简单的改进,可是效果仍是不错的。

不少朋友确定会比较关心如何进行Qtum的挖矿,其实很是简单,只要你拥有必定数量的Qtum,下载Qtum钱包,把Qtum打入Qtum钱包,等待500个区块确认以后,只要钱包是未加密状态你就能够开始挖矿了。这其实币比特币的挖矿要简单地多,一台PC就能够搞定,你也可用用树莓派等设备或者其余带有Qtum节点的物联网设备上进行挖矿。

比特币目前全球的全节点大约是12000个,以太坊接近20000,而Qtum运行了6个月到如今已经拥有了3000多个全节点,分布在全球各地。正式由于进入的门槛低,因此才会有那么多的节点。全节点数量和网络的去中心化程度是成正比的。

下一个Qtum量子链的技术创新是DGP分布式自治协议,治理咱们以前有提到,在一个去中心化网络怎样对软件系统进行升级、迭代等等问题。比特币以前分叉成BTC和BTH,分叉的分歧就仅仅于区块大小问题,正由于比特币是个去中心化网络因此致使这个争论持续了很长一段时间。分叉并不能说是绝对意义上的坏事,但咱们认为为了这个问题争论了那么久、浪费如此多的口舌是挺没有意义的。影响分叉的因素分为如下三类:

l 算法、功能的改变(共识算法、加密算法、交易脚本、虚拟机)

l 策略、参数类(区块大小、出块时间、交易数量、Gas策略)

l 关键漏洞(DAO、Parity多重签名钱包)

策略方面的的因素实际上是最容易达成共识的,另外两类有事必须经过分叉来解决。而好比区块大小的改变并不必定须要经过分叉来进行。因此Qtum就考虑是否能让区块链进行无缝的升级,分布式自治协议DGP就是这么来的。其实它自己也是经过智能合约来实现的,其基本的治理结构是这样,在整个社区内部的矿工、区块生成者和持有者都是区块链治理的参与者,经过投票去完成治理的过程。最终让区块链可以实现自我管理、升级和迭代的系统。

那么Qtum分布式自治协议技术选择有两种:自治协议的实现须要某种可编程技术,UTXO和EVM提供这种特性。一是基于交易脚本,经过在交易脚本上实现协议逻辑,非图灵完备,实现比较复杂。二是基于智能合约,具备图灵完备的可编程能力,能够灵活实现复杂的逻辑。

自治协议核心逻辑的实现,是由一系列的智能合约组成,区块链核心代码在共识过程当中执行协议的智能合约,得到当前的共识状态。同时它能经过Transaction完成区块链网络的状态转换,升级无需区块链网络软件更新。出于安全性考虑,智能合约本质是一段代码。理论上,采用了图灵完备的智能合约能够实现任意复杂度的协议设计,甚至是区块链的核心协议,如共识部分的代码等;权衡效率、安全等;当前协议仅适用于在安全范围内对特定参数进行更改,同时对参数生效时间采起必定的时间限制。而参数的更改提案经过后,在必定数量的区块后生效,避免产生可能分叉。

在合约部分:创世块嵌入了常见的区块链参数治理的智能合约,每一个治理的主题都由独立的智能合约控制(模板),这意味着每一个功能有独立的治理、受权机制以及内置限制条件Block size, Min GasPrice, Block GasLimit, Gas Schedule。此外DGP合约还具有自毁功能,能在提案治理上发生意外时启动,治理参数退回到默认状态。

最后咱们再来讲一下Qtum x86虚拟机,以太坊虚拟机的缺点不少,以前也提过,再罗列一下:

l 编程语言局限性(Solidity)

l 缺乏标准库

l 256bit整数,大部分处理器不能原生支持,运行效率下降

l Gas模型不合理,难以估计Gas消耗

l 生成的bytecode较大,浪费区块存储资源

l 难以测试和调试

那么针对以太坊虚拟机的这些弊端呢,咱们Qtum正在设计x86虚拟机,设计目标以下:

l 支持多种主流编程语言: C/C++/Go/Rust 等等

l 丰富的标准库,提升开发效率

l 更加优化的Gas模型 -- 为标准库函数设定合理的gas,便于估计,利用DGP

l 解锁AAL的强大功能 – 合约P2SH交易,segwit

l 冯·诺依曼结构,增强版的智能合约 – 代码即数据,多任务协做,中断和恢复

l 第一类Oracles – 无需运行合约便可得到某些合约数据

l 区块链动态分析 -- 更全面地分析区块链状态

l 选择性数据存储,节省宝贵的区块链上资源

l 清晰的依赖关系树,有可能并行运行智能合约,下降gas费用

到这里,咱们技术创新方面也就介绍到这里了。咱们的slogan是“从新定义区块链经济”,让不一样种类的应用可以快速落地,这也反映了咱们Qtum团队真正想让区块链技术快速会渗透到人们的生活中去。

4. Qtum量子链生态系统

Qtum目前的生态系统对于在座各位更多的是如何去体验,咱们的桌面钱包能够支持:

收发QTUM、收发QRC20 Token、智能合约交互、调用智能合约、部署智能合约、发Token

和PoS挖矿,这是咱们比较主要的一个钱包,几乎拥有一切功能。另外就是手机移动端钱包,Qtum的一个优点就在于你能够在手机端收发Token,只须要花上20秒。你一样也可使用它发行Token和crowdsale。上述的这一切在网页版钱包中也是能够实现的,它甚至能够从其余客户端恢复钱包和发送离线交易。

那比较注重安全性的用户会比较倾向于使用冷钱包,也就是硬件钱包。那用的比较多的好比Ledger钱包也是能够支持Qtum的,而且能够配合Electrum使用。Qtum Electrum是能够支持多重签名轻钱包,也一样可以支持Qtum的收发和智能合约,并且还可链接硬件钱包。

另外一个就是区块链浏览器,能够说它是区块链世界的入口,在上面能够查询到区块记录、追溯每一个区块的出块时间、大小、还有交易时的ID等等。

除了这些,对于Qtum感兴趣的朋友能够去查看如下连接,全部的资源都是开源的,若是你们有一些比较细节的问题,在这里也能够找到详细的答案:

Qtum官方开源仓库:https://github.com/qtumproject

Qtum开发者指南:https://github.com/qtumproject/qtumbook

Qtum百科:https://github.com/qtumproject/qtum/wiki

Qtumjs:https://github.com/qtumproject/qtumjs

非官方Qtum Web.js:https://github.com/bodhiproject/qweb3.js

最后呢Qtum的生态系统发展到如今已经拥有超过50个去中心化应用了,其中几个比较具备表明性的像预测市场菩提、还有清洁能源的交易解决方案Energo等。这些项目就不一一介绍了,你们有兴趣也能够登录http://eco.qtum.org,更加鼓励你们投入到Qtum的网络上开发本身的去中心化应用。

5. 总结:

今天我分享了关于Qtum量子链的一些设计理念或者技术创新等,在座各位必定也有不少想法,若是你是认同这些观点的,那你必定是自然的Qtum开发者,欢迎你们上Github为咱们的底层技术作些贡献,也会得到比较丰厚的回报。固然也会有人不认同咱们的观点,好比你认为去中心化没用,TPS反而更重要或者PoW才是最佳共识机制。咱们的社区也一样欢迎相似的开发者以质疑的态度作一个全新的产品。说这些是想告诉各位Qtum的社区对任何开发者都会秉持开放的态度,只要开发者是真心愿意去为整个区块链生态作一些努力和开发工做,Qtum量子链也会为他们提供一些技术支持和经济支持。谢谢你们!

相关文章
相关标签/搜索