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

How to change function name in the Hyperledger - Using CouchDB tutorial?

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

我已经按照教程 Using CouchDB 没有遇到任何问题。现在我想根据我的目的自定义代码。我删除了我不想使用的其余函数,现在只有 initMarble 和 queryMarbles 作为仅有的两个调用函数。如果我保持这样,它就可以工作,但是如果我将函数名称更改为其他名称,例如 initPharma 和 queryPharma 并且我 运行 initPharma 作为参数,我会收到以下错误消息:

Error: endorsement failure during invoke. response: status:500 message:"Received unknown function invocation"

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

./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")
}

我怎样才能更新我的函数名称而不被教程中的原始名称卡住?

注意:此答案由 OP 提供,作为对问题的编辑,并移至此处以符合网站指南。


通过新索引更新索引并删除 Fauxton 中的旧索引解决 UI。因此,正如 Ankit Kamra 评论的那样,代码中没有错误。