APP下载

基于以太坊的高校国家助学金系统

2020-12-04禹,

关键词:以太助学金助学

闫 禹, 于 涧

(1.沈阳师范大学 软件学院, 沈阳 110034; 2.沈阳师范大学 数学与系统科学学院, 沈阳 110034)

国家助学金政策是实施科教兴国和人才强国战略的重要举措,但长期以来我国国家助学金在制度设定与实际操作中存在着一些矛盾,使得效率与公平难以权衡[1]。随着近年来我国国家助学金的资助规模和受助覆盖范围不断扩大,助学金的评定和发放中的问题也逐渐呈现出来,如评定标准模糊,助学金审评过程不规范等问题;同时由于信用体系和监督机制的不健全,评审中的顺水人情和舞弊行为时有发生,造成了资源分配的不平等[2-3]。区块链是一种去中心化的分布式数据库技术,具有匿名性、可溯源、不可篡改和数据加密等特点。区块链应用于助学系统可以带来以下几方面的改进:1)将区块链技术应用于助学系统,可以规范参与者的行为,助学有关的工作记录以及受助信息上链保存且不可篡改,可有效约束当事者的不当行为。2)区块链有助于精准地识别助学信息。在助学过程中通过加密和共识算法来保证交易的安全性,通过可溯源的技术特征解决资金被恶意挪用和助学信息被篡改等问题[4-6]。

目前针对助学体系改革的研究大多是在现有体制框架下寻求解决问题的方法,而借助先进技术手段去解决助学金发放体制问题的研究还很鲜见。区块链技术是一种革命性的技术,为我们提供了在新的去中心化框架内寻求解决问题的方法,本文尝试基于区块链的以太坊平台实现一个国家助学金发放系统。

1 基于以太坊的国家助学金系统总体设计

1.1 系统架构

本系统分为区块链层和应用交互层[7-9]。上层的交互层功能模块用来实现助学系统的核心业务逻辑,并将用户的操作转换成区块链中的交易,并上链保存。通过调用区块链接口,处理用户发出的查询请求,并将取得的数据返还用户。下层的存储层由各个节点组成以太坊联盟链,并通过维护共识机制为系统的交易验证和存储提供支持。用户在访问系统时和访问普通浏览器网站类似,而底层区块链数据存储对用户透明。运行于各个网络节点上的以太坊虚拟机作为去中心化应用平台的核心,而智能合约运行在以太坊虚拟机(Ethereum Virtual Machine,EVM)上。同时,为了规避一些无关紧要尤其是恶意操作的干扰,以太坊需要用户支付一定的交易费用。

助学系统的各类人员通过联网终端进入系统,并设置不同人员的权限,系统准确完整地记录每个环节的工作信息方便日后的查看监督。区块链需要存储系统中每个人员的基本资料、贫困证明、助学金实施和资金的发放等信息。同时,每个工作人员在任何时点进行的任何操作也都会被广播到系统中的其他节点,在进行验证的同时也实现了工作流程的公开透明。助学工作中,一般遵循先由贫困生提出申请,之后班级辅导员组织线下评议并将线下环节的相关记录和凭证上链保存的工作流程,同时,贫困生可以查询受助信息,上级主管部门也可以查询基层高校的助学金评审发放情况。系统业务用例如图1所示。

图1 系统业务用例图

1.2 系统的智能合约

1)结构体

智能合约中的结构体(Struct)类似于传统数据库表那样具有数据存储功能。本系统智能合约中的结构体用以记录助学工作中的相关信息,主要包括系统人员信息结构体和助学工作结构体等。其中,系统人员信息结构体包括助学系统工作人员结构体、贫困生结构体和管理员结构体;助学工作结构体应保存每次和助学有关的相关工作信息记录以及记录添加时间等信息;此外还有用于记录助学工作人员和所负责的贫困生之间映射关系的结构体。其中贫困生信息结构体如表1所示。

表1 贫困生结构体

2)智能合约

以太坊用户可以自己定义智能合约,进而实现平台的业务逻辑,助学系统通过给合约账户发送交易来改变以太坊中的状态。智能合约在本地编译后再部署到区块链上,因此通过交易触发后的智能合约就会在每个节点的EVM虚拟机中执行。这相当于把程序部署到接入网络的每个以太坊客户端节点上,随时通过交易来触发合约的执行。合约使用Solidity语言进行编程。web3.js是一个通过RPC调用和本地以太坊节点进行通信的Javascript库,它可以与任何暴露了RPC接口的以太坊节点连接,主要包括用于合约交互的 API,并负责和以太坊的连接与交互[10-13]。系统的交互层通过Web3.js调用下层的智能合约,实现数据交换。

平台内的智能合约主要包括:设置管理员及权限的合约Admin、设置工作人员信息和权限的合约Staff、提供登录的合约Login、设置贫困生信息合约PoorStu(基层工作人员设置)、助学工作记录合约WorkRecord、助学资金发放合约Fund以及用于系统暂停的合约Suspend等。系统的功能模块通过相应的合约来实现模块功能,合约之间又互相关联,在合约中被记录到区块链内的所有操作都可以体现出来。系统智能合约关系如图2所示。

图2 系统智能合约关系图

2 高校助学系统的实施

系统的开发环境搭建在一台高配置的主机上,使用虚拟化软件创建的若干个虚拟机组建以太坊联盟链网络[14-15]。以太坊的虚拟机负责收发数据并解析,虚拟机节点包含network层和protocol层。搭建区块链环境后使用Solidity语言完成合约的编写。Geth作为以太坊客户端用来创建账号、部署智能合约以及挖矿。DApp应用的开发选用Truffle框架,系统接口模块的功能选用Node.js语言进行开发,并通过Web3.js与底层的以太坊网络进行交互并向前端返回数据。助学系统分为4个模块,系统功能模块如图3所示。

图3 系统功能模块图

2.1 账号管理模块

主要用来记录系统用户的以太坊地址以及个人信息,同时需要将每个账户关联到个人信息以确保真实性,系统的权限划分和应用操作都是基于账户信息。系统人员首先通过系统提供的接口申请以太坊账号,以太坊账号为一对公私钥。人员在申请获得账户后,还需要系统管理员将用户的信息和相应的以太坊地址记录到区块链上。系统管理员最初由合约创建者添加,之后由管理员添加基层助学工作人员和上级管理者用户。用户的以太坊地址用于识别用户的身份,系统会根据不同的用户授予不同的权限。同时,系统管理员和助学工作人员自身也需要在区块链中记录个人基本信息,通过以太坊地址关联到系统人员。工作人员在系统中的任何时点的任何操作记录都可以通过地址准确查询到,并校验操作的合法性,便于日后监督和追责。

私钥是唯一确认用户拥有该账户的凭证。管理员将账号与对应人员基本信息保存在用于管理人员账号的智能合约中(Admin和Personnel),同时进行人员的权限控制,为后续操作提供访问控制。其中,合约Personnel用于设置助学工作人员和贫困生的账号信息,合约用到的主要函数如表2所示,其中setStaff为合约的关键函数,在确认管理员身份权限后,设置工作人员信息。

表2 合约Personnel 中包含的主要函数

2.2 助学工作模块

从助学申请提交到民主评议等全部助学工作的过程信息都应该在区块记录中体现出来,同时工作人员在每次实施和助学工作有关的措施后,及时地在系统中添加对应信息,这些记录一旦上链无法篡改。实现助学工作的关键合约WorkRecord包括记录与查询助学申请信息、评审工作信息和为贫困生指定工作人员等主要函数。图4为合约中记录评审信息函数ReviewInfo的实现流程图。

图4 助学工作合约中reviewInfo函数流程图

2.3 资金发放模块

贫困生进入系统登录界面,可以查询到发放的助学资金余额、发放明细等信息,并显示操作人员姓名以及发放时间,学生只能看到个人账户,也可以随时提取账户资金用于维持生活。其中,助学发放合约Fund是基于标准代币接口ERC20改进后的合约,其核心函数transfer实现转账功能,函数的入口参数包括发放人员地址、受助学生地址和转移的代币数量。

2.4 系统管理模块

主要用于实现系统暂停功能。在一个去中心化的系统中,为防止恶意和非法操作,每次系统合约的暂停都需要事先投票进行。只有获得一定比例的管理员投票支持,系统才可以按照预定逻辑实施暂停操作,系统管理员可以预先设定。

我国各地区经济发展不平衡,国家助学金在制度设定与实际操作中存在着一些矛盾,也给具体工作带来困境。区块链技术具有去中心化、数据可溯源等特点,可以精准识别助学信息并遏制助学工作中的不当行为的发生,逐渐改变自上而下的分配模式,重塑以效率为中心的国家助学金资助取向。

猜你喜欢

以太助学金助学
以太万物理论概述
车易链:做汽车业的“以太坊”
关爱·帮扶·助学
A Study on the Contract Research Organization
为助学一诺千金
郭万里“三帮”助学子
以太互联 高效便捷 经济、可靠、易用的小型可编程控制器
The Value of a University Education
扎实帮困助学造福贫困少年