Chinaunix首页 | 论坛 | 博客
  • 博客访问: 640625
  • 博文数量: 133
  • 博客积分: 1566
  • 博客等级: 上尉
  • 技术积分: 1230
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-01 09:31
文章分类

全部博文(133)

文章存档

2019年(1)

2018年(1)

2017年(8)

2016年(9)

2015年(17)

2014年(4)

2013年(31)

2012年(25)

2011年(36)

2010年(1)

我的朋友

分类: 网络与安全

2016-02-18 10:15:04

      要讲区块链却不讲数字货币是不可能的。毕竟区块链是为了满足比特币独特的需求才被创造出来的。  

     比特币的目标是能够替代传统货币,作为货币,它就必须有流通能力。简单地说,比特币用户之间可以互相转移比特币。而为了保证比特币的流通能够正常的进行,比特币软件必须提供一些最基本的安全上的保证。比如说,如果A给了你一个比特币,这一个比特币就是你的了。要是A能随随便便把这个比特币抢回去,那肯定不行。

     如果你使用的是纸质货币,A要拿回给了你的东西,就必须在物理上把它抢回去。那只要使用物理上的方法保护好这个东西就好了。但是如果你用的是支付宝怎么办?支付宝上的转账无非是数字上的加加减减,并不涉及物理实体的转移。你所需要做的无非是信任支付宝这个第三方的机构,相信支付宝没有和A串通好,一起坑你的钱。
 但是这两条到了比特币身上就都行不通了。比特币不是物理实体,同时也不存在一个所有人都信任的第三方(比特币的设计目标就是创造一种用户可以完全匿名的货币,自然不可能去依赖一个这样的第三方)。那应该怎么办呢?其实思路很简单:如果A在大庭广众之下,当着一千个人的面答应把钱给你,那么就算没有第三方的保证,A也很难抵赖。
    
       从实现上来说,每当用户使用比特币进行了交易,关于这次交易的信息就会被广播给所有的比特币用户。这样就算有人想要抵赖,也会被抓到证据。

      好了,讲了这么多,好像问题都解决了,那么这里面有区块链什么事呢?  

     我们可以从一个新生节点的角度看一下这个问题。新生节点要加入比特币网络,就必须对整个网络的情况有所了解。它必须知道网络中的整个交易历史,因为只有这样它才能知道当前其他所有节点各持有多少比特币。而这些交易历史所构成的结构就是区块链。区块链是一系列区块按照时间构成的一个链条,链条中每一个区块都包含数条交易记录。  

     因为比特币本身在安全上的要求(见前文),区块链必须满足一些特性。简而言之,就是不能让人有修改历史的能力。假设有一个区块链A->B->C,任何接收到这个区块链的新生节点,必须能够很方便的验证交易A之后确实发生了交易B,交易B之后确实发生了交易C。在密码学中,防止数据被改动有一个很方便的工具,就是hash。如果C之中包含了B的hash值(如sha256值),那么如果有任何人尝试发送改动过的B(不妨称为B')给新节点,新节点立刻就能发现B'的hash值和C中记录的不符。所以只要新节点获取到了区块链中最新的一个块,它就能往回验证整个历史的合法性。  

     那么,新节点要怎么知道最新的块是否合法呢?答案其实是:“它并不能知道。”打个比方说,要是你身边的所有人都商量好了合起伙来骗你,你就没办法判断你听到的是不是假话。但是比特币网络存在这样一个假设:“好人总是占大多数的”。也就是说,当新生节点向网络发出请求,它收到的最常见的回复就是合法的回复。  

     我们解决掉了历史验证的问题,但还有另一个问题:谁有权利往区块链上添加新的块?如果有恶意节点将“A给C一个比特币”改成了“A给B一个比特币”,其他节点应该怎么区分?答案和之前一样:“它并不能区分。”但是不要忘了,我们假设网络中的好人是占大多数的。在大家的计算能力差不多的情况下,这等同于假设网络中的好人们拥有更多的计算力资源。也就是说,如果我们把“往区块链上增加区块”这件事变成一件需要大量计算的工作,那么拥有更多计算力资源的好人们就能抢在坏人之前加入新区块。  

     而这个计算量巨大的工作,仍然是hash。所有的节点会达成一个共识:“只接受hash值前几位符合条件的区块”(比如只接收hash值第一位是0的区块)。节点可以通过改动区块中的padding来凑hash值。只要hash算法是安全的,节点就没办法高效的凑对hash值,只能暴力尝试所有的padding来碰运气。运气好凑上了的节点,还可以在区块中增加一条给自己一个比特币的交易记录作为对自己的奖励。这个策略还很适合于控制新区块出现的速度(比特币需要在计算力变动的情况下维持匀速增长),只要增强对hash值的要求(比如原先要求第一位是0,现在要求头两位都是0),就能减慢区块链增长的速度。  

     区块链的设计目标和工作原理大概是这样。如果有讲的不清楚的地方,或是有错漏的地方,欢迎在评论中指出。

============================================================

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:祝皓玥
链接:
来源:知乎

Wiki: A block chain is a distributed data store that holds a public ledger of transactions for cryptocurrencies, such as bitcoin. This record is enforced cryptographically and hosted on machines running the software. The technology forms the basis of all cryptocurrencies.区块链是一种分布式数据存储模式,也可以说它是储存加密货币(例如比特币)的交易记录的“公共账本”。它的记录是加密的,被所有运行这个软件的机器所持有。这项技术构成了所有加密货币的基础。


维基说了那么长一串还是没有说清楚区块链到底是什么,又有什么用。我在一篇36Kr的文章《未来十年,Blockchain会如何互联网世界?》中看到了比较好的解释。为什么说“区块链不仅只是改变了货币在互联网世界里的的运作方式,它正在改变互联网应用的建构方式”呢?这就要引申到Joel Monegro提出的区块链的层叠结构(blockchain stack),如下图:


Joel Monegro说这是他所想的10年后的互联网应用的结构。这个结构中最重要的便是网络的覆盖重叠,共享的数据层和协议层。这将颠覆目前互联网的层叠结构。原文中是这么说的“在这个新结构里,更加难以获得细分化、防御性和网络效应。大多数事物将像电子邮件那样运转,把你的密码从一个app带入另外一个app,你所有的数据和关系都在其中了”。

(以下内容是36Kr翻译自Joel Monegro的文章)

=================================


Joel Monegro本人对这幅图的解读如下:


区块链的层叠结构(blockchain stack

这幅图的基本思想就是:每个长方形条的内容都是去中心化和开源的。我称之为“共享式的数据层和协议层”。没有哪个人能够控制这个系统的任何一部分,而这些部分对所有个人和企业都是开放的。以比特币为例,区块链就是共享的数据层,而比特币协议就是一个去中心化的协议,它是共享的协议层的一部分。

在这副图里,越往上每一层就越薄,而共享的数据层和协议层在整个层叠结构里占了80%的比例。现在的互联网应用建基于如TCP/IP和HTTP这样的开放式的去中心化技术之上,但如果你把现在的互联网应用按照这幅图描绘出来,去中心化技术只占15%,因为那些应用基本都不是开放的,而是中心化的。


1.矿工和区块链

每个矿工都是计算机组成的网络里的节点,这些计算机构成了一个整体去验证所有的比特币交易。在每一笔交易中,算法会以比特币奖励他们,因为比特币在真实世界具有价值,这些机器的操作者就有激励让机器保持运作。

区块链就是一个公开账簿,它存有所有交易的记录,区块链由矿工去维持,它不是由某一个实体独家控制的,是对所有人开放的。


2.各种网络的覆盖重叠

开发者开始创建与比特币区块链平行的各种网络,借由它们去完成比特币网络无法完成的任务,但是可以利用区块链,比如去给他们的工作加上时间戳或去确认工作。

比如Counterparty(它是一个在比特币网络里的免费开放的金融工具平台),比如“侧链”。无论这些网络使用何种形式来覆盖重叠,它们的一个共同点就是它们都与比特币区块链联系在一起,而且它们能从中获得的网络效应就是流动性,而不用它们的加密货币做辅助程序,或者不用如Ethereum要求的区块链做备选方案。


3.去中心化的协议

感谢区块链,让我们可以去开发一套开源的、去中心化的协议,还有内置的数据、验证方式和交易体系,而没有一个实体可以单独控制。这正是传统的软件业开始瓦解的地方。最佳例子也正是比特币,我们已经意识到它对货币和金融的冲击。

Ebay、Facebook和Uber之所以很有价值,是因为它们能从网络效应里大量获益,这种网络效应来自于它们把用户数据集中在自己手里,并从交易中获益。建立在区块链之上的去中心化协议有可能取消每一个单独的部分,比如说,他们可以创建一个共有的去中心化的数据集合,任何人都能用,并且支持以比特币为基础的p2p交易。

事实上,已经有一些很有潜力的团队正在这么做,他们正在创造新的协议,有可能让以上那些公司被颠覆掉。一个例子就是Lazooz,它是一个实时拼车的协议,还有OpenBazaar协议,它支持免费的去中心化p2p市场。


4.开源和商业化的API

一般的开发者难以建立协议,但有机会能让他们轻松搞定。从长期来看这个行业是否会发展良好,这个问题还存在争议,但是我认为这个行业是整个层级结构里的重要组成部分。在这些去中心化协议上,让任何开发者能迅速创建新的应用或实验至关重要。

这可以是商业化的服务,或是开源项目。这个趋势的好例子就是 的API,还有Coinbase的开源节点工具Toshi。这两个的目标是一样的,不过 Chain 是一个商业服务,而Toshi是开源的。


5.应用

这是这个结构图里面向用户的部分。大多数时候,建立在这个基础上的应用和我们现在的方式是一样的,就像Coinbase和PayPal的运作方式相似。但对于用户而言,一个很大的区别就是这些应用是建立在去中心化的协议之上的,每一个应用都可以和其他应用对接,就像不同的email应用和比特币钱包可以交互操作。

我喜欢这个层级结构的一个地方就是,它从底部逐渐向上成长,最初,我们有矿工、区块链和比特币,而现在我们在这个基础上创建了其他事物。我认为,技术中最重要的变革就是以这种方式建立的。


这给开发者、创业者和投资人带来了一系列有意思的挑战,因为目前互联网的层叠结构的价值会被上面这个区块链层级结构商业化。但这个结构最好的地方在于,由于网站转换率、转置成本、个体对数据的所有权和市场支配力会降低或者不再存在,用户会受益更多。


========================================================


总的来说,区块链提供了一个规模化的共识机制。我对这方面了解还不够深,等搜集更多资料再来改进答案。

阅读(1543) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~