1.一种区块链虚拟仿真系统,其特征在于,所述系统能在单台计算机上虚拟仿真完整的共有区块链实验与应用环境,包括应用接口模块、区块链仿真模块及网络与数据模块;所述应用接口模块,包括P2P网络接口和区块应用接口,用于初始化区块链网络、驱动并控制区块链虚拟仿真过程,并在计算机上仿真为一个功能模块;
区块链仿真模块,包括P2P网络和Block模块,用于仿真区块链的交易过程,区块验证与维护及PoW共识;
网络与数据模块,用于仿真区块链的网络通信与数据存储;
每个计算节点的P2P网络采用Chord协议与其他计算节点构成一个环状网,且通过内置的区块链数据收发线程为区块链仿真提供网络数据通道;
所述Block模块包含Block Chain API、区块存取、Block Chain工作线程及基础算法;
所述Block Chain API,用于与应用接口模块交换数据与指令;区块存取,用于访问虚拟的区块链数据;Block Chain工作线程,用于仿真区块的交易、维护、PoW共识、确权以及网络数据交换;基础算法,用于提供Hash计算、密码算法、数字签名、时间戳计算功能;
所述Block Chain工作线程包含计算节点加入区块链网络的算法、区块链网络交易算法及计算节点区块维护算法;
所述计算节点加入区块链网络的算法,用于实现计算节点新增、重入区块链网络的过程;
所述区块链网络交易算法,用于实现区块链的新交易、PoW确认、区块确权以及区块链更新的过程;
计算节点区块维护算法,用于解决区块分叉问题、实现计算节点间区块同步的过程;
所述节点加入区块链网络的算法包括:
B1新增或重入网络的计算节点按Chord协议更新自己的前驱后续节点信息以及Finger table;
B2新增或重入网络的计算节点的Block Chain工作线程开始工作,其中区块维护线程向Finger table所指节点各获取一个区块;
B3如果获取的区块已经存在于自己的区块链中,则忽略,并转到B6;
B4如果获取的区块不存在于自己的区块链中,且获取的区块是创世区块,则直接加入到自己的区块链中,并执行步骤B6;
B5如果不是创世区块,则请求PoW共识线程进行确认,将得到确认后的区块加入到自己的区块链中,否则忽略;然后执行步骤B6;
B6再次向Finger table所指节点各获取一个区块,如果存在区块,则执行步骤B3,否则执行步骤B7;
B7算法结束。
2.如权利要求1所述的区块链虚拟仿真系统,其特征在于,所述应用接口模块提供一个区块链网络初始化算法,用于初始化P2P网络,创建创世区块;
所述一个区块链包括多个计算节点,每个计算节点实现一个区块链仿真模块。
3.如权利要求1所述的区块链虚拟仿真系统,其特征在于,所述区块链仿真模块、网络与数据模块在单台计算机上仿真为一个对象。
4.如权利要求2所述的区块链虚拟仿真系统,其特征在于,区块链网络初始化算法包括:A1应用接口模块增加数量计算节点,构建一个P2P网络,Chord工作线程构建各自计算节点的数据区,包括Finger table、前驱后续节点信息;
A2通过应用接口模块创建一个有效区块,作为创世区块,并添加到区块链网络中任意一个计算节点;
A3计算节点的各个工作线程开始工作,区块维护线程实现网络中各计算节点同步添加新增的创世区块;
A4在区块链网络稳定时,算法结束。
5.如权利要求1所述的区块链虚拟仿真系统,其特征在于,所述区块维护算法包括:D1计算节点A的区块维护工作定期启动运行;
D2如果计算节点A的区块链存在分叉现象,并且两两分叉之间区块数量之差超过一定阀值,则保留最长的分叉,裁剪掉其余的分叉;
D3遍历计算节点A的Finger table所指向的每个计算节点X逐一执行下述步骤,遍历完毕后执行步骤D8;
D4如果计算节点X的区块链存在分叉,则执行步骤D3;
D5对比两个计算节点的区块链,各自找到时间戳最新的区块,使得这两个区块的时间戳相同,即两个区块的时间戳t1=t2;
D6如果计算节点X的t2区块还有后续区块,则将后续区块同步到计算节点A;计算节点A对每个同步来的区块进行PoW共识确认后,追加到自己的区块链中,则执行步骤D3;
D7如果计算节点X的t2区块没有后续区块,则执行步骤D3;
D8算法结束。
6.如权利要求1所述的区块链虚拟仿真系统,其特征在于,所述系统在单台计算机OMNeT++工具上虚拟仿真完整的共有区块链实验与应用环境。
7.如权利要求6所述的区块链虚拟仿真系统,其特征在于,用OMNeT++的定时消息仿真所有的工作线程;
用关闭计算节点的所有工作线程的方式仿真计算节点故障;
故障恢复的仿真方式是重新打开计算节点的所有工作线程。