由杭州亦笔科技有限公司开发的针对基于 FISCO BCOS 的区块链电子存证平台案例。
随着人们的生活和工作越来越互联网化,产生了大量的线上交互业务的电子数据,但电子数据具有易变性、易改无痕性等特性。作为平台出现问题后最基本的维权资料,这些易变易改的电子数据往往都存管于平台自身的服务器中,若没有第三方或者权威机构的介入,如何证明这些数据有没有被篡改过?平台的在线合同基本由系统生成,其是否具有法律效力,是否能在诉讼中被法院采纳?故交易双方与平台方都需要保存这些电子数据,并使用技术确保这些电子数据的客观性、完整性与真实性,而不是被篡改、被删改、被伪造的,才能够在纠纷产生时作为可以置信的电子数据证据呈上法庭。并且随着互联网应用的飞速发展,大量这些业务平台需要能够将电子数据实时存储,并能够同步到第三方中立的电子证据存管机构,然后政府、司法机构将这些第三方电子证据存管机构使用标准与规范监管起来,并能够随时根据需要,查询与提取相应的电子证据,另外还可能需要公证处与司法鉴定,来进一步确认电子证据的真实性与完整性。这些就要求建立一个电子证据管理平台系统,能够包括所有这些管理功能,并形式一整套标准与规范。
全数据生命周期电子数据存管与证明解决方案理念的提出,从电子数据的特征、到人民法院审理案件对证据的要求、再到电子数据的存管,提供了一整套完整的解决方案。电子数据易变、易改无痕、不易固化呈现和归档的特征,与人民法院审理案件对证据的要求:相对固定的、没有被篡改的、能在法庭上直观呈现并能卷宗归档是相悖的。而该解决方案从数据的生成和创建、传输和存储、数据取得三个方面解决:数据生成和创建时就同步实施“实时完整性备份”,在第一时间(最短的时间)解决了证据固化和保存;最高级别加密传输保护、公安部完整性鉴别、分布式云存储隔离和安全防护保障,保证数据实时同步备份过程及存储过程中没有被篡改,从而保证证据的真实性;引入司法机构参与存证的监察管理,并以电子证书的形式对此电子数据内容进行直观呈现和形式固定,解决证据取得、法庭质证呈现及归档问题。
采用区块链可信连接等方式,引入金融机构、存证机构、司法机构组成数据保全联盟链,实现客户每一次线上操作,联盟链全程广播,各节点实时记录,并利用区块链技术的实时监控广播情况、上链情况、留痕情况、证据保全状态、防抵赖等,建立新型的电子数据证据保存系统。
- 系统部署后,通过管理员账号登录,登录成功后系统会判断是否已部署好电子存证合约,没部署则先调用WeBASE开放接口进行应用注册;
- 应用注册好,调用WeBASE开放接口新增私钥用户;
- 私钥用户新增完成后,调用WeBASE Front 模块中的合约部署接口;
- 合约部署完成后,调用WeBASE开放接口进行合约原文保存;
- 合约原文保存后,调用WeBASE开放接口进行合约地址保存。
- 电子数据存证后,会通过哈希算法对存证数据(原文or附件)进行摘要计算,计算完后针对哈希进行签名;
- 调用WeBASE Front的交易处理接口,进行存证合约的调用,实现存证数据哈希上链;
- 其他机构进行签名并调用WeBASE Front的交易处理接口,实现存证数据哈希签名上链。
- 针对要进行数据核验的数据,首先获取到其上链地址;
- 根据合约地址调用WeBASE Front已编码查询交易发送接口,查询出链上存储的上链信息;
- 比对存证系统中的数据和链上获取的到数据是否一致。
搭建单群组FISCO BCOS联盟链,可以参考下述地址进行创建
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/installation.html#fisco-bcos
一键部署在同机快速搭建WeBASE管理台环境,方便用户快速体验WeBASE管理平台,可以参考下述地址进行创建
https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE/install.html
- WeBASE管理台部署好后,登录进入管理平台,在应用管理菜单中,点击新建应用,选择自定义应用;
- 输入区块链电子存证平台应用相关信息后,点击确定按钮,完成应用添加。
注册完成后,在应用管理菜单下的,应用列表中可以看到创建的区块链电子存证平台应用,点击注册信息,可以获取应用注册信息,如下图的appKey和appSecret。
区块链电子存证平台是基于SpringBoot 2.1.0.RELEASE实现(前端页面通过后端直接加载)
支持发布包部署和源码部署
序号 | 软件 |
---|---|
1 | MySQL5.6或以上版本 |
2 | Java8或以上版本 |
- 获取发布包,并解压
wget -c https://github.com/YibiOpen/evidence-chain-demo/releases/download/1.0.0/evidnece-chain-demo-1.0.0.tar.gz
tar -xvf evidnece-chain-demo-1.0.0.tar.gz
cd evidnece-chain-demo/
- 初始化数据库,执行sql脚本
在mysql中执行sql脚本,脚本文件在源代码资源db目录下,其中evi_ddl.sql
为建表语句、evi_dml.sql
为初始化语句
以mysql用户root,密码为123456,创建数据库为evi_chain
为例
# 创建DB
mysql -uroot -p123456 -e "create database evi_chain;"
# 执行脚本
cd conf/db/
# 建表
mysql -uroot -p123456 -D evi_chain -e "source ./evi_ddl.sql"
# 插入默认数据
mysql -uroot -p123456 -D evi_chain -e "source ./evi_dml.sql"
- 修改conf目录下application.properties配置文件
# 可以根据实际情况修改应用端口
server.port=9081
### 修改数据库配置
# mysql用户
spring.datasource.username=dbUsername
# mysql密码
spring.datasource.password=dbPassword
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/evi_chain?autoCommit=false&useUnicode=true&characterEncoding=utf-8\
&serverTimezone=Asia/Shanghai
### 修改webase-front服务IP、端口与接口
# webase前置服务1.2. 合约部署接口(结合WeBASE-Sign)
webase-front.contract.deploy.url=http://127.0.0.1:5002/WeBASE-Front/contract/deployWithSign
# webase前置服务5.1. 交易处理接口(结合WeBASE-Sign)
webase-front.trans.handle.url=http://127.0.0.1:5002/WeBASE-Front/trans/handleWithSign
# webase前置服务5.4. 已编码查询交易发送
webase-front.trans.query.url=http://127.0.0.1:5002/WeBASE-Front/trans/query-transaction
# 修改在webase管理台中应用管理生成的配置
# webase-node-manager后台IP与端口
webase.node.mgr.url=http://127.0.0.1:5001
# webase管控台新建应用生成的url地址
webase.node.mgr.appKey=zhf3mNPA
# webase管控台新建应用生成的url地址
webase.node.mgr.appSecret=bn5BRGsNczszJmFT3urrUg6aZmSVf2KS
# 加密传输
webase.node.mgr.transferEncrypt=true
# 默认群组
webase.node.mgr.groupId=1
# webase应用外链地址,即本项目的前端访问URL,本项目则是http://ip:port/evidence/index.html
webase.node.mgr.linkUrl=http://127.0.0.2:9081/evidence/index.html
# 存证附件存储目录
store.dir=/data/evidence-chain-demo-master/evi_store
- 启动
回到上一级目录,执行start.sh脚本
cd ../
bash start.sh
- 查看服务日志
tail -f logs/log/evi_chain.log
- 执行start.sh脚本
- 区块链电子存证平台部署完成后,浏览器地址栏输入:http://ip:port/evidence/index.html,初始用户名和密码分别为:eviAdmin/ABC123
- 获取源代码
git clone https://github.com/YibiOpen/evidence-chain-demo.git
- 执行sql脚本
在mysql中执行sql脚本,脚本文件在源代码资源db目录下,其中evi_ddl.sql为建表语句、evi_dml.sql为初始化语句
在mysql中执行sql脚本,脚本文件在源代码资源db目录下,其中evi_ddl.sql
为建表语句、evi_dml.sql
为初始化语句
以mysql用户root,密码为123456,创建数据库为evi_chain
为例
# 创建DB
mysql -uroot -p123456 -e "create database evi_chain;"
# 执行脚本
cd conf/db/
# 建表
mysql -uroot -p123456 -D evi_chain -e "source ./evi_ddl.sql"
# 插入默认数据
mysql -uroot -p123456 -D evi_chain -e "source ./evi_dml.sql"
- 修改conf目录下application.properties配置文件
# 可以根据实际情况修改应用端口
server.port=9081
### 修改数据库配置
# mysql用户
spring.datasource.username=dbUsername
# mysql密码
spring.datasource.password=dbPassword
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/evi_chain?autoCommit=false&useUnicode=true&characterEncoding=utf-8\
&serverTimezone=Asia/Shanghai
### 修改webase-front服务IP、端口与接口
# webase前置服务1.2. 合约部署接口(结合WeBASE-Sign)
webase-front.contract.deploy.url=http://127.0.0.1:5002/WeBASE-Front/contract/deployWithSign
# webase前置服务5.1. 交易处理接口(结合WeBASE-Sign)
webase-front.trans.handle.url=http://127.0.0.1:5002/WeBASE-Front/trans/handleWithSign
# webase前置服务5.4. 已编码查询交易发送
webase-front.trans.query.url=http://127.0.0.1:5002/WeBASE-Front/trans/query-transaction
# 修改在webase管理台中应用管理生成的配置
# webase-node-manager后台IP与端口
webase.node.mgr.url=http://127.0.0.1:5001
# webase管控台新建应用生成的url地址
webase.node.mgr.appKey=zhf3mNPA
# webase管控台新建应用生成的url地址
webase.node.mgr.appSecret=bn5BRGsNczszJmFT3urrUg6aZmSVf2KS
# 加密传输
webase.node.mgr.transferEncrypt=true
# 默认群组
webase.node.mgr.groupId=1
# webase应用外链地址,即本项目的前端访问URL,本项目则是http://ip:port/evidence/index.html
webase.node.mgr.linkUrl=http://127.0.0.2:9081/evidence/index.html
# 存证附件存储目录
store.dir=/data/evidence-chain-demo-master/evi_store
- 在
pom.xml
所在目录,打包jar
# maven 编译
mvn clean package -Dmaven.test.skip=true
打包完成后会得到target
目录
- 运行程序
cd target/
nohup java -jar evidence-chain-demo-1.0.0-SNAPSHOT.jar > nohup.out 2>&1 &
- 查看日志
tail -f logs/log/evi_chain.log
区块链电子存证平台部署完成后,浏览器地址栏输入:http://ip:port/evidence/index.html
初始用户名和密码分别为:eviAdmin/ABC123
如下图所示,首页会显示已存证数量和已上链数量,点击登录按钮,跳转到登录页面。
登录页面,输入账户名和密码。
首次登录,未部署合约时,需要先进行存证合约部署。
部署完成后,可以在WeBASE中看到对应的合约文件内容
部署完成后,可以在WeBASE中看到对应的合约列表
产品管理页面用于展示已经维护好的存证产品,且可以进行新建和修改,一个产品代表了一个实际业务。
产品管理页面用于展示已经维护好的存证节点,且可以进行新建和修改,一个节点代表了一个实际业务下的某个环节或步骤。
要素管理页面用于展示已经维护好的存证要素,且可以进行新建和修改,要素即实际业务下某个环节或步骤在操作过程中会生成的电子数据细项。
如下图所示,用于模拟电子数据存证,选择产品、保全点后会动态展示其存证要素,输入存证要素值,可以选择上传存证附件,最后点击提交按钮,完成存证模拟,存证存证后页面跳转到存证管理。
WeBASE中可以看到调用合约后的交易回执信息
要素管理页面用于展示已经存证的电子数据,且可以进行查看和核验。
存证数据查看会展示出具体的存证要素内容和所有的存证附件。
存证数据核验会进行链上数据获取并核对存证数据库中的数据内容。
WeBASE中对应的交易信息
如下图展示了个人中心用户信息及存证合约信息
针对区块链电子合同平台业务运行过程中所调用WeBASE组件的接口列举如下:
- 应用注册
https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Node-Manager/appintegration.html#id7
- 新增私钥用户
https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Node-Manager/appintegration.html#id53
- 合约部署接口(结合WeBASE-Sign)
https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Front/interface.html#webase-sign
- 合约原文保存接口
https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Node-Manager/appintegration.html#id80
- 合约地址保存接口
https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Node-Manager/appintegration.html#id84
- 交易处理接口(结合WeBASE-Sign)
https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Front/interface.html#id375
- 已编码查询交易发送
https://webasedoc.readthedocs.io/zh_CN/latest/docs/WeBASE-Front/interface.html#id393
系统中目前只是简单的实现了数据存证的上下链,针对多方签名暂时还未进行开发。