为了账号安全,请及时绑定邮箱和手机立即绑定

无法将状态置于查询上下文中

无法将状态置于查询上下文中

Go
猛跑小猪 2022-01-10 17:36:40
我试图在我的链码中使用一个代码来定期更新链码状态,基于某些条件:func (t *SimpleChaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {  ticker := time.NewTicker(time.Millisecond * 10000)    go func() {        for t := range ticker.C {            fmt.Println("Tick at", t)            a = a+5            err:= stub.PutState("a", []byte(strconv.Itoa(a)))                 fmt.Println(err.Error())        }    }()return nil, nil}我正在使用用于调用的链码 REST api 发送调用事务:POST http://<ip>:<port>/chaincode{  "jsonrpc": "2.0",  "method": "invoke",  "params": {    "type": 1,    "chaincodeID":{        "name":"c7b3c82f1170423115dcfc2524189f96f156b30961e0a0e84426c425c22f3b4e8b6ecbf477b76e014bfce74b996dee476a2470cbddc14d390617192f00c22c38"    },    "ctorMsg": {        "function":"invoke",        "args":[]    }, "secureContext": "tom" },  "id": 1}但是 PutState 失败并显示以下日志:2016/05/20 13:44:04 [8bcbe40e]Inside putstate, isTransaction = falseTick at 2016-05-20 13:44:04.609079034 +0000 UTCCannot put state in query contextTick at 2016-05-20 13:44:14.609093012 +0000 UTCCannot put state in query context2016/05/20 13:44:14 [8bcbe40e]Inside putstate, isTransaction = falseTick at 2016-05-20 13:44:24.609070317 +0000 UTCCannot put state in query context为什么isTransaction = false,为什么将这个上下文视为查询上下文 ?
查看完整描述

1 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

原始调用事务已完成并返回。来自 goroutine 的 PutState 在事务上下文之外继续(可以说,成为由链码本身发起的“事务”)。这是不允许的。与分类帐的所有交互必须是外部交易的一部分。


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信