络谱中间件产品功能概要

1 中间件产品说明

络谱区块链中间件产品,是为了加速区块链技术落地而专门设计的产品,作为 BROP tool 的主要部分共同发布。它可以用于与传统MIS、ERP、CRM等各类业务系统对接。在联盟链场景下,通过使用智能合约,减少业务开发中集成区块链的基础工作,从而降低学习成本和开发成本。

本文的目标读者是希望将区块链技术引入到产品中的系统架构师及各类技术人员。因此,本文将不会对区块链原理进行讲解,但会提到相关特性。

下文中将分为两个章节,分别介绍中间件产品的实际形态,及中间件提供的功能。

通过对这些问题的描述,帮助用户快速了解中间件的整体背景和可能的使用方法,帮助区块链相关的开发团队快速评估如何引入中间件产品。

2 中间件产品形态

一个独立的Java 应用服务。
通过MongoDB数据库实现对区块链数据进行索引的能力,数据库的数据同步来自区块链账本。
提供一组简单的页面,用于对区块链中的数据信息进行检索、查询。
提供一组Web界面,进行常用的文件上链、文件鉴定等功能。
通过消息队列的形式对外发布信息,业务开发者可以通过订阅消息获得及时的通知。

3 功能介绍

3.1 为区块链提供统一的快速开发接口

区块链中间件产品的首要设计目标是简化用户的开发,区块链开发中的第一个环节就是与区块链的接口交互。目前行业中并没有标准的区块链接口规范,各种区块链接口的设计也各不相同。
络谱中间件产品将区块链原生操作进行封装,通过一组统一的接口方案为用户提供全面的区块链功能。这些接口涵盖合约的编译、部署、交易发送、信息查询等功能。

3.2 为数据建立索引,提供灵活的查询接口

区块链节点的数据以区块为单位,形成链表进行存储。这样的数据存储结构虽然便于定位和验证,但通常只能根据没有业务意义的key 进行检索。区块链本身的设计并不关心业务内容,导致了区块链不能满足业务系统的检索需求。

中间件提供一种同步机制,分析区块链上的数据,并建立一套高效的索引数据库。用户对业务数据的查询,可以在这套索引数据库中完成。业务系统将查询请求发送到中间件的查询接口,就可以方便、快速地检索到需要的业务数据。这在相当大程度上,减少了各个业务系统在接入区块链技术时需要进行的二次开发工作。

3.3 向业务系统提供关于区块链事件通知

区块链是一项帮助企业间建立更强信任的技术,所以区块链的接口设计应该兼具通信和存储的功能。对于业务系统来说,通常需要感知与自身业务相关的数据变化。而目前市面上大部分区块链系统都只是单纯地存储数据,不具备通知数据变化的机制。

中间件与底层区块链之间通过同步机制建立紧密联系。利用这种联系,中间件会及时发现区块链上正在发生的数据变化,并将这些变化封装成各种“事件”,通知给业务系统。上层业务系统可以通过监听这些事件了解到区块链上的数据变化。这样的机制能大大地降低业务系统的开发和运行成本,简化业务系统的复杂度。

3.4 为存证记录提供权威的时间信息

区块链的各种常见业务中,存证和交易等场景都带有较强的时间属性。中间件为用户的存证、信息登记提供了简单的时间戳接口,时间戳数据来自中国科学院国家授时中心,帮助业务系统方便地添加权威时间信息。

时间戳接口服务帮助用户方便地为存证信息添加时间戳,这个信息会随着存证信息一起记录到区块链上,同时,因区块链具备不可篡改特性,为存证信息提供清晰且强有力的证明和支持。

3.5 精简区块链索引,降低运维成本

区块链技术通过充分的冗余备份,实现了账本数据的见证和高可用,但因此造成的成本也是显而易见的。当区块链网络成熟之后,节点和中间件可以分担进行数据见证和数据索引。业务参与方可以选择只关注应用层数据的索引,通过中间件所获取必要的数据后,再向具有可靠数据的区块链节点发起请求,进行数据验证。然而,整个区块链账本中有很多数据与业务系统本身并不相关,中间件在建立数据索引时,还提供了数据过滤功能,只将与业务相关的账号、合约信息编入索引,帮助业务系统降低运维成本。

目前中间件支持通过简单参数配置实现过滤区块链数据的功能,其中,支持的特定规则主要是根据合约和合作方账户进行过滤。未来,研发团队还将陆续推出更多的过滤规则和更灵活的配置方式。

3.6 提供交易重试和调度机制

在研发基于区块链的系统过程中,我们发现了一些困扰开发者的问题。

第一,业务系统在向区块链发送交易时,需要进行编码、签名以及发送等操作。因此区块链确认交易时会产生一段时间的延迟,导致用户在发送操作后通常不会同步得到结果。然而用户需要关心各个步骤和操作中的异常、失败和重试等各种情况。这类需求非常普遍。第二,区块链相对传统的中心化系统,吞吐带宽和并发交易数有限,业务开发者通常需要对交易进行调度,避免出现交易高峰。

针对这类场景,中间件提供交易重试和调度机制,该机制可以将交易进行存储,以及对交易异常、失败、重试等情况进行相关处理。这样,用户只需要关心交易是否已经发送到中间件,而无需关注交易上链过程中各个阶段的情况。当业务出现高峰时,可以由中间件来限制交易的发送时间,极大地简化了业务系统的复杂度。

3.7 简化大文件存证流程

区块链是一项适合保存数据的技术,但它的设计重点在于防篡改和可追查,所有的节点都完全对等地存储账本里的所有数据。在这样的方案下,对大文件的防篡改能力成为一种技术成本相当高的场景。然而,通常几兆字节的数据已经被认为是相当大的体积。

针对广泛的业务需要,中间件系统为文件存储进行了更多的定制,使得文件系统与区块链功能结合起来,为业务方提供了一套统一的文件存储接口,可以帮助用户将所有文件作为区块链的附件,存储在文件服务器中。用户只要向中间件发送自己签名的文件,即可快速进行保存,并将文件保存结果发送到区块链上,从而实现大文件的防篡改、反抵赖的能力,极大地简化了在防伪、存证等领域引入区块链技术的工作。

关于区块链的确定性

最近的两年来,我们多次跟络谱的合作伙伴沟通过关于区块链的设计、应用、对接难点,总结下来,其中一个比较普遍的问题是关于如何理解区块链中的事务确定性问题。比如,如何比特币的交易有分叉,络谱是什么样的?以太坊的数据要有统一的 nonce 计数器,导致必须维护一个单点信号,不适合传统的服务器开发,怎么解决?

对于以上问题,我们整理了一份说明,来解释我们如何在络谱平台上解决这些问题。

确定性的价值

对于区块链用户来说,“事务的确定性”是一个很重要的特性,事务(Transaction)的确定性是指,用户应该能够在有限的时间内,能够确定地知道写入的数据是否被共识机制认可,以及,一旦得到了共识机制的认可,结果应该不会再发生变化。不能变化的内容包括事务的所有属性都不能再发生变化(包括事务自身属性,和事务被记录到账本里的时间等)。试想,如果没有确定性,用户将面对一个混乱的账本:向区块链发送了数据却没法确认结果,这时,用户先是不知道应不应该发起重试,接下来重试不成功后又不知道是否可以认为事务一定会失败——所有的事务都处于混沌的状态。

区块链确定性问题的现状

以比特币网络、以太坊网络为代表的公有区块链技术,为保证广泛的节点、网络特性,在很大程度上牺牲了事务的确定性。许可链(也被称为联盟链)在有限的网络范围内,可以保证相对较高的确认速度,因此天然具备确定性特征。
然而某些共识机制在提高性能、提高对开放网络的支持程度时,允许不彻底的确定性,比如,比特币网络里允许出现分叉,使得用户和很多交易所,在收到转账后,需要更长的时间确认,在若干个区块之后,通过一个相对安全的阈值(相对的信心)来决定是否认可这笔交易。

络谱的解决方案

络谱提供的确定性,使得用户能够明确地断言“失败”

建立明确的失败判定策略

关于确定性,我们假设一个场景:银行收到张三的一万元存款,打算把这件事记录到某个分布式账本,交易发上去了,第一个块里没有数据,第二个块里还是没有交易,第三个第四个仍然没有……那么银行是否应该重新发出这笔交易呢?如果重发出一次交易,那么可能被记录为向张三转两笔钱,如果不发出,那么可能交易已经被抛弃了。

一种简单的解决方法,是采用 nonce 机制,及每个交易有唯一的 nonce,只要保证重试时再次用同一个 nonce 发出,就可以让区块链账本抛弃这个请求了。nonce 的设计解决了如何重试的问题,但仍然没有解决一个问题:当没有等到交易结果时,如果不打算重试的话,什么时候才能断言说这笔交易一定不会成立了?根据对等网络的特性,20分钟后突然又出现在区块链上,是有可能的。

络谱自有区块链通过一套我们称为 BlockLimit 的机制,在许可链上真正解决了对于“失败”的确定性问题。在发送交易时,发送方可以指定一个能够等待的最远块,即 BlockLimit,将这个约定跟在交易中发给区块链账本。账本打算打包这笔交易时,会检查这个 BlockLimit,如果区块链当前高度已经超过了 BlockLimit 约定的高度,则拒绝这笔交易。对于应用方来说,只要在任意一个区块链节点内,当区块链高度超过 BlockLimit 的后仍然不能检索到交易,就可以断言这个交易一定是失败了,可以重新发起重试了。

关于失败的确定性 —— 定时出块是十分重要的

关于确定性的另一个问题,在下一个区块出现前如何判定交易是否成功。在很多区块链设计中,为了节省空间,设计者通常倾向于采用“没有交易时不产生区块”的策略,我们称之为空闲期停链的设计。但这个设计会产生一些问题,设想这样一个场景:某银行将张三存款一万元的交易,发送到一个空闲期停链区块链账本的节点上,接下来的两个小时内,银行的查询节点没有得到任何新块,这时银行要如何判断到底是张三的交易在其它节点共识时抛弃了呢?还是已经被记录到其它节点,但本地节点没收到通知?如果没有定时出块机制,银行是无法做出判断的。

络谱平台自主研发的区块链采用定时出块的策略,即使区块链没有收到交易,也会定时产生一个空区块,区块内含有必要的时间、摘要等信息,没有交易。这时银行可以作出判断——如果新块内没有交易,则说明交易确实没有得到最近的共识机制的支持,如果长时间没有收到新块,则说明网络出现故障,需要尽快通过技术修正来解决故障。


关于 nonce 的设计方案,在以太坊白皮书中有一个典型的例子 

不只是证据固定:络谱在司法领域的应用探索(理念篇)

日前,最高法司法解释明确通过区块链收集的证据应当确认,引起业内广泛关注。

《最高人民法院关于互联网法院审理案件若干问题的规定》正式实施,该规定第十一条写明,“当事人提交的电子数据,通过电子签名、可信时间戳、哈希值校验、区块链等证据收集、固定和防篡改的技术手段或者通过电子取证存证平台认证,能够证明其真实性的,互联网法院应当确认。”

这就明确了通过区块链固定的电子数据的法律效力,说明我国司法领域对于区块链的态度开放,未来围绕证据固定的区块链应用或将不断出现。

其实,区块链不止能能用于证据固定领域。

中钞区块链技术研究院基于络谱可信登记开放平台,与合作法院落地区块链在破产案件处理中的应用。区块链技术在数据存证、投票管理等重点环节发挥了关键作用。现将司法领域应用的思考分享出来,希望与和您共同探讨。

今天分享的是理念篇。从理念上看,区块链有助于实现司法体质改革目标。

司法是国家司法机关及其司法人员按照法定程序行使法定职权,具体运用法律处理案件的专门工作。十八届三中全会确定了司法体制改革的目标:深化司法体制改革,加快建设公正高效权威的社会主义司法制度,维护人民权益,让人民群众在每一个司法案件中都感受到公平正义。将区块链应用于司法领域将有助于从技术角度实现司法工作的公平正义。

一是区块链和司法都追求公正,是司法应用区块链技术的价值观基础。司法公正是司法的主要目标之一,其内涵即是要在司法工作的过程和结果中体现公平、平等、正当、正义的原则和精神。我国法院院徽用一柱华表支起一架天平来表现公平正直,而区块链用对技术的信任代替对交易对手的信任,即是实现了技术上公正的协议,使技术扮演了一切交易的公正可信第三方的角色。而智能合约是自动执行的数字契约,对公正判定契约执行结果则更为看重。因此公正是司法和区块链的共同追求。

二是司法注重程序正义,是司法领域应用区块链的重要需求。司法注重权力过程的形式性和程序性,程序公正是司法公正的重要体现。我国最高法,最高检多次下达文件或表示以“看得见”的方式实现司法公正,实现阳光司法。而区块链是一个对全网节点透明的网络,所有程序按照既定规则执,行,防止任何人作恶,是符合公开透明的计算范式。利用区块链技术改进现有司法程序,进一步提升司法工作的信息化水平,实现司法的程序公开透明。因此不同于很多经济领域的应用,在一些较高信用的经济主体上,区块链的去信任并无太大应用价值。而司法领域即使做到了公正,因程序正义的要求,也对区块链技术有较高的需求。

三是区块链有助于解决司法工作中的一些特殊问题。如电子证据方面,电子数据证据的不稳定性一直影响着电子证据法律效力。区块链技术是一个不可篡改的数据库,能够实现电子证据的固化,从技术层面提升电子证据的法律效力;如智能合约,形式上与司法审判极为相似,都是基于一定的规则,做出决定或审判,只不过智能合约依据的是代码,而司法审判依据的是法律。智能合约具有高度的客观中立性,在一定程度上具有高效性。从长期来看,对于调节各类民事关系,有着重要价值。

司法体制的改革离不开公共法律服务科技的创新,以科技成果引领智慧司法行政技术装备发展。区块链技术有望提升司法工作信息化水平,提升工作效率的同时,提升程序正义的水平,符合司法体制改革的目标要求,因此有着独特的应用意义。

(未完待续)