基于超级账本技术的电子合同解决方案

2018-05-18 05:52尹稚淳李航
现代计算机 2018年11期
关键词:图章账本模板

尹稚淳,李航

(沈阳师范大学软件学院,沈阳 110034)

1 相关法律法规和行业现状

相对于纸质合同,电子合同的优势就是经济、快捷、安全和可随时查阅。我国对电子合同的法律保护见于《民法通则》、《合同法》、《电子签名法》等法律法规中,2004年8月28日通过的《电子签名法》,它用法律条文确定了电子签名的法律效力[1-2]。

2013年12月,中华人民共和国商务部颁布了《电子合同在线订立流程规范》。作为行业标准,规范明确了电子合同适用范围,保密和安全性要求,同时规定了合同签署流程,查询和保管规范;提到了合同签订双方须在第三方平台上签署电子合同,才具备完备的法律效力[3-4]。

我国对电子合同平台有诸多隐私、安全性要求,电子合同平台是否会越界违法,取决于管理制度和其口碑背书,这也是中心化网络的通病,用户使用各种互联网公司提供的社交生活便利的同时,就不得不将个人数据安全和隐私交付给互联网公司来保障。然而,由于用户数据被贩卖事件层出不穷,依靠公司信誉背书来无论如何也只是便利性与安全性的妥协。区块链的无需中心机构做信任背书的特性特别适合电子合同的应用环境。

2 超级账本技术介绍

超级账本(Hyperledger)是在2015年成立的联盟区块链开源项目,目前有超过190家公司和组织。超级账本项目努力解决各种不同商业场景下的区块链落地问题。开源且透明的去中心化账本设计,支持模块化的共识算法和出块算法,支持多种语言的开发测试环境,有助于更多的中小企业更容易,更小代价的进入区块链时代,并可以根据自己的应用场景和业务量优化链上性能。

超级账本Fabirc是超级账本的第一个项目[5],区块链的基础核心平台;采用分层模块化开发,支持插拔式共识机制以及成员管理,支持权限管理;支持Node.js,Python和Java的链码开发[6]。目前Fabric1.0的每秒交易数在5000左右。

如图1所示,超级账本Fabric 1.0的逻辑架构支持通过API、SDK和CLI的形式来访问Fabric的服务。从底层的角度,Fabic可以分为身份识别服务、策略管理服务、区块链服务、链码(智能合约)服务四个部分。

超级账本Composer是一个兼具开放性扩展性的开发工具集和框架[7]。使用Composer,开发者可以将的精力集中在领域模型设计和业务逻辑开发,在数周内完成链码应用,并且部署到生产环境。Composer支持现有的超级账本Fabric区块链基础架构和运行环境。

图1 超级账本系统逻辑架构

图2 Composer链码应用结构

Composer链码应用由四类文件组成,分为模型文件、脚本文件、访问控制文件和查询文件。模型文件中定义了应用中的各种实体和具体的交易行为,例如区块链二手车市场的汽车,保险合同,买卖双方,买卖交易等。脚本文件中是交易行为的具体代码实现。函数可以理解为不会写入区块链的交易,仅用作查询返回数据。访问规则则定义了那些参与者有权限访问哪些资源,可以使用哪些交易。查询文件中的查询函数定义了一类不会写入区块链的交易。

Composer链码应用开发完成后,打包成.bna文件,使用链码系统身份卡可以将链码安装到现有Fabric环境中,或在Web浏览器的仿真环境中运行。可以使用三种方式来访问链码应用,第一种是通过命令行接口Composer-CLI的方式来访问,第二种是通过RESTFul API的方式来访问,这也是通常情况下Web应用使用的方式,第三种是通过Web Playground后台来访问。这通常用在开发和测试链码应用阶段。

3 电子合同方案架构设计

整个电子合同系统架构设计如下:

图3 电子合同系统架构

每个层的主要功能如下:

区块链底层平台:提供状态数据库维护、分布式账本的维护、智能合约的生命周期管理等区块链功能,实现数据的不可篡改和智能合约的业务逻辑,以及通过CA服务提供成员注册和注销等功能[8]。

智能合约:智能合约通过链码来实现,包括用户信息管理,图章管理,签名管理以及合同管理等一系列链码功能的实现,以及暴露给上层应用调用的交易接口。所有在系统的重要业务都在此实现。

业务层:业务层是应用程序的后端服务,为Web应用提供RESTful的接口,处理前端的业务请求。后端服务的基本功能是封装智能合约层的链码接口,将链码的图章管理,签名管理和合同管理gRPC服务接口转换成RESTful接口。同时合同接入SDK再次封装RESTful接口,方便应用开发者快速使用电子合同系统。

应用层:Web应用可采用ASP.NET+HTML+CSS的前端架构编写具有MVC、模块化应用程序,提供用户交互的界面操作,包括用户操作的功能和业务操作的功能。

用户可以通过两种方式将合同存储在区块链上,第一种方式是通过Web应用服务器将合同存储在区块链上,第二种方式是通过区块链RESTFul API服务器为第三方租户提供接入服务,用户通过第三方接入服务器将合同存储在区块链网络上。

4 电子合同方案设计和实现

电子合同订立主体可以为个人或组织,简称“主体”,这里也可以称为“用户”。“用户”可以在电子合同平台上补全“用户”信息,添加合同模板,发布合同并邀请其他的“用户”下载、阅览和签署合同,也可以鉴定合同是否是经过当前区块链承认的合同。

根据“用户”在系统上的业务划分,可以分为身份信息管理、图章管理、签名管理、合同模板管理和合同管理五个模块。

合同系统领域模型ER图,如图4所示:

图4 领域模型ER图

身份信息管理包括身份信息建立和身份信息修改。

图章管理包括图章创建,图章销毁,图章信息修改和图章查询。

签名管理包括签名创建,签名销毁,签名信息修改和签名查询。

同模板管理包括合同模板创建,合同模板销毁,合同模板信息修改和合同模板查询。

合同管理包括合同创建,合同签署,合同撤销,合同查询,合同验签功能。

图5 合同状态机

合同(Template)类代码:asset Contract identified by Id{

o String Id //标识符

--> EndUser founder //发起者

o Signature[]signatures //用户签章记录

o String Title //合同标题

o String Extension //合同扩展名

o String Content optional //合同正文(Base64)

o String ContentHash optional //合同正文哈希值

o String FinalDocument optional //最终合同文档(Base64)

o String FinalDocumentHash optional//最终合同文档哈希值

o Template template optional //合同模板

o String templateData optional //合同内容Json

o ContractStatus status //合同签署状态

o DateTime SignDeadline optional //签署截止时间}

合同签署部分链码:function SignContract(param){

…//setting environment

if(param.status=='WaitSigning'||

…//check status

if(signature.user.getIdentifier()==currentParticipant.getI-dentifier()){

if(signature.status!='WaitSigning'){

throw new Error('Already signed');

}

signature.status=param.status;

if("undefined"!=typeof param.sealImage)signature.sealImage=factory.newRelationship(A_NS,'SealImage',param.sealImage.getIdentifier());

signature.sealImagePos=param.sealImagePos;

if("undefined"!=typeof param.signTextImage)signature.signTextImage=factory.newRelationship(A_NS,'SignTextI-mage',param.signTextImage.getIdentifier());

signature.signTextImagePos=param.signTextImage-Pos;

signature.SignTime=new Date();

if(signature.status=='Signed'){

signedCount++;}}

if(param.status=='Reject'){

param.contract.status='Rejected';}

else if(signedCount==total){

param.contract.status='Effective';}

else{

param.contract.status='PartSigned';}

…//write to chain

}

链码开发完成后,透过Composer REST Server将链码接口暴露成REST API的方式。如图6所示。

图6 合同签署RESTFul API接口

5 结语

笔者具体研究了电子合同的法律规范[1-4],以及目前成熟的电子合同签订系统的业务功能[3],区块链常用场景下的应用以及性能问题。综合考虑各个方面因素,选择超级账本Fabric作为底层区块链应用架构,使用超级账本Composer作为链码应用的开发平台,最终将链上所有服务通过RESTFul API来与链下应用做连接。这样就完成了一个电子合同应用场景下的业务闭环。

最近两年来,区块链的开发非常多,但真正落地实施的项目屈指可数,但随着应用不断地涌出和淘汰,区块链开发也必然会变得明朗和规范化[9-10]。到那时,基于区块链的电子合同就不应该仅仅是纸质合同的数字化代表了。数字合同的问题在于它只是一个法律证明。而合同本身不具有强制执行力。资产在合同上的交割,都必须基于线下的现实世界中的合同双方的协商或法院裁定,透过国家强制力来保证。电子合同的下一步发展趋势,一定要做到可以理解用户合同文本中的职责方,资产和转移条件,并通过生成链码的方式来强制执行合同文本。这样,整个合同的执行流程就无需法院或国家的干预了。

参考文献:

[1]全国人民代表大会.中华人民共和国合同法[L],1999-03-15.

[2]全国人民代表大会常务委员会.中华人民共和国电子签名法[L],2015-04-24.

[3]云签.国家电子合同标准制定[EB/OL].https://www.yunsign.com/yunsign4.0.1/api/contractDraft.do,2018-02-19.

[4]SB/T 11009-2013,电子合同在线订立流程规范[S].

[5]Hyperledger WG.超级账本白皮书[EB/OL].http://www.8btc.com/hyperledger-whitepaper,2018-03-01.

[6]Hyperledger WG.Hyperledger Fabric-Hyperledger[EB/OL].https://www.hyperledger.org/projects/fabric,2018-03-03.

[7]Hyperledger WG.Hyperledger Composer-Hyperledger[EB/OL].https://www.hyperledger.org/projects/composer,2018-03-03.

[8]杨保华,陈昌.区块链原理、设计与应用[M].北京:机械工业出版社,2017.

[9]张偲.区块链技术原理、应用及建议[J].软件,2016(11).

[10]沈鑫,裴庆祺,刘雪峰.区块链技术综述[J].网络与信息安全学报,2016(11).

猜你喜欢
图章账本模板
高层建筑中铝模板系统组成与应用
铝模板在高层建筑施工中的应用
特高大模板支撑方案的优选研究
光荣图章
Inventors and Inventions
数说:重庆70年“账本”展示
丢失的红色账本
大树爷爷的账本
丢失的红色账本
图章