作者:Alex Zhao
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这个问题有两部分,我分“原理”和“意义/用途”两部分来回答,力求让没有背景知识的朋友看完之后也能大概理解区块链的原理和重大意义:
区块链技术原理
我尽量不涉及太多细节,把区块链大概的工作原理用尽可能简单的语言描述一下,相信你能很快对区块链有所了解。
以比特币的区块链为例,你可以把区块链想象成一个比特币的公共账本,这个账本:
1.存放在互联网的各个比特币节点上,每个节点都有一份完整的备份
2.里面记录着自比特币诞生以来的所有比特币转账交易
3.账本是分区块存储的,每一块包含一部分交易记录。每一个区块都会记录着前一区块的id,形成一个链状结构,因而称为区块链
4.当你要发起一笔比特币交易的时候只需把交易信息广播到p2p网络中,矿工把你的交易信息记录成一个新的区块连到区块链上,交易就完成了。
这里有几个问题:
1.如何保证用户有足够的余额,例如你只有十个币,而你居然发起了一笔转20个币的交易怎么办。
这个问题很好解决,因为区块链上记录了所有的比特币交易记录,只需要回溯所有的和你账户相关的历史交易就能知道你这个账户上到底有多少余额,余额不对矿工是会拒绝记录你的交易的。
由此你可能又会产生一个疑问,那么最初的比特币是从哪里来的呢?
最初的比特币是由系统奖励给记录区块的矿工的。每一个区块在生成的时候就会在生成这个区块的矿工的账户上生成一定数量的新比特币作为奖励。
2.如何保证你的账户不被冒名顶替
这问题也很好解决,用数字签名技术就好了。每个比特币账户都有公钥和私钥。你发起交易的时候用私钥对交易信息签名,矿工收到信息后用公钥检查一下签名就好了。
3.那么多矿工,如何决定该由哪个矿工生成下一个区块?
解决方案是这样的:
中本聪设计了一个数学问题,这个数学问题会耗费大量的计算机cpu时间才能得出答案,同时每一次得出的答案都会作为下一次计算的初始条件进行技术。全世界的矿工一起来计算这个问题,谁先得出答案,他就可以用这个答案生成一个新的区块,再广播到网络中。收到这个新块数据的矿工会立即停止当前的计算,用新块里的数据重新进行下一次计算。这就是所谓的“挖矿”。矿工产生的区块一旦被网络接受,他就能获得一笔比特币作为酬劳。
这时要考虑一种情况:如果同时有两个矿工各自得到一个正确答案,并各自生成了一个区块广播出去会发生什么呢?
这时候在区块链上同一个位置就有了两个区块,所谓的“分叉”就出现了。
分叉是绝对不允许的,所以当矿工发现区块链分叉之后,会选择最长的一条继续计算,短的那条区块链会被丢弃。
仔细思考下这个体系,你会发现它几乎无懈可击。首先你不能凭空造出比特币,只能挖矿获得;其次你无法伪造交易,无法控制不属于你的账户。一旦交易被确认,几乎无法取消。我这里说“几乎”,是因为有“51%攻击”的存在。51%攻击条件非常苛刻,这里就不扩展开讲了。感兴趣的朋友可以自行查阅相关资料。
----------------------
好吧,现在你应该大概明白了区块链是怎么回事。一个公开透明的可信赖的帐务系统,听起来还不错,是吧? 不过,我想告诉你区块链远远不止是一个帐务系统那么简单,它的意义之重大、用途之广泛,一旦你意识到,你一定会像我一样激动万分的。
区块链技术使得DAC成为可能。DAC是一种能够从根本上颠覆人类社会组织模式的东西。我相信它对社会的影响,会超过工业革命,成为互联网给世界带来的最为深刻的变革。
----------------------
区块链技术的用途和意义
作者:玲珑邪僧
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
如果哪里有说的不对的地方还希望前辈们多多指教。
前方多图多图多图
通俗一点地说,区块链是一个收录所有历史交易的总帐,每个区块中包含若干笔交易记录。如果说区块链是账本,那么区块就是账本的每一页。交易的细节都被记录在一个网络里任何人都可以看得到的公开账簿上。
<img src="https://pic1.zhimg.com/50/057617203dc4a7da8e76e2dfd520adf0_hd.png" data-rawwidth="692" data-rawheight="227" class="origin_image zh-lightbox-thumb" width="692" data-original="https://pic1.zhimg.com/057617203dc4a7da8e76e2dfd520adf0_r.png">
区块就是很多交易数据的集合,它被标记上时间戳和之前一个区块的独特标记。有效的区块获得全网络的共识认可以后会被追加到主区块链中。区块链是有包含交易信息的区块从后向前有序链接起来的数据结构。
在这里,我用比特币相关知识举个栗子解释一下。
在比特币领域中,存在“矿工”这样一个概念。矿工是指通过不断重复哈希运算来产生工作量的各个网络节点。(每个节点都是路由,区块链数据库,挖矿,钱包服务的功能集合)
矿工们需要竞争完成一种基于加密哈希算法的数学难题,答案存在于新的区块中,谁优先解出这个答案,谁就能在p2p网络中广播声明自己已经获得这个区块,其他的旷工就会意识到在这局里已经输了,就会立马开始下一个区块的挖掘工作。每个矿工在他的区块中都有一笔特殊的交易,他们会将新生成的比特币(当前每块25个比特币,2016年也就是今年减半)作为报酬,然后支付到自己的比特币地址中。一旦这个区块被认可被验证,也就是被添加到区块链中,他的这笔报酬就可以变为可用可消费的状态。
在比特币体系中,平均每十分钟就可以发现一个新的区块, 在完全去中心化的比特币网络中(即不受任何第三方控制),每个完整节点中独立自动发生难度调整,让新区块的产出速率维持在平均每十分钟一个。
一个block产生的产生时间=难度值x2的32次方/hashrate
(hashrate是每秒运算的hash数量)
难度值difficulty=最大目标值/当前目标值
我来拟人化地解释一下。
单身汪们要找女票,国民岳母说我有好多女儿,这样吧我给你们出点题目,解出一个就给其中一个姑娘的微信号。
单身汪们疯狂竞争,想破脑袋去解题。只要其中一只汪解出一道题,就立马得意洋洋地昭告天下,示威全部单身汪,这个姑娘是我的啦,你们放弃吧。其他单身汪们即使不服也没有办法,惆怅懊恼也不是个事儿啊,还是麻溜地立马去解下一道题目吧。这只喜赢姑娘的幸运小汪被岳母认可后还能得到25个货币单位的彩礼,简直人生赢家。
岳母会通过解题的速率去调整题目的难度,有时候吧,出的太难了,好久没小伙子有能力来上门提亲,她一寻思,这可不行,这女儿不能砸手里啊,得把题目难度降一点。有时候难度太简单,不到10个时间单位就嫁出去一个,这更不行,赶紧使用难度提升技能。对了今年就是2016年,岳母的礼金还会减半。。。
。。不闹了。。回到正题。。
上面所描述的其实就是“挖矿”的概念
所谓挖到矿就是要猜到一个nonce值让该区块的摘要值小于一个会根据难度而线性调整的目标值,这也是所谓的工作量证明。简单一点说,就是重复计算去块头额哈希值,不断地改变参数,直到与哈希值匹配的一个过程。
当节点创建一个候选区块的时候,那旷工就准备开始进行挖矿。矿机开始超高速运行SHA256算法,这些硬件会通过USB链接到存在于电脑上的挖矿节点上,然后挖矿节点会将区块头信息传给这些硬件,让他们进行非常高频的nonce测试。
当一项交易被区块收录的时候,可以被认为是一次确认。在此区块之后每产生一个区块,此项的交易数就再加一。当确认数目到达六次以上的时候,通常就能认为此项交易比较安全并且不可逆转。那么现在,这笔交易已经在比特币网络上传播开,但只有通过验证且加到一个区块中的时候,这笔交易才能成为区块链的一部分。
新的交易不断地涌入比特币网络,当节点们看这些交易的时候,会将这些交易临时放到自己各自维护的一个临时的交易池中,当旷工创建出一个区块以后,便可以把这些交易从交易池中拿出放到这个新区块中,然后通过解决一个难度很大的问题去证明这个区块的合法性。
下图是我在http://blockchain.info网站上随机截取的一个区块。
<img src="https://pic2.zhimg.com/50/9dc48daed68085ca464dacc9793545dd_hd.png" data-rawwidth="691" data-rawheight="436" class="origin_image zh-lightbox-thumb" width="691" data-original="https://pic2.zhimg.com/9dc48daed68085ca464dacc9793545dd_r.png">
一般来说,个体矿工自己一个人独立进行挖矿在这样一个竞争的大环境中是几乎没有可以盈利的可能的。因为他们的算力让他们很难靠一己之力可以挖到区块去平衡他所付出的硬件设备费用及相关的电力费用。所以在这样的时候,他们会选择加入矿池。众多矿工组合成矿池,汇聚大家的算力,然后一起分享奖励。所以不出意外的话最后一行中间那个大的绿箭头后面的一串字符就是一个矿池的地址而非个人矿工的,该矿池获得了25个比特币的奖励,多的后面的零头是参与挖矿所得的矿工费。
现在我们点开那个收币地址,看一下里面的信息。
1CK6KHY6MHgYvmRQ4PAafKYDrg1ejbH1cE (二维码自动识别)
蓝色框的31confirmation就是说明这条交易已经被验证31次,当数目达到120次时,就证明这条交易成立。
你也可以打开终端,运行
$curl https://blockchain.info/unspent?active=1CK6KHY6MHgYvmRQ4PAafKYDrg1ejbH1cE
也可以进行查询
像这样:
<img src="https://pic4.zhimg.com/50/43339114ed90de6e08e4b21da1ed00e7_hd.png" data-rawwidth="691" data-rawheight="380" class="origin_image zh-lightbox-thumb" width="691" data-original="https://pic4.zhimg.com/43339114ed90de6e08e4b21da1ed00e7_r.png">
小彩蛋
我们可以认识一下比特币领域的创世区块
<img src="https://pic2.zhimg.com/50/e64d8977e052c3b800edcb40cbba0a91_hd.png" data-rawwidth="691" data-rawheight="366" class="origin_image zh-lightbox-thumb" width="691" data-original="https://pic2.zhimg.com/e64d8977e052c3b800edcb40cbba0a91_r.png">
右边是比特币创始人中本聪留下的一句话。
“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks” 这句话正是泰晤士报当天的头版文章标题。
我们回到区块链。
上面我提到过,每个区块头都会进行SHA256哈希加密,生成一个哈希值,通过这个值,我们可以在区块链中识别出特定区块,并且每个区块头都还包含它的父区块的哈希值。
<img src="https://pic1.zhimg.com/50/98c52583dcf06bd56deaee144f14a990_hd.png" data-rawwidth="670" data-rawheight="883" class="origin_image zh-lightbox-thumb" width="670" data-original="https://pic1.zhimg.com/98c52583dcf06bd56deaee144f14a990_r.png">
(图片来自《精通比特币》)
每一个子区块都只有一个父区块,但一个父区块可以暂时拥有很多子区块,这种情况被称为区块链分叉。这种只有当不同的矿工在同一时刻发现不同的区块时才会发生。这时解决的方法就是,每一个节点总是选择并尝试延长拥有最大工作量证明(最长或者最大难度)的区块链。
举个例子:
<img src="https://pic4.zhimg.com/50/f0dd74caff62d63f72d27a09a542e597_hd.png" data-rawwidth="692" data-rawheight="405" class="origin_image zh-lightbox-thumb" width="692" data-original="https://pic4.zhimg.com/f0dd74caff62d63f72d27a09a542e597_r.png">
(图片来自《精通比特币》)
我们现在有一个区块链-蓝
<img src="https://pic1.zhimg.com/50/a516b59e3b13710560fae07d17d416fc_hd.png" data-rawwidth="691" data-rawheight="431" class="origin_image zh-lightbox-thumb" width="691" data-original="https://pic1.zhimg.com/a516b59e3b13710560fae07d17d416fc_r.png">
(图片来自《精通比特币》,可爱的小姑娘来自我)
位于X地区的旷工与位于Y地区的旷工同时发现了两个区块。
我们假设:
旷工熊猫君A发现区块-红,
矿工兔子君B发现区块-绿。
当熊猫君A,兔子君B节点分别在比特币网络广播的时候,部分节点会先收到熊猫君A的广播,部分会先收到兔子君B的广播,然后分为两派阵营的节点会分别开始以他们接收到的区块作为父区块,进行深一步的挖矿活动。(这里节点的地理意义指的是网络拓扑上的位置,而非真实的地理位置。)
<img src="https://pic2.zhimg.com/50/996af5a8f2b1c90579335cc3562ea98d_hd.png" data-rawwidth="691" data-rawheight="412" class="origin_image zh-lightbox-thumb" width="691" data-original="https://pic2.zhimg.com/996af5a8f2b1c90579335cc3562ea98d_r.png">
(图片来自《精通比特币》,可爱的小姑娘来自我)
就在大家如火如荼地紧张解题的关键时刻,一个接收到兔子君B所广播的节点的兔子君C,优先发现了下一个区块-粉,也就是说绿色阵营的小兔子们的区块链可以进行下一步延伸,就会比红色阵营的小熊猫们的长度长,红色阵营小熊猫遗憾出局。这样的话分叉问题就得到了解决。
<img src="https://pic1.zhimg.com/50/0a43bb8206d5faffb9b2919fd1d059d4_hd.png" data-rawwidth="691" data-rawheight="418" class="origin_image zh-lightbox-thumb" width="691" data-original="https://pic1.zhimg.com/0a43bb8206d5faffb9b2919fd1d059d4_r.png">
(图片来自《精通比特币》,可爱的小姑娘来自我)
这里我们需要提到一个名词,“共识攻击”。一个很著名的场景就是“51%攻击”。如果一群矿工拥有了全网51%的算力,那么只要他们联合起来就可以打击整个比特币网络。他们可以认为地去制造一个分叉的区块链实现双重支付,拿我们上文的例子举例,攻击者在区块-红中进行过了交易,结果他强行制造出区块-绿,并且区块-绿中将原本的交易替换成另一笔交易(把原本应该给卖家的钱打入自己同伙的钱包中),然后在区块绿的基础上再计算一个区块-粉,这样包含伪造的区块的区块链就比包含真实交易的区块红高出一个高度,此时,包含双重支付的恶意区块链将取代真实区块链,从而实现诈骗。
51%的概念并不是说攻击者需要全网51%的算力才能进行攻击,理论上来说不到51%也是可以实现攻击的,我们只是说拥有超过51%的算力的攻击几乎我们就可以判定它一定会成功。
上面都是在比特币场景下进行的论述
那么在哪些领域里也会用到区块链技术呢?
1.银行业
作为一种数字化,安全防干扰的帐户,区块链实现了银行业的核心功能:即价值的安全储存和转移中心。也就是说,在将来的几年内,一波基于区块链技术的公司或将影响到银行业。
2.支付和转账
区块链技术能够避开繁杂的系统,在付款人和收款人之间创造更直接的付款流程,不管是境内转账还是跨境转账,这种方式都有着低价、迅速的特点,而且无需中间手续费。
3.网络安全
虽然区块链的系统是公开的,但其核验、发送等数据交流过程却采用了先进的加密技术。这种技术不仅确保了数据的正确来源,也确保了数据在中间过程不被人拦截。如果区块链技术的应用更为广泛,那么其遭受黑客袭击的概率也可能会下降,因此人们认为区块链系统要比传统系统更为稳妥。区块链系统之所以能降低传统网络安全风险,一大原因就是它解除了对中间人的需求。
4.选举
大家的投票“绝不可能被我们——即程序员,学校管理员或学生修改、删除。”
5.智能合同
智能合同实际上是在另一个物体的行动上发挥功能的电脑程序。和普通电脑程序一样,智能合同也是一种“如果-然后”功能,但区块链技术实现了这些“合同”的自动填写,无需人工介入。这种合同最终可能会取代法律行业的核心业务,即在商业和民事领域起草和管理合同的业务。
6.股票交易
许多年来,各个公司都在想方设法简化股票的购买、销售和交易过程,新兴的区块链技术创企认为他们能够超越以往,实现整个流程的自动化,提高安全性和效率。
(参考来自区块链技术源于比特币 现在却要改变这12个行业)
有国内互联网金融长期观察者说,“区块链目前的情况类似于TCP/IP(1969年出现的技术,30年后应用才全面盛开)或者HTML刚出来的时候找不到落地的应用,除了比特币外,缺乏杀手级应用,比特币只是区块链1.0,而智能合约是2.0,区块链的较高应用是对应到物联网,做到实时信用确权。”
我个人认为区块链技术是很有前景的领域,值得有兴趣的各位学习研究。
区块链被真正广泛运用还有一段很长的路要走,大家要做的,就是积累技术等待成熟时机的出现。
希望自己能够和大家多多交流~
(写了好几个小时。。。希望通过我的回答能让更多人了解区块链~