codemonkey007分享 http://blog.sciencenet.cn/u/codemonkey007

博文

区块链遇到的常见问题

已有 6070 次阅读 2017-12-15 16:42 |系统分类:教学心得

1、区块链有哪些种类?
:根据部署场景公开程度,可以分为公有链(public chain,如比特币网络)、联盟链(consortinum chain)和私有链(private chain);
      从功能上看,可以分为支持数字货币为主的数字货币区块链(如比特币网络)、支持智能合约的通用区块链(如以太坊网络)、面向复杂商业应用场景支持权限管理的分布式账本平台(如超级账本)。

      区块链按照访问和管理权限可以分为公有链(Public Blockchain)和私有链或联盟链(Private Blockchain)。公有链是完全开放的区块链,全世界的人都可以参与系统维护工作,这使得公有链还具有以下2个特点。

      1. 开源(Open Source):由于整个系统的运作规则公开透明,这个系统是开源系统;

      2. 匿名(Anonymity):由于节点之间无需信任彼此,所有节点也无需公开身份,系统中每一个节点的匿名和隐私都受到保护。

    私有链或联盟链在开放程度和去中心化程度方面有所限制,参与者需要被提前筛选,数据库的读取权限可能是公开的,也可能像写入权限一样只限于系统的参与者

      公有链的典型代表是比特币区块链,任何人都可以通过交易或挖矿读取和写入数据。私有链联盟链典型案例是Ripple和R3 CEV,前者目前为属于联盟成员的银行类金融机构提供跨境支付服务,希望取代环球同业银行金融电讯协会(SWIFT)的跨境转账平台,打造全球统一的网络金融传输协议;后者旨在推动制定适合金融机构使用的区块链技术标准。


2、比特币区块链为何要设计为每10分钟才出来一个块,块一些不可以吗?

:这主要是从公平的角度考虑的,当某一个新快被计算出来后,需要在全球的比特币网络内公布。临近的矿工将最先拿到消息并开始新一轮的计算,较远的矿工则较晚得知。最坏情况下,可能需要数十秒的延迟。为尽量确保矿工都处在同一起跑线上,这个时间不能太短。但太长了又会导致每个交易的“最终”确认时间过长,目前看,10分钟左右是一个相对合适的折中。另外,也是从存储代价的角度,让拥有不太大存储的普通节点可以参与到网络的维护(更新较快,意味着吞吐量增加,验证成本增加,同时存储成本也会提高)。


3、比特币区块链每个区块大小为何是1MB,大一些不可以吗?
:这也是折中的结果考虑的。区块产生的平均时间间隔是固定的10分钟,大一些,意味着发生交易的吞吐量可以增加,但节点进行验证的成本会提高(Hash处理约为100MB/s),同时存储整个区块链的成本会快速上升。区块大小为1MB,意味着每秒可以记录1MB/(10*60)=1.7KB的交易数据,而一般的交易数据大小在0.2 ~ 1KB。实际上,之前比特币社区也曾多次讨论改变区块大小的天,但都未被最终接受。

4、区块链最早是公有链形式,为何现在联盟链在很多场景下得到更多推崇?
:公有链情况下,任何人都可以参与监督,可以实现信任的最大化,但随之而来会有性能底下、缺乏监管等问题。
      联盟链在两者之间取得了平衡。非中心化的联盟公式,让系统可信任度以指数形式增加;同时,联盟形成的信任前提,可以在不影响信任情况下实现更优化的性能,并支持权限管理。这对复杂应用场景,特别是企业场景可以提供更好的支持。

5、一致性问题以及共识算法
:区块链系统,首先是一个分布式系统。传统单节点结构演变到分布式系统,碰到的首要问题就是一致性的保障。一致性问题是分布式领域最为基础也是最重要的问题。
     【定义 一致性(consistency)】早期也叫agreement,是指对于分布式系统中的多个服务节点,给定一系列操作,在约定协议的保障下,试图使得它们对处理结果达成“某种程度”的认同。(一致性并不代表结果正确与否,而是系统对外呈的状态一致与否;例如,所有节点都达成失败状态也是一种一致)
      规范地说,分布式系统达成一致的过程,应该满足:
  • 可终止性(termination):一致的结果在有限时间内能完成;

                                                 有限时间内,意味着可以保障提供服务(liveness)。
  • 约同性(agreement):不同节点最终完成决策的结果是相同的;

                                             解决分布式系统领域很多问题的核心秘诀:把多件事情进行排序,而且这个顺序还得是大家都认可的。
  • 合法性(validity):决策的结果必须是某个节点提出的提案。

      严格一致性(stric consistency)很难实现,所以又强一致性(strong consistency)和弱一致性(weak consistency)。其中强一致性有包括两类:顺序一致性(sequential consistency)—保证所有进程看到的全局执行顺序(total order)一致,并且每个进程看自身的执行顺序(local order)跟实际发生顺序一致和线性一致性(linearizability consistency)—系统等价于顺序执行,所有进程看到的所有操作的序列顺序都一致,并且跟实际发生顺序一致。适当地放宽对一致性的要求,可以降低系统实现的难度,比如在一定约束下实现最终一致性(eventual consistency),即总会存在一个时刻(而不是立刻),让系统达到一致的状态。这类弱化的一致性都笼统成为弱一致性。
    共识(consensus)在很多时候会与一致性(consistency)术语放在一起讨论。一致性往往指分布式系统中多个副本对外呈现的数据的状态。而共识则描述了分布式系统中多个节点之间,彼此对某个状态达成一致结果的过程。共识算法解决的是对某个提案大家达成一致意见的过程。对于分布式系统来讲,各个节点通常都是相同的确定性状态机模型(又称为状态机复制问题,state-machine replication),从相同初始状态开始接受相同顺序的指令,则可以保证相同的结果状态。因此,系统中多个节点最关键的是对多个事件的顺序进行共识,即排序
     一般地,把出现故障(crash或fail-stop,即不响应)但不会伪造信息的情况称为非拜占庭错误”(non-byzantine fault)或“故障错误”(Crash Fault);伪造信息恶意响应的情况称为“拜占庭错误”(Byzantine Fault),对应节点为拜占庭节点。根据解决的是非拜占庭的普通错误情况还是拜占庭错误情况,共识算法可以分为Crash Fault Tolerance(CFT)类算法和Byzantine Fault Tolerance(BFT)类算法。
  • CFT类算法

    • Paxos

    • Raft

    • Raft变种等

  • BFT类算法

    • PBFT(Practical Byzantine Fault Tolerance)为代表的确定性系列算法

    • PoW为代表的概率算法

    • XFT(Cross Fault Tolerance)等


(FTP不可能原理、CAP原理、ACID原则)


6、拜占庭(将军)问题

:1982年科学家Leslie Lamport等提出用来解释一致性问题的一个虚构模型。守卫边境的多个将军(系统中的多个节点)需要通过信使来传递消息,达成某些一致性的决定。但由于将军中可能存在叛徒(系统中节点出错),这些叛徒将努力向不同的将军发送不同的消息,试图干扰共识的达成。拜占庭问题即在此情况下,如何让忠诚的将军们能达成行动的一致。


7、拜占庭问题有解的条件?

:对于拜占庭问题来说,假如节点总数为N,叛变将军为F,则当N≥3F+1时,问题才有解。


8、比特币区块链中的共识机制工作量证明PoW
:PoW通过计算才猜测一个数值(nonce),使得拼凑上交易数据后的内容的Hash值满足规定的上限(来源于hashcash)。由于Hash难题在目前计算模型下需要大量的计算,这就保证了在一段时间内系统中只能出现少数合法提案。反过来,能够提出合法提案,也证明提案者确实付出了一定的工作量。
      拜占庭问题之所以难解,在于任何时候系统中都可能存在多个提案(因为提案成本很低),并且要完成最终一致性确认过程十分困难,容易受干扰

      PoW概率算法的思路,针对以上两个环节进行了改进。首先,限制一段时间内整个网络中出现提案的个数(通过增加提案成本,即通过暴力计算Hash);其次是放宽对最终一致性确认的需求,约定好大家都确认并且沿着已知最长的链进行拓展。系统的最终确认是概率意义上的存在。这样,即便有人试图恶意破坏,也会付出相应的经济代价(超过整个系统一半的计算里,51%攻击)。


20171220


9、全节点和轻量级节点(区块链是一个P2P网络,区块链中的每个节点是否都需要保存完整的链?如果保存,对于节点来说会造成巨大的存储开销,如果不保存,那节点又如何实现区块的验证?)[2]
:而回到这个问题,实际就需要解释什么是全节点和轻量级节点。简而言之,区块链网络中的节点可以保存完整的区块链也可以不保存完整的区块链。保有一份完整的、最新的区块链拷贝,这样的节点被称为“全节点”。全节点能够独立自主地校验所有交易,而不需借由任何外部参照。另外还有一些节点只保留了区块链的一部分,它们通过一种名为“简易支付验证(SPV)”的方式来完成交易验证。这样的节点被称为“SPV节点”,又叫“轻量级节点”。在矿池架构内,挖矿节点不一定是全节点。独立矿工的挖矿节点是全节点。SPV节点必须依赖其它可信任的全节点,这可能会存在问题[3]


10、图灵完备和图灵不完备
图灵完备意味着你的语言可以做到能够用图灵机能做到的所有事情,可以解决所有的可计算问题。那么图灵不完备就意味着你的语言不能解决所有课计算问题。
简单判定图灵完备的方法就是看该语言能否模拟出图灵机:
      图灵不完备的语言常见原因有循环或递归受限(无法写不终止的程序,如 while(true){}; ), 无法实现类似数组或列表这样的数据结构(不能模拟纸带)。 这会使能写的程序有限图灵完备可能带来坏处, 如C++的模板语言, 模板语言是在类型检查时执行, 如果编译器不加以检查,我们完全可以写出使得C++编译器陷入死循环的程序。
      图灵不完备也不是没有意义, 有些场景我们需要限制语言本身。 如限制循环和递归, 可以保证该语言能写的程序一定是终止的[4,5]
简而言之,如果一个语言是图灵不完备就意味着该语言执行的所有运算一定会终止,而图灵完备则不一定。


11、51%攻击
:以比特币为例,区块链结构的“51%攻击”就是攻击者具有足够计算能力的一种攻击方式。如果攻击者拥有整个网络51%的计算能力,则攻击者可以计算出一个这样的区块链,包含一个攻击者发送所有的比特币到攻击者持有的私人账户上的交易信息。这个区块链的长度假设为10(实际攻击时攻击者需要构造一个比现有的最长的区块链更长的一个链),但是攻击者并不向网络广播这个块。同时,攻击者把所有的比特币在交易市场换成美元并提取出来,这笔交易会记录在正常的区块链中。当攻击者的美元提取正在进行中时,正常的区块链长度是9,而攻击者有长度为10的区块链。当攻击者向网络广播这个更长的区块链,根据区块链的最长链原则(相加难度最多的链作为主链,暂时不好不知道这个相加难度怎么计算得到),网络其它节点会选择攻击者的区块链为基础继续挖矿。这时,攻击者提取美元的交易没有记录,收到损失的是交易市场。然而这种攻击事实上很难实施,因为实施51%攻击,需要极强的计算能力来与全网所有节点的计算能力之和抗争,使用计算的优势来强行扭转最长链[6]



Reference

[1]《区块链原理、设计与应用》杨保华、陈昌编著,机械工业出版社出版(2017年8月)

[2]https://wk588.com/3109.html

[3]https://www.okcoin.cn/t-1013013.html

[4]https://www.zhihu.com/question/20115374/answer/14708747

[5]https://www.zhihu.com/question/20115374

[6]黄征, 李祥学, 来学嘉, 等. 区块链技术及其应用[J]. 信息安全研究, 2017, 3(3): 237-245.



https://blog.sciencenet.cn/blog-2611808-1089861.html


下一篇:Zotero和Mendeley的简要比较
收藏 IP: 125.216.241.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-9-23 08:15

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部