背景描述
在供应链金融这个万亿级市场中,区块链正在快速商业化落地,助力产业革新。基于区块链的供应链金融业务的理念是:以源自企业的应收账款为底层资产,通过区块链技术实现债券凭证的转让拆分。其中,在原始资产上链时,通过对应收账款进行审核校验,确认贸易关系和身份真实有效,和保证上链资产的真实可信。再者,债权凭证可基于供应链进行层层拆分与流转,都可完整追溯到最底层资产,以实现核心企业和金融机构对供应商的“信用穿透”。
某公司规划开发一个区块链供应链金融平台,包括核心企业、供应商、银行等角色,通过智能合约代码逐步构建区块链供应链金融平台的基本功能,实现银行向核心企业提供授信并发行数字凭证,企业与企业之间转让数字凭证。此外需要完成区块链供应链金融平台的前后端,实现基本的业务逻辑。
模块一:区块链产品方案设计及系统运维
任务1-1:区块链产品需求分析与方案设计
本环节需要依据项目背景完成需求分析与方案设计,具体要求如下:
1.依据给定供应链金融管理系统的业务架构图,对考题进行业务分析,尽可能多的去考虑一个业务系统所需要的模块,使用Visio或思维导图工具展现本系统的基本设计概念和处理流程,要求分为区块链供应链业务平台和支撑平台两个部分;
2.根据供应链系统设计,在系统中分别包括用户和凭证票据管理功能,在融资凭证上链过程中需要包括银行、核心企业、供应商公司的基本管理功能。根据描述,设计区块链系统的总体功能概览图。
3.整合上述设计内容,完善“供应链金融管理系统概要设计说明书.doc”,具体工作内容如下:
- 将设计内容根据说明书中模块需求进行补充,并完善概要设计说明书中的“需求概要”
- 完善说明书中接口说明部分内容。
任务1-2:区块链系统部署与运维
围绕供应链金融区块链平台部署与运维需求,进行项目相关系统、节点以及管理工具的部署工作。通过通过监控工具完成对网络、节点服务的监控。最终利用业务需求规范,完成系统日志、网络参数、节点服务等系统结构的维护。
1. 根据参数与端口设置要求,部署区块链系统并验证;
2. 根据参数与端口设置要求,部署区块链网络管理平台并验证;
3. 基于区块链系统相关管理平台,按照任务指南实施系统运维工作并验证。

4. 基于区块链系统相关监管工具,按照任务指南对区块链系统进行监管。
子任务1-2-1: 搭建区块链系统并验证
基于给定服务器环境以及软件(地址“/root/tools”),使用Docker以默认配置安装单机4节点的区块链系统,并完成控制台工具的部署:
- 完成系统搭建配置与启动。
- 使用基于Docker命令查看区块链系统状态。
- 检查区块链系统节点node0连接状态输出。
- 配置控制台,管理相关证书并启动。
子任务1-2-2:区块链管理平台部署与验证
基于给定服务器环境以及软件(地址“/root/tools”),按要求部署区块链管理平台,具体工作如下:
- 配置Mysql数据库
- 配置管理平台连接区块链系统
- 使用命令启动管理平台服务
- 验证管理平台启动情况
子任务1-2-3:区块链系统节点运维
基于已完成的区块链系统与管理平台搭建工作,开展相关节点运维工作:
- 生成新节点(node4),启动并检查(1分)
- 修改新节点配置,并查看节点的nodeid(1分)
- 将新节点作为观察节点加入group1当中,并检查是否加入成功(1分)
子任务1-2-4:区块链系统管理平台运维
基于已部署的区块链系统管理平台,进行系统相关运维工作:
- 基于管理平台功能页面,添加新主机
- 基于管理平台功能页面,修改新节点(node4)节点状态,并监控。
任务1-3:区块链系统测试
设计对区块链系统的测试流程;结合实际业务需求,调用部署的智能合约中进行系统测试、性能测试等;根据业务需求,分析并且修复给定智能合约中的安全漏洞。利用模拟业务和测试工具来完成对区块链系统服务数据的测试。
1.基于WeBASE的部署脚本完成WeBASE环境搭建以及搭建结果验证,最后将执行结果截图保存。
- 实现WeBASE平台部署。
- 实现webase.sgin功能启动情况验证。
- webase-node-mgr进程启动情况验证和浏览器验证。
2.智能合约安全漏洞测试。
有如下智能合约:
pragma solidity ^0.7.6;
contract TimeLock {
mapping(address => uint) public balances;
mapping(address => uint) public lockTime;
function deposit() external payable {
balances[msg.sender] += msg.value;
lockTime[msg.sender] = block.timestamp + 1 weeks;
}
function increaseLockTime(uint _secondsToIncrease) public {
lockTime[msg.sender] += _secondsToIncrease;
}
function withdraw() public {
require(balances[msg.sender] > 0, "Insufficient funds");
require(block.timestamp > lockTime[msg.sender], "Lock time not expired");
uint amount = balances[msg.sender];
balances[msg.sender] = 0;
(bool sent, ) = msg.sender.call{value: amount}("");
require(sent, "Failed to send Ether");
}
}
contract Attack {
TimeLock timeLock;
constructor(TimeLock _timeLock) {
timeLock = TimeLock(_timeLock);
}
fallback() external payable {}
function attack() public payable {
timeLock.deposit{value: msg.value}();
timeLock.increaseLockTime(
type(uint).max + 1 - timeLock.lockTime(address(this))
);
timeLock.withdraw();
}
}
如上代码主要实现功能为规定了转账冻结时间,在冻结时间内用户不能提取存款的金额。
- 分析智能合约中存在问题,并说明危害。
- 根据truffle工具中的代码文件,编写测试用例,复现智能合约中存在的漏洞。
创建新的智能合约,修复其中问题,说明修复内容并测试。