在Hyperledger Fabric中,并发访问不会失败。
我将LevelDB用作分类帐状态的提供者,并且在合同中有一种方法可以读取当前状态,更新状态并返回结果。
const buffer = await ctx.stub.getState(assetId);
const asset = JSON.parse(buffer.toString()) as Asset;
if (asset.read) throw new Error(`Can't be read`);
asset.read = true;
const newBuffer = Buffer.from(JSON.stringify(asset));
await ctx.stub.putState(assetId, newBuffer);
测试:
docker exec cli peer chaincode invoke --orderer orderer.example.com:7050 --channelID mychannel -c '{"Args":["read", "CODE"]}' -n hellonet & \
docker exec cli peer chaincode invoke --orderer orderer.example.com:7050 --channelID mychannel -c '{"Args":["read", "CODE"]}' -n hellonet
下一个结果:
2019-07-09 11:37:57.894 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 payload:"{\"value\":\"VAL01\",\"read\":true}"
2019-07-09 11:37:58.092 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200 payload:"{\"value\":\"VAL01\",\"read\":true}"
在并发访问时,它仅返回结果,而不是在MVCC期间失败。我想念什么?