前
本文作者保留所有权利
背景
第十二届服创大赛:【A23】基于区块链的学位学历认证管理系统 东部赛区 企业命题组 A类 三等奖
正
算是水了一个涉及比较前沿领域的比赛吧,这篇文章也是缝缝补补了不少东西,但之前由于参赛材料并未提交,获奖结果也没出来,所以也一直压在箱子底下。
简要谈谈设计的思路,尤其是系统架构以及底层区块链智能合约的设计。
智能合约设计
整个数据上链的体系分为两种智能合约。
第一种智能合约称为:数据合约。其主要思想约等于数据库设计的概念。需要有存储以及鉴权这两个最重要的部分。全局只有一个数据合约实例。合约内需要存放足够验证证书是否合法有效的数据(下称:数据表),同时也要维护一个授权调用地址的列表(下称:鉴权表)。任何存入操作必须根据授权调用地址列表进行鉴权。
第二种智能合约称之为操作合约。主要调用数据合约,用于写入数据。操作合约除了进行操作之外,还要向数据合约提供授权信息(下称:授权表)。操作合约为了最大程度的减少非法写入的调用,写入操作仅合约创建人才可以调用。
整个体系运作分为四个基本阶段。下文将一一阐释。
第一阶段,开发部署。第一阶段,数据合约以及操作合约均未被部署到区块链上,相应数据均未初始化。需要部署一个数据合约实例,以及若干个初始操作合约。其思想比较类似以太坊的创世区块。初始数据的写入,需要设计一个仅能调用一次的函数,用于写入操作合约的调用者地址(维护鉴权表)。
第二阶段,新操作合约的授权。操作合约的编写是由机构自行根据模板进行修改并部署,以便机构自行扩展,但底层的证书鉴权信息存储不变,依旧在数据合约内。获得授权信息(授权表)是一份操作合约能够在数据合约内注册(第三阶段)的前提,也是整个环节比较重要的部分。思想比较类似选举,即需要其他操作合约主动调用新操作合约的授权信息写入函数,相当于认可新操作合约。新操作合约需要记录下这些授权信息(本质上是交易信息)。
第三阶段,新操作合约的注册。需要由新操作合约调用数据合约的注册函数,并附上授权信息。数据合约需要检查授权信息是否合法(该处有一点疑问,是否存在伪造授权信息的情况,能否遍历相关的交易记录而不是简单的查询数据存储?)。如果授权表占比达到整个鉴权表的一定比值,则注册成功,将新操作合约地址写入鉴权表。
第四阶段,操作合约的写入。非常简单,数据合约根据鉴权表内容判断是否有权限写入。
系统架构
其实,想着的是分布式思想和各种微服务治理的,但是想法很美好,现实很残酷,开发时间仓促。
思考
每一个授权节点内的横向扩展是很容易的。节点内很容易用分布式或微服务治理等方式进行横向扩容。但节点之间的扩展需要从雪梨链中间件入手。