Back to list
Apr 26 2017

开发更新 #129

我们现在正在进行一些琐碎的质量控制和主要的错误修复


我们修复了在windows上不使用electron构建的一些错误和路径、目录问题。 包括打包脚本中出现错误,资源文件被复制到错误的路径,可执行文件无法在开始时找到资源文件,服务端终止。

这会在钱包版本15中修复


我们正在寻找和修复交易规则问题,其中由于某些竞争条件,少量的TX散列不会传播到所有节点。 我们认为这个问题已经被修复了,但仍在测试。 我们已经实施了交易重新广播功能,但默认情况下禁用它,因为未确认池中TX的新状态信息标志应该可以解决这个问题。

  • 一个节点如果可以针对当前的未使用的输出集进行执行,则只能广播一个TX
  • 如果创建了一个新的块,但节点接收到TX消耗在下一个块中创建的UX输出,但该节点尚未接收到新的块,则该节点将不会通知TX散列值
  • 然后当接收到新的块时,事务的状态变为有效/可执行,但UX对象未被广播
  • 该节点将忽略该TX的所有将来的TX公告,而不广播该散列值,因为TX对象已经在未用的输出集。
这个边缘案例发生:
  • 如果在下一个块中创建TX消费UXTO对象时,在块之前进入了(如果快速连续执行交易,有时在交换是发生)
  • 如果节点在离线几个小时后刚刚启动,并且接收到TX集,同时仍然在努力赶上最新的区块集
为了修复这个边缘案例我们
  • 确保节点在连接上时才宣布其整个未使用的TX集合的散列(我们认为这是已被实现了的但不是)
  • 默认情况下设置UXTO中的持久事务(现已启用)
  • 添加了一个通过CLI手动 进行重新广播TX JSON的功能 (原文有错别字)
  • 使用布尔标志跟踪交易状态。 如果未使用的输出池中的TX对象从未执行的可执行文件变为可执行的,则会自动触发该TX的广播
这也应该解决不相关的错误:
  • TX被注入没有对等体的节点
  • 节点连接到一个或多个对等端,但TX对象从不传播
这个错误通过下面方式被解决了:
  • 密钥值在节点重新启动之间默认存储未使用的TX池,让它持久化
  • 在节点之间的连接上的时候,默认情况下,在未使用的输出池中公布所有TX

指数回补与零对等节点错误

如果互联网关闭时,对等节点列表中的所有对等节点都将被指数退避算法列入黑名单。

当连接低于2时,我们正在重置针对对等连接尝试的指数退避时间。

这将在互联网关闭一段时间后,让节点加快重新连接网络。

对等交换错误

默认情况下,对等体交换已被禁用, 需要更多的测试。 处理未经请求的连接和环回自动断开有问题,以防止两个连接到同一个节点。

如果一个节点有一个开放的端口,那么它可以尝试连接到一个节点。 同一个节点也可以尝试打开一个连接到节点,所以我们最终在节点之间的两个连接,我们在回路自动检测连接中有错误,对于非请求(传入连接),最终在节点之间断开了传入和传出连接。

我们认为这是导致启用对等交换服务器的错误,获得零对等体但不确定是这个原因。

我们将很快修复