你好,我是李智慧。
过去几年,区块链正变成一个日渐热门的词汇,除了广为人知的比特币等数字货币,基于区块链的分布式账本和智能合约技术也越来越受到企业的重视,越来越多的企业也开始使用区块链技术进行跨企业的业务协作。2018 年 6 月 25 日,香港支付宝和菲律宾钱包 Gcash 利用区块链技术实现了跨境转账,仅 3 秒就实现跨境汇款到账,而以前则需要十几分钟到几天的时间。
一般我们把对所有公众都开放访问的区块链叫做“公有链”,而把若干企业构建的仅供企业间访问的区块链叫做“联盟链”,有时候也称作“许可型区块链”。上面提到的支付宝转账就是使用联盟链技术,目前比较有影响力的联盟链技术是 IBM 发起的 Hyperledger Fabric 项目,若干基于 Hyperledger Fabric 的联盟链应用已经落地。比如邮储银行的资产托管、招商银行的跨境结算都使用了 Hyperledger Fabric 技术。
而在公有链领域,目前看来,生态最完整、开发者社区最活跃、去中心化应用最多的公有链技术莫过于 Ethereum 以太坊。在智能合约和去中心化应用开发支持方面,以太坊的生态堪称业界最完备的典范,也受到了最多区块链开发者的支持。
相比于Fabric,使用以太坊开发区块链应用更加简单、易于上手,但是以太坊作为一个公有链技术,目前还无法应用于企业级的联盟链场景。所以我们准备在以太坊的代码基础上,进行若干代码模块的重构与开发。开发一个基于以太坊的企业级分布式账本与智能合约平台,即一个许可型区块链。这个许可型区块链产品名称为“Taireum”。
所谓区块链(block chain),就是将不断产生的数据按时间序列分组成一个一个连续的数据区块(block),然后利用单向散列加密算法,求取每个区块的Hash值,并且在每个区块中记录前一个区块的Hash值,这些区块就通过Hash值串成一个链条,被形象地称为区块链。如果你想了解区块链更多的背景知识,可以参考我的这篇专栏文章《区块链技术架构:区块链到底能做什么?》。
以太坊(Ethereum)是一个去中心化的、开源的、有智能合约功能的公共区块链平台。以太币(ETH)是以太坊的原生加密货币,它是市值第二高的加密货币,仅次于比特币。而以太坊则是业界使用最多的区块链技术。
相比于比特币,以太坊最大的技术特点是支持智能合约,它是一种存储在区块链上的程序,由链上的计算机节点分布式运行,是一种去中心化的应用程序,也是区块链企业级应用必需的技术要求。
但是以太坊是一种公有链技术,并不适合用于企业级的场景,原因主要有三个:
那么要如何做,才能既利用以太坊强大的智能合约与技术生态资源,简单高效地进行企业级区块链应用开发,又能满足联盟链对安全、共识、运维管理方面的要求?
Taireum需要在以太坊的基础上进行如下重构:
Taireum 复用了以太坊强大的智能合约模块,并对共识算法和网络通信模块进行了重构改造,重新开发了联盟共识控制台,从而使其适用于企业级联盟链应用场景。使用 Taireum 部署的联盟链如图:
企业 A、企业 B、企业 C 合作建立一个联盟链,数据以区块链的方式存储在三家企业的节点上,实现分布式记账,并根据(基于智能合约的)联盟共识授权某些节点对区块数据进行打包。其他企业未经许可无法连接到该联盟链网络上,也不能查看区块链数据。
Taireum部署模型如下:
针对以太坊不适合企业级应用的部分,Taireum将进行重构,详细设计如下。
联盟共识控制台是Taireum为联盟链运维管理开发的web组件,企业可以非常方便地使用联盟共识控制台来部署联盟链运行节点、管理联盟成员和授权节点打包区块。
每个参与联盟链的企业节点都部署自己独立的联盟共识控制台。出于安全目的,每个企业节点的联盟共识控制台彼此独立,互不感知。他们需要通过调用联盟共识智能合约,对联盟管理事务进行协商,以达成共识。合约主要方法签名代码如下:
contract CCC {
//初始化合约,传入联盟创建者信息
//联盟创建者将成为联盟第一个成员和第一个拥有打包区块权限的节点
function CCC (string _companyname,string _email,string _remark,string _enode) public{
}
//联盟新成员申请
function applyMember(string _companyname,string _email,string _remark,string _enode,address _account) public{
}
//投票成为联盟成员
function VoteMember(uint _fromcompanyid,uint _tocompanyid) public {
}
//投票授权打包区块, 前提必须已经是联盟成员
function VoteMine(uint _fromcompanyid,uint _tocompanyid) public {
}
}
联盟共识智能合约目前的版本主要包括投票选举申请加入联盟的新成员,及投票选举联盟链新的区块打包节点。该智能合约由联盟链创立者在第一次启动联盟共识控制台的时候自动创建,是联盟链成员进行联盟管理和协商共识的最主要方式。
既然联盟成员节点部署的联盟控制台彼此独立、互不通信,那么联盟其他成员如何获得联盟共识智能合约的地址呢?
Taireum的做法是:联盟链创立者节点的联盟共识控制台第一次成功部署联盟共识智能合约时,就把这个合约的地址发给共识算法模块。共识算法在封装区块头的时候,将合约地址写入区块头的miner中。下图是记录有联盟共识智能合约地址的区块头。
其中,extraData记录经过椭圆曲线加密的区块打包者地址信息,其他节点通过解密得到打包节点地址,并验证该地址是否有权限打包节点;miner中记录联盟共识智能合约地址;nonce记录一个magic code “0xcaffffffffffffff”,表示该区块获得了共识合约地址并写入了当前区块(普通区块nonce magic code为”0x00ffffffffffffff”)。
这样,联盟链成员节点加入联盟链,同步区块链数据后,就可以从区块头中读取联盟共识智能合约的地址,然后通过联盟共识控制台调用该合约,参与联盟管理及协商共识。
以太坊作为一个公有链,任何遵循以太坊协议的节点都可以加入以太坊网络,同步区块数据,参与区块打包。同时,以太坊作为开源项目,用户也可以下载源代码,自己部署多个以太坊节点,组成一个自己的区块链网络。但是只要这些节点可以通过公网访问,就无法阻止其他以太坊节点连接到自己的区块链网络上,获取区块数据,甚至打包区块。这在联盟链的应用场景中是绝对不能接受的,联盟链需要保证联盟内数据的隐私和安全。
Taireum重构了以太坊的P2P通信模块,只有在许可列表中的节点才允许和当前联盟成员节点建立连接,其他的连接请求在通信模块就会被拒绝,以此保证联盟链的安全和私密性。
许可列表即Taireum成员列表,通过前述的联盟共识智能合约管理。P2P通信模块通过联盟共识控制台调用智能合约,获得联盟成员列表,检查连接请求是否合法。
Taireum联盟新成员许可入网流程:
Taireum根据联盟链的应用特点,放弃了以太坊ethash工作量证明算法。在借鉴clique共识算法的基础上,Taireum重新开发了Tai共识算法引擎,对联盟投票选出的授权打包节点排序,轮流进行区块打包。
Tai共识算法引擎执行过程如下:
Taireum源码:https://github.com/taireum/go-taireum。
区块链也是一个分布式系统,但是不同于我们前面讨论过的各种传统分布式系统。传统分布式系统的各个分布式服务器节点是只属于某一个组织的,叫做中心化数据存储,数据的准确性和安全性靠的是这个组织的保证,使用者需要信任这个组织,比如我们相信支付宝不会偷偷把我们余额里的钱转走。
而区块链的分布式服务器节点并不只属于某一个组织,区块链并没有中心,而且使用区块链也不需要信任某个组织,因为任何数据篡改都会导致区块链条的中断。
区块链的这种特性可以实现无中心的跨组织交易。传统上,平行的组织之间交易需要通过更上一级的组织作为中心记录交易数据,比如商业银行之间的转账,要靠中央银行的数据中心来完成。如果没有更上一级的组织呢,就很难进行交易了。而使用区块链技术,即使没有中心,这些组织也可以进行交易,同时很多上级组织也变得没有那么必要了。
所以区块链会使我们的社会变得更加自组织,也将会给全社会的生产关系带来更深刻的变革。
今天我想和你讨论两个问题,你也可以任选其一,回复在评论区。
© 2019 - 2023 Liangliang Lee. Powered by gin and hexo-theme-book.