从去年开始,区块链突然如火如荼起来,相关的新闻席卷微博、朋友圈、科技论坛、门户网站等各大媒体。业界大佬们更是频频发言,有宣称不做区块链就会被时代淘汰的,有说坚决不碰区块链的。国家队也是频频出手,管制、定性、做应用,央行更是默默地把区块链专利数量做到了世界前列。面对众多纷杂的信息、众多的技术分析文章,很容易让人脑袋嗡嗡,怕不懂,更怕懂了啥也都做不了。于是决定梳理一下相关的信息,看看这区块链到底是什么东西。

开篇之前,先抛出笔者的一个观点:区块链最合适的应用场景只有虚拟资产,除了虚拟资产的其他场景都是在蹭概念或者不是真正意义上的区块链,而且只要有人参与的业务流程都无法满足区块链设计的初衷。

区块链是什么

说到区块链,需要先了解其产生的背景,这样才能理解为何如此设计区块链。区块链的出现是和“暗网”相关的。所谓“暗网”与我们常见的“互联网”相比,只有通过特殊的软件才能够访问,并且在暗网上基本都是些黑市交易,无法见光,参与这些交易的人都不想暴露真实的位置、个人信息。应对这种交易需求,才出现了比特币。所以说,区块链一开始是为了解决匿名交易的问题出现的,也就是比特币。这也是区块链的第一个阶段,即一套账本体系和货币发行机制;后来基于区块链技术,出现了以太坊,在改进比特币区块的基础上加入了智能合约机制,称之为区块链2.0;以太坊之后,类似以太坊的一些扩展应用,能够对于每一个互联网中代表价值的信息和字节进行产权确认、计量和存储,能够扩展到几乎任何领域,这是区块链的第三个阶段,区块链将完成价值的交换。目前处在区块链2.0阶段。

其实从本质上看,区块链和Git类似,每个节点都有一份数据的存储,不同的是区块链没有中央服务器这么个概念,就是一个分布式无中心数据库,其有效的通过数学的方式在数据库没有管理员的情况下对内容达成一致,并且不通过正式工资或是分得股权就能奖励那些帮助使数据库变得更有价值的人们,最终能够实现无争议无抵赖的匿名交易。概括来看,其特点如下:

  • 去中心化:互联网本来的意义就是平等开放,所以有一种言论就是区块链是回归互联网本来意义的希望。这一点是区块链天然的优势,所有节点都存有数据的副本即实现了“去中心化”。
  • 无法篡改: 得益于区块之间的链式结构,可以保证数据无法篡改或者篡改的成本远大于收益。
  • 公开透明:每个节点保存的信息相同,能够消除信息不对称,实现信息透明。

与传统的关系型数据库用一张表或者多张独立的表存储数据,“区块链”使用多个“数据表”并且多个“数据表”形成前后衔接的链式结构,以防止数据被篡改(修改任何一个区块就破坏了链式结构)。总体的结构如下所示:

其中每一个“数据表”在区块链中被称为“区块”。格式如下:

这是区块链技术基本都具有的一些头部信息,包括4字节的版本号、32字节的上一个区块的哈希值、32字节的Merkle根、4字节的时间戳(当前时间)、4字节的难度目标以及4字节的随机数。

  • 版本号:用于跟踪软件/协议的更新。如果新版本的软件不兼容旧版本的软件,那么就认为是发生了“分叉”。
  • 上一区块头哈希值:存储的是链上上一个区块的哈希值,也是区块链设计的精髓所在。
  • Merkle根:又叫做梅克尔根,是一种用于完整性证明的数据结构,为了能够在区块头中体现出交易而做的一个计算,同时也是为了解决交易记录进行Hash计算的效率问题。
  • 时间戳:该区块产生的近似时间。这个时间虽然是节点生成的但是其是否有效需要其他节点的认可(允许有一定程度的误差)。时间戳使得交易有先后,是防范双重支付攻击的一个关键设计。
  • 难度目标:该区块工作量证明的算法的难度系数。系数越大,目标哈希值的0越多,计算的难度呈指数增长。
  • Nonce: 用于工作量证明算法的计数器。

区块体的信息主要是交易列表。交易的数据结构因平台的不同而不同。比特币中就是简单的交易信息,以太坊则会存放智能合约。这里需要提到的是比特币中使用UTXO(未花费的交易输出,Unspent Transaction Output)实现支付系统的账户模型,并没有余额、钱包的概念,交易列表中的关键信息也是一些UTXO的组成,如此计算账户的余额则需要通过遍历整个交易历史来最终计算出每个账户的余额。UTXO的示例如下图所示:

可见除了coinbase这种交易之外,其他的交易都至少有一个交易的输入且必须引用一个输出,而一笔交易的输入可以引用之前多笔交易的输出。此外,任何一笔交易的交易输入总量必须等于交易输出总量(支出与找零)。其一般结构如下:

使用UTXO的优势如下:

  • 私密性比较强,理论上可以为每一笔输出设置一个地址。
  • 无需维护余额等状态值。
  • UTXO是独立数据记录,可以通过并行极大的提升区块链交易验证速度。
  • 无需关心事务问题,只需要关心输出脚本即可。
  • 能够清理过期交易,回收存储空间。

而以太坊则使用了传统所理解的账户模型,主要是因为UTXO无法支持图灵完备的智能合约实现。

此外,还需要说一下“块高度”的概念。区块链网络的创世块(第一个区块)的块高度为0,如此每增加一个区块高度就+1,如第一个图所示,如果最左侧的块为创世块,那么最后一个区块的块高度就是2。

区块链典型流程

比特币为例,区块链的一个典型交易流程:

  • 新的交易向全网所有节点广播,交易信息包括发UTXO输入、UTXO输出等关键信息。这里一个交易并不需要抵达全部的节点。只要交易信息能够抵达足够多的节点,那么他们将很快被整合进一个区块中。
  • 每一个节点都将收到的交易信息经过验证无误后(使用解锁加锁脚本自动化验证)纳入一个区块中(被打包到块之前这些交易被存储在内存池中)。
  • 每一个节点都尝试根据最新的区块的信息找到一个具有足够难度的工作量证明。
  • 当一个节点找到了一个工作量证明,就创造一个新的区块(将接收到的交易纳入其中),并向全网进行广播。
  • 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性。
  • 其他节点表示他们接受该区块,而表示接受的方法,是在跟随该区块的末尾制造新的区块以延长该链条,将被接受区块的随机散列值做为新区快的Prev随机散列值。

区块链技术架构

其实从本质来看,区块链不能算是一个新的技术,更应该看做是一个新的技术框架,是基于很多成熟的技术而成的,而且不仅仅是技术,还有金融学,货币学,博弈学等。其技术架构如下图所示:

其中,区块的链式结构、UTXO以及智能合约是比特币发明人“中本聪”的原创发明。

存储

区块链在每一个节点会存储数据,并且需要持久化存储,存储方式和传统的应用一样,包括数据库和文件系统。

对于存储方式的选择, 区块链中并没有做相关的规定,而比特币和以太坊都使用LevelDB做为持久化存储方式。

通信机制

区块的通信是基于P2P技术,即不区分客户端和服务端的网络,和P2P下载是类似的原理。在区块链中其功能点包括:

  • 把需要存储的数据广播到所有节点上进行储存,也就是多播。
  • 查询整个网络集群中所有节点的最新数据,如果自己节点的数据与大部分节点的数据不一致,则更新自身的数据与大部分节点存储的数据一致。这个功能也是防止数据被篡改的一个很重要的机制,是区块链核心的一个原则“少数派服从多数派”。当然这个也会引起51%攻击的问题。但区块链使用其他的机制极大杜绝了这种风险,下文会提到。

安全机制

区块链同样使用了很多成熟的安全技术来保障其特点。

  • 哈希算法:⽤来对⼀段数据进行计算,得出⼀个摘要信息,通俗点说就是给一段数据⽣成⼀个固定大小的身份ID, 且其是不可逆的。区块链使用哈希做工作量证明、交易ID生成、区块之间的关联等。此外,区块头中的Merkle Root也是使用哈希算法做完整性证明的(比特币中使用double-SHA256哈希算法)。常用哈希算法包括MD5、SHA1、SHA256等。
  • 数据加密:区块链使用了非对称加密算法。比特币中的钱包地址本质就是一对公钥私钥。此外,区块链利用公钥哈希加锁比特币的输入记录,阻止输出。
  • 数字签名:同样基于非对称加密技术,用签名和公钥解锁自己的比特币输入记录,使用比特币。
  • 零知识证明:所谓零知识证明即在不知道答案的情况下去验证给出的答案是否正确。这个过程完全靠机器验证,机器根据题目给出随机试验以验证答案是否正确。在某些区块链应用中如Zcash\ZCoin即使用了零知识证明来保证交易双方和交易金额的匿名性, 提供了绝佳的支付隐私。详细可见:零知识证明(Zero-Knowledge Proof)原理详解

此外,这里具体介绍一下是如何使用区块中的梅克尔树来做完整型证明的。每当产生一次交易,那么就与其他所有准备打包进区块的交易组成交易列表,通过Merkle Tree算法生成Merkle Root Hash,作为交易列表的摘要存到区块头中。比特币中使用的称之为二叉梅克尔树,而比如以太坊系统中使用的则是梅克尔-帕特里夏树。以二叉梅克尔树为例,流程可以概括为每相临的两条交易记录向上形成一个Hash值(如果仅有奇数个交易,则最后的交易会被复制一份以构成偶数个叶子节点),再与相邻的节点再往上形成Hash值,一直到树根形成所有交易记录的唯一Hash值,即Merkle根。如下图所示:

如此,一方面可以在数据同步有问题的时候快速定位到出错的交易记录,另一方面在节点只是需要验证支付(不同于交易,如验证是否有人完成了对自己的一笔交易)的时候,仅下载链的区块头即可,实现“简化支付验证”(SPV),能够极大的节省传输数据量。SPV的流程如下:

  • 一个SPV节点会在节点间的通信链接上建立起布隆过滤器,限制只接受含有目标比特币地址的交易。
  • 当节点探测到某交易符合布隆过滤器,它会以Merkle区块消息的形式向相邻节点索要包含区块头和一条连接目标交易与Merkle根的Merkle路径,如图中如果要验证交易1,那么则返回Hash2、Hash34即可。
  • SPV节点使用该路径找到与该交易相关的区块,验证对应区块中该交易的有无。

共识机制

对于分布式系统来说,一个非常核心的问题就是如何让所有节点达成一致,也就是共识机制。在区块链出现之前,已经有了一些解决方案,这里称之为传统分布式一致性算法:

  • Paxos算法:基于消息传递且具有高度容错特性,类似于议会投票的过程分为三种角色Proposer、Acceptor及Learner,主要就是Proposer发起投票,Acceptor进行投票的一个过程。具体可见:可靠分布式系统基础Paxos的直观解释。这里需要说明一点:Zookeeper使用的ZAB协议对Paxos做了一些改造,是一种类Paxos算法。
  • Raft算法:相比起Paxos算法,RAFT更加注重算法的落地性和可理解性,其核心思想是如果数个数据库初始状态一致,只要之后的进行的操作一致,就能保证之后的数据一致。分为Leader、Follower以及Candidate三种角色,基于Log进行数据同步。大体就是选举Leader,然后Leader生成Log,Follower进行同步的一个过程。详细可见:Raft协议详解

对于不需要货币体系的联盟链或者私有链而言,所有的节点都是绝对信任的节点,考虑到对性能的要求,一般选择传统的一致性算法即可。但由于这些传统的方案仅仅是考虑到了节点会有网络故障或者宕机的问题,没有考虑到节点会作恶(篡改消息)的情况。因此,在比特币、以太坊这种区块链上并不适用。于是有了以下的分布式一致性算法:

  1. PBFT: 拜占庭容错,针对的是拜占庭将军问题而提出的一种一致性算法。分为三个阶段:预准备(pre-prepare)、准备(prepare)和确认(commit)。大体的流程就是节点之间互相转发消息,以其中相同的大多数作为最终答案。此算法的可靠度受制于结点的数量影响(N ≥ 3F + 1,总的结点数目必须大于有问题节点的数目的三倍),因此使用受限,在IBM的私有链Hyperledger中得到了使用。

  2. PoW: Proof of Work,工作量证明。这个是比特币、莱特币等货币型区块链使用的共识机制。类似于现实中的毕业证、驾照等,来证明你具有某种能力。可以认为PoW彻底解决了分布式一致性的问题。其过程以比特币为例,如下:

    • 矿工在网络中拿到最新一个区块的头部信息,其中的Merkle根包含了交易记录的信息摘要;
    • 将拿到的头部信息作为参数,将nonce值从零开始,去计算其双重SHA256值(SHA256(SHA256(区块头信息)));
    • 如果算出的答案不符合要求(前n位为0),则将nonce值增加一个单位,再算;
    • 直到计算出符合难度目标的答案,就挖到一个区块(打包交易记录,其中优先记录手续费高的交易),即可将自己创建的区块广播出去,其他节点验证无误即保存到自己的区块链上。
    • 如果同时有多个节点实现了工作量证明挖到了区块,那么整个网络集群采用少数服从多数原则,集群中大部分采用了哪个区块就选择此区块组成最新的账本,达到最终一致性。少数服从多数原则也是区块链防范攻击、保证数据安全性的一个核心的原则。
    • 如果节点同步到了多个长度不同的区块链账本,那么选择其中最长的作为区块链账本,且在最长链之外挖矿,不会得到任何挖矿报酬。即“最长链规则”。

    由最后两点可知,挖到一个区块时,并不能过早的高兴,一般说来后面再跟五个确认过的区块(加上自己的区块,叫做六次确认),才能确认自己创建的区块的确是有效的,记录的交易也才认为是有效的(此时交易接收方可以认为交易已经成功)。

    这个思路牺牲了一部分一致性来保证区块链的健壮性,即使只有一个结点,区块链系统依旧可以运行。同时也保证了区块链的安全性,除非51%的结点被控制。但一方面如果想要控制这么多节点,不仅要具有很强的算力,还相当于重构一个区块链网络,另一方面区块链会给予实现工作量证明创建区块成功的节点以奖励(每一个区块的交易清单的第一条交易为“系统给区块创建者支付xx奖励”,被称做coinbase交易,此交易没有输入),在比特币中奖励包括一部分新造比特币(一开始一个区块奖励50个比特币,每隔21万个区块自动减半,4年时间比特币总量最终会稳定在2100万个),一部分是从区块所包含的交易中抽取的挖矿手续费。如此权衡收益和破坏的成本,基本可以杜绝这种51%攻击(博弈学的使用)等。

    此外,还需要提到区块头中的难度目标这个值,此值与计算耗时是反比的,即此值越大,那么计算越容易。以比特币为例,为了控制每十分钟产生一个区块的速率,需要根据统计数据动态调整难度目标从而可以保证区块的生产速率。

    比特币的PoW虽然很好的解决了分布式一致性问题,但其非常的耗费计算力,浪费电,并且这种纯粹靠CPU的计算会受到某些专用硬件的威胁,如ASIC芯片。而以太坊的POW算法叫做Ethash(最新版本为Dagger-Hashimoto),其特点是挖矿的效率基本与CPU无关,却和内存大小和内存带宽正相关,无法设计专用硬件来解答难题。

  3. PoS: Proof of Stake,权益证明机制。是一种通过业务规则达成共识的方式。基本概念是产生区块的难度应该与用户在网络里所占的股权成比例。具体来说就是根据钱包里面货币的多少以及货币在钱包里存在的天数来合成一个单位(币天),然后根据币天的关系对计算机进行哈希计算降低(谁的钱包里的币天数越大谁拥有记账权的概率就越大)。如此,能够减少对计算资源的浪费,提高计算性能。但是它也是牺牲了一部分的共识,而且需要等待多个确认。与PoW类比于比力量大小,PoS就是比耐力大小。

    PoS目前已经使用在以太坊中。

  4. DPoS: Delegate Proof of Stake。是基于POS衍生出的更专业的解决方案,类似于董事会的投票机制,选举出n个记账节点,在节点中提案者提交的提案被这些记账节点投票决定谁是正确的。此机制性能比较高,但是其选出的delegate节点是能够作恶的。

    EOS的底层框架石墨烯-Graphene使用DPoS做为共识机制。

上层应用

  • 可编程合约/可编程资产:交易验证并不基于一个不变的模式,而是通过运行脚本语言来实现可编程资产以太坊。
  • 激励机制:虚拟货币激励,比特币、以太币。
  • 成员管理:为整个区块链网络提供身份管理、隐私、保密和可审计的服务。通过公钥基础设施和去中心化共识机制使得非许可的区块链变成许可制的区块链。多中心组网、私钥公钥生成等。

这里需要提的是区块链中“地址”的含义。以比特币为例,地址本质上是一个私钥公钥对(ECDSA椭圆曲线算法),其存储和区块链和网络是没有关系的,可由用户的钱包软件生成并管理。而通常为了易于人们记忆,地址会在公钥的基础上做一个格式化转换。常用的格式包括:Base58Check(Base58+Checksum)、WIF压缩、130位和66位公钥。以最常用的Base58Check为例,可以概括为:Base58Check(RIPEMD160(SHA256(PubKey))),其流程如下:

而以太坊则是使用SECP256K1椭圆曲线算法生成公钥私钥对,再把公钥去掉04,剩下的进行KECCAK-256的哈希,得到长度64的16进制字串,丢掉前面24个,拿后40个,再加上"0x",即为以太坊地址。

性能问题

目前区块链无法得到大规模应用的一个很大问题就是性能,比特币的每秒交易量只有3/秒,而以太坊也就30/秒。虽然EOS这个项目号称能达到几百万/S,然而分布式系统的本质让这个指标有点难以相信,而且这个数据也仅仅是建立在其几百个结点的基础上。

目前,提升区块链的方案主要有以下两种种:

  • 链外解决方案:即允许小型和频繁的交易发生在与主链并行并由主链背书的侧链实例上。只将比特币区块链用作大额交易的结算网络——小规模交易由区块链之外的支付中心处理(off-chain scaling,链外扩展)。
  • 链上解决方案:直接修改区块链设计以支持高性能,如提高区块的容量、按照地址分片验证(以太坊)等。具体的可见:区块链性能提升:链上设计之道

当然,如果使用私有链或者联盟链,其中的共识机制采取传统的分布式一致性算法或者高效的其他一致性算法也可以解决性能的问题。

应用场景

由于区块链本身的去中心化、不可篡改、安全等特性,需要第三方机构的应用场景都可以使用区块链技术。主流的应用场景如下:

  • 公正防伪
  • 资产交易
  • 信用体系
  • 物品溯源
  • 身份验证
  • 文件存储
  • 银行结算
  • 版权控制

技术平台

区块链的技术平台总体上可以分为公有链、联盟链和私有链,其大体的对比如下:

. 公有链 联盟链 私有链
参与者 任何人自由进出 联盟成员 个体或公司内部
共识机制 PoW/PoW/DPoS 分布式一致性算法 分布式一致性算法
记账人 所有参与者 联盟成员协商确定 自定义
激励机制 需要 可选 不需要
中心化程度 去中心化 多中心化 (多)中心化
特点 信用的自建立 效率和成本优化 透明和可追溯
承载能力(交易数/s) 3-20万/s 1000-1万/s 1000-10万/s
典型场景 虚拟货币 支付、结算 审计、发行
代表项目 比特币、以太坊 Hyperledger、腾讯TrustSQL

比特币

比特币(使用C++开发)早于区块链走入人们的视野,并且很长时间内许多人都把比特币和区块链看做同一个东西。

如图,是比特币的架构,可以看出比特币是基于区块链技术的副产品,是基于区块链的第一个应用,后来其他技术平台基本都是在比特币的基础上开发出来的。区块链可以类比为我们平时使用的JavaEE技术,比特币则是基于JavaEE开发的应用。无法基于比特币这个平台开发自己的应用。

以太坊

如上图所示,以太坊的架构由比特币演化而来,其诞生是为了解决比特币只适合加密数字货币场景,不具备图灵完备性,也缺乏保存实时状态的账户概念的问题,同时也是为了解决PoW机制带来的效率和资源浪费的问题。以太坊既是一个数字货币系统,也是一个智能合约的开发平台(类似AppStore这种应用开发平台,一个智能合约即一个应用)。可以把以太坊看做一个完全去中心化的电脑,使用此电脑需要用以太币支付费用(Gas)。

智能合约是以太坊最为核心的一个概念:提供了一个功能更强大的合约编程环境。一个合约类似一个合同,一旦写好即无法修改。每个节点都执行软件的一部分。类比于数据库中的触发器和存储过程,智能合约在区块链中是一个沙箱中的脚本(无法调用外部API),用于执行业务逻辑,也可以用于各种检查。开发智能合约使用的是Solidity语言。其是在Javascript语言基础上做的修改。合约代码会编译成字节码发布到以太坊网络,在EVM(Ethereum Virtual Machine)中执行。开发智能合约主要用到两个框架:

  • Truffle Framework:Truffle提供了一整套部署测试的工具,可以方便和web3.js(以太坊提供的NodeJS SDK)结合使用。
  • dapphub: 提供了很多实用的合约,比如数学运算、权限验证等。

其实比特币的交易也可以看做智能合约,只不过在比特币中就是⼀对锁定与解锁脚本(基于逆波兰表示法的基于堆栈的执行语言),受限只能实现转账交易。

使用以太坊发行数字代币(符合ERC20标准的智能合约)是非常简单的事情,官网提供了配套的代码和工具:https://www.ethereum.org/token,也可以参照这个指引:一步步教你创建自己的数字货币(代币)进行ICO

这里还要说明一下ETC和ETH的区别。2016年6月区块链业界最大的众筹项目TheDAO遭到黑客攻击,导致300多万以太币资产被分离出TheDAO资产池。鉴于区块链的去中心、匿名的特征,资金根本无法追回,于是以太坊的发明人V神决定从块高度1760000开始把任何与The DAO和child DAO相关的交易认做无效交易,把以太坊做了一次分叉(区块链软件升级,但由于去中心化的问题并不能保证所有软件版本都升级上来),以此阻止攻击者在27天之后提走被盗的以太币。但此次分叉由于设计缺陷问题后来进行了回滚,最终是在区块高度1920000进行了一次分叉。而另外一些人由于不认同这种解决办法,而继续使用旧版本的以太坊软件,于是以太坊便发生了硬分叉(区块链软件升级,老版本不能够识别新的数据),原来的以太坊被叫做了ETC(以太经典)。至于这次攻击能够成功的原因主要是因为智能合约的逻辑有问题,具体的原因分析可见:从技术角度剖析针对THE DAO的攻击手法

EOS

Enterprise Operation System,是由和V神齐名的BM大神发起的区块链项目,从名字上看其目的就是构建一个商业操作系统。由于其是一个ICO项目,且被某比特币大V进行了投资,因此受到的议论比较多。EOS的设计针对的是区块链性能太低满足不了很多应用场景以及在以太坊上进行操作需要支付费用等问题。

EOS号称自己能够达到每秒百万级的处理量,且具有高度自治,并能够为开发dApp的开发者提供底层模块,降低开发门槛。EOS也不收取任何费用,并能够通过并行链和DPOS的方式解决延迟和数据吞吐量的难题。

在EOS上编写智能合约支持C/C++/WebAssembly以及RESTFul接口(比较简单)。

NEO

小蚁区块链,开源,使用dBFT(delegated BFT,授权拜占庭容错机制)做为其共识机制。市值国内第一,全球第七,支持C#、Java、GO、Python、js等开发区块链应用。其目的是利用区块链技术和数字身份进行资产数字化,利用智能合约对数字资产进行自动化管理,实现“智能经济”。

目前,NEO提供了配套设施搭建私有链。

联盟链和私有链

市面上有一些联盟链和私有链技术平台,可以基于此做一些区块链应用开发。如下:

  • 腾讯TrustSQL: 腾讯主导的可信数据库区块链平台,https://trustsql.qq.com/
  • 百度区块链开放平台:百度主导的区块链平台,https://chain.baidu.com/
  • IBM HyperLedger,也被称作超级账本,又叫fabric,是一个面向商业的区块链系统开发框架(开发用的半成品基础设施)。

ICO

提到区块链,ICO是不得不提的一个概念,类比于IPO,ICO是首次发币代售,提供了一种平等、低门槛的方式让普通民众参与到经济活动中,目前能够进行ICO的平台(能够方便发代币)主要是以太坊和比特股(Bitshares)。这种东西本意是好的,可以降低公司融资的成本,好的项目不会再看风投脸色,好的Idea也不会再胎死腹中,用户ICO获得的Token还可以带来实际的经济效益。但是由于缺乏IPO一样的管制,已经彻底沦为了收割智商的工具。

如上文所说,其实基于以太坊发行虚拟货币是非常简单的,如果你文采够好随便写个白皮书,洋洋洒洒描绘一个去中心化的蓝图,再找几个所谓业界大神站个台,好了,剩下的就等着数钱吧。当然,不排除有真心想做出一个项目的,但绝大多数都是些空气项目,发起人不过是发了个空气币,然后卷钱跑路。

说到ICO,虚拟货币交易所也是关键的角色,在这里可以流通法币和各种虚拟货币。有点令人不解的是,去中心化的区块链虚拟货币竟然需要一个中心化的“交易所”。黑客们攻击不了区块链,攻击一个中心化的交易所还是有许多路可寻的。最近频频发生的虚拟货币交易所被攻击的事情也算是对这种模式的一种讽刺。

开发参考

如果想实现自己的区块链平台或者了解区块链的实现,可以通过比特币、以太坊的代码学习,也可以参考以下资料:

小结

区块链技术的出现以一种全新的思路解决了分布式一致性的问题,技术+博弈学+金融学的使用巧妙的构建了一个安全健壮的系统。这些思路给开发者在平时的学习工作中会有很多的思考和提示。而随着比特币价格的水涨船高和各种资本的追捧,区块链目前是被过度炒作的,大部分应用都是联盟量和私有链,已经违背了区块链设计的初衷。虽然的确是有应用场景,但笔者认为这和共享分布式数据库没有本质上的区别。此外,虽然区块链上的数据是无法篡改的,但是如果数据上链有人工参与的环节,那么这一步如何防止篡改呢?这也是我开篇观点产生的原因。

至于能用区块链做什么?在笔者看来,去研究区块链技术平台只有大公司、政府能做并推广起来,不过最后也只不过是“联盟链”、“私有链”。而对于创业公司或者个人来说,基于公有链、联盟链做之上的应用则更为合适,比如在以太坊/EOS上做一个养宠物的游戏^_^。

参考资料