区块链几大核心:

分布式帐本,所需技术:微服务架构,高性能RPC通讯。

区块链应用系统架构 区块链 系统_区块链架构

区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,每一个数据链表可以看作账本。它由多个区块构成了一个有时序的链表,而每个区块里含有多条交易trasaction(缩写为tx)构成的链表。
 

智能合约机制,所需技术:共识算法

1. 智能合约:智能合约就是一段代码,一个具体的场景下的应用程序。管方认可的是GO语言;它是运行在区块链上的模块化、可重用的自动执行脚本,有了它我们就可以完成复杂的业务逻辑,例如同一个区块链上有多份合约,而每份合约可以约定不同的参与者(企业或者相关方)。也可以指定每份合约里每个子命令做一批特定的事,大家可以把它想象成关系数据库里的事务。

我觉得我们可以把智能合约理解成区块链系统中的业务逻辑单元,多个合约构成区块链系统的业务层。

合约代码的逻辑定义了合约的内容。合约的账户保存了合约当前的运行状态,主要包含了4部分内容。

  • balance:当前余额
  • nonce: 交易次数
  • code: 合约代码
  • storge: 存储,是一棵MPT

我们可以拟定一个合约的需求(具体场景),从而开始编写这个应用程序:一个商品拍卖的智能合约。所有参与拍卖的人员对商品进行竞价,每次竞价时都会将相应的价格发送到智能合约中,合约会自动记录竞价人的报价,拍卖结束时,出价最高者获得拍卖品,同时出价最高者的钱会发送给受益人。其他人可以使用withDraw函数拿回自己的钱。

pragma solididity ^0.4.21               // 声明使用的solidity版本

        contract SimpleAuction{                 // 声明一个SimplaAuction的合约类
            address public beneficiary;         // 拍卖受益人
            uint public auctionEnd;             // 拍卖截止日期
            address public highestBidder;       // 当前的最高出价人
            mapping(address => uint) bids;      // 所有竞拍者的出价,map结构
            address[] bidders;                  // 所有竞拍者数组

            // 需要记录的事件,event主要用来记录日志
            event HighestBidIncreased(address bidder, uint amount); // 出价最高的人发生变动
            event Pay2Beneficiary(address winner, uint amount);     // 竞拍成功者的钱发送给受益人

            /// constructor是构造函数
            /// _biddingTime 表示拍卖时长
            /// _beneficiary 表示拍卖受益人
            constructor(uint _biddingTime, address _beneficiary) public
            {
                beneficiary = _beneficiary;
                auctionEnd = now + _biddingTime;
            }

            /// 对拍卖进行竞价,如果之前出过价,就会把之前的价格与当前价格求和作为竞价
            function bid() public payable{...}
            
            /// 参与投标的人在拍卖结束后取回自己的钱
            function withdraw() public returns(bool){}

            /// 结束拍卖,将最高出价的钱发送给受益人
            function pay2Beneficiary() public returns(bools){}
            }

 

2. 共识算法:区块链是一个去中心化的分布式系统,那么自然只能通过投票来决定一致性了:少数服从多数。当然,多少算多数呢?不同的共识算法下,结果并不相同。比如paxos算法就是超过一半,而PBFT则需要三分之二以上。

概念:paxos算法是假定通讯安全,没有traitor,然后通过proposer acceptor learner来进行一系列的交互,记录和统计,最终做出裁决。当然这个假设是可能出现叛徒(攻击者),由此引入拜占庭将军问题。拜占庭将军是指存在叛徒,它们可以篡改消息。所以引入容错拜占庭算法,对此情况加以改进。

拜占庭将军问题需要注意—就是投票的拜占庭将军(服务器)们有2种不可靠的形式。第一是迟钝(数据包延迟)、失忆(数据包丢失以及数据包重发)、失踪(服务器宕机)等不含背叛的行为,第二则是有将军是间谍(服务器被攻破)。如paxos这样的算法属于第一种,Fault-tolerance,它不能容忍服务器上有恶意代码;而如PBFT(Practical Byzantine Fault Tolerance)这样的算法是第二类,Byzantine-Fault-tolerance,它能够容忍一定数量的拜占庭将军节点存在,如PBFT、SBFT、RBFT算法等。

区块链安全与底层,所需技术:P2P网络传输,安全高效的加密算法(数字证书,CA,非对称加密)

数字证书 Digital Certificate:X.509规范的数字证书里,其Subject属性里就含有她的信息,包括国家C=US、所属的州或者省份ST=Michigan、所在城市L=Detroit、所属单位O=Mitchesll Cars、其他信息OU=Manufacturing、公用信息CN=Mary Morris/UID=123456等
CA颁发了两个证书:公钥与私钥,其中,私钥仅服务提供者保存,而公钥则可被所有人(服务使用者)保存。

所谓非对称加密,就是公钥加密的消息仅私钥可以解密;同理,私钥加密的消息,仅公钥可以解密。对应于前者,可以实现客户端访问服务器时加密消息,例如访问安全级别高的页面时提交的表单信息都需要用公钥加密,确保只有服务器才能解密网络报文。对应于后者,则可实现签名功能(Mary Morris用私钥对一段信息的内容加密后,生成签名附加在消息中。接收者可从CA机构获取到公钥,用公钥解密签名后,再与内容比对,以确定消息是否来自MaryMorris及内容是否被篡改),如下面图所示:

区块链应用系统架构 区块链 系统_区块链_02

CA是PKI系统中通信双方信任的实体,被称为可信第三方(Trusted Third Party, TTP)。作为可信第三方的行为具有非否认性。

在HyperLedger Fabric体系中,CA被广泛运用于每一个具体的对象,如orderer、peer以及最小单位的user等。后端开发的工程师应该比较了解,在HyperLedger Fabric中CA被用于各种对象的登记、登出、注册、撤销等操作。

证书信任链条:RCA(Root CA)根证书以及ICA(Intermediate CA)中间证书。这些证书由RCA开始构成一个证书信任链,有许多CA证书权威机构,各自有其RCA。如果RCA得不到信任,那么其下的ICA也无法认证通过。当然,自己的服务器也可以生成RCA。

Peer-to-Peer,对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构。

团队构成:fabric联盟链的开发人员主要分为三类:底层是系统运维,负责系统的部署与维护;其次是组织管理人员,负责证书、MSP权限管理、共识机制等;最后是业务开发人员,他们负责编写chaincode、创建维护channel、执行transaction交易等。

区块链应用系统架构 区块链 系统_区块链应用系统架构_03

fabric技术团队人员的构成:

区块链应用系统架构 区块链 系统_区块链交易所_04

学习路线深入掌握一个区块链框架,如果你熟悉Java,那么Fabric是个不错的选择。

根据以上的几个要点,通过实践:一步一步搭建区块链系统

重要的参考文章:

区块链开源框架 HyperLedger Fabric 学习思路分享

 

区块链2.0的分类与特点

区块链系统架构图:

区块链应用系统架构 区块链 系统_区块链应用系统架构_05

区块链2.0的典型代表是以太坊(Ethereum)和超级账本(Hyperledger),分别代表了区块链的两个重要的发展方向:应用于公众的公有链和应用于企业的联盟链。

公有链、联盟链和私有链

公有链是指对所有人开放,任何人都可以参与的区块链;联盟链是被多个组织构成的联盟控制,进入和退出需要授权的区块链;私有链是完全被单独的个人或某个组织控制的区块链。公有链不适合大部分企业应用场景,未来企业应用的重点是联盟链,但现阶段关注的重点是公有链,公有链是区块链技术的试验田,会遇到各种复杂的情况和问题,是对新技术和新业务的测试,这对企业应用提供很好的借鉴。

对于区块链的去中心化、安全、高效这三个特性,符合蒙代尔不可能三角关系,即不可能同时满足三个条件。公有链实现了完全的去中心化和安全,因此在性能上就很低,联盟链为了企业应用,提高了性能和安全,就不得不在去中心化上进行妥协,通过一个中心化的授权方式来管理节点,实现了半中心化。

区块链2.0的优势

区块链1.0被称之为“全球账簿”。相应的,区块链2.0可以被看作一台“全球计算机”:实现了区块链系统的图灵完备,可以在区块链上传和执行应用程序,并且程序的有效执行能得到保证,在此基础上实现了智能合约的功能。相对于区块链1.0,区块链2.0有如下优势:

1. 支持智能合约

2. 适应大部分应用场景的交易速度

3. 支持信息加密

4. 无资源消耗

技术架构

区块链2.0采用五层架构,从下到上分别是数据层、网络层、共识层、激励层、智能合约层

1. PoS:Proof of Stake,权益证明

2. DPoS:Delegate Proof of Stake,股份授权证明

3. Casper:投注共识

4.PBFT:Practical Byzantine Fault Tolerance,拜占庭容错算法

5. PoET:Proof of Elapsed Time,消逝时间量证明