Двойные расходы в сети Hyperledger Fabric - PullRequest
0 голосов
/ 09 июля 2019

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

...