не удалось вызвать имя цепочки: lscc, ошибка: транзакция вернулась с ошибкой: вызван неопределенный метод контракта

Я пытаюсь установить java-цепной код facar из образцов ткани, но получаю ошибку.

https://github.com/hyperledger/fabric-samples/tree/release-1.4/chaincode/fabcar/java

над чейнкодом я пытаюсь и получаю ошибку во время создания чейнкода

Может кто-нибудь, пожалуйста, помогите мне в этом, очень признателен и заранее спасибо.

Я использую базовую сетевую папку и нижеприведенный сценарий для создания и установки сети, создания экземпляра и вызова цепного кода.

#!/bin/bash
#
# Copyright IBM Corp All Rights Reserved
#
# SPDX-License-Identifier: Apache-2.0
#
# Exit on first error, print all commands.
set -ev

# don't rewrite paths for Windows Git Bash users
export MSYS_NO_PATHCONV=1

docker-compose -f docker-compose.yml down

docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb
docker ps -a

# wait for Hyperledger Fabric to start
# incase of errors when running later commands, issue export FABRIC_START_TIMEOUT=<larger number>
export FABRIC_START_TIMEOUT=10
#echo ${FABRIC_START_TIMEOUT}
sleep ${FABRIC_START_TIMEOUT}

# Create the channel
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/[email protected]/msp" peer0.org1.example.com peer channel create -o orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx
# Join peer0.org1.example.com to the channel.
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/[email protected]/msp" peer0.org1.example.com peer channel join -b mychannel.block

docker-compose -f docker-compose.yml up -d cli
sleep 5

#install chaincode
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode install -n mycc -v 1.0 -p /opt/gopath/src/github.com/fabcar/java -l java

#instantiate chaincode
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mycc -l java -v 1.0 -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

sleep 5

#invoke chaincode
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_ADDRESS=peer0.org1.example.com:7051"  -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mycc -c '{"function":"initLedger","Args":[""]}'

Вывод docker logs команда peer0.org1.example.com, приведенная ниже

2019-08-06 09: 54: 26.150 UTC [подтверждающий] SimulateProposal -> ERRO 043 [mychannel] [e0746cf6] не удалось вызвать имя цепного кода: «lscc», ошибка: транзакция возвращена с ошибкой: вызван неопределенный метод контракта

Вывод docker logs команда dev-peer0.org1.example.com-mycc-1.0, приведенная ниже

09:54:26:142 SEVERE  org.hyperledger.fabric.Logger error                                              Undefined contract method

calledorg.hyperledger.fabric.shim.ChaincodeException: неопределенный метод контракта, вызываемый в org.hyperledger.fabric.contract.ContractInterface.unknownTransaction (ContractInterface.java:76) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect. NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.refract.Method.invog.http: //www.java.lang.refract. .execution.impl.ContractExecutionService.executeRequest (ContractExecutionService.java:57) в org.hyperledger.fabric.contract.ContractRouter.processRequest (ContractRouter.java:87) в org.hyperledger.fabric.contract.Contract.Contract.Rou : 103) на org.hyperledger.fabric.shim.impl.Handler.lambda $ handleInit $ 0 (Handler.java:280) на java.lang .Thread.run (Thread.java:748)

:54:26:147 SEVERE  org.hyperledger.fabric.shim.impl.Handler lambda$handleInit$0                     [e0746cf6] Init failed.

ОШИБКА отправки


person Prafull Rawal    schedule 06.08.2019    source источник


Ответы (3)


Возможно, вы забыли декоратор @Default

@Contract(name = "MyContract",
        info = @Info(
                title = "My Contract",
                description = "",
                version = "0.0.1"
        )
)
@Default
public class MyContract implements ContractInterface {
person David Viejo    schedule 18.04.2020

Неопределенный метод контракта вызван

Находится в первых нескольких строках кода. Это означает, что функция, которую вы передаете для вызова, отсутствует в цепном коде, можете ли вы проверить цепной код и увидеть, присутствует ли initLedger? Или есть какие-либо орфографические ошибки. Надеюсь, это было полезно.

person Risabh Sharma    schedule 06.08.2019

Если вы столкнулись с этой проблемой при создании экземпляра кода цепочки, вы можете переопределить следующий метод, указанный в ContractInterface, своей собственной реализацией.

/**
 * Invoked for any transaction that does not exist.
 *
 * This will throw an exception. If you wish to alter the exception thrown or 
 * if you wish to consider requests for transactions that don't exist as not an
 * error, subclass this method.
 *
 * @param ctx the context as created by {@link #createContext(ChaincodeStub)}.
 */
default void unknownTransaction(Context ctx) {
    throw new ChaincodeException("Undefined contract method called");
}

В противном случае, если проблема возникает при вызове существующей транзакции, убедитесь, что в методе транзакции присутствует аннотация @Transaction ().

person Sanjay    schedule 27.01.2020