2017-01-23 2 views
0

Я пытаюсь написать простой цепочный код, который использует структуру для хранения сведений о клиенте. У меня есть функция setDetails, которая работает нормально. Я хочу написать еще одну функцию getDetails, которая принимает UID как аргумент и печатает детали клиента с этим UID. Нужна помощь!Функция Chaincode для отображения значений структуры

package main 

import (
    "errors" 
    "fmt" 
    "github.com/hyperledger/fabric/core/chaincode/shim" 
) 

type Customer struct { 
    UID  string 
    Name string 
    Address struct { 
     StreetNo string 
     Country string 
    } 
} 

type SimpleChaincode struct { 
} 

func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) ([]byte, error) { 
    fmt.Printf("initialization done!!!") 
    fmt.Printf("initialization done!!!") 

    return nil, nil 
} 

func (t *SimpleChaincode) setDetails(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) { 

    if len(args) < 3 { 
     return nil, errors.New("insert Into Table failed. Must include 3 column values") 
    } 

    customer := &Customer{} 
    customer.UID = args[0] 
    customer.Name = args[1] 
    customer.Address.Country = args[2] 

    return nil, nil 
} 

func (t *SimpleChaincode) getDetails(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) { 

    //wish to print all details of an particular customer corresponding to the UID 
    return nil, nil 
} 
func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) ([]byte, error) { 
    function, args := stub.GetFunctionAndParameters() 
    fmt.Printf("Inside Invoke %s", function) 
    if function == "setDetails" { 
     return t.setDetails(stub, args) 

    } else if function == "getDetails" { 
     return t.getDetails(stub, args) 
    } 

    return nil, errors.New("Invalid invoke function name. Expecting \"query\"") 
} 

func main() { 
    err := shim.Start(new(SimpleChaincode)) 
    if err != nil { 
     fmt.Printf("Error starting Simple chaincode: %s", err) 
    } 
} 

ответ

0

Я не знаю, о Hyperledger до сих пор, но после того, как взглянуть на документацию GitHub, я вам будет использовать stub.PutState хранить информацию о клиентах, а потом использовать stub.GetState, чтобы получить его обратно.

Поскольку оба метода запроса кусочком байт, мое предположение было бы что-то вдоль этих линий:

func (t *SimpleChaincode) setDetails(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) { 

    if len(args) < 3 { 
     return nil, errors.New("insert Into Table failed. Must include 3 column values") 
    } 

    customer := &Customer{} 
    customer.UID = args[0] 
    customer.Name = args[1] 
    customer.Address.Country = args[2] 

    raw, err := json.Marshal(customer) 
    if err != nil { 
     return nil, err 
    } 

    err := stub.PuState(customer.UID, raw) 
    if err != nil { 
     return nil, err 
    } 

    return nil, nil 
} 

func (t *SimpleChaincode) getDetails(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) { 

    if len(args) != 1 { 
     return nil, errors.New("Incorrect number of arguments. Expecting name of the key to query") 
    } 

    return stub.GetState(args[0]) 
} 
+0

спасибо! я попробую – Aditi