chuanhua.chen

Results 11 issues of chuanhua.chen

分支名字唯一功能,只是在添加起源块时,判断本地是否有该名字的分支,判断是否成功,没有影响区块及交易的有效性,当以下情况发生时,会在不同节点存在同名分支的情况。 1)当两个节点(A节点、B节点)在同一时间(不完全一个时间点,只要在一个区块时间内就可以),分别创建名字相同的分支,将产生两条创建分支的交易,这两条交易分别在两个节点上打包,并且产生分叉,两个块中,两条交易的顺序相反,即A节点的块是AB顺序,B节点的块是BA顺序; 2)其它节点接收到A节点的块时,会生成A分支,而排斥B分支,接收到B节点的块时,会生成B分支,而排斥A分支; 3)当分叉回滚时,也不能将改变这个情况,分支创建后,没有删除功能,并且也不能删除,由于分支上产生的价值,无法删除。

当前子链块权重计算是根据主链块之间的权重差而得,主链块权重根据难度系数计算而得,所以子链块权重也会因难度系数变化而变化,并成倍数变化,可能导致子链上难度系数低的多个块的权重,比难度系数高的一个块权重低。 表现的问题:由于难度系数降低,后面出的子链块可能被前面高度的子链块回滚。 可以考虑将DPOS块的权重计算改为固定难度系数,如:固定200或50,或者一段时间的最高难度值。

当前节点之间同步TX较慢,当有大量BLOCK需要同步时(如有较多的子链子块),由于同步BLOCK优化,并且BLOCK及TX在同一个通道,同一个线程在同步,所以在同步BLOCK时,TX会暂停,等BLOCK同步完后,再同步TX。 当前测试,如果只有较少的BLOCK同步时,TPS大概在1200左右,如果有较多BLOCK同步时,TPS会降到几十到几百。

如果节点从0开始同步块,在DPOS阶段,DPOS块比较多,当前测试发现同步DPOS块时,较验时间较长,导致同步速度比较慢,当前测试的速度大概为300~350块/分种。

当前BLOCK文件及TXINDEX文件,未实现文件数据较验功能,导致读取错误数据使程序运行不正常,增加较验功能,可以防止错误数据对程序的影响。

当前程序中没有地址索引,导致查询某个地址的相关交易效率低。 1. 增加地址索引后,可以改进DPOS的CERT交易处理方法,不需要单独存储UNSPENT及TX,并且不需要启动时加载全链的TX,可以提高启动速度。 2. 可以改进WALLET的处理方法,当前导入地址时,需要从全链导入TX,构造UNSPENT,增加地址索引后,可以考虑去掉这部分,直接使用全链的地址索引和UNSPENT索引,则去掉了加载的过程,可以很大程度提高效率。 3. 增加地址索引可以解决查询交易的FORM地址的效率问题。

TXINDEX按时间戳存到文件中,如果TXINDEX未缓存在内存部分,将去读取文件,然后再查询TXINDEX,如果查询量较大时,则效率比较低。

交易按交易费/数据长度优先上链规则。

enhancement

在175服务器上开启了23个DPOS节点,高度为7000多,新建了一个节点,用于同步块测试,不参与DPOS和POW出块,连接10个节点,同步效率为每分钟340左右个块,测试分析发现VerifyProof这个函数占用了大量时间。

在consensus load和checkrepair中要加载所有BLOCK文件,如果BLOCK文件大(即BLOCK数多)时,则加载速度较慢。