手机端自组网区块链平台设计方案
基于移动终端自组网的区块链实现方案
一、方案概述
参考超级账本fabric的设计原理,应因移动终端自组区块链网络的需求,开发本系统。系统主要包含两部分:p2p通信服务器和区块链终端设备。
首先需要搭建组网的信令服务器,实现移动终端节点p2p网络通信。其次移动终端申请安装组网apk,同时获取到授权证书,即可成为区块网络中的受信节点。通过在应用终端配置,选择作为共识节点或背书节点。
移动终端自组网的区块链核心功能,包含6个部分:1、身份认证 ;2、p2p通信; 3、账本实现 ;4、共识机制实现;5、背书机制实现;6、智能合约设计。
二、核心功能点实现
1. 用户身份认证
移动设备加入区块网络,需要通过授权证书的方式,安装相应的区块链APK。区块网络对加入的设备,进行身份认证。当用户操作区块网络时,使用系统颁发的证书,对交易数据进行签名。区块链节点收到请求后,根据内置的算法,对请求进行签名验证,如果认证通过,则接受该设备的请求, 否则拒绝。
2. p2p通信
使用webrtc技术中的数据通道( DataChannel)建立一个在两个节点之间的双向的数据通道,达到点对点通信的目的。流程如下:
-
连接双方(Peer)通过第三方服务器来交换(Signalling)各自的SessionDescription数据。
-
连接双方(Peer)通过STUN协议从STUN Server那里获取到自己的NAT结构,子网IP和公网IP,端口,这里的IP和端口对我们称之为ICE Candidate。
-
连接双方(Peer)通过第三方服务器来交换(Signalling)各自ICE Candidates,如果连接双方在同一个NAT下那他们仅通过内网Candidate就能建立起连接,反之如果他们处于非对称型NAT下,就需要STUN Server识别出的公网Candidate进行通讯。
-
如果仅通过STUN Server发现的公网Candidate仍然无法建立连接,换句话说就是连接双方(Peer)中至少有一方处于对称NAT下,这就需要处于对称NAT下的客户端(Peer)去寻求TURN Server提供的转发服务,然后将转发形式的Candidate共享(Signalling)给对方(Peer)。
-
连接双方(Peer)向目标IP端口发送报文,通过SessionDescription中涉及的密钥以及期望传输的内容,建立起加密长连接
并且由于信令服务器的存在,节点可以知道网络中其它所有节点的地址,从而很容易进行节点发现等操作。
3. 账本设计
使用手机嵌入式数据库,作为账本记录工具。以行数据和上个区块的hash作为当前交易记录hash值,这样就将交易区块以hash相链接的方式记录在表中。详细见区块链账本表结构设计。
4.共识设计
共识机制采用ETCD共识,每个移动设备都维护一张共识节点表,根据随机种子,选取其中一个节点进行打包区块操作,新的区块生成后,有打包节点广播消息给区块网络中的记账节点,记账节点收到广播后,同步账本到本地数据库。当新加入的共识设备,通过广播的方式向区块中的其他节点发送心跳,其他节点接收到心跳后,更新本地路由表。
5. 背书设计
背书算法采用背书率>50%的背书机制。当请求端发起背书请求时,通过广播的方式向区块网络中的背书节点请求背书,当请求端收到的节点模拟执行结果>50%后,order节点即可完成打包追加区块操作,同时广播消息给记账节点。记账节点将背书的结果记录在区块表中,并更新交易记录表。
6.智能合约
自组网的合约程序运行在记账节点的数据库中。部署智能合约,通过向数据库插入一行合约数据完成。当用户调用合约时,根据合约名称,查找对应的合约数据即可。每次对合约的操作,都需要将操作记录保存在交易记录表中。
区块链账本存储表结构
-
区块表,储存区块信息
表字段 |
可否空值 |
备注 |
区块高度 |
否 |
|
区块hash |
否 |
|
前一区块hash |
否 |
|
区块打包时间 |
否 |
-
交易记录表,储存交易信息
表字段 |
可否空值 |
备注 |
区块号 |
否 |
|
交易hash |
否 |
|
上一交易hash |
否 |
|
交易时间戳 |
否 |
|
调用合约 |
否 |
|
调用方法 |
否 |
|
存储值key |
否 |
|
存储值value |
否 |
|
世界状态(0,1) |
否 |
-
智能合约表,储存合约信息
表字段 |
可否空值 |
备注 |
合约名称 |
否 |
|
账本读方法 |
否 |
|
账本写方法 |
否 |
|
合约部署时间 |
否 |
|
-
路由表,储存节点信息
表字段 |
可否空值 |
备注 |
节点IP |
否 |
|
节点类型 |
否 |
|
是否激活 |
否 |
|
加入时间 |
否 |
|