5. FAQ

5.1. 管理平台

5.1.1. 订阅链失败

如提示”订阅链失败,与节点连接失败,请检查节点端口是否开放”,需检查以下几点:

1. 链节点端口是否开放

2. 所订阅的链的节点部署的ip和端口是否和生成节点证书时填写的一致;导入外部证书时,填写的ip和端口是否与已启动的链一致。

3. 链是否为容器启动,容器启动的链不能用容器启动的管理台订阅,因为网络是不通的。

4. 外部导入的tls证书是否正确

5. 申请和导入节点证书时,ip地址不能填127.0.0.1

如提示”订阅链失败,证书错误,请检查用户证书是否正确”,需检查以下几点:

1. 一般导入外部链容易出现,请检查是否全部证书导入正常,是否和链使用的证书为同一套。

如提示”订阅链失败,tls握手失败,请检查证书是否正确”,需检查以下几点:

1. 一般导入外部链容易出现,请检查TLS证书是否正确导入,是否是订阅组织下的用户。

如提示”订阅链失败,chainId错误,请检查chainId是否正确”,需检查以下几点:

1. 请检查订阅的输入chainid是否和链一致。

5.1.2. 管理平台区块高度落后于链

一般由管理平台订阅中断导致,请重新订阅。订阅中断可能由以下原因引起:

1. 链节点关闭或重启
2. 链节点所在机器磁盘空间不足
3. 链节点出现异常,检查日志
4. 导入已经部署的2.1.0版本链,并使用docker-go合约,会导致订阅失败

5.1.3. 管理平台上链交易失败

一般由合约问题和合约参数问题导致,检查合约和参数是否正常,检查链是否正常运行

5.1.4. 管理平台上链成功后,交易id不存在或不能跳转

管理平台调用合约后,会同步查询该交易txID,确认是否成功出块,如果查不到会导致该问题,可能由以下原因导致

1. 链异常,检查链日志和panic日志
2. 链返回数据大,导致超时

5.1.5. 管理平台部署合约为什么要投票

部署合约需按照对应策略进行线下多签,才能正常部署到链上。 目前策略分别有MAJORITY、ANY、ALL,分别对应超半数组织投票,任意组织投票和所有组织投票。可通过sdk或者cmc工具修改多签策略

5.1.6. 投票失败

检查投票组织下是否有用户,如果没有请申请用户证书,如果是导入的组织,请导入该组织下用户证书

5.1.7. 投票完成后,合约部署失败

合约部署失败可能由以下几个原因引起:

1. 链异常,检查链日志和panic日志
2. 链返回数据大,导致超时
3. 合约或者传参有问题

5.1.8. 管理平台的浏览器合约执行结果乱码

合约执行结果是由合约内容控制,需自己手写合约。系统合约执行是乱码,比如部署用户合约,实际是调用了系统合约,该交易执行结果为乱码

5.1.9. 怎么修改节点ip和端口

目前还不支持修改

5.2. 区块链浏览器

5.2.1. 订阅链失败

需检查以下几点:

1. 链节点端口是否开放
2. 所订阅的链的节点部署的ip和端口是否与已启动的链一致。
3. 链是否为容器启动,容器启动的链不能用容器启动的浏览器订阅,因为网络是不通的。
4. tls证书是否正确
5. 节点ip地址不能填127.0.0.1

5.3. java sdk

5.3.1. build失败,错误:找不到符号 import sun.security.ec.CurveDB;

CurveDB是用来实现国密tls的依赖包。jdk 在1.8的不同版本中该包位置有变动,较低版本为sun.security.ec.CurveDB, 较高版本为sun.security.util.CurveDB,请自行替换。maven官方仓库为较低版本sun.security.ec.CurveDB。

5.3.2. 发送交易sendTxRequest失败:connect to peer error

与节点建立连接失败,可能由以下原因导致:

  1. 链节点端口未开放

  2. 链节点端口配置错误

  3. tls证书和私钥配置错误,及sdk_config.yml中的user_key_file_path和user_crt_file_path配置,需和链用户保持一致

  4. 根证书路径trust_root_paths配置错误,该配置值为证书路径

  5. 链开启tls,而sdk关闭tls,或者相反。总之原则就是同时开启或者同时关闭

5.3.3. 发送交易异常:tx verify failed, verify tx authentation failed, authentication error: authentication failed, [refine endorsements failed, all endorsers have failed verification]

交易发送者用户身份错误,具体表现为签名证书配置错误,sdk_config.yml中的user_sign_key_file_path和user_sign_crt_file_path配置,需和链用户保持一致

5.3.4. 创建合约异常(多签异常):authentication fail: not enough participants support this action: 3 valid endorsements required, 2 valid endorsements received

创建合约需线下多签,多签用户不足,或多签用户证书配置错误,java sdk test中的多签用户为TestBase中的adminUser1、adminUser2、adminUser3,需为这个三个用户配置正确的证书和私钥

5.3.5. 依赖sdk jar包须知

应用项目中,使用sdk jar包可通过maven仓库直接依赖,需注意一下几点:

  1. 需将sdk代码/lib目录中提供的netty-tcnative-openssl-static-2.0.39.Final.jar包引入到项目中

  2. 需将sdk的配置文件放在应用项目中

  3. windows系统需将动态库文件 libcrypto-1_1-x64.dll 和 libssl-1_1-x64.dll 放到项目中的resources/win32-x86-64目录中,可参考skd代码。本机需安装openssl。

5.4. 其他

5.4.1. 长安链采用什么语言开发?

长安链采用Go语言开发

5.4.2. 智能合约支持什么语言?

智能合约目前支持Go、Solidity、RUST、C++、TinyGo

5.4.3. 合约开发建议采用哪种开发语言?建议使用的开发工具是什么?

建议开发语言:rust,合约内可以引用大多数外部依赖(如:含随机数的不可用)。 建议开发工具:vscode,+ 插件:rust-analyzer

5.4.4. 智能合约中PutState有两个参数是什么意思?

func PutState(key string, field string, value string) ResultCode

实际存储到leveldb的key为:contractName + “#” + key + field

长度限制: key:64、 field:64、 value:1M

且key、field符合正则^[a-zA-Z0-9._-]+$,只能为英文字母、数字、点、横杠、下划线

两个参数的原因:一个逻辑性的命名空间概念,key作为namespace一般为有规律的值

5.4.5. 不同组织间有没有共同的ca,证书的组织和org_id有什么联系?

不同组织间的CA证书可以使用同一个。但是不建议这样做,建议是一个组织一个CA证书。

证书的组织字段和trust_roots的org_id字段,无强制联系。

# 各组织不同CA配置
trust_roots:
  - org_id: "wx-org1.chainmaker.org"
    root: "ca1.crt"
  - org_id: "wx-org2.chainmaker.org"
    root: "ca2.crt"
  - org_id: "wx-org3.chainmaker.org"
    root: "ca3.crt"
    
# 各组织相同CA配置
trust_roots:
  - org_id: "wx-org1.chainmaker.org"
    root: "ca1.crt"
  - org_id: "wx-org2.chainmaker.org"
    root: "ca1.crt"
  - org_id: "wx-org3.chainmaker.org"
    root: "ca1.crt"

5.4.6. 组织间的数据能否实现哪些数据可以公开给对方,哪些数据不能公开给对方

上链数据均共享。可以根据场景需要,采用混合加密、分层身份加密、同态加密、零知识证明等方式保护数据隐私

5.4.7. 合约代码是否需要每个组织节点都部署?

合约代码部署也是一个交易。发送给某个节点后,该节点会把交易广播到自己的网络中。其他节点也就有了这个交易了。交易上链需要各个节点达成共识,其他共识节点也会执行该交易。

5.4.8. 节点的node_id如何生成

可使用cmc工具可获取nodeid: ./cmc cert nid -h,是对证书的公钥进行SHA2_256,再base58编码后形成nodeid

5.4.9. PermissionedWithCert、PermissionedWithKey、Public 模式的区别是什么?

长安链的用户标识体系分为以下两大类:

  1. 基于数字证书的用户标识体系——PermissionedWithCert 即证书模式,为长安链的默认用户标识体系。通常适用于权限控制要求较高的应用场景。

  2. 基于公钥的用户标识体系:

  • PermissionedWithKey,该模式下进行管理操作时需要权限验证,通常适用于权限控制要求较高的应用场景。

  • Public 该模式下进行管理操作时不需要权限验证,通常适用于权限控制要求不高的应用场景。

5.4.10. 一条链是否支持同时使用PermissionedWithCert、PermissionedWithKey、Public等多个模式?

暂不支持,某条链只能选择其中一种模式。

5.4.11. 长安链的组织证书是用来干嘛的?

长安链的组织证书即配置trust_root里面的证书,用来验证交易发起者或链参与者是否为该链的联盟成员。trust_root中可以配置组织根证书或组织中间证书。建议使用组织中间证书,以免根证书遗失或不慎泄露造成的不便。

5.4.12. 长安链的节点证书是用来干嘛的?

长安链的节点证书分为两类。一类是TLS证书,一类是sign证书。TLS证书用于跟客户端建立TLS链接以及节点间通信。sign证书用于签名验签等,通常在创建交易和共识投票过程中使用。上述证书均需通过CA证书 签发获得。 通过建链脚本生成的节点证书为consensus和common两套,均包括上述TLS和sign证书。其中,配置使用的是consensus(共识节点),而common(同步节点)作为预留。

5.4.13. 长安链的用户证书是用来干嘛的?

长安链的用户证书从角色上分为admin、client和light三类。

  • admin角色证书,通常称为管理员证书,该证书拥有对系统合约(管理类)调用交易的签名投票权限。链配置中的权限配置项,默认为admin角色。

  • client角色证书,通常称为普通用户证书,该证书拥有用户合约(普通类)调用交易和查询类交易的操作权限。

  • light角色证书,通常称为轻节点证书,该证书拥有查询类交易的操作权限,可由轻节点配置使用。

上述每种角色的用户从用途上分为TLS和sign两种,主要作用分别是:

  • 用户TLS证书主要用于用户与节点建立TLS链接。

  • 用户sign证书主要用于用户对交易进行签名。

5.4.14. 如何申请证书?

证书可以通过 chainmaker-crypogen 或者自建 CA 证书服务生成 生成的证书包括:

  • CA 证书

  • 节点证书

    • 共识节点的TLS 证书和sign证书

    • 同步节点的TLS证书和sign证书

  • 用户证书

    • admin 证书的TLS证书和 sign 证书

    • client 证书的TLS证书和 sign 证书

    • light 证书的TLS证书和 sign 证书

5.4.15. 一个组织的证书申请数量是否有有上限?

理论上没有上限

5.4.16. 是否支持外部证书,外部证书和长安链证书在使用上有什么差异点?

长安链支持外部证书。 外部证书即不是长安链CA(chainmaker-ca)和长安链证书生成工具(chainmaker-cryptogen)生成的X.509标准的数字证书,例如,由BJCA签发的证书。 外部证书和长安链证书在使用上没有差异。需要注意的是配置外部证书时,需要增加role配置项(长安链证书使用X.509的OU字段作为role使用),对应证书的角色信息。具体配置请参考:外部证书使用参考

5.4.17. 证书的有效期为多久?

长安链证书生成工具(chainmaker-cryptogen)生成的的证书默认有效期5年;可通过配置文件指定; 长安链CA(chainmaker-ca)生成的的证书默认有效期1年;可通过配置文件指定; 证书的有效期可以使用长安链CA证书服务在生成证书的时候指定。用户也可以按需延长证书的有效期。长安链CA 证书服务

证书的有效期可以通过openssl查看 openssl x509 -in ca-sign.crt -noout -text

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 464217 (0x71559)
        Signature Algorithm: 1.2.156.10197.1.501
        Issuer: C = CN, ST = Beijing, L = Beijing, O = wx-org1.chainmaker.org, OU = root-cert, CN = ca.wx-org1.chainmaker.org
        Validity
            Not Before: Feb 11 03:08:18 2022 GMT
            Not After : Feb  9 03:08:18 2032 GMT
        Subject: C = CN, ST = Beijing, L = Beijing, O = wx-org1.chainmaker.org, OU = root-cert, CN = ca.wx-org1.chainmaker.org
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:b3:8d:35:b6:3c:d1:2e:1e:be:ee:b4:d5:19:e1:
                    fc:f4:f3:99:d0:51:1e:29:e4:c5:c1:b7:36:cf:75:
                    6a:63:66:a2:83:a3:0e:9a:a6:ea:35:8c:85:87:11:
                    68:d7:52:8f:a3:08:b1:c5:81:36:d1:e0:49:99:32:
                    37:b4:71:d3:cd
                ASN1 OID: SM2
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier: 
                AE:F3:05:93:10:85:6E:EC:94:47:0E:42:54:35:46:1A:7E:03:D8:57:63:31:E7:D9:84:42:7C:CF:7C:93:8B:9B
            X509v3 Subject Alternative Name: 
                DNS:chainmaker.org, DNS:localhost, DNS:ca.wx-org1.chainmaker.org, IP Address:127.0.0.1
    Signature Algorithm: 1.2.156.10197.1.501
         30:45:02:21:00:b6:1c:57:ae:10:93:61:a2:1e:a3:4d:08:6a:
         f3:4e:b0:e6:99:ee:f8:22:de:7f:4b:0d:dc:1b:4b:b9:63:88:
         2e:02:20:1e:ba:ac:2a:e0:14:fc:43:77:cc:92:ff:6f:d4:8b:
         3a:3f:02:19:0e:b3:af:07:da:bf:68:3e:fe:6c:a3:33:66

证书解析后,根据以下字段可知该证书的有效期如下:

Validity
            Not Before: Feb 11 03:08:18 2022 GMT
            Not After : Feb  9 03:08:18 2032 GMT

5.4.18. 证书支持哪些管理,如何管理证书?

长安链证书可以通过长安链CA、证书生成工具cryptogen或外部CA进行链下管理,具体操作如下(如果使用外部CA,请参考服务提供商使用手册。如果使用长安链提供工具,可以参考:长安链CA的使用请参考证书生成工具cryptogen的使用请参考 ):

  • 申请证书(支持CSR方式)

  • 延期证书

  • 撤销证书

  • 查询CRL证书撤销列表

  • 查询证书

长安链提供了cmc工具将证书的状态在链上进行同步管理,具体操作包括( 通过cmc命令工具进行管理证书):

  • 证书crl撤销列表上链

  • 吊销证书信息上链

5.4.19. TLS证书是否一定需求,还是可以按需选择?

长安链的客户端与节点通信,节点间通信均建议使用TLS通信。 其中,客户端与节点间的TLS通信可选择是否开启,节点间TLS通信则必须开启。

5.4.20. TLS怎么开启和关闭?

用户可以通过修改配置文件chainmaker.yml选择是否开启TLS。(长安链仅支持选择客户端与节点间是否启用TLS链接)

# RPC TLS settings
  tls:
    # TLS mode, can be disable, oneway, twoway.
    mode:           disable

    # RPC TLS private key file path
    priv_key_file:  ../config/wx-org1.chainmaker.org/certs/node/consensus1/consensus1.tls.key

    # RPC TLS public key file path
    cert_file:      ../config/wx-org1.chainmaker.org/certs/node/consensus1/consensus1.tls.crt

mode设置为disable即可关闭TLS 。 将mode的设置为 oneway(单向认证) 或 twoway(双向认证)即可开启TLS。

5.4.21. 长安链是否支持国密TLS,如果支持,再哪里可以启用?

长安链支持国密TLS。如启用国密TLS,只需要使用国密的TLS证书即可。 国密TLS证书 可以使用 chainmaker-crypogen 或者自建 CA 证书服务生成 工具生成。 chainmaker-crypogen: 需要修改配置 pk_algo: sm2。配置文件参考

crypto_config:
  - domain: chainmaker.org
    host_name: wx-org
    count: 4                # 如果为1,直接使用host_name,否则添加递增编号
		pk_algo: sm2
    ski_hash: sha256
    ## pkcs11配置

参考文档-配置文件一览

5.4.22. 链权限是否支持动态配置,如何配置?

链权限可以动态配置。长安链通过发起权限管理类系统合约实现权限修改。该系统合约交易符合当前权限策略要求,并经过共识和落块,则新配置就会生效。

5.4.23. 如何把一个组织踢出网络?

长安链通过将该组织根证书从trustroot列表移除的方式实现将组织踢出网络的操作。 移除trustroot前需先移除共识节点(若有),需要先删除该组织的共识节点。使用cmc删除共识节点 可通过cmc指令发起一个链配置系统合约调用进行操作,cmc命令参考

./cmc client chainconfig trustroot remove \
--sdk-conf-path=./testdata/sdk_config.yml \
--org-id=wx-org1.chainmaker.org \
--user-tlscrt-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.crt \
--user-tlskey-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.key \
--user-signcrt-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.sign.crt \
--user-signkey-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.sign.key \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.crt \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.key \
--trust-root-org-id=wx-org5.chainmaker.org \
--trust-root-path=./testdata/crypto-config/wx-org5.chainmaker.org/ca/ca.crt

5.4.24. 组织被踢出网络后,对组织下的节点和用户会有什么影响?

该组织下的节点不能入网参与共识,用户不能发起交易。

5.4.25. 如何把共识节点降级为同步节点?

长安链把共识节点降级为同步节点,只需要在链上将该共识节点的nodeId从censensus列表中删除。 删除共识节点nodeid的cmc命令参考

./cmc client chainconfig consensusnodeid remove \
--sdk-conf-path=./testdata/sdk_config.yml \
--org-id=wx-org1.chainmaker.org \
--user-tlscrt-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.crt \
--user-tlskey-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.key \
--user-signcrt-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.sign.crt \
--user-signkey-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.sign.key \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.crt \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.key \
--node-id=QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4 \
--node-org-id=wx-org1.chainmaker.org

5.4.26. 如何把一个共识节点踢出网络?

5.4.26.1. BFT类(TBFT、HotStuff)共识、RAFT共识

5.4.26.2. DPoS共识

5.4.27. 如何把一个同步节点升级为共识节点?

该操作与将共识节点降级为同步节点互为反操作,将该节点加入到consensus列表中,同时需要将chainmaker.yml配置文件的证书改为共识节点证书,并重启该节点。可通过cmc指令完成操作,指令如下:

./cmc client chainconfig consensusnodeid add \
--sdk-conf-path=./testdata/sdk_config.yml \
--org-id=wx-org1.chainmaker.org \
--user-tlscrt-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.crt \
--user-tlskey-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.tls.key \
--user-signcrt-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.sign.crt \
--user-signkey-file-path=./testdata/crypto-config/wx-org1.chainmaker.org/user/client1/client1.sign.key \
--admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.crt \
--admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.tls.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.tls.key \
--node-id=QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4 \
--node-org-id=wx-org5.chainmaker.org

5.4.28. 长安链的性能表现

TPS能达到10万级,并获得了信通院可信区块链联盟测试报告

5.4.29. 长安链在隐私计算方面的能力

长安链目前支持同态加密、零知识证明、层级加密等算法,并基于隐私合约方案在长安链上原生支持基于TEE的硬件可信计算环境方案,后续还会逐渐丰富扩展。