请升级浏览器版本

你正在使用旧版本浏览器。请升级浏览器以获得更好的体验。

1.虚拟仿真实验的必要性

区块链不仅是数字经济时代最具挑战性的前沿学科,也是最具交叉领域融合发展特色的学科。区块链的教学主要体现在以下方面:

1)区块链基础教学。区块链作为一种数据存储模型,融合了一系列计算机相关技术,包括区块链底层技术如网络通信、密码编码学、多方安全计算、零知识证明、分布式存储、P2P网络、隐私保护、智能合约、信息安全等;同时区块链的工程领域实现也提出了性能、分片、跨链、公有/联盟/授权链、链基础设施(BaaS,Blockchain as a Service)等系列相关技术;同时,区块链与人工智能、大数据、5G、物联网等前沿信息技术的深度融合,将极大地推动集成创新和融合应用,将区块链所提供的多种能力充分体现于产业环境。

2)跨学科融合教学。随着数字经济的高速发展,个人与机构之间的互动与协作方式正在被迅速改变,而区块链技术将是数字经济时代金融行业的关键底层基础设施。区块链的相关能力将重新构造经济活动中的信任、博弈等多种机制:例如加密经济学聚焦在支撑区块链及其衍生应用上的经济学原理和理论,它着眼于区块链机制设计中主要使用到的博弈论和激励设计;制度加密经济学着眼于账本的治理规则,服务于这些账本的社会、政治和经济机构的发展,以及区块链的发明是如何在全社会范围内改变账本模式的。这些新兴的理论充分体现了经济、政治、管理科学等多领域的交叉协作,验证了多学科融合的重要性。

分布式账本是理论与工程实践紧密结合的技术,不同学科的学生和社会人群学习区块链工程技术、领域知识时,除了掌握基础理论外,还需要培养实际动手操作能力,通过实践理解基本概念和建立知识体系。其中掌握各类分布式账本(区块链)系统的架构特点、运行模式,具备利用开源代码配合容器架构区块链系统的基本操作能力,以及掌握一种或多种智能合约的程序设计语言和相关的函数库,具备采用编程语言实现智能合约解决实际问题的能力,是课程的重点内容。

但是由于区块链技术的复杂性,基础环境配置即便对计算机专业的学生也不是一件容易的事情,不仅复杂耗时,而且因操作系统、网络环境的不同,安装的步骤和遇到问题将会多种多样;互联网上充斥的各类教程可能依赖于特定软件版本、环境,或者因为网络限制无法正常运行。导致课程中实践环节都必须在专门机房中进行,学生自主学习的时间、空间受到明显限制。

因此,课程需要构建直观的区块链教学展示环境,提供方便随时获取的实际动手操作环境,成为这门课程教学能否达到教学目的的关键问题。

2.虚拟仿真实验的目的

学校已经开设了计算机技术平台课程《分布式账本(区块链)技术》以及筹备更多相关课程的教学,利用云计算的技术,构建虚拟仿真实验平台,根据课程教学内容,设置不同的区块链仿真实验环境,便于学习者能在该虚拟仿真平台上进行基础知识(共识、加密)等的验证,区块链环境的理解、配置、调试;智能合约的开发与部署。从而创建虚实结合和线上、线下教学相结合的教学新模式,方便学生随时随地获得自主学习所需的实践环境,让学生的学习精力重点放在培养其区块链+思维建立,以及开发基于区块链技术的去中心化应用程序,而非复杂晦涩的区块链开发平台的基础环境的安装,提高教学和学习效率。

平台同时对校内外开放,为各类区块链学习者提供专业、实践性强的在线学习平台。

区块链/分布式账本技术的工程实践,主要包括Linux基础操作、区块链环境配置和调试以及智能合约开发与部署等。这需要在实验环境的计算机中安装大量支撑软件并进行相关配置,同时需要构建多个节点提供效果展示和练习。实验中涉及的主要软件见表一。

软件

说明

备注

git

下载依赖的代码和镜像


curl

下载依赖的代码和镜像


docker,

docker-compose

以容器方式提供多节点支持,运行管理fabric环境


go

go语言编译环境


fabric-sample

fabric示例代码

依赖curl或者git下载

fabric

Hyperledger基础环境,包含系列容器镜像

hyperledger/fabric-tools

hyperledger/fabric-peer

hyperledger/fabric-orderer

hyperledger/fabric-ccenv

hyperledger/fabric-baseos

hyperledger/fabric-nodeenv

hyperledger/fabric-javaenv

hyperledger/fabric-ca

hyperledger/fabric-zookeeper

hyperledger/fabric-kafka

hyperledger/fabric-couchdb

依赖docker

ethereum

以太坊基础环境


vscode

开发工具,需安装go、solidity插件等

需图形界面

表一,课程必备软件

目前,学校的计算机基础教育主要使用单台PC机来教学。而在分布式账本的教学实验中,1个学生需要分配多台计算机来模拟分布在不同主机上的功能节点,机房现有的计算资源很难满足大规模的教学。实际教学时,由于分布式系统的复杂性,不同实验需要安装调试不同的支撑环境,部分实验周期无法在同一天内完成。因为实验环境需要在多个教学周中保持,现有计算机教学机房的还原卡模式无法满足连续教学的需求。在课外,学生难以在个人计算机上配置教学中的实验环境,没法进行课后复习,也没法进行探索实验。

教学中的实验,主要用于说明系统原理和体现实际运行时的特点,部署系统并不需要占用很多资源,可以使用容器或者全虚拟化环境进行集约化管理。另外,作为全校性的公选课,学生主要来自非计算机专业,甚至包括文科类的学生。这些学生的计算机实际操作能力比较弱,实际执行时操作步骤可能丢失或者杂乱无章,导致系统异常;学生和教师团队在环境配置和调试工作中浪费大量时间。

本仿真平台的目的是提供全套区块链学习套件。系统提供同步的课件播放功能,展现直观的分布式系统体验,提供高效便捷部署的实验环境。

仿真平台现阶段提供基于云存储的课件存储播放能力,同步配合课程进行展示,下一阶段,将完善课件实验联动功能,提供学生分步骤操作的校验、结果图形化展示和操作错误提示功能。

实验环境基于计算机虚拟化的原理,由服务器集群提供满足教学要求的教学环境。对于既定的教学课程,教师可以提前准备好实验所需的镜像,并将镜像分发给课程中的每个学生。学生不需要操心实验环境的搭建,只需要关心实验本身的操作。实验环境中CPU、内存、存储等计算存储资源以资源池方式提供,根据课程需求,管理平台从集群中分配相应的CPU和内存资源,构建网络隔离的虚拟计算机,避免学生使用过程中IP地址冲突等问题,使用完成后,资源被释放回资源池。如果学生在实验中破环了环境,只需要回收资源并再分配,即可快速重置实验。如果实验环境需要保留多周,在课程结束之后,管理员只需要保存学生操作进度,释放占用的虚拟机资源,下次课程开始时恢复现场即可。因此,平台可以快速提供课程实验环境,并且避免了长时间资源占用,资源仅需满足同一时间进行实验人数的计算资源需求和保存课程进度的存储资源需求。

知识点:共8个

(1)Linux的基本知识和命令的使用(基础)

(2)区块链相关的密码和编码

(3)共识机制

(4)Go语言编写

(5)Fabric环境的部署

(6)Chaincode编写智能合约

(7)以太坊的部署和使用

使用Solidity编写智能合约

课程提供实验手册,同学根据手册的指令来执行,并观察当前系统的输出与手册的输出是否一致,从而学习系统的特点。在熟悉系统后,学生需要独立分析和解决小问题,进一步巩固和提高同学对概念的理解。实验就在理论知识讲解之后,同学们需要随堂完成。

以其中的知识点“Hyperledger Fabric系统架构环境的部署”为例:

1)使用目的

学生根据所提供的实验手册,可以进入一个基于Ubuntu20.04.1的虚拟仿真环境,该环境已经预先安装了Hyperledger fabric(超级账本)系统架构环境的部署所需的基础软件环境,如Git、curl、Docker、Go等一系列基础软件,并且提供了https://github.com/hyperledger/fabric下的fabric-samples。

2)实施过程:

1.学生根据平台的实验手册打开仿真环境后,可以部署fabric

fabric的安装目录为~/fabric

打开WEB终端,切换目录至~/fabric/fabric-samples/test-network

2.删除先前运行的所有容器或工程:

./network.sh down

3.启动网络:

./network.sh up

4.创建一个默认名称为“ mychannel”的通道:

./network.sh createChannel

出现提示:

========= Channel successfully joined ===========

表示通道创建成功

5.使用network.sh创建通道后,可以使用以下命令在通道上启动链码:

./network.sh deployCC

deployCC子命令将在peer0.org1.example.com和peer0.org2.example.com上安装fabcar链码。然后在使用通道标志(或mychannel如果未指定通道)的通道上部署指定的通道的链码。如果是第一次部署链码,脚本将安装链码的依赖项。默认情况下,脚本安装Go版本的fabcar链码。您可以在fabric-samples目录的chaincode文件夹中找到Fabcar链码。此文件夹包含用来突显Fabric特性教程示例的样例链码。

6.将fabcar链码定义提交给通道后,脚本通过调用init函数初始化链码,然后调用链码将一个初始汽车清单放到账本中。然后脚本查询链码以验证是否已添加数据。如果链码已正确安装,部署和调用,应该日志中打印中看到以下汽车列表:至此链码已安装成功,之后可以进行其他实验。

7.测试完成后关闭网络:

./network.sh down

3)实施效果:

Hyperledger fabric(超级账本)部署需要一个复杂的系统环境,如需要安装Git、curl、Docker、Go等一系列基础软件,这是一个晦涩复杂的过程,使用该实训平台,使得学生从上述复杂冗长的环境中解脱出来,直接进入Hyperledger fabric部署操作;同时平台提供实验手册,同学根据手册的指令来执行,并观察当前系统的输出与手册的输出是否一致,从而提高学习效率,在熟悉系统后,学生还可以独立分析和解决小问题,进一步巩固和提高同学对概念的理解。

另外实验环境可以快速重置,便于学生的根据需要多次重复练习实践,避免实际系统的环境恢复困难。

(1)实验方法描述:

设置go语言的开发环境,并编写和执行简单的go程序。

(2)学生交互性操作步骤说明:

1. GO安装配置

从go的官方链接https://golang.google.cn/dl/下载最新版1.15.3根据提示安装。安装完毕后,path应该已经设置,可以打开终端输入go测试安装是否成功。

2.安装Vscode和配置go环境

A.下载VS Code

https://code.visualstudio.com/下载对应操作系统的发行版,然后安装VS Code。

B.安装go运行环境

现在我们要为我们的VS Code编辑器安装Go扩展插件,让它支持Go语言开发

找到红色方框中Go(即:Rich Go language support for Visual Studio Code)点击安装即可。

C.安装Go的依赖包

1)打开“开始”并搜索“env”

2)选择“编辑系统环境变量”

3)点击“环境变量”按钮

4)在“你的用户名的用户变量”章节下(上半部分)

5) 点击“新建”按钮

6)“变量名”输入GO111MODULE

7)“变量值”输入on然后确定

5) 点击“新建”按钮

6)“变量名”输入GOPROXY

7)“变量值”输入https://goproxy.cn然后确定

重新启动VS Code,然后执行在其命令面板中键入>go:install,下面会自动搜索相关命令,选择Go:Install/Update Tools这个命令

选中并会回车执行该命令(或者使用鼠标点击该命令)

然后点击“确定”按钮,进行各个工具的安装。

3.编写go语言程序

可新建hello.go文件进行测试,文件内容:

package main

import "fmt"

func main() {

fmt.Printf("hello, world\n")

}

保存后,在vscode打开终端

当前所在目录为hello.go所在目录。输入命令:go run hello.go执行

考核方式:实验考试成绩占整个课程考试成绩的40%,其中智能合约编程和区块链环境设计架构考试(30%)+日常作业(虚拟仿真教学平台考核模块)(10%)。

考核内容:掌握智能合约开发能力,可以在实际环境部署运行;掌握区块链环境设计架构能力,可以根据场景需求调整架构,构建可运行的区块链环境。

说明客户端到服务器的带宽要求(需提供测试带宽服务)

本项目纯使用浏览器交互,一般用户端10M上网速度即可。教室侧使用千兆上联,完全满足日常使用要求。

说明能够支持的同时在线人数(需提供在线排队提示服务)

1000人

(1)计算机操作系统和版本要求

本项目使用支持HTML5的浏览器访问即可,所有的交互都是基于浏览器访问,对操作系统没有特别要求。

(2)其他计算终端操作系统和版本要求

支持移动端:否

计算机硬件配置要求

I3双核CPU及以上,2G内存,5G以上空闲硬盘空间。

其他计算终端硬件配置要求:无

相关实验
团队成员
阚海斌|教授博导
负责人

Tel: 021-55665245

Email:hbkan@fudan.edu.cn

研究方向:编码与信息论,密码学与信息安全,计算复杂性

个人主页:https://cs.fudan.edu.cn/3f/b3/c25894a278451/page.htm