总结部署fabirc以及调试go sdk 遇到的坑

最近在联调fabirc网络遇到了很多坑,主要是对fabric不够熟悉,所以解决问题的时候即使看到了错误信息,也不能很快的确定具体是那里出现了问题,而且问题确实谷歌不到,所以简单记录一下。

坑1:

 CA Certificate is not valid, (SN: 234551506279605485472670524472959491447): could not obtain certification chain: the supplied identity is not valid: x509: certificate has expired or is not yet valid"

证书过期,错误提示的已经很明显了,但是仔细看错误信息显示过期时间还没到(这里我没把错误截全),但是还重新生成了证书,依然出现过期的错误。

解决办法:

  • 原来是服务器上的时间问题,同步一下时间就好了(这里我用的虚拟机,正常的机器应该不会有这个问题…)

坑2:

Error: proposal failed (err: bad proposal response 500)

加入通道的时候出现这个错误,往往是重复加入channel了,这个问题主要是吃亏在没仔细分析错误志,出现问题还是先不要复制粘贴百度。

解决办法:

  • 将实例进行回滚
  • 修改通道名称和组织名

坑3:

使用fabric-go-sdk 实例化时报错:users not found

读取config.yml文件来创建一个sdk 的实例发生的error,排除自己方法传参无误,配置文件的用户名和orgname 也没有问题,谷歌也查不到,只能对着源码中的示例一个个去对比,对比哪里缺少用户信息的配置。

解决办法:

  • 在organizations 这一层下对应的org 添加上相应的用户名和证书路径
organizations
    org1:
     users:
          Admin:
            cert:
              path: ****.pem
          User1:
            cert:
              path: ****.pem

坑4:

sending deploy transaction proposal failed: Transaction processing for endorser [peer0.org-maggie.ansible-example.ee-chain.com:7051]: Endorser Client Status Code: (2) CONNECTION_FAILED. Description: dialing connection timed out [peer0.org-maggie.ansible-example.ee-chain.com:7051]

sdk 实例化链码时出现的错误:先去看了另一台机器上的7051端口的进程是不是正常启动的,确认了hosts 文件也没有问题,仔细想想peer节点部署都是ansible统一处理的,如果有问题的话,之前的步骤应该是不会成功的。而且为什么是其中一台机器链接正常的。

解决办法:

  • 在entityMatchers 配置项下 也需要加入peer0.org-maggie.ansible-example.ee-chain.com:7051对应的机器配置
entityMatchers:
  peer:
  - pattern: (\w*)org-martin(\w*)
    urlSubstitutionExp: 47.96.230.111:7051
    eventUrlSubstitutionExp: 47.96.230.111:7053
    sslTargetOverrideUrlSubstitutionExp: peer0.org-martin.ansible-example.ee-chain.com
    mappedHost: peer0.org-martin.ansible-example.ee-chain.com

  - pattern: (\w*)org-maggie(\w*)
    urlSubstitutionExp: 121.196.210.111:7051
    eventUrlSubstitutionExp: 121.196.210.111:7053
    sslTargetOverrideUrlSubstitutionExp: peer0.org-maggie.ansible-example.ee-chain.com
    mappedHost: peer0.org-maggie.ansible-example.ee-chain.com

  orderer:
  - pattern: (\w*)org-martin(\w*)
    urlSubstitutionExp: 47.96.230.111:7050
    sslTargetOverrideUrlSubstitutionExp: orderer0.org-martin.ansible-example.ee-chain.com
    mappedHost: orderer0.org-martin.ansible-example.ee-chain.com

坑5:

sending deploy transaction proposal failed: Transaction processing for endorser [121.196.210.111:7051]: Endorser Client Status Code: (23) CHAINCODE_NAME_NOT_FOUND. Description: cannot get package for chaincode (scc:1.0)

实例化链码链码时出现的问题:基于上一个坑,配置文件没错的情况下,错误信息是某台机器上没有这个包
解决办法:

  • 安装链码时应该在所有的peer节点上进行安装
  • 如果链码时多个文件,引入了一些第三方包,最好是直接将链码放gopath下(之前遇到了这个问题,但是现在复现的话,又没报错了)

还有一部分问题,过程中没有记录,不愿破坏现在的测试网络,所以就没有复盘,下次记录:P
原理问题之后复习了fabirc 的理论知识在做补充


总结常见套路:

环境问题

  • 测试调试的时候还是要保证网络干净避免channel已存在,或者组织重复加入channel 等等问题

网络连接问题

  • 检查进程是否正常运行
  • 配置文件中ip/hosts相关的配置项没有写错
  • 检查容器是否正常
  • hosts 文件是不是不对

证书问题

  • 路径问题或者用错了证书
  • 过期

链码问题

  • 多个peer节点的网络不能只在一个peer节点上安装链码
  • 放gopath下
  • 实例化参数不要搞错了在go sdk 中都是[][]byte{[]byte("init"), []byte("A"), []byte("100"), []byte("B"), []byte("200")}的形式

配置文件问题

  • 不熟悉的情况下遇到配置项是entityMatchers,organizations,orderers,peers这类的复数的形式配置项的还是老老实实全部都填上
  • 熟悉每个配置项的作用以及文件的作用

另外重要的事情说三遍!
仔细看错误日志!
仔细看错误日志!
仔细看错误日志!

猜你喜欢

转载自blog.csdn.net/raogeeg/article/details/83586382