2017-08-14 30 views
0

我已与hyperledger织物样品/ fabcar例如玩弄了一会儿,我能够在fabcar.go添加更多的领域和功能,但是当我改变的领域完全。我在部署中遇到错误。改变fabcar例如hyperledger织物

下面是我在fabcar.go所做的变化的例子。

type Car struct { 
Name string `json:"Name"` 
College string `json:"College"` 
DOB string `json:"DOB"` 
SecretCode string `json:"SecretCode"` 
    } 

func (s *SmartContract) initLedger(APIstub shim.ChaincodeStubInterface) sc.Response { 
cars := []Car{ 
    Car{Name: "name1", College: "college1", DOB: "dob1", SecretCode: "secretcode1"}, 
    Car{Name: "name2", College: "college2", DOB: "dob2", SecretCode: "secretcode2"}, 
    Car{Name: "name3", College: "college3", DOB: "dob3", SecretCode: "secretcode3"}, 
    Car{Name: "name4", College: "college4", DOB: "dob4", SecretCode: "secretcode4"}, 
    } 
i := 0 
for i < len(cars) { 
    fmt.Println("i is ", i) 
    carAsBytes, _ := json.Marshal(cars[i]) 
    APIstub.PutState("CAR"+strconv.Itoa(i), carAsBytes) 
    fmt.Println("Added", cars[i]) 
    i = i + 1 
} 

return shim.Success(nil) 
} 

这里是我的错误,当我运行startFabric.sh

Error: Error endorsing chaincode: rpc error: code = Unknown desc = Error starting container: Failed to generate platform-specific docker build: Error returned from build: 2 "# github.com/fabcar chaincode/input/src/github.com/fabcar/fabcar.go:132: unknown Car field 'Make' in struct literal chaincode/input/src/github.com/fabcar/fabcar.go:132: unknown Car field 'Model' in struct literal chaincode/input/src/github.com/fabcar/fabcar.go:132: unknown Car field 'Colour' in struct literal chaincode/input/src/github.com/fabcar/fabcar.go:132: unknown Car field 'Owner' in struct literal chaincode/input/src/github.com/fabcar/fabcar.go:193: car.Owner undefined (type Car has no field or method Owner) chaincode/input/src/github.com/fabcar/fabcar.go:211: car.Colour undefined (type Car has no field or method Colour) "

我使用的是Mac OSX Yosemite和我曾尝试通过删除所有数据,并再次和我开始打扫泊坞窗也尝试重命名go文件,但没有任何工作。我在这里做错了什么?

输出去打造命令:

go build ../../../../../go/src/github.com/hyperledger/fabric/protos/peer/admin.pb.go:74:8: use of vendored package not allowed ../../../../../go/src/github.com/hyperledger/fabric/protos/peer/admin.pb.go:77:8: use of vendored package not allowed ../../../../../go/src/github.com/hyperledger/fabric/protos/peer/chaincode.pb.go:9:8: use of vendored package not allowed ../../../../../go/src/github.com/hyperledger/fabric/protos/peer/init.go:21:2: use of vendored package not allowed ../../../../../go/src/github.com/hyperledger/fabric/bccsp/pkcs11/conf.go:25:2: use of vendored package not allowed ../../../../../go/src/github.com/hyperledger/fabric/protos/peer/admin.pb.go:80:2: use of vendored package not allowed ../../../../../go/src/github.com/hyperledger/fabric/protos/peer/admin.pb.go:81:2: use of vendored package not allowed ../../../../../go/src/github.com/hyperledger/fabric/common/flogging/grpclogger.go:21:2: use of vendored package not allowed

+0

,可以在运行“去打造“编译链代码并用输出扩展你的问题? –

+0

我已经用go build输出更新了我的问题。 –

+0

使用admin.pb.go文件中的任何内容的目的是什么? –

回答

1

好像你有一个编译错误,当你改变了Car的结构是

type Car struct { 
    Name  string `json:"Name"` 
    College  string `json:"College"` 
    DOB   string `json:"DOB"` 
    SecretCode string `json:"SecretCode"` 
} 

虽然许多功能保持在fabcar.go仍尝试使用此结构“老式”的方式,假设以前的型号:

type Car struct { 
     Make string `json:"make"` 
     Model string `json:"model"` 
     Colour string `json:"colour"` 
     Owner string `json:"owner"` 
} 

例如:

func (s *SmartContract) createCar(APIstub shim.ChaincodeStubInterface, args []string) sc.Response { 

     if len(args) != 5 { 
       return shim.Error("Incorrect number of arguments. Expecting 5") 
     } 

     var car = Car{Make: args[1], Model: args[2], Colour: args[3], Owner: args[4]} 

     carAsBytes, _ := json.Marshal(car) 
     APIstub.PutState(args[0], carAsBytes) 

     return shim.Success(nil) 
} 

我会建议,而不是重用的Car声明结构刚刚创建自己的,并正确地使用它:

type Student struct { 
    Name  string `json:"Name"` 
    College  string `json:"College"` 
    DOB   string `json:"DOB"` 
    SecretCode string `json:"SecretCode"` 
} 

而且

func (s *SmartContract) initLedger(APIstub shim.ChaincodeStubInterface) sc.Response { 
    cars := []Student{ 
    Student{Name: "name1", College: "college1", DOB: "dob1", SecretCode: "secretcode1"}, 
    Student{Name: "name2", College: "college2", DOB: "dob2", SecretCode: "secretcode2"}, 
    Student{Name: "name3", College: "college3", DOB: "dob3", SecretCode: "secretcode3"}, 
    Student{Name: "name4", College: "college4", DOB: "dob4", SecretCode: "secretcode4"}, 
    } 
    i := 0 
    for i < len(cars) { 
     fmt.Println("i is ", i) 
     carAsBytes, _ := json.Marshal(cars[i]) 
     APIstub.PutState("CAR"+strconv.Itoa(i), carAsBytes) 
     fmt.Println("Added", cars[i]) 
     i = i + 1 
    } 

    return shim.Success(nil) 
} 
+0

嗨Artem,我做了一个完全独立的文件,但是当我为它做startFabric时,它仍然部署了原始的fabcar.go。这是指向该文件的链接。 https://drive.google.com/open?id=0B_DLPu5PlCiFQ25ZTFBtUnh4aTQ –

+0

好,你需要适应startFabric.sh脚本使用新chaincode,它旨在演示fabrcar只 –

+0

我这样做了。这里也是StartFabric.sh文件。 https://drive.google.com/open?id=0B_DLPu5PlCiFZFI0UkFhVVNkSUk CLI对等chaincode安装-n FirstApp -v 1.0 -p github.com/fabcar。你能告诉我这个github.com/fabcar在哪里吗? –