本文基于开源联盟链FISCO BCOS开发,可零门槛搭建,要求运行环境为Ubuntu 20.04/22.04,硬件配置最低2核4G即可运行。执行以下命令一键安装所有依赖:
``` sudo apt update && sudo apt install -y curl openssl wget docker.io docker-compose python3 -y ```
下载联盟链一键部署脚本:
``` wget https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.9.1/build_chain.sh ```
执行脚本生成4节点本地联盟链,适合开发测试使用:
``` chmod +x build_chain.sh && bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 ```
启动所有节点,执行以下命令:
``` cd nodes/127.0.0.1 && bash start_all.sh ```
验证节点启动成功,执行以下命令,如果输出4个fisco-bcos进程则说明启动成功:
``` ps aux | grep fisco-bcos | grep -v grep ```
综合档案管理仅需将档案摘要哈希上链,原文存储在业务数据库,既节省链上存储空间,又保证不可篡改。以下是完整可直接复制的合约代码,适配FISCO BCOS版本:

```
pragma solidity ^0.6.10;
contract CompositeArchiveManagement {
struct Archive {
string archiveHash;
uint256 createTime;
address owner;
}
mapping(string => Archive) private archiveMap;
event ArchiveUploaded(string indexed archiveId, address indexed owner, uint256 timestamp);
// 档案上链,仅存储哈希
function uploadArchive(string memory archiveId, string memory archiveHash) public {
require(archiveMap[archiveId].createTime == 0, "目标档案已存在");
archiveMap[archiveId] = Archive(archiveHash, block.timestamp, msg.sender);
emit ArchiveUploaded(archiveId, msg.sender, block.timestamp);
}
// 查询链上档案信息
function getArchiveInfo(string memory archiveId) public view
returns(string memory, uint256, address) {
Archive memory ar = archiveMap[archiveId];
require(ar.createTime != 0, "目标档案不存在");
return (ar.archiveHash, ar.createTime, ar.owner);
}
// 档案验真,验证哈希是否匹配
function verifyArchive(string memory archiveId, string memory inputHash) public view
returns(bool) {
Archive memory ar = archiveMap[archiveId];
require(ar.createTime != 0, "目标档案不存在");
return keccak256(abi.encodePacked(ar.archiveHash)) == keccak256(abi.encodePacked(inputHash));
}
}
```
部署合约可使用FISCO官方提供的WeBase工具,执行以下命令一键部署:
``` cd ~ && wget https://github.com/WeBankBlockchain/WeBase/releases/download/v1.5.1/build.sh bash build.sh auto ```
部署完成后访问http://你的服务器IP:5000,进入合约管理页面,上传上述代码编译部署,记录生成的合约地址和ABI内容,供后续业务对接使用。
我们使用Node.js搭建极简业务后端,对接区块链和MySQL存储档案原文,执行以下命令初始化项目:
``` mkdir ~/archive-system && cd ~/archive-system npm init -y && npm install web3 express mysql2 dotenv crypto-js ```
创建.env配置文件,填入以下内容,替换成你自己的配置:
```
WEB3_RPC=http://127.0.0.1:8545
CONTRACT_ADDR=0x刚才记录的合约地址
CONTRACT_ABI=[{"这里粘贴刚才复制的完整ABI内容"}]
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=你的数据库密码
DB_NAME=archive_db
PORT=3000
```
创建数据库和表,执行以下SQL:
``` CREATE DATABASE IF NOT EXISTS archive_db; USE archive_db; CREATE TABLE business_archive ( id INT PRIMARY KEY AUTO_INCREMENT, archive_id VARCHAR(64) NOT NULL UNIQUE, archive_name VARCHAR(255) NOT NULL, archive_content MEDIUMTEXT NOT NULL, owner VARCHAR(64) NOT NULL, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX(archive_id) ); ```
核心逻辑:用户上传档案后,业务系统使用SHA256算法生成档案内容哈希,将档案原文和元数据存入MySQL,再调用智能合约将档案ID和哈希写入区块链,验真时重新计算原文哈希,和链上存储的哈希对比即可判断是否被篡改。
node app.js,访问http://你的服务器IP:3000即可使用netstat -tulpn | grep 30300,杀掉占用端口的进程即可至此,你已经完成了基于区块链的综合档案管理系统落地,核心功能满足档案防篡改、可验真的需求,可直接基于该框架扩展权限管理、档案借阅等更多业务功能。