A. Quorum介绍(一):Quorum整体结构概述
一句话概括,就是企业级以太坊模型。与传统的以太坊模型不同,Quorum既然是企业级应用,那么准入门槛、共识处理以及交易的安全机制上一定与传统的公链模型不同。稍后我们也将从以下几个方面详细介绍Quorum的结构模型和核心功能特色。
Quorum本身支持两种交易状态
两种交易核心不同就是内容是否加密。为了区别两种交易的类型,Quorum在每笔交易的签名中设置了一个特殊的value值,当签名中的value值为27或28时,表示这是一笔公开交易,如果是37或者38则是一笔私密交易。私密交易的内容会被加密,只有具有解密能力的节点才能获得具体的交易内容。
所以最终每个节点会有两套账本:一个是所有人都一样的公有账本,另一个是自己本地存储的私有账本。
所以Quorum的账本状态改变机制 允许以下几种情况的调用
s 表示交易发起者,(X) 表示私密, X表示公开
上述公式可以翻译为:
Quorum 不允许以下两种情况的调用
Quorum具体的状态状态校验(世界状态)可以调用RPC方法 eth_storageRoot(address[, blockNumber]) -> hash
Quorum核心分为两大块:Node节点和隐私管理。
Quorum节点本身是一个轻量版的Geth。沿用Geth可以发挥以太坊社区原有的研发优势,因此Quorum会随着Geth未来的版本更新而更新。
Quorum节点基于Geth做了一下改动:
Constellation和Tessera(以下简称C&T)是一种用Java和Haskell实现的安全传输信息模型,他们的作用就像是网络中的信息传输代理(MTA, Message Transfer Agent)所有消息的传输都通过会话信息秘钥进行加密
C&T其实是一种多方参与网络中实现个人消息加密的常用组件,在许多应用中都很常见,并不是区块链领域专有技术(笔者注,其实区块链本身就是各种技术的大杂烩,我们很难专门找到一门技术,说它就是区块链 )。C&T主要包括两个子模块:
交易管理模块主要负责交易的隐私,包括存储私密交易数据、控制私密交易的访问、与其他参与者的交易管理器进行私密交易载荷的交换。Transaction Manager 本身并不涉及任何私钥和私钥的使用,所有数字加密模块的功能都由The Enclave来完成。
Transaction Manager属于静态/Restful模组,能够非常容易的被加载。
分布式账本协议通常都会涉及交易验证、参与者授权、历史信息存储(通过hash链)等。为了在加密这一方面实现平行操作的性能扩展和,所有公私钥生成、数据的加密/解密都由Enclave模块完成。
B. 区块链,4种类型,知多少
——你好,我是心态,专注分享对区块链的认知与投资思考。希望能帮到你。
区块链根据不同的使用需求和场景,区块链分为:公有链、联盟链、私有链和混合链4种类型。
1.公有链
公有链,是指全世界任何节点的任何人,在任何地理位置,都可以进入系统读取数据、发送交易、竞争记账等参与共识的区块链。没有任何机构或个人可以篡改其中的数据,因此公有链是完全去中心化的。
比特币和以太坊都是公有链的代表。公有链一般通过发行代币(Token)来鼓励参与者竞争记账(即挖矿),以确保数据的安全性和共识更新。
比特币平均每10分钟产生1个区块,且其POW机制很难缩短区块时间,POS机制相对而言可缩短区块时间,但更易产生分叉。所以交易需要等待更多确认才被认为安全。
一般认为,比特币中的区块经过6个确认后才是足够安全的,这大概需要1个小时。这样的确认速度难以满足商业级的应用。因此,ETH及EOS等支持更多写入速度的公有链正在不断发展。
2.联盟链
联盟链是指有若干机构共同参与和管理的区块链,每个机构都运行N个节点。
联盟链的数据只允许系统内不同的机构进行读写和交易,通过数字证书的方式实现基于PKI的身份管理体系交易或提案的发起,以参与方共同签名验证来达成共识,因此不需要工作量证明(POW),也不存在数字货币(代币),提高了交易达成的效率,节约了大量计算成本(算力硬件投入和电力能源消耗)。
通常情况下,参与联盟链的节点会被划分不同的读写权限,能支持每秒1000次以上的数据写入。
3.私有链
私有链与公有链完全去中心化不同,私有链的进入权限由某个组织进行控制,各个节点参与资格由该组织授权控制。
由于参与的各个节点是有限且可控的,私有链往往拥有很快的处理速度,能支持每秒1000以上的数据写入,同时降低内部各个节点的交易成本。
节点可以实名参与,因此具有确认身份的金融属性。私有链的价值主要是提供安全、可追溯、不可篡改、自动执行的运算平台,可以同时防范来自内部和外部对数据的安全攻击或篡改,这在传统的系统中是很难做到的。
私有链的应用场景一般在企业内部,如分公司的库存管理,各地数据的汇总统计等,也可以用在政府的预算和执行等可以被公众监督的领域。大型金融集团目前也倾向于使用私有链技术。
4. 混合链
当公有链和私有链的各自优势相结合时,就会出现混合链。混合链的开发难度大,但前景广阔。
未来市场上,一定会出现巨头型的底层技术和协议开发的公司,这些巨头公司会架设出不同用途的公有链、私有链或者联盟链,基于对性能和安全性及应用场景的不同需求,然后嫁接不同行业的应用。比如一条支持高并发的通信类公有链,一条侧重安全性的支付联盟链,等等。
(感谢阅读)
点个赞,点个关注,就是对我最大的支持,咱们明天见。
C. Quorum介绍(二):Quorum共识
我们知道,公共区块链是一个开放的社区,任何人都能够成为一个节点加入网络,在网络中计算,提交交易到链上等,因此公链是没有信任基础的,所以公链的共识第一要义就是证明交易的合法性和真实性,防止恶意成员的捣乱,效率不是第一要义。
与公链的环境不同,有准入门槛的企业链或者联盟链链上的所有成员在加入时实际上是已经获得了某些认可和许可的,因此企业链/联盟链上的成员是有一定信任基础的。在企业级链上我们没有必要使用POW或者POS这种浪费算力或者低效的交易共识。
Quorum提供了多种共识供用户采用:
在讲Raft前,有必要提一下Paxos算法,Paxos算法是Leslie Lamport于1990年提出的基于消息传递的一致性算法。然而,由于算法难以理解,刚开始并没有得到很多人的重视。其后,作者在八年后,也就是1998年在ACM上正式发表,然而由于算法难以理解还是没有得到重视。而作者之后用更容易接受的方法重新发表了一篇论文《Paxos Made Simple》。
可见,Paxos算法是有多难理解,即便现在放到很多高校,依然很多学生、教授都反馈Paxos算法难以理解。同时,Paxos算法在实际应用实现的时候也是比较困难的。这也是为什么会有后来Raft算法的提出。
Raft是实现分布式共识的一种算法,主要用来管理日志复制的一致性。它和Paxos的功能是一样,但是相比于Paxos,Raft算法更容易理解、也更容易应用到实际的系统当中。而Raft算法也是联盟链采用比较多的共识算法。
Raft一共有三种角色状态:
每个节点上都有一个倒计时器 (Election Timeout),时间随机在 150ms 到 300ms 之间。有几种情况会重设 Timeout:
在分布式系统中,“时间同步”是一个很大的难题,因为每个机器可能由于所处的地理位置、机器环境等因素会不同程度造成时钟不一致,但是为了识别“过期信息”,时间信息必不可少。
Raft算法中就采用任期(Term)的概念,将时间切分为一个个的Term(同时每个节点自身也会本地维护currentTerm),可以认为是逻辑上的时间,如下图。
每一任期的开始都是一次领导人选举,一个或多个候选人(Candidate)会尝试成为领导(Leader)。如果一个人赢得选举,就会在该任期(Term)内剩余的时间担任领导人。在某些情况下,选票可能会被评分,有可能没有选出领导人(如t3),那么,将会开始另一任期,并且立刻开始下一次选举。Raft 算法保证在给定的一个任期最少要有一个领导人。
特殊情况的处理
在以太坊中节点本身并没有角色,因此在使用Raft共识时,我们称leader节点为挖矿节点:
Raft共识机制本身保证了同一时间点最多只有一个leader,因此用在以太坊模型下也只会有一个出块者,避免了同时出块或者算力浪费的情况。
在单笔交易(transaction)层级Quorum依然沿用了Ethereum的p2p传输机制,只有在块(block)层级才会使用Raft的传输机制。
其中需要注意到一点,在以太坊中一个节点收到块以后就会立刻记账,而在Quorum模型中,一个块的记录必须遵从Raft协议,每个节点从leader处收到块以后必须报告给leader确认收到以后,再由leader通知各个节点进行数据提交(记录)
在Quorum模型中新块的信息是很有可能和已有块的header信息不符的,最容易发生这种情况的就是选举人更替(挖矿节点更替),具体描述如下:
假设有两个节点,node1和node2,node1是现有的leader,现有链的最新区块是0xbeda,它的父区块是0xacaa
对块“Extends”或者“No-op”的标记是在更上层完成的,并不由raft本身log记录机制实现。因为在raft内部,信息并不分为有效或无效,只有在区块链层面才会有有效区块和无效区块的含义。
需要注意的是,Quorum的这种记账机制和本身Ethereum的LVC(最长链机制)是完全不一样的
Quorum的出块频率默认是50ms一个块,可以通过 --raftblocktime 参数进行设置
投机性出块并不是以太坊Raft共识严格必须的核心机制之一,但是是提高出块效率的有效方式。
一个块从产生到实际被记录账本,走完整个raft流程实际上是需要耗费一定时间的。如果我们在上一个块被计入账本之后才开始产生下一个块,那么一笔交易想要成功被记录需要耗费较多的时间。
而在投机性(speculative minting)出块中,我们允许一个新块在它的父块被记录之前就产生。依次类推,在一段时间内,实际上会产生“投机链(speculative chain)”,在祖先块没有被记录进账本之前,一个一个新块已经依据先后关系组成了一条临时链片段,等待被记录。
对于已经被记录进投机块的交易,我们会在交易池中标记为“proposed transaction”
在之前我们说过,raft机制中是存在两个挖矿节点比赛出块和记账的可能的,因此,一条 speculative chain 中间的某一个块很有可能不会被记录到账本中。在这种情况下我们也会把交易池中的交易状态修改回来。( InvalidRaftOrdering event)
目前,Quorum并没有对speculative chain的长度做限制,但在它的未来规划中有讲这一点作为一个性能优化项加入开发进程,最后能够让一个挖矿节点即使在raft共识层没有连接上,它也可以离线一直出块,产生自己的speculative chain。
一条speculative chain有以下几个部分构成:
在块传输上我们使用etcd Raft默认的http传输,当然使用Ethereum的p2p传输也是可以的,但是Quorum团队在测试阶段发现,高负载的状态下,ETH p2p的性能没有raft p2p性能好。
Quorum使用50400端口作为Raft 传输层的默认监听端口,也可以通过 --raftport 参数自行设置。
一个集群默认的最大节点个数是25,可以通过 --maxpeers N 来设置,N是你的最大节点个数。
Quorum的IBFT其实就是PBFT,只不过摩根大通把它自己实现的PBFT叫做IBFT,所以IBFT的基本原理与PBFT是一样的,所不同的是,IBFT中把出块和共识的三阶段结合在了一起。
Istanbul BFT修改自PBFT算法,包括三个阶段: PRE-PREPARE 、 PREPARE 以及 COMMIT 。在 N 个节点的网络中,这个算法可以最多容忍 F 个出错节点,其中 N=3F+1 。
Istanbul BFT算法中的区块是确定的,意味着链没有分叉并且合法的区块一定是在链中。为了防止一个恶意节点生成不同的链,在把区块插入进链 之前 ,每一个validator必须把 2F + 1 个 COMMIT 签名放进区块头的 extraData 字段。因此,区块是可以自我验证的(因为有签名)并且轻客户端也支持。
然而动态的 extraData 也会造成区块的hash计算问题。因为一个区块可以被不同的validator验证,所以会有不同的签名,所以同一个区块会有不同的hash。解决的方案是,计算区块hash的时候把 COMMIT 签名排除在外。因此我们任然可以在保证block hash一致性的同时进行共识验证。
由于Ethereum POA共识在网上已经有大量介绍,笔者这里就不多做详细介绍,只对重要特点和POA的工作流程做大致梳理和介绍
D. 联盟链的典型代表为比特币对吗
不对。联盟链的典型代表为以太坊。Quorum是由摩根大通开发的提供高速、高吞吐量交易的联盟链平台,以解决区块链在金融等领域遇到的挑战。是企业以太坊联盟EEA提出的标准区块链设计的代表。
E. Quorum介绍
Quorum和以太坊的主要区别:
Quorum 的主要组件:
1,用其自己实现的基于投票机制的共识方式 来代替原来的 “Proof of work” 。
2,在原来无限制的P2P传输方式上增加了权限功能。使得P2P传输只能在互相允许的节点间传输。
3, 修改区块校验逻辑使其能支持 private transaction。
4, Transaction 生成时支持 transaction 内容的替换。这个调整是为了能支持联盟中的私有交易。
Constellation 模块的主要职责是支持 private transaction。Constellation 由两部分组成:Transaction Manager 和 Enclave。Transaction Manager 用来管理和传递私有消息,Enclave 用来对私有消息的加解密。
在私有交易中,Transaction Manager 会存储私有交易的内容,并且会将这条私有交易内容与其他相关的 Transaction Manager 进行交互。同时它也会利用 Enclave 来加密或解密其收到的私有交易。
为了能更有效率的处理消息的加密与解密,Quorum 将这个功能单独拉出并命名为 Enclave 模块。Enclave 和 Transaction Manager 是一对一的关系。
在 Quorum 中有两种交易类型,”Public Transaction” 和 “Privat Transaction”。在实际的交易中,这两种类型都采用了以太坊的 Transaction 模型,但是又做了部分修改。Quorum 在原有的以太坊 tx 模型基础上添加了一个新的 “privateFor” 字段。同时,针对一个 tx 类型的对象添加了一个新的方法 “IsPrivate”。用 “IsPrivate” 方法来判断 Transaction是 public 还是 private,用 “privateFor” 来记录 事务只有谁能查看。
Public Transaction 的机理和以太坊一致。Transaction中的交易内容能被链上的所有人访问到。
Private Transaction 虽然被叫做 “Private”,但是在全网上也会出现与其相关的交易。只不过交易的明细只有与此交易有关系的成员才能访问到。在全网上看到的交易内容是一段hash值,当你是交易的相关人员时,你就能利用这个hash值,然后通过 Transaction Manager 和 Enclave 来获得这笔交易的正确内容。
Public Transaction的处理流程和以太坊的Transaction流程一致。Transaction 广播全网后,被矿工打包到区块中。节点收到区块并校验区块中的 事务 信息。然后根据 Transaction信息更新本地的区块
Private Transaction也会将 Transaction 广播至全网。但是它的 Transaction payload已经从原来的真实内容替换为一个hash值。这个hash值是由Transaction Manager提供的。
有两个共识机制:QuorumChain Consensus 和 Raft-Based Consensus。
在 Quorum 1.2 之前的 Release 版本都采用了 QuorumChain。
从 2.0 版本开始,Quorum 废弃了 QuorumChain 转而只支持 Raft-based Consensus。
QuorumChain Consensus 是一个基于投票的共识算法。其主要特点有:
相比较以太坊的POW,Raft-based 提供了更快更高效的区块生成方式。相比 QuorumChain,Raft-based 不会产生空的区块,而且在区块的生成上比前者更有效率。
要想了解Raft-based Consensus,必须先了解Raft算法
Raft算法
Raft是一种一致性算法,是为了确保容错性,也就是即使系统中有一两个服务器当机,也不会影响其处理过程。这就意味着只要超过半数的大多数服务器达成一致就可以了,假设有N台服务器,N/2 +1 就超过半数,代表大多数了。
Raft的工作模式:
raft的工作模式是一个Leader和多个Follower模式,即我们通常说的领导者-追随者模式。除了这两种身份,还有Candidate身份。下面是身份的转化示意图
1,leader的选举过程
raft初始状态时所有server都处于Follower状态,并且随机睡眠一段时间,这个时间在0~1000ms之间。最先醒来的server A进入Candidate状态,Candidate状态的server A有权利发起投票,向其它所有server发出投票请求,请求其它server给它投票成为Leader。
2,Leader产生数据并同步给Follower
Leader产生数据,并向其它Follower节点发送数据添加请求。其它Follower收到数据添加请求后,判断该append请求满足接收条件(接收条件在后面安全保证问题3给出),如果满足条件就将其添加到本地,并给Leader发送添加成功的response。Leader在收到大多数Follower添加成功的response后。提交后的log日志就意味着已经被raft系统接受,并能应用到状态机中了。
Leader具有绝对的数据产生权利,其它Follower上存在数据不全或者与Leader数据不一致的情况时,一切都以Leader上的数据为主,最终所有server上的日志都会复制成与Leader一致的状态。
Raft的动态演示: http://thesecretlivesofdata.com/raft/
安全性保证,对于异常情况下Raft如何处理:
1,Leader选举过程中,如果有两个FollowerA和B同时醒来并发出投票请求怎么办?
在一次选举过程中,一个Follower只能投一票,这就保证了FollowerA和B不可能同时得到大多数(一半以上)的投票。如果A或者B中其一幸运地得到了大多数投票,就能顺利地成为Leader,Raft系统正常运行下去。但是A和B可能刚好都得到一半的投票,两者都成为不了Leader。这时A和B继续保持Candidate状态,并且随机睡眠一段时间,等待进入到下一个选举周期。由于所有Follower都是随机选择睡眠时间,所以连续出现多个server竞选的概率很低。
2,Leader挂了后,如何选举出新的Leader?
Leader在正常运行时候,会周期性的向Follower节点发送数据的同步请求,同时也是起到一个心跳作用。Follower节点如果在一段时间之内(一般是2000ms左右)没有收到数据同步请求,则认为Leader已经死了,于是进入到Candidate状态,开始发起投票竞选新的Leader,每个新的Leader产生后就是一个新的任期,每个任期都对应一个唯一的任期号term。这个term是单调递增的,用来唯一标识一个Leader的任期。投票开始时,Candidate将自己的term加1,并在投票请求中带上term;Follower只会接受任期号term比自己大的request_vote请求,并为之投票。 这条规则保证了只有最新的Candidate才有可能成为Leader。
3,Follower的数据的生效时间
Follower在收到一条添加数据请求后,是否立即保存并将其应用到状态机中去?如果不是立即应用,那么由什么来决定该条日志生效的时间?
首先会检查这条数据同步请求的来源信息是否与本地保存的leader信息符合,包括leaderId和任期号term。检查合法后就将日志保存到本地中,并给Leader回复添加log成功,但是不会立即将其应用到本地状态机。Leader收到大部分Follower添加log成功的回复后,就正式将这条日志commit提交。Leader在随后发出的心跳append_entires中会带上已经提交日志索引。Follower收到Leader发出的心跳append_entries后,就可以确认刚才的log已经被commit(提交)了,这个时候Follower才会把日志应用到本地状态机。下表即是append_entries请求的内容,其中leaderCommit即是Leader已经确认提交的最大日志索引。Follower在收到Leader发出的append_entries后即可以通过leaderCommit字段决定哪些日志可以应用到状态机。
4,向raft系统中添加新机器时,由于配置信息不可能在各个系统上同时达到同步状态,总会有某些server先得到新机器的信息,有些server后得到新机器的信息。比如在raft系统中有三个server,在某个时间段中新增加了server4和server5这两台机器。只有server3率先感知到了这两台机器的添加。这个时候如果进行选举,就有可能出现两个Leader选举成功。因为server3认为有3台server给它投了票,它就是Leader,而server1认为只要有2台server给它投票就是Leader了。raft怎么解决这个问题呢?
产生这个问题的根本原因是,raft系统中有一部分机器使用了旧的配置,如server1和server2,有一部分使用新的配置,如server3。解决这个问题的方法是添加一个中间配置(Cold, Cnew),这个中间配置的内容是旧的配置表Cold和新的配置Cnew。这个时候server3收到添加机器的消息后,不是直接使用新的配置Cnew,而是使用(Cold, Cnew)来做决策。比如说server3在竞选Leader的时候,不仅需要得到Cold中的大部分投票,还要得到Cnew中的大部分投票才能成为Leader。这样就保证了server1和server2在使用Cold配置的情况下,还是只可能产生一个Leader。当所有server都获得了添加机器的消息后,再统一切换到Cnew。raft实现中,将Cold,(Cold,Cnew)以及Cnew都当成一条普通的日志。配置更改信息发送Leader后,由Leader先添加一条 (Cold, Cnew)日志,并同步给其它Follower。当这条日志(Cold, Cnew)提交后,再添加一条Cnew日志同步给其它Follower,通过Cnew日志将所有Follower的配置切换到最新。
Raft算法和以太坊结合
所以为了连接以太坊节点和 Raft 共识,Quorum 采用了网络节点和 Raft 节点一对一的方式来实现 Raft-based 共识
一个Transaction完整流程
1,客户端发起一笔 Transaction并通过 RPC 来呼叫节点。
2,节点通过以太坊的 P2P 协议将节点广播给网络。
3,当前的 Raft leader 对应的以太坊节点收到了 Transaction后将它打包成区块。
区块被 编码后传递给对应的 Raft leader。
leader 收到区块后通过 Raft 算法将区块传递给 follower。这包括如下步骤:
3.1,leader 发送 AppendEntries 指令给 follower。
3.2,follower 收到这个包含区块信息的指令后,返回确认回执给 leader。
3.3,leader 收到不少于指定数量的确认回执后,发送确认 append 的指令给 follower。
3.4,follower 收到确认 append 的指令后将区块信息记录到本地的 Raft log 上。
3.5,Raft 节点将区块传递给对应的 Quorum 节点。Quorum 节点校验区块的合法性,如果合法则记录到本地链上。
参考链接: http://blog.csdn.net/about_blockchain/article/details/78684901
F. 以太坊资源谁提供的
以太坊资源是由以太坊联盟(EEA)提供的。2017年2月28日,一批代表着石油、天然气行业,金融行业和软件开发公司的全球性企业正式推出企业以太坊联盟(EEA),致力于将以太坊开发成企业级区块链。这些企业包括英国石油巨头BP、摩根大通、软件开发商微软、埃森哲、桑坦德银行、BlockApps、BNY梅隆、芝商所、ConsenSys、英特尔微软和Nuco等
G. 区块链之联盟链(三) 认识Fabric
Fabric 是超级账本联盟推出的核心区块链框架,它适合在复杂的企业内和企业间搭建联盟链。根据超级账本联盟的目标, Fabric 被建设为一个模块化的、支持可插拔组件的基础联盟链框架。;
与以太坊系的Quorum不同,Fabric从一开始就只考虑企业间的应用。其独有的channel概念,将企业根据业务目的不同以不同的子网连接起来, 每一个子网对应一个channel,而每个channel有自己独立的区块链。而Quorum很显然是只有一个公网(所有企业节点都加入进去),企业与企业间的私有业务是通过Private Manager 完成的。
理解channel的最简单方法就是,将它类比为一个消息服务提供的Topic,实际上Fabic最早就是基于Kafka 的分布式消息服务来实现。
在Fabric网络中,一个企业可以有一个或多个节点加入整个联盟链;一个企业可以加入1个或者多个Channel(子网); 一个节点可以加入1个或者多个channel。每个channel构成一个子网,所以Fabric 是 一种由子网组成的网络。
那么Fabric是怎么实现智能合约的执行和完成业务上链(将事务结果记录在区块链里)的呢?
与其它框架不同, Fabric 将整个过程分成了三个阶段:
业务背书阶段 : 客户的请求发送的背书节点,通过智能合约完成业务的计算(但不更新状态),并完成背书;将背书结果返回个客户端。
业务的排序阶段 : 客户端将背书结果通过Channel被发送到排序节点(orderer),在排序节点完成事务的排序,并打包到block里,最后下发给所有连接到channel的节点。
业务验证并写入账本阶段 : 通过Gossip 网络,所有Channel的节点都会接收到新的block,节点会验证block中的每一个事务,确定是否有效:有效地将会跟新world state,无效的将会标志为“无效”,不会更新World state,但整个block会被完整的加入到帐本中(包括无效的事务)。
根据以上的描述,Fabric 节点实际可以分为 ,普通节点和Order节点:
Peer, 普通节点, 完成背书(包括只能合约的执行)和验证.
orderer, 排序节点,完成排序。
加入orderer节点的Fabric网络可以被描述如下:
每一个Channel,都定义了所有属于channel的节点,但是并不需要所有节点都连接到Orderer 节点(节点间可以通过gossip 协议通讯来传播私有数据或事务).
在区块链中,共识是区块链的基础。与公有链不同,联盟链的共识要求所有加入账本的事务是确定的、最终的,也就是不可以有分叉,区块与区块间的顺序是一定的,只存在唯一条链。在Fabric 中,这个客观需求正是由排序实现的,所有的事务将被提交给orderer节点获得确定的顺序,并最终打包成block进入帐本。 Fabric 从1.4.1开始支持基于Raft实现排序服务, 可以认为基于Raft实现共识。
基于RAFT的排序服务相对于早期的Kafka 具有更好的分布性,配置更加简单,是联盟链里常用的一个常用的达成共识的算法,Quorum就 默认使用RAFT作为共识层。简单的说,RAFT是一个leader和follower的模式, 所有加入RAFT网络的节点,任意时候都有一个leader, 只有这个leader有权决定事务的顺序,并打包成Block,其它节点只能作为follower提交事务和同步block。
基于FAFT网络,每个企业可以有一个或多个节点参与到Orderer中去。在Frabric中企业间的网络连接可以变化成如下形式:
区块链的使用用户在以太网中被称作EOA(External of Account), EOA的载体是钱包。我们沿用这个概念,来看看Fabric是如何实现用户和发起事务的。Fabric中EOA是一个CA中心发布的certificate(x.509),一个Certificate代表一个Identity(这与以太坊还是有很大区别的, 以太坊中一个EOA其实是一个hash地址),EOA能够参与的channel以及被授权的操作是有channel的MSP( Membership Service Provider)决定的(如下图)。
注:certificate 是一种密码学上验证身份的通用做法; certificate包含了个人的信息,公钥以及发布这个certificate的CA的签名。验证方只需要拥有这个CA的证书(包含CA的公钥),就可以验证这个签名是否正确,certificate的内容是否有篡改。简单的说,通过CA和Certificate,我们可以获得一个可验证的的身份和信任链。
如上图,fabric中通要使用Wallet作为EOA的载体,一个Wallet中可以包含多个Identity(x.509 certificate)。 Identity 通过 CA提供的信任链来验证正确性。
验证了身份之后, Fabric 通过MSP在区块链网络中解决该身份是否代表组织的成员和在组织内具有什么角色。例如,channel首先会验证当前用户Identity是否是有效地身份,然后通过MSP查看其所处的企业和具有的角色,最终确定该用户是否有权执行操作。
可以说,Fabric的访问控制是通过MSP来完成的。在每一个需要访问控制的地方都需要定义一个MSP。 例如,每个channel都定义一个MSP,这个MSP规定了在channel范围内资源的访问权限。 MSP 是Fabric里一个晦涩难懂的概念,也是其赋予企业间安全访问的基础。
前文提到, Fabric 将业务处理和上网分成了三个部分, 背书,排序,验证后加入账本。
其中背书是Fabric执行智能合约的阶段。以太坊中,智能合约是在EVM中执行的,有多种语言支持。 在Fabric,智能合约被称为chaincode: 一个chaincode 可以理解为是智能合约的容器,可以包含一个或多个智能合约, 不用于EVM, chaincode是在 JVM 或NodeJS中执行。
客户应用程序通过智能合约来访问账本,每一个可访问的智能合约都被安装在客户端可以访问的节点上,并被定义在channel里。(有只能合约的节点被称为背书节点,没有只能合约的节点被称未提交节点,提交节点只维护账本)
客户应用提交一个交易请求, 请求到达背书节点, 背书节点首先会验证客户的签名,确保客户的身份有权执行本次交易,接着执行交易提及的智能合约(chaincode),并生成一个背书响应(或者叫做交易提案,tran-proposal)。这个背书响应中通常包含World state 的读集合,写集合, 以及节点对本次交易的签名。这里与以太坊系联盟链最主要的不同是: 背书阶段只模拟交易,并不真正更新交易结果。 而真正更新交易在第三阶段完成。背书节点最后将生成的背书响应fanhui给客户端, 智能合约部分的执行就结束了。
通常一个交易的执行需要多方的签名,所以客户端需要将一个交易发送给多个背书节点,这些背书节点的选择需要满足背书策略的要求。
下图是一个包含有客户、背书节点,提交节点的网络示意图。
根据Fabric官方的参考文档,客户交易的正果过程可使用下图描述。
如上图,从1到3,为背书阶段,4为排序阶段,4.1,4,2, 5为验证提交阶段。 参考 Frabic的节点 概念,可以了解更多在交易细节的概念。
总的来看, Fabric 更专注于企业间,通过上文,可以让大家对Fabric的基本构成与概念有一个总的了解。 Fabric本身并不神秘,都是使用的现有的企业间的技术。要更好的了解,建议参考阅读分布式消息系统和企业的安全基础设施(CA相关)的支持。与以太坊系联盟链实现比较, Fabric 的子网更概念对于复杂企业间应用适应更强,但是其复杂的安全考量,使得运营成本很高,另外,Fabric 使用Certificate做为用户身份,有很大的局限性,在新的2.0里,Fabric对于此处将有所改变。
下一篇,我们将来看看Sawtooth , 由Inter 提供的区块链框架。
区块链之联盟链(一) 认识以太坊
区块链之联盟链(二) 认识Quotum
区块链之联盟链(三) 认识Fabric
区块链之联盟链(四) 认识Sawtooth
H. 会计领域的应用基于联盟链还是私有链如果是联盟链你觉得会包含哪些节点如
举些例子
联盟链是目前区块链落地实践的热点,也是大家对“杀手级应用”期望最大的区块链部署形态。联盟链的诞生源于对区块链技术的“反思”,是对比特币、以太坊所体现的技术特点与企业客户实际需要的融合与折衷,蕴含了大量区块链工作者的智慧与辛劳。由于对未来价值的“共识”,很多厂商推出了自己的联盟链框架或平台,本文选择了HyperledgerFabric、FISCOBCOS、微软的Coco、企业以太坊联盟(EEA)及R3的Corda这五个具有一定影响力的联盟链,拟从设计理念、生态、效率、扩展性、节点管理与权限管理、智能合约、部署与运维友好性、隐私保护、公链结合或演化能力九个方面进行比对,以供各位开发者、爱好者参考。
I. 【区块链政务十大案例之一】蚂蚁区块链-杭州互联网法院司法链案例
据杭州日报消息,2018年09月18日,杭州互联网法院宣布司法区块链正式上线运行,成为全国首家应用区块链技术定纷止争的法院。司法区块链让电子数据的生成、存储、传播、和使用的全流程可信。
起诉人可以通过线上申诉入口,在线提交合同、维权过程、服务流程明细等电子证据,由公证处、司法鉴定中心、CA/RA机构、法院、蚂蚁金服等链上节点来共同见证、共同背书,为起诉人提供一站式服务。司法链极大地降低了线下存证、取证的成本,提升了判决流程的效率,从而使得许多之前由于维权成本高而不值得起诉的案件,都能够通过区块链实现更好的维权;司法链破解司法服务效率低的难题实现司法数据的融合共享,打破数据孤岛;司法链推动社会信用体系建设,降低司法成本以技术为引擎,推动创新发展,引领司法服务转型升级减少。
援引自可信区块链推进计划的《区块链司法存证应用白皮书》分析,随着信息化的快速推进,诉讼中的大量证据以电子数据存在的形式呈现,电子证据在司法实践中的具体表现形式日益多样化,电子数据存证的使用频次和数据量都显著增长。不用类型电子证据的形成方式不同,但是普遍具有易消亡、易篡改、技术依赖性强等特点,与传统实物证据相比,电子证据的真实性、合法性、关联性的司法审查认定难度更大。
在司法实践中,当事人普遍欠缺举证能力,向法院提供的电子证据质量较差,存在大量取证程序不当,证据不完整、对案件事实指向性差等问题,直接影响到电子证据在诉讼中的采信比例。
电子证据传统的存证方式本质是一种中心化的存证方式,存在容易造成存证数据丢失或者被促癌该的可能。
同时,电子数据依赖电子介质存储,为了存储安全,经常需要使用多备份等方式,加之电子介质有使用寿命,反而使存储成本较高。
(2)取证中的问题
目前,在某些本地产生的电子数据进行取证时,原件在智能留存在产生电子数据的设备当中,证据原件和设备是不可分的。证据原件一旦要离开设备,就变成了复制品而不能成为定案依据。这样导致诉讼案件中的很多限制。
另外,所谓的原件到底是不是时间发生时真实、原始和完整的数据,互联网软件服务商也无法给出确切的答案,所取证据是否属于原件,也是存疑的。
(3)示证中的问题
电子数据展示和固定是数据使用的重要环节,由于电子数据的存在形式是存储在电子硬件中的电子信息,要获取其内容需要使用响应的软件读取和展示,这给示证带来了困难,也可能由于需要公证而加大了当事人的举证负担,浪费了社会司法资源。
(4)举证中的问题
在诉讼中,双方都会提交自己留存的电子数据作为证据。在当事人分别控制自己数据的情况下,容易发生双方提交的证据有出入,甚至是矛盾的情况。在没有其他佐证的情况下,证据的在真实性认定非常困难,双方提交的电子数据都无法成为断案依据。在这种无法判断案件事实的情况下,法官很可能需要依赖分配举证责任来进行断案。而一般的举证责任分配原则是谁主张,谁举证,无法举证则承担败诉的后果。那么在这种情况下,积极篡改自己数据的一方可以在这种举证责任的安排下获利。
(5)证据认定中的问题
一切证据“必须经过查证属实,才能作为定案的根据”,是在世界方位内具有普适性的最重要的司法原则之一。证据的认定,通常是认定证据“三性”的过程,即证据真实性、合法性和关联性。电子数据作为证据也需要经过“三性”判定。电子数据因为数据量大、数据实时性强,保存成本高,原件认定困难等原因,对证据的“三性”认定依然困难,电子数据经常因为难以认定而无法对案件起到支撑作用,这对法官和当事人都造成了较大压力。
援引自蚂蚁金服司法存证产品负责人栗志果做的主题为《蚂蚁区块链在司法存证领域的探索》的分享认为,在过去的20年中,互联网行业的关键词是连接。在PC互联网时代,通过PC互联的方式对终端进行连接,在那个时代,发现这个趋势的企业都抓住了门户、搜索引擎这样巨大的商业机会。2013年,进入到了移动互联网时代,在这个时代通过移动互联网的方式把许多智能终端、个人设备连接在一起,在端设备的数量以及在线时间得到了极大的提升。在这个阶段抓住机会的人便造就了微博、微信、支付宝这些超级应用。而目前关注到一个非常重要的变化就是随着连接变化不断扩大的同时,连接质量也发生了非常大的变化,这被称为第二条曲线, 原来连接的对象是信息,现在很可能变成了资产。
那么资产和信息有什么不同呢?主要的不同有三点,
第一点,资产是唯一的,而信息是可以被无限复制的。在互联网时代,通过复制的方式可以让信息传递的成本降到最低,但连接的对象是资产时,便出现了一个致命伤,那就是无法通过复制的方式进行传递,这个资产给了一个人后就不能再给其他人了。
第二点,资产和信息相比,资产更加脆弱,更加珍贵。资产就是钱,在信息数字化的过程中,可以很方便的把信息放在互联网上,但是对于资产来说,这样是行不通的,因为资产的背后是真实的利益。
第三点:资产和信息相比,资产对于安全性的要求非常高,很多问题也必须去面对,包括黑客、竞争对手的攻击,欺诈等,这些都是链接资产需要解决的问题。这也就是资产和信息的第三个不同点,资产如果发生了纠纷是需要解决的,在现实中,可以让法院来解决,但如果是在互联网中,是很难处理的。
上述所说的资产的三个特点是很难通过传统的互联网方式去解决的。同时互联网的发展使得人们越来越懒,如果在10年前,很多人还能够接受资产连接会花费得时间比较久,但是现在人们就很难接受,比如为了签署一个合同,需要花费两到三周的时间进行邮寄,为了做一个跨境支付在很多传统机构中频繁出入,花费高额的成本。而且与20年前的连接方式相比,目前互联网的连接难度变大了许多,因为许多人发现信息被连接后,数据变得很有价值,那有价值怎么办,只能把价值沉下来,沉下来就变成了价值深井,规模越大,价值越深,同时会形成另外的一个问题,叫做数据孤岛。这些问题都是司法链需要考虑并加以解决的。
现在,法院是站在历史的机会节点上,是有机会成为数据产生、完成连接的基础组成部分。资产一定会发生纠纷,发生纠纷后将会由法院进行全链路的审核。这是一个独特的价值,是互联网最后一公里的价值,通过连接的方式,连接资产,打破数据孤岛、价值深井,这才是真正的价值完成,这种模式实际上是属于中小企业的,包括个人用户,以上便是司法链的价值基础。
如果出现一个价值孤岛,需要对它进行连接,一定有各种各样的连接方式,连接主要有四种方式,
第一种就是不进行连接,把它放在银行保险柜里面;
第二种方式是坏的连接,即通过技术的领先性、不平等性,通过黑客技术剥夺数据资产的拥有权,当没有合法连接的时候,坏的连接一定存在;
第三种是看起来是好的连接,但实际上是脆弱的连接,现在又很多连接的方式,在市场形势比较好、泡沫比较大的情况下拥有一定的市场,但一旦碰到真正的价值落地就破裂了;
第四种就是司法链,用15个字可以概况,即全流程记录、全链路可信、全节点见证。
司法链是怎么做到技术可信和制度可信,并且成本不高的呢?
首先第一个问题是资产是脆弱的,因此在进行资产的连接时要能够具备真实安全的基本特点。安全包括隐私保护,这并不是一个简单的事情,支付宝诞生的第一天就是从担保交易开始的,解决的问题时买方和卖方之前交易的真实性,后来,基于支付宝,提出了芝麻信用,很多人都有芝麻信用积分,通过以往的信用记录,对用户能否履约提供大数据、人工智能方面的参考,使得真实安全更进了一步。接下来便到了区块链,区块链提供了一项非常重要的能力,那就是真实不可篡改,使得信任在真实安全的级别上又向前推进了很大的一步。因此司法链解决的第一个问题就是做资产相应的连接一定要保证最底层的连接器是真实安全的,这种真实安全不是放在口头上说的,也不是在实验室里的技术,而是经过用户的认可,市场的考验和大规模业务量的考验的。
第二个问题非常关键,当通过一个真实安全的连接器把大家连接到一起,一旦数据资产被侵害了,发生了纠纷要如何处理?司法区块链这两年一直是朝这个方向进行的,通过把公证处、司法鉴定中心、法院拉入司法链的最底端,对数据进行相应的鉴定,保证了一旦数据资产发生纠纷,能够被公正有效的处理。这是一种非常强大的制度,这也是司法链是解决互联网最后一公里问题的真命天子的根本原因。到目前为止,司法链已经保证了技术可信和制度可信。
第三个问题是在资产的互联中,连接的成本不能过高,用户已经养成了点一点鼠标、搜索按钮就能获得无数信息的习惯。区块链火了许多年,但到目前为止真正的用户不到2000万,且日活很低的原因,一是太难用,二就是使用成本太高。因此在进行资产连接时,必须是非常简单的,非常易用的,成本很低的。就像支付宝最开始在做实名认证的时候,可以通过人脸扫描的方式很快的完成用户的支付,同时安全级别很高。所以真正的连接器要具有低成本,高应用性的特点。
司法链做到了技术可信和制度可信,并且连接的成本不高,开启了资产连接的区块链新时代。
杭州互联网法院的司法区块链让电子数据的生成、存储、传播、和使用的全流程可信。通过整体的完整结构,能够解决互联网上电子数据全生命周期的生成、存储、传播、使用,特别是生成端的全流程可信问题。
该区块链由三层结构组成:
1), 一是区块链程序,用户可以直接通过程序将操作行为全流程的记录于区块链,比如在线提交电子合同、维权过程、服务流程明细等电子证据;
2), 二是区块链的全链路能力层,主要是提供了实名认证、电子签名,时间戳、数据存证及区块链全流程的可信服务;
3),三是司法联盟层,使用区块链技术将公证处、CA/RA机构、司法鉴定中心以及法院连接在一起的联盟链,每个单位成为链上节点。
杭州互联网法院司法链上线的电子证据平台则是直接在证据和审判之间建立了一个专门的数据通道,使得证据的收集、固定、传输和运用更加便捷和高效。
以往到互联网法院打官司,证据的提交都是电子化以后上传至“杭州互联网法院诉讼平台” ( www.netcourt.gov.cn )。比如公证文书,一般是通过扫描等方式上传。今天上线的电子证据平台首先“触手”很长,它可以与其他电子数据之间能实现无缝对接,比如公证处。那么公证文书就能一键上传至电子证据平台,直接用作诉讼证据。再比如涉及淘宝、京东等电商平台、互金平台、理财平台等交易纠纷,第三方数据服务提供商(如运营商平台、电子签约平台、存证机构平台)等也能直接将电子数据传输到电子证据平台,有效解决当事人自行收集电子数据证据存在的困难,大大节约庭审举证质证的经济和精力成本。
原本仅仅是通过扫描、或打字而成的“电子化”的证据,真正转变为“电子证据”,通过第三方存管平台,打破“电子数据”容易灭失和被篡改的魔咒,形成唯一的不可篡改的“数据身份证”,并实时同步备份到电子证据平台。进入诉讼程序后,已保存在电子证据平台的“数据身份证”还会与电子数据原文进行自动比对,判断电子证据后期是否有过篡改,以此确保了电子证据的真实性。
这些电子数据都有编码身份证,也就变成一个个案件的“要素”,平台将这些要素归类,然后匹配到各个案件中,这样一来,由系统自动匹配要素,即将电子证据导入各个案件,形成无需法官的系统自动立案。我们可以想象很快就能实现一分钟数十或者数百的立案速度。
最后,当这些证据成为电子数据储存在平台上以后,除了杭州互联网法院在案件审理过程中可以在该平台展开司法运用外,其它相关机构(如经允许的其他各人民法院、司法鉴定机构、公证机构、备案机构)均可从该平台中依程序调取相关证据,资源数据的共建共享也将达成。
以打通杭互司法链的上海市浦东公证处数据存证平台为例,介绍下数据保护平台到司法诉讼的完整闭环流程。
1,注册业务平台并实名认证
某设计公司企业A打开上海市浦东公证处数据存证平台页面,注册后完成实名身份认证。
2, 原始数据存证
当该A设计公司完成一幅作品的设计后,在完成原始作品数据归档后,通过自身业务系统发起远程存证调用接口,调用公证处数据存证平台的RESTful API完成该设计作品文件HASH和相关要素的存证。该存证也会同步发给司法区块链,浦东公证链和中国授时中心,全部成功后会获得有对应LOGO标识的存证证书。通过各链和平台完全一致的作品文件HASH指纹数据表明本次存证的有效性和不可篡改性。
5. 登录杭互法院提交诉状,验证证据合法性
司法链是蚂蚁区块链BaaS的具体应用案例。蚂蚁区块链BaaS(Blockchain as a Service)是基于蚂蚁金服联盟区块链技术和阿里云的开放式“区块链即服务”平台。它将区块链作为一种云服务输出,支撑了众多的业务场景和上链数据流量,是行业区块链解决方案的基础。蚂蚁区块链BaaS致力于搭建一个开放、协作的平台,为全球的企业和个人提供便捷的服务。
上图是蚂蚁区块链的产品大图,其中BaaS的技术架构主要分为三层:
1、底层是BaaS Core
BaaS Core层基于对主机以及容器提供灵活支持的云资源管理平台,实现跨平台的便捷运行和部署。对于可信硬件,即基于阿里云的神龙服务器提供相应的硬件服务,可以提供一个高可靠、高隐私保护的可信执行环境。除了存证平台和智能合约平台以外,在同构链跨链服务的基础上即将推出异构链跨链服务。目前的市场上,单链或者一条链存在自身的局限性,未来对于建立信任的基础设施、互信的生态,跨链技术将成为其中非常重要的一环。目前BaaS平台已通过跨链服务,实现了内部的互联互通,同时也可以通过智能合约和跨链服务,对于外部的互联网上的可信数据源进行访问。此外,对于其他的基础能力,例如联盟管理、安全隐私、证书密钥管理等,BaaS Core都有相应的功能和支撑。在提供自主研发的蚂蚁区块链体系同时,BaaS平台也支持开源体系以更好地满足客户多样化的需求,包括企业以太坊Quorum和Hyperledger Fabric。
2、向上一层是BaaS Plus
BaaS Plus层把底层的服务和能力封装、服务化,开放为标准化的接口,提供给合作伙伴们接入和使用。这样可以极大地减少客户在基础资源上的投入,同时明显缩短接入业务的耗时。截止到目前为止,平台已经推出了可信存证、通用溯源、实人认证、企业认证等服务,也会在未来逐步推出更多的服务。
3、最上层是BaaS Marketplace和解决方案
蚂蚁的诸多合作伙伴们可以在marketplace中提供自己的能力。同时,在不同场景落地的实际应用都会沉淀出一套标准的应用解决方案模板,从而方便客户在自己的应用中借鉴其它类似场景的平台能力。浦东公证处数据存证平台可以成为BaaS Marketplace中的一员。
1, 账户体系
蚂蚁区块链所有交易操作均是围绕账户体系来进行,因此在发送执行交易之前需确保您已在蚂蚁区块链创建对应的账户,然后可使用创建好的账户提交交易,还可以基于该账户结构完成相关账户配置的修改。
具体的账户数据结构模型字段和说明如下:
其中,账户包含三种类型的密钥:
蚂蚁区块链采用将账户与密钥解耦的方式来实现,从一定程度上防止因为密钥丢失带来的链上数据丢失等安全隐患。蚂蚁区块链支持的主要账户操作包括:
2,隐私保护
蚂蚁区块链通过引入密码学的一些特性来支持账户信息敏感数据的隐私保护能力,通过在智能合约层面扩展相关的指令函数来实现智能合约中金额的加密存储以及加减操作。只有获得有效密钥的个体才能解密智能合约中的敏感数据,查看原始金额信息。
目前,蚂蚁区块链引入的密码学特性包括零知识证明,即通过引入零知识证明来实现加密密文条件下转账金额的合法性证明。
3,跨链服务
蚂蚁区块链跨链服务是面向智能合约提供的链上数据服务,本服务在客户区块链环境中部署跨链服务合约/链码,并且提供 API 接口供用户合约/链码进行调用来使用。跨链接服务目前提供 账本数据访问 和 合约消息推送 两类服务及其对应的 API 接口。账本数据访问服务可以帮助用户智能合约获取其他区块链账本上的数据,包括但不限于区块头,完整区块、交易等。合约消息推送服务可以帮助部署了跨链数据服务的不同区块链上的智能合约之间进行消息通信,满足跨链业务关联处理等场景。
2019年5月22日,上海市第一中级人民法院、杭州互联网法院、合肥市中级人民法院、苏州市中级人民法院、在安徽芜湖共同签署合作意向书,将以杭州互联网法院司法区块链平台为依托,四地互通,共同构建长三角司法链,打造“全流程记录、全链路可信、全节点见证”的司法级别信任机制,共促长三角区域司法一体化发展。会议中介绍,杭州互联网法院司法区块链运行机制日臻成熟,已汇集3.9亿条电子数据,相关案件调撤率达96%以上,在知识产权保护、金融风险防范、农产品溯源、信用体系构建等方面发挥了重要作用。
杭州互联网法院的司法链的技术提供方为蚂蚁金服区块链,其拥有全球领先的核心专利技术,2万TPS高性能存证能力,极高的隐私安全保护能力,顶级安全防控能力为司法链保驾护航。旗下的蚂蚁区块链可信存证平台支持第三方接入司法链。
具体方面举例而言,司法链大大提升用户的维权效果。例如,在中国,版权的保护是非常落后的,像是图片领域只有5%的正版,其余的都是盗版,但是维权从立案到审判,一审需要8个月的时间,获得的赔偿仅有500-600元,但是花费的时间成本、经济成本远远超过赔偿金额。但司法链的出现可以使维权成本降低一到两个数量级。其次,司法链可以增强品牌的信任度,一方面使企业是和司法链,和政府认可的品牌、平台站在一起,另一方面使企业通过信任连接的方式把自身的商业模式清晰透明地告诉用户,使用户产生非常强的信任感。特别是创业者,能够在早期就拥有巨大的流量。最后,司法链解决的是互联网最后一公里的问题,使得用户的使用成本产生非常大的下降。因此使用司法链的模式是真的是让传统商业模式升级成为信任商业模式。
供稿者 王登辉 介绍:
版权链/公证链项目杭州下笔有神科技公司CTO,
HiBlock技术社区上海合伙人,
聚焦“区块链+”产业落地和实现方案,希望与行业从业者一起布道区块链。