我已经顺利地使用了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")
}
如何更新我的函数名称,而又不会陷入教程的原始名称中?
答案 0 :(得分:0)
注意:此答案由OP提供,是对问题的修改,已移至此处以符合网站指南。
通过在Fauxton UI中通过新索引更新索引并删除旧索引来解决。因此,Ankit Kamra注释的代码中没有错误。