我已经组成了Hyperledger Fabric网络并安装并实例化了我的链码。但是,当我测试我的链码时,有一些事情不是我期望的。
例如,我的链码具有一个用于创建用户(使用PutState
)的API,但是如果给定的用户名已经存在(使用GetQueryResult
进行检查),它将通过返回错误来拒绝。
当我使用shell脚本测试链代码时,它可以很好地与以下代码配合使用:
# create user successfully
docker exec -it cli peer chaincode invoke ...
sleep 3
# attempt to create user with the same username which should fail and it does fail
docker exec -it cli peer chaincode invoke ...
但是,如果没有sleep 3
,它不会失败并成功写入分类帐。当我检查写在状态DB中的数据时,我看到了不应该写的后一个数据。
我认为是因为在处理第二个请求时,第一个分类帐(或块?)尚未转移到验证对等方。
如何避免这种行为?还是链代码不应该处理的事情?