FAQ:¶
一. 快速了解fisco-bcos 2.0¶
【快速体验】¶
如何快速体验fisco-bcos 2.0?
可以参考资料《fisco-bcos 2.0 快速入门》
fisco 1.3和2.0有什么大的差异?
2.0增加了多群组、分布式存储等重要特性,在性能等方面进行了较大的优化。
fisco2.0支持哪些版本?
普通版本,国密版本,暂不支持群环签名版本。
有哪些接口能力可以调用 fisco-bcos 2.0?
1)rpc接口:使用简便,搭链完成后可以直接通过curl命令发送请求。
2)控制台:功能比rpc接口强大,需要下载配置web3sdk。
3)web3sdk:功能最强大,可以调用合约,开发区块链应用必选。
有哪几种褡裢方式,各有什么特点?
一键褡裢:使用更简单,适合入门小白和第一次用2.0的同学
企业工具搭链:用法更灵活,适合熟悉fisco-bcos的用户和企业搭链用户。
【软硬件依赖】¶
| 配置 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 1.5GHz | 2.4GHz |
| 内存 | 2GB | 4GB |
| 核心 | 2核 | 4核 |
| 带宽 | 1Mb | 5Mb |
| 操作系统 | CentOS (7.2 64位)或Ubuntu(16.04 64位) | |
| JAVA | Java(TM) 1.8 && JDK 1.8 | |
| node | v6 | |
| python | v2.7 或 v3.6 |
二. fisco-bcos 2.0特性¶
【共识算法】¶
fisco 2.0支持哪些共识算法?
什么是Raft算法?
RAFT算法采用2F+1<=N算法来计算冗余;其中F表示加入和合约组网中节点进程挂起或者僵尸数,N代表group内记账列表内节点总数,满足对应算法后,系统能正常的共识、同步和出快;
使用build_chain.sh脚本搭建Raft算法环境需要注意什么?
在使用build_chain.sh脚本搭建group后,需要在节点进程启动前修改group.X.genesis文件的consensus_type为raft。
在Raft算法的环境中只有leader才会出块,当group下节点较多时,如何快速找到leader节点?
进入控制台执行getConsensusStatus(gcs) 命令,可以通过leaderId和leaderIdx快速的查出当前group下那个节点是leader。
【安全控制】¶
fisco 2.0有哪些安全控制机制?
2.0节点准入机制是什么?
2.0引入group即账本概念,节点分为group节点和网络节点两种。只有成为group节点才能参与共识和出块,要成为group节点的前提是成为链所在网中的网络节点。
group下观察节点和记账节点的区别是?
观察节点作为group账本下的观察者,能被动同步出块节点的数据,但是没有权限作为出块节点。记账节点除了具有观察者权限,还具有作为出块者的权限。
新节点扩容加入链网络启动失败报错:conf/group.2.genesis:can not open file?
对于新节点,报类似无法打开文件的错误,节点启动首先会初始化config.ini配置,这种错误一般是读取到config.ini有配置conf/group.2.genesis,但是实际上目录下没有这个文件导致。一般节点要加入哪个组,config.ini就配置哪个组,上述报错是因为额外配置了group.2.genesis。直接在config.ini删除该行配置。
节点黑名单设置导致链无法正常出块?
2.0节点黑名单管理实现指定节点之间连接开放与限制,两个节点设置黑名单后,此两节点间无法通信和共识,可能导致链无法正常运行。
4个节点,A B C 三个节点依次设置黑名单,导致链出块异常?
原因是节点间转发机制异常,需要在conf下设置group.1.ini配置增加ttl参数。
【存储】¶
fisco-bcos 2.0支持哪几种存储方式?
mptstate和storagestate两种,mptstate就是1.3版本默克尔树的存储方式,storagestate是2.0新增的分布式存储,支持leveldb和mysql数据库。
storagestate有什么优点?
mptstate使用的默克尔树存储方式会随着数据量的增大速度越来越慢,而storagestate用的传统的存储方式,数据量增大并不会明显的影响性能,而且可以通过分库分表等方式优化。
【CNS】¶
2.0 CNS合约服务特性是?
通过web3sdk实现合约接口调用,实现合约部署和调用,使用CNS表管理合约
合约如何编译?
当前使用solidity编写好合约后,需要使用web3sdk编译成*.java格式的java类再执行
合约编译后使用控制台无法部署合约的问题?
合约编译后,会产生一个新的temp目录,需要将web3sdk再次执行gradle build操作打包一次
如何查询合约cns表?
通过web3sdk控制台指令查询,查询指令根据合约name查询。
如何将合约纳入CNS管理?
在部署合约时,调用CNS合约接口,将合约name、version、address信息写入CNS表中
【国密】¶
【落盘加密】¶
三. 工具¶
【部署】¶
有哪几种褡裢方式,各有什么特点?
一键褡裢:使用更简单,适合入门小白和第一次用2.0的同学
物料包:用法更灵活,适合熟悉fisco-bcos的用户和企业搭链用户。
一键褡裢和物料包是否支持国密?
一键褡裢支持国密(要添加-g参数)。物料包暂时不支持国密。
【配置】¶
什么是系统配置?
狭义理解,系统配置是指节点配置中一些影响账本功能,并需账本节点共识的配置项。
系统配置有哪些维度?
基于影响范围的维度分网络配置、群组配置。
群组配置都是可改的吗?
从配置项是否可改的维度,分为:
1)节点首次启动生成创世块后不能再修改
2)通过发交易修改配置项实现账本内一致
3)修改自身配置文件后,节点重启生效
群组配置用户可以改的涉及哪些配置?
涉及2部分:
1)交易共识动态可改:[consensus].max_trans_num,[consensus].node.X,[tx].gas_limit。
2)配置改后重启可改:[sync].idle_wait_ms,[tx_pool].limit
群组配置更改途径是什么?
交易共识动态可改可以通过控制修改。控制台进入路径: ~/web3sdk/dist/bin/web3sdk -c
, [consensus].max_trans_num,[tx].gas_limit使用接口setSystemConfigByKey(ssc)更改,对于的配置项为tx_count_limit,tx_gas_limit。具体参见ssc -h 。[consensus].node.X的更改涉及到节点管理,控制台接口涉及到addMiner(am),addObserver(ao),removeNode(rn)。 群组配置查询途径是什么?
交易共识动态可改群组配置项查询除了控制台外,还可以通过RPC接口查询。控制台详细使用方法请参考《SDK控制台》,RPC详细使用方法请参考《FISCO BCOS2.0 JSON-RPC 接口》。
群组配置的本地配置是什么?
群组配置改后重启可改项就是本地配置,nodeX/conf下的group.*.ini文件,更改重启生效。涉及配置项为[sync].idle_wait_ms(设置同步线程启动同步区块状态发送的时间间隔),[tx_pool].limit(交易池容量),[consensus].ttl(节点转发数)。
【扩容】¶
扩容节点需要注意什么?
扩容后的节点需要先启动同步区块,等待区块同步完成之后再加入组网。
【升级】¶
是否支持从1.3或1.5升级到2.0版本?
不支持,由于版本差异较大,不支持大版本升级。
如何升级2.X版本?
直接停止所有区块链节点,替换编译好的fisco-bcos二进制文件,重新启动即可。
四. API¶
【RPC接口】¶
RPC接口有什么优点?
搭建好区块链之后,可以只通过curl命令调用区块链接口,方便好用。
RPC接口支持哪些功能?
支持查看区块链的信息,发送消息等,具体可以参考《RPC接口文档》
【控制台】¶
什么是控制台?
SDK控制台是FISCO BCOS2.0重要的交互式客户端工具,通过复用Java SDK的证书连接区块链节点。SDK控制台拥有丰富的命令,可以查询区块链状态,管理区块链节点,部署并调用合约等功能。
控制台帮助支持大小写吗?
不支持,只支持小写。
加入记账列表或观察者列表报错:nodeID is not in network?
节点加入记账列表和观察者列表的节点必须是连接peer的nodeID列表里面的成员。
删除节点操作报错:nodeID is not in group peers?
节点删除操作中的节点必须是getGroupPeers里面展示的group的peers。
被删除的节点,是否可以同步group数据
被删除的节点将不会再参与group内的共识、同步和出块,被删除的节点可以通过am/ao命令可以将退出的节点添加为共识/观察节点。
控制台返回超时处理需注意什么事项?
切记不要立即做重复的操作,请认真确认交易是否操作成功,以免出现多笔交易。
设置和查询系统配置有什么注意事项?
max_trans_num和gas_limit两个系统配置是写在tx_count_limit/tx_gas_limit表里的,手动修改group.X.genesis文件系统是无法动态获取的,只能通过控制台setSystemConfigByKey设置。
sdk配置文件在一个群组内配置多个节点连接时,为啥查询控制台返回的信息不一致?
当sdk配置文件在一个群组内配置多个节点连接时,由于群组内的某些节点在操作过程中可能退出群组,因此sdk轮询节点查询时,其返回信息可能不一致,属于正常现象。建议使用控制台时,配置一个节点或者保证配置的节点始终在群组中,这样在同步时间内查询的群组内信息保持一致。
统一节点属于不同的group,是否可以支持查询多group的信息?
可以,在进入控制台时,输入要查看的groupID: ./web3sdk -c [groupID]
【java SDK】¶
java要求的版本是?
oracle jdk 1.8(open jdk 1.8不符合要求)
首次配置完成,发送交易失败的最常见原因是什么?
applicationContext.xml中的ip、端口、群组号填错或者是缺少keystore.p12和ca.crt证书。