【发布时间】:2021-05-07 22:01:06
【问题描述】:
我正在从我的 chaindode 的 set 方法调用交叉链码,它会正确记录我发送的信息。但是,当我从 get 方法调用交叉链码时,数据不会被记录。
为了验证这不是实现失败,我将 get 方法中的函数复制到 set 方法中作为测试,它响应正确,所以我怀疑这是从另一个方法调用相同的跨链代码的事实。
部分set方法代码正常工作,包括从get方法复制的函数:
log.SetFlags(0)
uuid = uuidgen()
TxID = stub.GetTxID()
timestamp = timeNow()
log.Println("["+timestamp+"]["+uuid+"]["+CHANNEL_ENV+"]["+TxID+"][usecase_cc][Transaction] Transaction makes payment of X units from A to B")
re = captureOutput(func(){
log.Println("["+timestamp+"]["+uuid+"]["+CHANNEL_ENV+"]["+TxID+"][usecase_cc][Transaction] Transaction makes payment of X units from A to B")
})
invokeArgs = prepareToInvoke(uuid, re)
stub.InvokeChaincode("base_cc", invokeArgs, CHANNEL_ENV)
//IMPORTED FROM GET METHOD
Avalbytes, err = stub.GetState(A) // Get the state from the ledger
log.SetFlags(0)
uuid = uuidgen()
TxID = stub.GetTxID()
timestamp = timeNow()
jsonResp := "{\"Name\":\"" + A + "\",\"Amount\":\"" + string(Avalbytes) + "\"}"
log.Println("["+timestamp+"]["+uuid+"]["+CHANNEL_ENV+"]["+TxID+"][Get] Query Response: "+jsonResp)
re = captureOutput(func(){
log.Println("["+timestamp+"]["+uuid+"]["+CHANNEL_ENV+"]["+TxID+"][Get] Query Response: "+jsonResp)
})
invokeArgs = prepareToInvoke(uuid, re)
stub.InvokeChaincode("base_cc", invokeArgs, CHANNEL_ENV)
//IMPORTED FROM GET METHOD
失败是在查询交叉链码时返回资产没有被插入。前四个日志已从 set 方法插入,最后一个失败的日志已尝试从 get 方法插入:
response 3zjRkx5KXL65KPn4XGc9SjgWBRVS07i07ecWTMmCRf8=
response A+Mq4UjLrvTRyVXEgBsgA5Pvk2WTUjKYa0NYKxMwtG0=
response vlstiHrCz2tw3t8Ba4C9GbHo/nYrVwstP8JnEPhRAJc=
response KYE+acbDesekYslXT87EEZ546eVSIUREJlHI+8f8ZNY=
Traceback (most recent call last):
File "query.py", line 91, in <module>
response = loop.run_until_complete(cli.chaincode_query(
File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
return future.result()
File "/usr/local/lib/python3.8/dist-packages/fabric_sdk_py-0.9.0-py3.8.egg/hfc/fabric/client.py",
line 1328, in chaincode_query
return await chaincode.query(requestor, channel_name, peers, args,
File "/usr/local/lib/python3.8/dist-packages/fabric_sdk_py-0.9.0-py3.8.egg/hfc/fabric/chaincode.py",
line 316, in query
raise Exception(res)
Exception: [response {
status: 500
message: "Asset not found: 3280ca60-0352-40c4-83ab-b9c8e25d0f1f"
为了澄清错误,我创建了这张图片,其中: Cross-Chaincode
1A) 通过 Python SDK 调用交易(用例链码),并设置方法在区块链中添加对等点(A,Aval)。
2A) 通过 put state API(用例链码)添加对等点(A,Aval)。此操作会生成日志。
3A) 收集链上日志并通过跨链调用(从用例链码到基础链码)将其发送到另一个链码。
4A) 通过 put state API (Base Chaincode) 添加对 (logUUID, base64(sha256(log(SET(A))))。
5A) 通过get方法查询用例链码,从A中检索Aval。
6A) 通过用例链码中的获取状态 API 查询 A 的 Aval。此操作会生成一条新记录。
7A) 收集登录链码,并通过跨链码调用将其发送到另一个链码。
8A) 通过 put state API(链代码库)添加对 (logUUID, base64(sha256(log(GET(A))))。
1B) 通过get方法查询base chaincode以获取base64(sha256(log(SET(A)))。
2B) 通过链码库中的 get state API 从 logUUID 中检索 base64(sha256(log(SET(A))))。
3B) 通过 get 方法查询基本链码以检索 base64(sha256(log(GET(A))))。
4B) 通过链码库中的 get state API 从 logUUID 中检索 base64(sha256(log(GET(A)))(出现错误)。 p>
【问题讨论】:
标签: hyperledger-fabric blockchain chaincode