Hyperledger fabric 两种不同链码方法的不同跨链码行为

Hyperledger fabric 两种不同链码方法的不同跨链码行为,hyperledger-fabric,blockchain,chaincode,Hyperledger Fabric,Blockchain,Chaincode,我正在调用chaindode的set方法中的跨链代码,它正确地记录了我发送的信息。但是,当我从get方法调用交叉链代码时,数据不会被记录 为了验证这不是实现失败,我将get方法中的函数复制到set方法中作为测试,它正确响应,因此我怀疑这是从另一个方法调用相同的交叉链码的事实 正常工作的集合方法代码的一部分,包括从获取方法复制的函数: log.SetFlags(0) uuid = uuidgen() TxID = stub.GetTxID() timestamp = timeNow() log.P

我正在调用chaindode的set方法中的跨链代码,它正确地记录了我发送的信息。但是,当我从get方法调用交叉链代码时,数据不会被记录

为了验证这不是实现失败,我将get方法中的函数复制到set方法中作为测试,它正确响应,因此我怀疑这是从另一个方法调用相同的交叉链码的事实

正常工作的集合方法代码的一部分,包括从获取方法复制的函数:

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
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"
失败之处在于,当查询交叉链码时,它返回资产尚未插入。前四个日志已从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
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"
响应3zjRkx5KXL65KPn4XGc9SjgWBRVS07i07ecWTMmCRf8=
响应A+MQ4UJLRVTRYVXEGSGA5PVK2WTUJKYA0NYKXMWTG0=
响应vlstiHrCz2tw3t8Ba4C9GbHo/NYRVWSTP8JNAJC=
响应KYE+acbDesekYslXT87EEZ546eVSIUREJlHI+8f8ZNY=
回溯(最近一次呼叫最后一次):
文件“query.py”,第91行,在
response=loop.run_直到_完成(cli.chaincode_查询)(
文件“/usr/lib/python3.8/asyncio/base\u events.py”,第616行,运行直到完成
返回future.result()
文件“/usr/local/lib/python3.8/dist packages/fabric_sdk_py-0.9.0-py3.8.egg/hfc/fabric/client.py”,
第1328行,在chaincode_查询中
返回等待链码。查询(请求者、通道名称、对等方、参数、,
文件“/usr/local/lib/python3.8/dist packages/fabric_sdk_py-0.9.0-py3.8.egg/hfc/fabric/chaincode.py”,
查询中的第316行
引发异常(res)
例外:[响应{
现状:500
消息:“未找到资产:3280ca60-0352-40c4-83ab-b9c8e25d0f1f”
为了澄清错误,我创建了以下图像:

1A)通过Python SDK调用事务(用例链码),并设置在区块链中添加对等方(A,Aval)的方法

2A)通过put状态API(用例链码)添加对等方(A、Aval)。此操作生成日志

3A)收集登录链,并通过跨链调用(从用例链码到基本链码)将其发送给另一个链码

4A)通过put状态API(基本链码)添加对(logUUID,base64(sha256(log(SET(A)))

5A)通过get方法查询用例链码,从

6A)通过usecase chaincode中的get state API查询A的AVA。此操作生成新记录

7A)收集登录链码并通过跨链码调用将其发送给另一个链码

8A)通过put状态API(链码基)添加对(logUUID,base64(sha256(log(GET(A)))

1B)通过get方法查询基本链码以检索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))(这里发生错误)。

该错误是由Python SDK函数链码查询产生的

我在Hyperledger Fabric Python SDK中提出了一个问题。但是,为了解决这个问题,我使用chaincode_invoke而不是chaincode_查询

现在,我可以从[get]方法生成和检索日志

…并对其进行验证: