尊敬的社区成员,大家好,
自2月20日新贝莱世界测试网络启动以来,我们得到了来自节点合作伙伴和社区成员的热情响应和大力支持,对此我们深表感激。
在测试网络运行期间,通过所有节点和成员的参与和反馈,帮助我们定位了很多问题,还修复了两次故障,这是社区力量的最好明证。
我们预定在4月5日对测试网络进行升级,升级后版本号为0.11.0,在这个升级中我们将大家反馈的以及测试网络运行中暴露的问题和缺陷进行优化和修复。同时,在此版本中将开始支持WASM合约。
从今天开始,我们将在本主题中分三次发布0.11.0版本更新说明。
功能新增
支持WASM合约
-
支持编译、部署、调用WASM合约
-
支持WASM合约升级,销毁
-
提供Java、Javascript sdk调用wasm合约
-
platon-truffle支持wasm合约
-
支持权限模型
-
存储结构增加封装Array、Map、 MultiIndex
功能优化
对低(零)出块率惩罚机制做了优化
问题:当前PlatON对于零出块节点的惩罚策略过于严厉
影响:影响用户体验
解决方案: 根据PlatON链上原协议,只要当选为验证人的节点在一个共识周期内没有出过块那么此节点将被处罚,当前测试网的处罚策略为强制节点解除质押,质押金将被锁定一定的结算周期。 近期根据PlatON拉力赛参赛节点反馈,节点在升级过程中或由于网络抖动原因导致不能在被选为验证人时及时出块,多数节点认为PlatON当前的处罚策略过于严厉。 为进一步加强PlatON网络的健壮性,综合各个节点的意见,本次优化对零出块处罚条件做以下调整:
-
只有在一定时间范围内持续不出块(时间范围用共识周期数衡量)才进行处罚。
-
只有超过一定的不出块次数,才会处罚。
“platon”命令行参数删除了wallet、ethstats以及gcmode参数
说明:这三个参数从以太坊中保留下来的,在PlatON中没有使用或暂时不支持,先从命令行中删除掉。
-
PlatON令牌发现没有预售机制,不需要使用wallet子命令
-
ethstats为以太坊原有接口上报指标服务,PlatON暂未使用。
-
gcmode开关是配置statecache里面的triedb要不要做缓存的开关,PlatON对存储进行了优化,暂不支持这个开关。
功能修复
修复了fast同步中途退出后节点启动失败问题
问题:一旦fast同步过程中断,节点重新启动将失败
解决方案:
在节点首次进行fast同步时,如果同步途中因某些原因进程退出,造成底层存储的数据不一致,节点再次启动时会失败(数据不一致导致无法继续运行)
本次对fast同步机制做了修改,如果首次fast同步不成功,后面再次启动节点时需要重新进行fast同步。
修复了频繁调用GetTransactionCount接口导致节点内存溢出问题
问题:在链停止出块的前提下,频繁调用GetTransactionCount接口会导致节点内存不断增长,节点最终会因内存溢出而终止
解决方案:
此问题时RPC接口查询链上数据时父区块和子区块存在交叉引用,导致每次申请的内存没有办法回收,修复方案为对RPC接口做特殊处理,查询执行完直接解除引用
修复了不能向内置合约转账的问题
问题:在测试网测试发现,不能直接向内置合约中转账
解决方案:
由于之前的版本对内置合约地址做了特殊处理,判断了data字段不能为空,所以直接转账会失败,本次通过升级提案对这个错误做了修复,可以直接转账到内置合约
修复了节点view差距很大时view同步慢的问题
问题:3月9号链停止出块,11号升级恢复时发现节点间view差距较大,view同步太慢导致较长时间后链才恢复出块
解决方案:
判断如果当前节点和邻居节点view差距超过2时不再等超时,而是直接同步下一个view
修复了测试网节点同步时出现vrf invalidate问题
问题:节点在同步偶尔会出现vrf invalidate问题,会导致节点同步停止,块高不会继续增长
解决方案:
此问题是由于CBFT引擎在出块时的时间过长导致,当前节点会根据时间超时启动再次出块,但由于上一个块还没出完,导致该节点双出,最终导致vrf校验失败,
本次修改出块机制,出过一次当前高度的块将不会再次出同一高度的区块。
欢迎大家就此次版本更新内容向我们多提意见建议,再次感谢大家一直以来的支持。
PlatON运营团队