区块链入门
区块链
区块链是不可破坏的交易记录的数字账本,对于参与交易的各方来说,他们共享区块链上的数据,而且各方所获取的数据都是不断地保持一致的。按照这种方式形成的数据库不存在一个中心化的信息源,不存在单点故障,同时保证数据对于所有参与者来说都是公开的,而且很容易就可以获取得到。
交易的各个参与方在区块链中称之为节点,它们组成了一个网络。每个节点可以看成是一台连接到区块链网络的计算机,计算机上安装了一个客户端,完成交易验证和广播的任务,称之为打包区块并更新到主链上。节点保存区块链上的账本数据,并竞争以获得区块打包权。
区块链的数据库设计是去中心化的,因为区块链上的数据创建和维护都是由网络中的所有节点共同参与下完成的,而不是单一的中心机构。
区块链是基于现代密码学、分布式一致性协议、点对点网络通信技术和智能合约技术形成的公共账本
区块链的框架
在讨论区块链的框架时,需要与网络的OSI框架或者TCP/IP模型区别开来。后者定义的是网络模型,而区块链是针对数据结构层来进行定义的。所以,两者不属于同一个范畴。了解区块链的框架有助于产品或者开发者对区块链的各个模型如何交互有一个清晰的认识,从而更好地构建产品或者服务的业务逻辑和技术实现路径。而且区块链有大量的开源项目,从框架上对这些项目进行解析,也有助于我们更好地决定是否使用某个开源项目的代码,而不需要重复造轮子。
区块链的框架可以自下而上,可以分为P2P网络层、共识层、虚拟机层、API和语言层、APP业务逻辑层、APP应用交互层。
- P2P网络层
P2P网络层提供了节点之间通信的基础,使得节点之间互相发现并传输数据。例如,以太坊中的DEVP2P库。 - 共识层
共识层包含了区块产生的规则,以及验证区块的数据。例如,比特币使用的工作量证明(PoW)、NXT使用的权益证明(POS)、Graphene相关的区块链(Bitshares, Steem, EOS)使用的委托权益证明(dPoS)、NEM使用的重要性证明(POI)等。以上这些算法一般应用于公有链。而对于联盟链或者许可链上,则有其他的一些共识算法,例如以太坊Kovan测试网络使用的权威证明(proof of authority)、部分超级账本Sawtooth项目使用的消逝时间证明(proof of elapsed time)等。 - 虚拟机层
虚拟机层是“交易的引擎”,是区块链各个区块状态变化基础。P2P网络层解决了各个节点状态的传播问题,共识层解决了节点状态的一致性问题,那么虚拟机层要解决的就是提供一个容器让这些节点状态可以发生改变以保持一致性。区块链虚拟机有两类,一类是图灵完备,另一类是非图灵完备的。对于非图灵完备,一个典型的实例就是比特币区块链,即比特币脚本字节码;对于图灵完备,则是以太坊使用的虚拟机。除了这两个典型外,还有很多其他的变体,例如WebAssembly(WASM)、RChain、TrueBit、EILE以及CLR-based VM等。 - API和语言层
API层在链上应用运行时所使用,而编程语言层则是在开发时,将代码编译为运行时的二进制码,放在区块链上并可以被虚拟机层所读取。API层体现到区块链节点的界面上,可以被链下应用访问,例如以太坊的JSON RPC协议和Web3.js,还有OMNI Layer和Counterparty等。语言层根据对应的虚拟机层的不同可以分为几个类别:(1)EVM语言,包括LLL、Serpent、Solidity、Viper、Bamboo和Babbage等;(2)WebAssembly-compiled语言,包括整个LLVM语言家族,里面有C/C++、Swift、Python、Ruby、Rust等等;(3)CLR语言,CLR是“Common Language Runtime”,包括所有基于.NET的语言,例如C#、F#、VisualBasic.NET等。目前它们由Neo区块链支持;(4)Functional smart contract语言,从原初的功能性语言变体(例如Haskell)衍生出来,包括Cardano区块链的Plutos语言,RChain使用的Rholang语言等;(5)非图灵完善语言,例如OMNI Layer和Counterparty等;(6)其他。 - APP业务逻辑层
从这个层开始,代码一般是由第三方开发者所写,而不是区块链的核心团队。这一层主要是通过在区块链之上开发解决具体问题的应用的,例如以太坊里面的DApp以及智能合约。这一层也可以分为两个部分,链上和链下。链上指的是具体的智能合约代码,这些代码由第四层API和语言层所完成,并由第三层的虚拟机层所执行,建立在第二层的区块链共识层基础上。链下指的是将智能合约代码连接到区块链外的应用逻辑的代码。我们可以将其分为三个主要类别:(1)oracles;(2)DApp的client-和server-side代码;(3)domain-specific off-chain系统,包括轻协议和可扩展性解决方案(闪电网络、Raiden等)。 - APP应用交互层
最后一层是展现给用户的DApp的实际界面和交互,它可以由Javascript和HTML编码的网页端,也可以是桌面或者Apps,例如数字钱包应用。
区块链的分类
区块链基于参与方,可以分为公共链、联盟链和私有链。
- 公共链
公共链对外公开,用户不用注册就能匿名参与,无需授权即可访问网络和区块链。它通过密码学保证交易不可篡改,利用密码验证和经济激励在互为陌生网络中建立共识,形成去中心化的信用机制。共识机制一般是工作量证明(PoW)或权益证明(PoS)。公共链也称为非许可链,例如比特币、以太坊等,适用于虚拟货币、面向大众的电子商务、互联金融等B2C、C2C或C2B等应用场景。 - 联盟链
联盟链仅限联盟成员参与,读写权限、参与记账权限按联盟规则制定。共识机制一般是PoS或者PBFT、RAFT等。联盟链也称为许可链,例如R3联盟等,适用于机构间的交易、结算和清算等B2B场景。 - 私有链
私有链仅在私有组织使用,读写权限、参与记账权限按照私有组织规则制定。私有链的价值主要提供安全、可追溯、不可篡改、自动执行的运算平台,同时防范来自内外部对数据的安全攻击。私有链也是一种许可链,例如币科学公司的多链平台等,适用于企业内部使用,如数据库管理、审计等,以及政府行业的应用场景。
区块链基于链与链之间的关系,可以分为主链、侧链和互联链。
- 主链
主链是独立上线并且正式运营的区块链网络,例如比特币等,大部分代币系统通过比特币平台做基础,重构一条区块链,然后在上面使用新的规则发行新的虚拟货币。 - 侧链
和比特币区块链交互,并与比特币挂钩的区块链,可以通过侧链来提升效率,扩展比特币功能。例如闪电网络把很多交易放在侧链,只有在做清算时才用上主链,这样一来提升了交易效率,也不会增加主链存储负担。 - 互联链
针对特定领域的应用形成了各自垂直领域的区块链,区块链之间互联互通形成互联链。
区块链的价值
区块链可以建立去中心化信用机制。传统信用机制是中心化的,导致中心化机构成为价值链的核心,进一步引发效率和安全问题。而区块链技术(分布式账本技术或者去中心化价值网络)可以实现去中心化的大规模信用机制,同时保证信用机制的安全和高效。具体来说:(1)简化流程,提高效率。参与方通过共享共识的方式建立公共账本,账本是唯一的、可溯源、不可篡改的信息源,消除重复验证的流程,减少结算或清算时间;(2)降低信用风险,提升透明和监管。使用智能合约等方式,保证交易方自动完成相应的义务,确保交易安全,避免欺诈行为,形成高效监管。
区块链的应用场景
简单来说,只要存在多个交易参与方并且存在互不信任的情况下,都属于区块链的应用场景。
- 共享经济,当前基于Uber和AirBnB模式的共享经济,依赖于一个中心化的服务商。如果可以实现通过区块链账本连接各个参与方,使得他们可以直接沟通和交易,将可以变革整个共享经济当前的模式。例如区块链版本的eBayOpenBazaar、区块链版本的共享停车Parkgene等。
- 众筹,类似于Kickstarter和Gofundme的这样的众筹网站,也可以通过区块链技术实现,甚至实现基于众包的风投。
- 政府,通过区块链带来的透明性和公开性,分布式数据库可以给诸如选举等之类的公共活动带来更高的透明度。例如Boardroom等。
- 供应链,区块链可以帮助供应链的各个参与方监督每个环节的进展,确保商品在每个环节中得到有效的监督以确保其质量。例如Provenance。
- 文件存储,去中心化文件存储带来更加安全的文件存储方式。例如IPFS。
- 市场预测,经过验证,预测的众包可以带来很高的精确度,区块链就像是“群体的智慧”一样,将会带来更好地市场预测效果。例如Augur。
- IP保护,智能合约可以保护版权,并且将创造性的作品进行在线销售,而不用担心盗版的风险。例如Mycelia。
- IoT,智能合约可以让设备远程控制自动化,提高系统的效率和降低成本。
此外,还有很多其他领域,例如社区间共享电网、身份验证识别、AML和KYC、数据管理、土地注册、股票交易、证书记录验证等等。