今天难得没看技术文章,纯粹整理一下过去五个多月以来,自学区块链的知识体系,顺手做了一张区块链技术小考的题目卷,总共32题,大家来看看你可以得几分吧XDD

初阶题目

1.什么是区块什么是链

区块:

包含本区块的交易纪录、前一个区块数字签名、随机数字

链:

每个区块都包含上一个区块SHA-256函数值

2.承上,区块链如何做到资料不可窜改

区块链是依靠各个区块的SHA-256函数依序串连而成,其中任一区块的交易资料被串改时,区块的SHA-256函数值就会出现错误,因而发现被窜改,当要验证这笔交易,需要花费一段时间,然后正常的交易依旧持续发生,此时这条交易资料有被窜改的区块链将不会是最长的链,而矿工只会认可最长的链,即窜改交易资料的区块链不被认可

3.什么是挖矿为什么需要挖矿

挖矿:成功打包一个区块,该矿工获取记帐权

需要挖矿的原因:

整个区块链网络需要更多人取得记帐权,确保区块链网络的安全性

4.公私钥如何运作

私钥透过椭圆曲线函数产生公钥

ex:A支付给B 10个BTC,A先用「私钥」这笔交易纪录加密到节点,节点用A的「公钥」确认这是A用「私钥」加密过的讯息

5.何谓共识演算法

解决容错问题的一种手段,能够各自独立的过程中达到一种共识,目前比较常见是POS,POW

6.何谓公有链、联盟链、私有链

公有链:对所有人开放,不须注册与授权即可匿名访问的网络

联盟链:仅限联盟成员,开放全部或部分功能,依照内部规则订制

私有链:只对特定组织开放的网络

中阶题目

1.试解释比特币与以太坊的差别

比特币网络提供一个支付系统并且透过网络维系一个共同帐目,以太坊而是提供开源并且能在部署在区块链上具有图灵完备的编程语言

2.何谓智能合约

能够在Ethereum Virtual Machine(EVM)上运行的程式,即能够在去中心化节点网络中运行

3.什么是图灵完备

指通用的程式语言与指令,理论上可以解决现今任何演算法,以便支援各种应用场景及满足各种需求

4.试解释Account与UTXO的差别

Account:一般人常见帐户模型,A在银行帐户有1元,帐户余额显示1元,以太坊采用这个模型

UTXO(Unspent Transaction Output):让帐户差异化的金融交易模式,以输入=输出的概念,未花费的交易输出为所有为会发交易金额的总和,比特币采用这个模型

两者差异在于UTXO每一笔交易会追朔先前交易,对于Double Spending,Replay Attack有达到保护作用,资安保护相对于Account强,而Account在于节省大量储存空间,每笔交易只有一个输入、一个输出、一个签名,简单且有更大的可替代性

5.什么是PoS、PoW、DPoS

属于共识机制的类别PoS(Proof of Stake)权益证明:依照持有币的数量多寡与持有时间获取记帐权

PoW(Proof of Work)工作量证明:依照算力获取记帐权

DPoS(Delegated Proof of Stake )股份授权证明机制:竞选出固定数量的节点当作代表,这些代表依照持有币的数量与持有时间获取记帐权

6.为什么只有公有链要挖矿

挖矿行为就是属于工作量证明重要一环,能够确保维系公有链的信用体系

7.什么是矿池为什么会有矿池

矿池:就是矿工算力的总和,提供矿工的算力,共同分配在矿池里面的挖矿收益

为什么会有矿池:单一矿机随着参与挖矿人数增加,成功打包区块的机率越来越低,所以结合大家的算力挖矿,增加成功挖矿的机率,才有机会分配到更稳定的收益

8.什么是ERC

全名叫Ethereum Request for Comments,让以太坊的开发者一同建立一套标准,让开发者依循这个标准攥写自己的智能合约

9.请解释ERC20与ERC 721的差别

ERC20提供一套协议,可以让发行商发行效用代币(utility token),是可替换代币,代币之间没有区别

ERC 721是让人发行不可替代跟分割的代币,使得每个代币都是独一无二,像是房地产、偶像签名的概念

10.请解释中心化交易所跟去中心化交易所的差别

中心化交易所:

优点:交易过程发生在交易所伺服器里面,自动搓合,交易快速

缺点:黑客黑入交易所伺服器,就可能造成财物损失

去中心化交易所:

优点:交易过程发生在智能合约里面,即便交易所伺服器被黑,只要用户自己有私钥,就可以从智能合约撤回数字资产

缺点:搓单的动作,必须自己在挂单簿上找到适合价格,交易体验上比较不流畅

11.什么是双花攻击

A用户做一笔交易,这笔交易会被写在区块链上,而A用户想要把那笔交易的钱取回来,A用户掌握51%以上的算力去控制这条区块链,排斥刚刚那笔交易,把这笔钱取回来,等于双重花费这笔金额。

12.什么是女巫攻击

同一个人,伪装许多节点,获取区块链网络的掌控权,如同一个人可以投很多次票

13.什么是51%攻击

掌控区块链51%以上的全网算力,去控制区块链,窜改区块链内的交易纪录,可达到撤销已付款的交易纪录

14.什么是硬分叉、什么是软分叉

硬分叉:产生新的区块链新版本,未来只能在新版本执行而不能在旧版本执行,有点像ios11更新到ios12,ios11不能使用

软分叉:产生新的区块链新版本,新旧版本均可执行,有点像ios11更新到iso12,iso11依旧可以使用

进阶题目

1.为什么比特币要设定10分钟出块一次

出块的时间,是依照整个比特币的难度推算出来,而时间的平均确保区块跟区块产生时间间隔不要隔太近,平均一个新生成的区块广播到所有的节点需要两分钟的时间,而如果出块时间过短,就来不及传送到所有节点

2.为什么比特币确认要等一个小时

比特币交易要被验证,此交易会广播在比特币网络给网络上所有节点去验证,等待所有节点验证过后,每10分钟产生一个新的区块,该笔交易就会被打包到这个区块,然后再10分钟产生一个新的区块,再次被验证,一般是被6个区块得到验证,才确保这个交易是不可逆转,所以换算6个区块产生时间就是1个小时

3.什么是Orphan Block

又称「孤儿区块」,在比特币网络,最长的区块链才是被认可的区块链,而如果该区块在不被认可的区块链,就称Orphan Block

4.以太坊如何解决容易分叉的问题

以太坊社群,相对于比特币社群规模没有这么大,当遇到意见歧异的状况下,透过分叉解决这个问题,让社群达到共识相对比比特币的社群来得容易,在2016年6月以太坊知名项目DAO被攻击的事件,以太坊透过硬分叉升级来完善以太坊网络。

5.何谓分片、扩容、侧链

区块链能够处理的交易笔数不可能超过网络中单一节点的处理能力,「扩容」就是为了提升整体区块链的交易速度,而未来增加扩容性目前主流技术提出两种解决方法

(1) 「分片」(Sharding),就是为了提升交易速度,过去一笔交易需要全网的节点去处理,而分片技术是将交易数据切割成不同的碎片,让每个节点只处理一部分的碎片,再借由网络与其他节点共同完成交易验证。

(2)「侧链」(Sidechain),可以将数据从主链转移到其他区块链,其他区块链又可以返回到主链的协议,所以某些高频交易不需要放在主链上处理,放在侧链上进行,疏缓交易拥堵。

6.现有区块链应用落地面临什么问题

区块链技术存在「不可能的三角关系」,同时要符合去中心化、安全性、高效率是无法的,本身技术上的限制,发挥在不同领域就会产生问题。

除此之外,不同领域的人对于区块链认知有落差,所以再结合他们的领域的过程,往往出现没有料想到的问题,或者衍生出更多问题。

7.试解释拜占庭将军问题

用个简单的例子说明,今天拜占庭帝国派了好几个将军要共同攻下一座城堡,必须相对多数的将军同意进攻才能一起进攻,但是假设有奇数个将军,好比7个将军,有三个同意进攻,三个不同意进攻,而其中一个将军是叛军,了解对于拜占庭不利的决定是不进攻,而他将会影响到所有将军的最后决定,这概念大致上就是拜占庭将军问题

而在电脑科学里面,想像这个叛军就像是恶意节点,在网络中彼此节点的决策也可能受到恶意节点的影响,中本聪在比特币网络的设计,透过工作量证明的共识机制大大提高扮演恶意节点的难度。

8.什么是IPFS

星际档案系统(Inter Planetary File System)是一种点对点的分散式文件系统,在此系统连接的计算机都有相同的文件管理方式,概念类似HTTP,但是希望能取代传统HTTP本身低效跟中心化的问题

9.什么是DAG

有向循环图(Direct Acyclic Graph),是数据结构的一种,想像顶点跟顶点之间都有连线,每个连线都有一个单一固定方向,从任意一个顶点出发都不能通过这些有向线回到原来的顶点

应用在区块链的节点设计上,每一笔交易即一个区块,大大提高交易吞吐量,交易者本身也是矿工,交易的过程共同参与区块的共识,因此不用在支付交易手续费。

10.什么是Merkle Tree

用来表示Hash值(哈希值)的数据结构,Hash直就是任意数值映射成固定长度的数值,而Merkle Tree最底层,把数据切割成很多小数据块,沿着Merkle Tree往上,是变成对应的Hash值,在持续往上,相邻两个结合字符串的Hash值,依此类推,最后会得到一个Root Hash值(根哈希值)。

在区块链的设计上,确认一笔交易状态,不需要读取区块中所有资料,仅需Merkle Tree中的Root Hash值即可判断此交易真实存在

12.什么是CAP原理CAP分别代表什么

在分散式存储系统里,无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition)

一致性(Consistency):系统中所有储存资料,确保同一时间保持相同的内容

可用性(Availability) :即便部分节点故障,系统仍接受客户端请求,持续正常运行

分区容错性(Partition):是否允许在当时间限制条件下,要求数据资料的一致