首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将状态置于hyperledger-fabric中

无法将状态置于hyperledger-fabric中
EN

Stack Overflow用户
提问于 2021-10-29 14:46:22
回答 2查看 62关注 0票数 0

当我想要将一些数据写入fabric分类账时,chaincode调用命令看起来很好,并且没有错误,但我没有发现任何写入couchdb的内容。

代码语言:javascript
复制
func (t * NumberGenerator) GenerateNumber(stub shim.ChaincodeStubInterface,args []string) peer.Response{
num,err := strconv.Atoi(args[0])
if err!= nil{
    return shim.Error("internal error")
}
size,err  := stub.GetState("size")
sizeNum,_ := strconv.Atoi(string(size))

rand.Seed(time.Now().Unix())
for i:=0;i < num;i++{
    id := strconv.Itoa(sizeNum+i)
    num := rand.Intn(100)-50
    numStr := strconv.Itoa(num)
    err := stub.PutState(id, []byte(numStr))
    fmt.Println(id,num)
    if err != nil{
        return shim.Error("fail to save the data")
    }
}
sizeNum += num
err3 := stub.PutState("size",[]byte(strconv.Itoa(sizeNum)))
if err3 != nil{
    return shim.Error("fail to update the size")
}
return shim.Success([]byte("success to generate number"))

我可以在码头上看到日志,

代码语言:javascript
复制
fabric@ubuntu:~/Desktop/fcc/fcc/fabric-samples/fcc$ sudo docker logs -f dev-peer0.org1.example.com-dataGenerator-1.00 -18 1 31 2 -3 3 -25

但是我在couchdb中什么也没有找到,PutState函数也没有返回错误,谁能告诉我为什么?

这是我用来调用chanincode函数的命令

代码语言:javascript
复制
    #!/bin/sh

CC_RUNTIME_LANGUAGE=golang
CC_SRC_PATH=github.com/chaincode/dataGenerator

CONFIG_ROOT=/opt/gopath/src/github.com/hyperledger/fabric/peer
ORG1_MSPCONFIGPATH=${CONFIG_ROOT}/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
ORG1_TLS_ROOTCERT_FILE=${CONFIG_ROOT}/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
ORG2_MSPCONFIGPATH=${CONFIG_ROOT}/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
ORG2_TLS_ROOTCERT_FILE=${CONFIG_ROOT}/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
ORG3_MSPCONFIGPATH=${CONFIG_ROOT}/crypto/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp
ORG3_TLS_ROOTCERT_FILE=${CONFIG_ROOT}/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt
ORDERER_TLS_ROOTCERT_FILE=${CONFIG_ROOT}/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

docker exec \
  -e CORE_PEER_LOCALMSPID=Org1MSP \
  -e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} \
  cli \
  peer chaincode invoke \
    -o orderer.example.com:7050 \
    -C mychannel \
    -n dataGenerator \
    -c '{"Args":["GenerateNumber","2"]}' \
    --tls \
    --cafile ${ORDERER_TLS_ROOTCERT_FILE} \
EN

回答 2

Stack Overflow用户

发布于 2021-11-01 22:22:28

调用PutState()时,数据不会写入账本。链码执行会产生一个同级背书,以便在事务中将一些数据写入分类帐。然后,客户端收集来自对等体的批注结果,并将执行的事务和批注提交到订购服务,一旦块被切割,则每个对等体随后验证块事务,并将任何已验证的事务写入账本。

检查您的对等日志,以验证它们是否已使用事务提交了块,以及是否没有无效警告。例如,如果不同的对等点产生了不同的认可结果,则交易可能会失效。我之所以提到这一点,是因为您的链代码有一个time.Now()调用,如果您的认可策略是多个peer (它应该是这样的),那么它在每个peer执行过程中肯定会略有不同,并且会导致无效。

票数 0
EN

Stack Overflow用户

发布于 2021-11-18 01:33:35

禁止合同包含随机数、时间等不确定值。

删除有关rand.Seed(time.Now().Unix())的代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69770825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档