# 进入meshchain目录(假设当前目录是FISCO-BCOS/tool)
cd meshchain
#gradle安装说明,请参照https://gradle.org/install/
#java安装说明,请参照http://www.oracle.com/technetwork/java/javase/downloads/index.html
#确保PATH里面已经追加gradle,譬如PATH=$GRADLE_HOME/bin:$PATH
gradle build
cd dist/conf
#修改applicationContext.xml,bean id="routeService"的ip和端口,为路由链的所有节点的ip和channelPort。ip前面的nodeid可以任意填写,填写所有节点的ip和channelPort是为了保证容错,channelPort则为fisco-bcos节点启动时候指定的config.json里面的channelPort字段。如下图一和图二所示
vim applicationContext.xml
#同理,修改applicationContext.xml,bean id="set0Service"的ip和端口,为分组链0的所有节点的ip和channelPort。bean id="set1Service"的ip和端口,为分组链1的所有节点的ip和channelPort。bean id="set2Service"的ip和端口,为分组链2的所有节点的ip和channelPort
vim applicationContext.xml
并行计算
功能介绍
在研究和实现区块链平台和进行业务落地的过程中,我们意识到,区块链的运行速度会受多种因素影响,包括加密解密计算、交易广播和排序、共识算法多阶段提交的协作开销、虚拟机执行速度,以及包括CPU核数主频、磁盘IO、网络带宽等。由于区块链是先天的跨网络的分布式协作系统,而且强调安全性、可用性、容错性、一致性、事务性,用较复杂的算法和繁琐的多参与方协作来获得去信任化、数据不可篡改以及交易可追溯等特出的功能优势,根据分布式的CAP原理,在同等的硬件资源投入的前提下,区块链的性能往往低于中心化的系统,其表现就是并发数不高,交易时延较明显。
我们已经在多个方面对系统运行的全流程进行细致的优化,包括加密解密计算,交易处理流程,共识算法,存储优化等,使我们的区块链平台在单链架构时,运行速度达到了一个较高的性能水准,基本能满足一般的金融业务要求。
同时我们也意识到,对于用户数、交易量、存量数据较大或可能有显著增长的海量服务场景,对系统提出了更高的容量和扩展性要求,单链架构总是会遇到软件架构或硬件资源方面的瓶颈。 而区块链的系统特性决定,在区块链中增加节点,只会增强系统的容错性,增加参与者的授信背书等,而不会增加性能,这就需要通过架构上的调整来应对性能挑战,所以,我们提出了“并行计算,多链运行”的方案。
快速体验
如果想快速体验多链和跨链应用,请参照quick_start.md
使用方式
搭建fisco-bcos:
至少部署路由链,分组链1,分组链2,分组链3。每条链的节点个数任意,至少为1。
分了简化步骤,下面配置将会是:一条路由链,三条分组链。
首先部署路由链。
fisco-bcos搭建步骤:请参照安装说明
部署fisco-bcos后,查看当前某个节点监听的rpc端口(假设当前目录在FISCO-BCOS)
得到该RPC端口(rpcport字段)后,开始进行部署系统合约(假设当前目录是FISCO-BCOS):
得到系统代理合约地址后,如箭头所示
路由链的所有节点,把上述得到的地址替换FISCO-BCOS目录下的config.json的systemproxyaddress字段,如图所示
然后重启路由链的所有节点
重启后,然后部署Meshchain.sol合约(假设当前目录是FISCO-BCOS):
如下图:
以上,则代表路由链部署成功。分组链1,分组链2,分组链3也执行以上的步骤。
成功部署多条链后,开始部署proxy:
结果如下:
更改配置文件config.xml
部署路由合约:
执行命令:
在start.sh的脚本中,会有这么的一段命令来部署路由合约:
route.json 格式:
说明:
set_name是指用户链的名字,如果有多个set_name,不能重复,且必须要与applicationContext的bean id=”xxxService”保持一致。
set_warn_num:是指某个set达到set_warn_num则会有相关的日志告警,日志设置请参考conf/log4j2.xml
set_max_num:是指某个set最多能容纳set_max_num个用户
路由合约的默认分配规则,一个set的uid个数最大为set_max_num.set0满了后,再增加用户则会在set1添加,理论上无容量限制。
启动server监听:
启动http server:
监听的是http server,就可以curl发送post http请求,如用户注册,用户充值和用户转账.
注意:conf目录下的ca.crt需要跟每条链下的所有节点的ca.crt文件保持一致。节点的ca.crt文件位置在config.json的datadir指定的目录下
注册协议:
参数说明:
response响应:
充值协议:
参数说明:
response响应:
转账协议:
参数说明:
response响应:
code的说明:
验证
查询用户的资产
uid是指用户唯一的uid,如上述的“1”
response响应如下:
如果觉得当前某条分组链的容量需要扩大,那么可以执行以下的命令
分组链扩容
response响应如下:
查询某个分组链的容量信息
response响应如下:
热点账户
热点账户的相关说明请参考:并行计算和热点账户的解决方案
在conf/config.xml中,假如我们指定了set2Service为热点链。那么分组链set0Service,ser1Service会有热点账户的影子户。举例,热点账户fisco-dev在热点链set2Service注册了,identity为1。那么在set0Service,ser1Service上面,必须要有用户名为fisco-dev,identity为0的‘影子户’。
因此,倘若普通用户A给热点账户H转账,实现方式是A会找到热点账户在A用户所在分组链的同名影子户H’,然后给影子户H’转账,这时候不涉及到跨链的操作。之后,影子户与热点户的转账就是跨链的操作,该操作是由一个异步的线程去达到的。
修改conf/config.xml
配置生效后,重启服务
检查日志
$log是指conf/log4j2.xml里面指定的文件名字。当出现这样的日志关键字,可以配合工具-查询用户的资产来验证跨链操作是否生效。