Q:如何知道本点节点已经正常接入blockchain网络了呢?

chainsqld.exe所在的目录下,打开命令提示符,输入chainsqld.exe server_info,确认response中的complete_ledgers不是empty状态,而是类似1-100形式。


Q:是否可以不配置到本地数据库的连接,往链上写数据?

A:可以,默认就是没有到本地数据库的连接,但要查询某张表时,必须要配置。


Q:如何配置需要同步的表?

A:修改配置文件中[sync_tables],填入表的所有者地址、表名、需要同步到的时间点或者区块索引(LedgerIndex),具体可以参考相关配置。


Q:执行创建表格操作,为什么在数据库里没有真实的表格生成?

A:1>检查配置文件中sync_db下面的设置是否正确。

      2>检查是否创建了sync_db下db参数指定的数据库类型。

      3>检查本地节点是否已经接入blockchain网络。


Q:SyncTableState是什么表,有什么作用?

A:SyncTableState为同步状态表,主要记录本次同步的索引信息等。对于用户,需要关注的是这个表存储了表名(TableName)和经过Hash处理后的实际表名(TableNameInDB)之间的对应关系。


Q:为什么在数据库里看到的表名与创建的表名不一致?

A:数据库中的表名是系统经过Hash处理后的表名,与用户输入的表名的对应关系在SyncTableState表中可以查找到。


Q:如何查看同步的表中的数据?

A:打开SyncTableState表格查找表名对应的实际表名,再查询对应的实际表名即可。


Q:在sync_tables下配置了一个表,为什么在数据库里却没有看到?

A:1>确认这个表格是不是真正被创建成功。

      2>表格生成操作对应的ledger序号很大,同步一张新表是要从序号为1的ledger开始搜索,所以要多等待一会。

      3>确认数据库是否在正常工作。


Q:每次预先在sync_tables配置表名,然后启动程序才能在数据库中看到这个表,能否不用配置重启程序直接看到表?

A :打开配置文件中的自动同步开关(置为1)。


Q:如何确认数据库在正常工作?

A:打开synctablestate表格看所有条目的LedgerSeq是否都在更新。


Q:为什么发送了API命令后总是没有响应?

A:1>检查网络状况是否良好。

      2>目标连接点的防火墙是否开启。

      3>若目标连接点的防火墙在开启状态,确认端口6006是否被防火墙禁用。


Q:为什么本点节点始终不能连接到blockchain网络中?

A:确认配置文件中的ips 下面的IP与端口是否正确,信任列表validators和验证数量validation_quorum是否填写正确。


Q:为什么执行select的API接口,没有返回任何内容?

A:1>确认SQL语句是否正确。

      2>确认执行的表是否真的存在。

      3>确认本地数据库中是否有这个表,select操作是直接搜索本地数据库的操作,并不是到blockchain网络中去获取数据。


Q:我能否对其它用户创建的表格进行修改?

A:可以,需要表格创建者给此用户进行对应的授权操作。


Q:启动本地节点后,某个表格的状态在SyncTableState表中不更新了。

A:确认在本节点停止期间,表格的创建者是否已经对其进行了改名操作,或者对应的deleted标志是否置为1。


Q:简要介绍ChainSQL数据库操作的处理流程是什么?

A:ChainSQL在本地先校验操作的合法性及权限,校验通过后通过事务写入本地数据库,然后将操作发到blockchain网络中参与共识。共识通过后提交事务,否则回滚事务。


Q:什么情况下会先入库再共识?

A:在用户要同步的表已经追上全网的进度时,此节点对该表的写入操作就会先入本地库,然后再抛到链上进行共识,如果共识的结果和预期的不一样,则回退之前的写操作,走正常的同步流程。该功能默认是关闭的,可以在配置文件中开启此功能,设置[first_storage]值为1,即为开启。