【问题标题】:Cannot invoke a function that change or retrieve function of a chaincode?无法调用更改或检索链码函数的函数?
【发布时间】:2019-05-12 14:13:36
【问题描述】:

问题:

我创建了一个 Hyperledger 结构网络,其中包含六个组织,每个组织 2 个对等点。运行网络后,我在每个组织的一个对等方上安装 fabcar 链代码,然后使用此命令实例化链代码。

peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -n fabcar -l node -v 1.0  -c '{"Args":["init"]}' -C myc -P "AND ('Org2MSP.peer','Org1MSP.peer',Org3MSP.peer','Org4MSP.peer','Org5MSP.peer','Org6MSP.peer')"

到此命令为止,一切都顺利发生,没有给我一个错误。在我尝试使用此命令调用函数之后。

peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C myc -n fabcar -c '{"Args":["initLedger"]}

此命令将此错误保留在特定对等日志中。

2019-05-12 13:38:01.162 UTC [gossip.privdata] StoreBlock -> INFO 191 [myc] 从缓冲区 2019-05-12 13:38:01.213 收到块 [8] UTC [vscc] 验证 -> ERRO 192 VSCC 错误: stateBasedValidator.Validate 失败,背书验证错误 tx 8:0 中链码 fabcar 的策略失败:签名集没有 满足政策 2019-05-12 13:38:01.213 UTC [committer.txvalidator] validateTx -> ERRO 193 VSCCValidateTx 交易 txId = a17c0deb20af5a4e0a232fa432ea13e74fca101b63cb697384bbaced80905773 返回错误:验证链码 fabcar 的背书策略 在 tx 8:0 中失败:签名集不满足策略 2019-05-12 13:38:01.258 UTC [committer.txvalidator] 验证 -> INFO 194 [myc] 在 96 毫秒内验证区块 [8] 2019-05-12 13:38:01.259 UTC [valimpl] preprocessProtoBlock -> WARN 195 Channel [trafficfine]: 区块 [8] 交易索引 [0] TxId [a17c0deb20af5a4e0a232fa432ea13e74fca101b63cb697384bbaced80905773] 提交者标记为无效。原因码 [ENDORSEMENT_POLICY_FAILURE]

这是 chincode 上的日志。

fabcar@1.0.0 启动 /usr/local/src 节点 fabcar.js "--peer.address" "peer0.org2.example.com:9052"

2019-05-12T13:35:08.951Z 信息 [lib/chaincode.js]
信息:向对等 peer0.org2.example.com:9052 注册为链码 "fabcar:1.0" {"时间戳":"2019-05-12T13:35:08.951Z"} 2019-05-12T13:35:09.232Z 信息 [lib/handler.js]
info:成功注册到对等节点。状态转移到 “建立”{“时间戳”:“2019-05-12T13:35:09.232Z”} 2019-05-12T13:35:09.234Z 信息 [lib/handler.js]
info:与对等节点成功建立通信。状态 转移到“就绪”{“时间戳”:“2019-05-12T13:35:09.234Z”} =========== 实例化的 fabcar 链代码 =========== 2019-05-12T13:35:09.240Z 信息 [lib/handler.js]
信息:[myc-8ecdb2a5] 调用链码 Init() 成功。发送 COMPLETED 消息返回给对等方 {“时间戳”:“2019-05-12T13:35:09.240Z”} { fcn:'initLedger',参数: [] } ============= 开始:初始化分类帐 =========== 成功 { 状态:200,消息:'',有效负载:} 添加 { make: 'Toyota',型号:'Prius',颜色:'blue',所有者:'Tomoko',
docType:'car'}成功{状态:200,消息:'',有效载荷: } 添加 { 品牌:“福特”,型号:“野马”,颜色: 'red',所有者:'Brad',docType:'car'}成功{状态:200, 消息:'',有效负载:} 添加 { make: '现代',
型号:'Tucson',颜色:'green',所有者:'Jin Soo',docType: 'car' } 成功 { 状态:200,消息:'',有效负载:} 添加 { 品牌:“大众”,型号:“帕萨特”,颜色: '黄色',所有者:'Max',docType:'car'}成功{状态:200, 消息:'',有效负载:} 添加 { make: 'Tesla',
型号:“S”,颜色:“黑色”,所有者:“阿德里安娜”,文档类型:“汽车”} 成功{状态:200,消息:'',有效负载:}已添加 { 品牌:“标致”,型号:“205”,颜色:“紫色”,所有者: 'Michel', docType: 'car' } 成功 { status: 200, message: '', 有效载荷:} 添加 { 品牌:“奇瑞”,型号:“S22L”,
颜色:“白色”,所有者:“Aarav”,文档类型:“汽车”} 成功 { 状态:200,消息:'',有效负载:} 添加 { make: “菲亚特”,型号:“Punto”,颜色:“紫罗兰色”,所有者:“Pari”,
docType:'car'}成功{状态:200,消息:'',有效载荷: } 添加了 { make: 'Tata', model: 'Nano', color: 'indigo',所有者:'Valeria',docType:'car'}成功{状态: 200,消息:'',有效负载:} 添加 { make: 'Holden',
型号:“Barina”,颜色:“棕色”,所有者:“Shotaro”,文档类型: '车' } ============= END:初始化分类帐 ============ 2019-05-12T13:37:58.998Z 信息 [lib/handler.js]
信息:[myc-a17c0deb] 调用链码 Invoke() 成功。发送 COMPLETED 消息返回给对等方 {"时间戳":"2019-05-12T13:37:58.998Z"}

我尝试了很多方法来找出我的网络出了什么问题。但我无法找到。有人可以帮我解决这个问题吗?谢谢。

【问题讨论】:

    标签: node.js hyperledger-fabric


    【解决方案1】:

    您的背书政策是 AND 政策,因此您需要收集您的政策中定义的所有组织的背书。您可以在调用命令中使用 [--peerAddresses] 标志将事务发送到不同组织中的多个对等点,并获取策略所需的签名。

    【讨论】:

    • 为此,我需要提供 tlsrootcerts 是不是你可以给我带有这两个标志的示例命令。因为当我放置 tlsrootcert 数组时,它说没有这样的文件或目录。
    • 我这样指定。'/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt'
    • 使用两个组织调用链码的示例命令:--peerAddresses peer0.org1.example.com:7051 peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github .com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt /opt/gopath/src/github.com/hyperledger/fabric/peer /crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt 如果它说没有这样的文件或目录,那么您可以使用“docker exec”命令 ssh 到您的对等方机器并确认文件是否存在。
    • 还要确认是否启用了 TLS 以及是否在你的 docker compose 文件中设置了 TLS 环境变量
    猜你喜欢
    • 2018-07-06
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    相关资源
    最近更新 更多