在chaincode-docker-devmode网络中安装了以下链码,它可以正常工作。
但是当我尝试在fabric-sample中的基本网络中安装链码时出现以下错误。
帮我解决这个问题。
asset.go:10:2:找不到包>" github.com/hyperledger/fabric/core/chaincode> / shim"在任何一个: /opt/go/src/github.com/hyperledger/fabric/core/chaincode/shim(来自> $ GOR> OOT) /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/shim>>(来自$ GOPATH) asset.go:11:2:找不到包" github.com/hyperledger/fabric/protos/peer"我是以下任何一个: /opt/go/src/github.com/hyperledger/fabric/protos/peer(来自$ GOROOT) /opt/gopath/src/github.com/hyperledger/fabric/protos/peer(来自$ GOPATH)
package main
import (
"bytes"
"encoding/json"
"fmt"
"strconv"
"github.com/hyperledger/fabric/core/chaincode/shim"
sc "github.com/hyperledger/fabric/protos/peer"
)
// Define the Smart Contract structure
type SmartContract struct {
}
//Define assets structure
type Asset struct {
asset_id string `json:"asset_id"`
asset_name string `json:"asset_name"`
owner_aadhar int `json:"owner_aadhar"`
owner_name string `json:"owner_name"`
debt bool `json:"debt"`
lamount int `json:"lamount"`
objection string `json:"objection"`
}
func (s *SmartContract) Init(APIstub shim.ChaincodeStubInterface) sc.Response {
return shim.Success(nil)
}
// The calling application program has also specified the particular smart contract function to be called, with arguments
func (s *SmartContract) Invoke(APIstub shim.ChaincodeStubInterface) sc.Response {
function, args := APIstub.GetFunctionAndParameters()
if function == "initLedger"{
return s.initLedger(APIstub)
}
if function == "transfer_asset"{
return s.transfer_asset(APIstub,args)
}
if function == "create_asset"{
return s.create_asset(APIstub,args)
}
if function == "view_asset" {
return s.view_asset(APIstub,args)
}
return shim.Error("Invalid Smart Contract function name.")
}
//stores some sample assets
func (s *SmartContract) initLedger(APIstub shim.ChaincodeStubInterface) sc.Response {
assets := []Asset{
Asset{asset_id:"A101", asset_name:"1bhk", owner_aadhar:101, owner_name:"praveen", debt:false, lamount:0, objection:"nill"},
Asset{asset_id:"A102", asset_name:"factory",owner_aadhar:102, owner_name:"arun", debt:false, lamount:0, objection:"nill"},
Asset{asset_id:"A103", asset_name:"abt school", owner_aadhar:103, owner_name:"kevin", debt:true, lamount:100000, objection:"nill"},
Asset{asset_id:"A104", asset_name:"2bhk", owner_aadhar:104, owner_name:"baaruni",debt:false, lamount:0, objection:"1case"},
}
i := 0
for i< len(assets) {
assetAsBytes, _ :=json.Marshal(assets[i])
APIstub.PutState(assets[i].asset_id, assetAsBytes)
i++
}
return shim.Success(nil)
}
func (s *SmartContract) create_asset(APIstub shim.ChaincodeStubInterface, args[] string) sc.Response {
if len(args)!=7 {
return shim.Error("Incorrect number of arguments expected 7")
}
taadhar, _ :=strconv.Atoi(args[2])
tdept, _ := strconv.ParseBool(args[4])
tlamount, _ := strconv.Atoi(args[5])
var asset = Asset{asset_id:args[0], asset_name:args[1], owner_aadhar:taadhar, owner_name:args[3], debt:tdept, lamount:tlamount, objection:args[6]}
assetAsBytes, _ := json.Marshal(asset)
APIstub.PutState(asset.asset_id,assetAsBytes)
return shim.Success(nil)
}
func (s *SmartContract) transfer_asset(APIstub shim.ChaincodeStubInterface, args[] string) sc.Response{
if len(args) !=3 {
return shim.Error("Incorrect number of arguments expected 3")
}
assetAsBytes, _ :=APIstub.GetState(args[0])
asset := Asset{}
json.Unmarshal(assetAsBytes, &asset)
if (asset.objection!="nill")||(asset.debt!=false){
return shim.Error("Asset cannot be transfer as it has some issues")
}
asset.owner_aadhar, _ = strconv.Atoi(args[1])
assetAsBytes, _ =json.Marshal(asset)
APIstub.PutState(args[0],assetAsBytes)
return shim.Success(nil)
}
func (s *SmartContract) view_asset(APIstub shim.ChaincodeStubInterface, args[] string) sc.Response {
if len(args) !=1{
return shim.Error("Invalid number of arguments expected 1")
}
assetAsBytes, _ :=APIstub.GetState(args[0])
asset := Asset{}
json.Unmarshal(assetAsBytes, &asset)
return shim.Success(assetAsBytes)
}
答案 0 :(得分:1)
您将需要获得以下go库以在本地编译chaincode。
go get github.com/hyperledger/fabric/protos/peer
go get github.com/hyperledger/fabric/core/chaincode/shim
这些库将安装在GOPATH下,请确保已设置。
如果“ go get”命令遇到任何错误(特定于上下文和插件),请按照以下步骤解决。
升级到最新版本的GO。
sudo apt-get purge golang*
sudo rm -rf /usr/lib/go-1.6/ /usr/lib/go-1.6/src/ /usr/lib/go-1.6/src/runtime/ /usr/lib/go-1.6/src/runtime/race
curl -O https://storage.googleapis.com/golang/go1.11.1.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.11.1.linux-amd64.tar.gz
mkdir -p ~/go; echo "export GOPATH=$HOME/go" >> ~/.bashrc
echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc
然后
go get github.com/hyperledger/fabric/core/chaincode/shim
go get github.com/hyperledger/fabric/protos/peer
答案 1 :(得分:0)
有新的链接可以导入垫片和对等体。下面工作正常。
go get github.com/hyperledger/fabric-chaincode-go/shim
go get github.com/hyperledger/fabric-protos-go/peer
请参阅此链接- https://hyperledger-fabric.readthedocs.io/en/release-2.0/chaincode4ade.html