FAQs

应用链的安全性如何保证?

应用链的安全性通过母链来保证。首先,应用链的接入必须通过母链节点,降低了子链节点遭受饱和攻击的风险;其次,应用链有自己的共识方式,仅将状态按一定时间刷新到母链上,如果母链出现问题,如遭受51%攻击,子链的数据不会收到影响。

运行应用链的费用如何?

维护应用链的MOAC消耗主要有三部分:给应用链矿工费用、应用链向母链flush状态,以及母链充提gas返还上。这个维护消耗可以通过调整应用链的参数来改变。比如,延长flush周期从20个block到40个block,会减低flush。

应用链上支持solidity 5.0吗?

目前应用链仅支持solidity 4.24版本和之前的版本,建议使用4.24。

应用链节点之间的通讯过程是什么样的?

SCS需要通过VNODE来与其它SCS通讯。连接同一个vnode下的scs,通讯传递的方式是:scs1-vnode-scs2。 如果不同vnode连接的scs,通讯消息是:scs1-vnode1………vnode2-scs2,中间可能有多个VNODEs 为了提高应用链处理效率,降低网络影响,建议将网络通讯进行了优化,缩短其通讯路径。比如,使用云服务器时,尽量使用内网IP通讯。如果是物理机房,也可以走内网,而不是外网通讯。

VNODE注册的参数是什么含义?

这个register函数的功能就是注册一个VNODE进入VNODE POOL 第一个参数VNODE,是一个钱包地址,作用仅在VNODE POOL退换押金时使用,需要用户自己输入; 第二个参数是VNODE节点的收益帐号,VnodeBeneficialAddress,在vnodeconfig.json中; 第三个参数是VNODE的IP地址; 第四个是VNODE RPC接口地址;

应用链中的 mc 押金和消耗

为了使应用链安全稳定的运行,MOAC引入的押金机制,主要体现在以下几个方面:

  1. 每个应用链节点在第一次启动后,将会有一个唯一的MOAC钱包地址,在部署应用链前,需要在向这个地址打入至少1个MOAC作为运行费用;
  2. 每个应用链节点注册进入应用链矿工池时,需要向矿工池缴纳一定的押金,最小值由应用链控制合约设置,最大值不限。应用链节点每被选中一次,将会扣除一定数额的押金,当押金被扣完后,该节点将不会再参与新的应用链,退出应用链时,可以调用方法取回押金;
  3. 当一个应用链节点注册成一个监听节点时,需要缴纳一定的押金;当退出应用链时可以取回押金;
  4. 押金一般不会扣除,但在flush时,如果有企图作弊的节点,将会按照规则踢出应用链,并扣除押金,不再返还;

维护应用链的mc消耗:

调用应用链方法不会消耗任何mc,但是,dapp运营方需要向应用链控制合约地址打入一定量的 mc 维持应用链运行,这部分 mc 将会消耗在给应用链矿工费用、应用链向母链flush状态,以及母链充提的操作上。这个维护消耗可以通过调整应用链的flush周期来部分改变。

当应用链帐号中的押金低于一定程度,应用链会停止出块。

应用链节点停止出块怎么办?

首先检测monitor的情况,有可能是monitor出问题,但整个链正常。 请首先检查应用链是否没有mc,如果是,充入mc即可。否则可以通过reset方式重启。 但是使用reset需要小心,链会回到上次刷新的点重新开始,这个子链运行状态的话可以通过官方提供的子链浏览器看到,问题早发现早处理,慎用reset。

新增应用链节点快速同步

当应用链中加入新的验证节点时,节点会尝试向别的节点索取历史块的功能。只要按照正常流程配置,在应用链运行的过程中,各个节点可以自动完成拉块的整个过程,从而使所有的节点在一个动态可用的状态。 当应用链运行了一段时间后,如果想加入新验证节点或者新的监测节点,根据网络情况,同步时间会比较长。建议通过复制已有数据库的方式快速同步,具体的操作步骤如下:

  1. 关闭一个正在运行monitor/scs(推荐monitor)
  2. 将数据文件夹复制到新的monitor/scs
  3. 启动老的monitor/scs
  4. 注册monitor/scs
  5. 启动新的monitor/scs

如此,新的节点只需要同步非常少的区块后,就可以投入运行。

应用链燃料消耗完成后会怎么样?

应用链燃料消耗完以后,应用链出块暂停,再次添加燃料以后,应用链可以继续出块。

应用链节点同步无法完成

当应用链节点同步迟迟无法完成时,可能会因为vnodepool的配置注册原因导致的。

检测方法一: 如果应用链配置有应用链浏览器,可以通过应用链浏览器查看VnodePool中注册的IP和端口是否正确、对应的Vnode是否在线、Vnode注册的是局域网地址还是广域网地址,如果是局域网地址,那只能提供在同局域网内的SCS上传和下载区块,如果SCS是局域网络,那必须注册广域网地址。

检测方法二: 重新启动SCS,并使用LogLevel配置为4:

./scsserver --verbosity 4

通过Debug log信息查看相关异常如果出现上传区块错误如:

Failed to upload the blocks to proxy: 56.151.161.171:50062, performance:4

下载区块错误:

Failed to download the block:32, performance:4,

每一个VnodeProxy都有一个地址,对应一个performance,若最终所有的performance都为0,说明没有可用的VnodeProx,将无法拉块,任何掉队的SCS都无法同步区块。

应用链节点的推荐配置如何?

SCS最低要求配置:2核4G;与VNODE的通讯网络建议带宽:4MB/s; 如果是使用云服务器进行部署,那么可以使用内网通讯,节省费用; SCS一般不需要使用SSD,硬盘应该大于50GB。

如何避免ProcWind应用链分叉?

ProcWind 应用链分叉的一个可能是各个VNODE之间的通讯没有直接连接,可以使用AddPeer把节点直接相连,从而优化通信并避免分叉。 如果应用链的SCS节点相连接的VNODE离线时间过长,也会导致与之相连的SCS上出现错误信息“BAD BLOCK”,只需等待一定时间,SCS同步完成信息会消失。 但如果一个应用链所使用的所有VNODE都同时离线,然后再上线,那么应用链需要使用reset功能来恢复到上次flush点的状态,才能完成共识,而无法自动恢复。 在各个VNODE节点启动之后,最好加入相邻的节点,使用AddPeer把节点直接相连,可以优化通信。

在nuwa 1.1.2之后,VNODE console终端加入了admin.addSubnetP2P方法,可以允许VNODE优化应用链的通讯,调用方法中有两个参数, 第一个参数为应用链合约地址,即subchainbase地址,第二个参数为加入的区块高度,建议设为当前区块高度+100。 例如当前区块为20000

> admin.addSubnetP2P(subchainbase.address, 20100)

未来块最好比当前块高一百个块左右,让其有时间将自己的网络调整到位