引用
唐珊珊, “基于区块链技术的软件资产交易子系统设计与实现”.
摘要
引言
近年来互联 技术不断发展,越来越多的资产以“数字资产”的形式存在。常见的数字资产包括数字积分和虚拟货币等。软件也是一种数字资产。传统资产的交换依赖于面对面的物物交换。像软件这样纯数字化的资产可以容易地被下载、复制和传播,方便人们进行资产分配和交换,但由于缺少物理凭证,难以明确所有权的归属。与其它数字资产相比,软件资产变现的方式不是传统的所有权转让,而是通过提供服务产生价值,软件服务的质量则需要由软件测试数据来量化评估。在软件资产交易过程中,为保证软件资产的质量,需要对软件进行充分测试,建立严格的软件验收制度,落实验收流程。因此,软件资产管理需要关注所有权的确认以及测试数据的真实可靠。如何保证软件资产在互联 上进行可靠的确权与流通成为接下来要解决的问题。
区块链技术由于其去中心化、可追溯、防篡改的特性,受到政府和各行业的广泛关注,利用共识算法、智能合约等技术构建数据层面的信任,实现由整个 络来记账,而非某一个中心机构。区块链有以下优势:1)实现软件资产所有权的全 证明,及时确权。2)不同机构间无需信任即可进行软件资产交易。3)保证软件测试数据、交易记录和所有权数据不可篡改,侵权行为和非法交易发生时能够做到有据可查,快速维权。4)实现基于智能合约的自动验收功能,节省人力成本,提高软件资产变现效率。
需求分析
软件资产管理系统的涉众及其特征和期望如表9-1所示。
表9-1 涉众及其特征和期望
根据系统涉众的特征和期望,得出系统用例如图9-1所示。首先由软件需求方创建软件订单,订单内容包括要合作的软件开发方, 测评机构, 软件需求以及软件验收标准。开发方依据需求完成软件开发并在系统上完成产权登记。为防止软件开发方在交付之前进行代码混淆来防止源代码泄露,本系统对软件制品而非源代码进行产权认证。开发方提供制品后,测评机构接受委托对软件进行测试,产出测试 告为软件资产的价值背书并为软件验收提供依据。最后,需求方依据测试 告和验收标准对软件进行验收。验收通过后公布验收结果,完成交付过程。交易流程图如图9-2所示。
图9-1 系统用例图
图9-2 交易工作流图
链上文档存储。1)用户发起新建文档请求时,系统将Java对象形式的文档对象转换为key-value形式并将其存储在区块链上。2)用户发起更新文档请求时,系统为该文档创建一个新版本,记录更新后的文档数据。3)用户发起删除文档请求时,系统为该文档创建一个内容为空的新版本,并标记为已删除。4)用户查询单个文档内容时,系统返回文档最新版本的内容,如果文档的最新版本标记为已删除则返回空。5)用户检索文档列表时,系统返回满足检索条件的所有文档,其中不包含标记为已删除的文档。6)用户查询文档变更记录时,系统返回该文档的所有历史版本以及变更时间。7)系统需要存储的实体包括订单、软件、测试 告、验收标准及验收结果。
链外文件存储。用户上传文件时,将文件存储在IPFS私有 络中,为文件生成基于内容的唯一哈希值,区块链中只存储文件的哈希。
自动验收。用户调用自动验收接口时,系统通过对比软件的验收标准和测试 告来验证软件的各项指标是否通过验收,自动生成验收结果文档并写入区块链。用户查询验收结果时,系统返回验收结果文档,包含各项验收指标是否达标的信息。
结构设计与实现
软件资产交易子系统整体采用P2P的 络拓扑结构。区块链 络由参与维护 络的对等节点组成。每一个对等节点都包含了完整的系统组件,各节点之间通过区块链底层设施进行数据交换和同步,依照共识机制完成数据更新。如图9-3所示,每一个对等节点由展示层,业务层和数据层组成。展示层负责图形界面的展示和交互;业务层负责处理复杂的业务逻辑,并调用区块链客户端bc-client对区块链上的数据进行读写;数据层包含IPFS节点和Fabric 节点,分别用来管理链外数据和链上数据。其中Fabric节点由Fabric CA,chaincode和数据账本组成,Fabric CA负责身份认证和权限管理;chaincode是运行在区块链上的代码,用来处理数据和更新账本和编写智能合约;数据账本则保存了所有的区块数据和交易数据,Fabric 还提供了一个称为“世界状态”的数据库,用来保存所有数据的最新状态,以提高数据查询效率。
图9-3 系统架构图
图9-4展示了软件资产交易子系统的逻辑设计方案。依据系统的功能需求,从逻辑上将系统提供的服务分为四个部分。链外文件存储模块负责存储文件和生成摘要,链上文档存储模块完成区块链上存储的文档的增删改查功能,自动验收模块调用智能合约进行自动验收,用户认证模块处理用户的身份认证。
参考分层的架构风格,将系统分为应用层、合约层和数据层。应用层负责上层业务的实现,并为软件资产管理后台系统提供功能全面、简单易用的接口。合约层包括与区块链交互所需的智能合约。数据层用于存储各类持久化数据,根据不同的需要,分为基于Fabric的区块链存储、基于IPFS 的链外文件存储和基于LDAP 的用户数据存储三个部分。
图9-4 逻辑设计图
在软件资产交易子系统的众多组件中,应用层的区块链客户端和合约层的chaincode 有较为复杂的开发工作。在软件资产管理系统中,业务层通过区块链客户端访问区块链,可以说,区块链客户端承担了业务层和Fabric之间的桥梁作用,也是区块链模块的重要组成部分。chaincode 是运行在区块链上的代码,Fabric 为chaincode提供了一套丰富的接口,可以编写脚本对账本数据进行读写操作和编写智能合约。本节从开发视角介绍这两部分的架构设计。本项目中,业务层选用SpringBoot框架实现,因此提供给业务层使用的区块链客户端也是基于Spring框架,以jar 包形式提供。Hyperledger Fabric中的chaincode在本项目中使用Go 语言编写。
图9-5展示了软件资产交易子系统的物理部署方式。 其中,区块链客户端构建放在客户端节点上,客户端节点需提供Linux操作系统和JDK1.8环境。Fabric相关组件部署在Fabric节点上,包括chaincode构件、Fabric peer 构件和Fabric CA构件。用户数据节点部署了LDAP 构件。各构件运行在Docker容器中,所以在服务器资源足够的情况下,也可以将所有构件部署在同一节点上。
图9-5 系统部署图
测试与分析
表9-2展示了软件资产交易子系统的测试环境。
表9-2 测试环境说明
图9-6 Caliper性能测试汇总 告
图9-7 性能测试结果
总结与展望
提供易用的的区块链 络管理功能。现阶段如果要增加或移出 络中的节点,需要在服务器上运行shell 脚本完成,过程繁琐且容易出现错误。接下来可以提供易用性更高的图形界面,方便运维人员进行 络管理。
系统记录的软件资产所有权证明只是参与该区块链 络的节点认可的所有权凭证。如何使该凭证具备法律效力,能够在更广泛的范围中发挥作用是接下来要解决的重要问题。可以考虑在系统中引入监管部门或相关法律机构。
考虑利用智能合约完成软件资产交易过程。一个软件系统可能是由多个软件提供商合作完成的,软件资产的产权归属于多个机构。基于智能合约实现软件资产交易,按照预定的分配规则完成资产分配,可以减少交易中的纠纷,削减人力成本,大大提高软件资产交易效率。
系统记录了大量可靠的的软件资产数据,可以从这些数据中挖掘更多价值。例如,利用软件版本变更记录和对应的测试 告,分析软件迭代过程中的质量变化和功能演变,基于软件的测试数据和验收数据,评估软件开发方和软件测评机构的专业能力等。
致谢
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!