如何在Hyperledger-使用CouchDB教程中更改函数名称?

时间:2019-06-06 12:53:40

标签: couchdb hyperledger-fabric

我已经顺利地使用了CouchDB教程。现在,当我尝试更改函数的名称时,会收到一条错误消息,但是当我使用旧名称运行调用时,它们仍然可以工作。如何正确更新名称?

我完全按照教程Using CouchDB进行操作,没有任何麻烦。现在,我想为我的目的自定义代码。我删除了我不想使用的其余函数,现在将initMarble和queryMarbles作为仅有的两个调用函数。如果我这样保留它,它就可以工作,但是如果我将函数名称更改为诸如initPharma和queryPharma之类的东西,并且我将initPharma作为参数运行,则会收到以下错误消息:

  

错误:调用期间认可失败。回应:状态:500   消息:“收到未知函数调用”

似乎我的脚本没有正确上传到容器中。 进行更改时,请使用以下命令:

./byfn.sh down

./byfn.sh up -c mychannel -s couchdb

docker exec -it cli bash

peer chaincode install -n pharma -v 1.0 -p github.com/chaincode/pharma03

export CHANNEL_NAME=mychannel

peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n pharma -v 1.0 -c '{"Args":["init"]}' -P "OR ('Org0MSP.peer','Org1MSP.peer')"

更新后的代码如下:

func main() {
    err := shim.Start(new(SimpleChaincode))
    if err != nil {
    fmt.Printf("Error starting Simple chaincode: %s", err)
    }
}

func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response {
return shim.Success(nil)
}

func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
function, args := stub.GetFunctionAndParameters()
fmt.Println("invoke is running " + function)

if function == "initPharma" { //create a new marble
    return t.initPharma(stub, args)
} else if function == "queryPharma" { //find marbles based on an ad hoc rich query
    return t.queryPharma(stub, args)
}

fmt.Println("invoke did not find func: " + function) //error
return shim.Error("Received unknown function invocation")
}

如何更新我的函数名称,而又不会陷入教程的原始名称中?

1 个答案:

答案 0 :(得分:0)

注意:此答案由OP提供,是对问题的修改,已移至此处以符合网站指南。


通过在Fauxton UI中通过新索引更新索引并删除旧索引来解决。因此,Ankit Kamra注释的代码中没有错误。