В 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.Чего мне не хватает?