版权声明:学习中。。。 https://blog.csdn.net/fangdengfu123/article/details/80579966 
 
 
  
  UUID  
  func  (t  *TestChaincode ) getUUID (stub  shim .ChaincodeStubInterface , args  [] string ) pb .Response  { arl  := util.GenerateUUID()  fmt.Println(arl)  return shim.Success([]byte(arl) )    }getLogger  
  func getLogger(stub shim.ChaincodeStubInterface ) (c *shim.ChaincodeLogger ) {
    fcn, _ := stub.GetFunctionAndParameters ()
    c = shim.NewLogger (fmt.Sprintf ("%s.%s.%s" , stub.GetChannelID (), "你的链码名称" , fcn))
    c.SetLevel (shim.LogDebug )
    return
}rsaKey  
  func (t *TestChaincode) getRSAKey(stub shim.ChaincodeStubInterface , args []string) pb.Response  {
    logger := getLogger(stub)
    // 生成私钥
    privateKey, err := rsa.GenerateKey (rand.Reader , 256 )
    logger.Debug ("generate key" )
    // 生成公钥
    publicKey := &privateKey.PublicKey 
    if err != nil {
        return shim.Error (err.Error ())
    }
    //生成私钥字符串
    derStream := MarshalPKCS8PrivateKey(privateKey)
    block := &pem.Block {
        Type:  "PRIVATE KEY" ,
        Bytes: derStream,
    }
    pribuffer := bytes.NewBuffer (make([]byte, 1024 *5 ))
    err = pem.Encode (pribuffer, block)
    if err != nil {
        return shim.Error (err.Error ())
    }
    logger.Debug ("privatekey is :"  + pribuffer.String ())
    // 生成公钥字符串
    pubbuffer := bytes.NewBuffer (make([]byte, 1024 *5 ))
    derPkix, err := x509.MarshalPKIXPublicKey (publicKey)
    if err != nil {
        return shim.Error (err.Error ())
    }
    block = &pem.Block {
        Type:  "PUBLIC KEY" ,
        Bytes: derPkix,
    }
    err = pem.Encode (pubbuffer, block)
    if err != nil {
        fmt.Println (err.Error ())
    }
    pubStr := pubbuffer.String ()
    priStr := pribuffer.String ()
    logger.Debug ("publickey is : "  + pubStr)
    pubStr = pubStr[strings.Index (pubStr, "-----BEGIN PUBLIC KE" ):]
    priStr = priStr[strings.Index (priStr, "-----BEGIN PRIVATE KE" ):]
    rsaKey := &RSAKey{pubStr, priStr}
    value, err := json.Marshal (rsaKey)
    if err != nil {
        return shim.Error (err.Error ())
    }
    return shim.Success (value)
}
type RSAKey struct {
    PrivateKey string `json:"privateKey" `
    PublicKey  string `json:"publicKey" `
}获取加密对象  
  func  getEnt(key []byte ) (entities.EncrypterEntity, error) {
    factory.InitFactories(nil )
    ent, err := entities.NewAES256EncrypterEntity("ID" , factory.GetDefault(), key, nil )
    if  err != nil  {
        return  nil , err
    }
    return  ent, nil 
}开始加密  
  ent, err  := getEnt(aesKey)
if  err  != nil {
    return shim.Error (err .Error ())
}
res, err  := ent.Encrypt([]byte(data))
if  err  != nil {
    return shim.Error (err .Error ())
}
logger.Debug(fmt.Sprintf("get encryptVal: %s" , res))开始解密  
  ent, err  := getEnt(aesKey)
if  err  != nil {
    return shim.Error (err .Error ())
}
res, err  := ent.Decrypt(aes.Data)
if  err  != nil {
    return shim.Error (err .Error ())
}
logger.Debug(fmt.Sprintf("get result: %s" , string (res)))解析历史结果集合  
  func getHisResult(result shim.HistoryQueryIteratorInterface ) (bytes.Buffer , error) {
    //由于查询的结果是一个集合,所以要将结果集转成字符串,方便传输
    var buffer bytes.Buffer 
    buffer.WriteString ("[" )
    bArrayMemberAlreadyWritten := false
    for result.HasNext () {
        response, err := result.Next ()
        if err != nil {
            return buffer, err
        }
        if bArrayMemberAlreadyWritten {
            buffer.WriteString ("," )
        }
        buffer.WriteString ("{\"TxId\":\"" )
        buffer.WriteString (response.TxId )
        buffer.WriteString ("\",\"value\":" )
        if response.IsDelete  {
            buffer.WriteString ("null" )
        } else {
            buffer.WriteString (string(response.Value ))
        }
        buffer.WriteString (", \"Timestamp\":\"" )
        buffer.WriteString (time.Unix (response.Timestamp .Seconds , int64(response.Timestamp .Nanos )).Format ("2006-01-02 15:04:05" ))
        buffer.WriteString ("\"" )
        buffer.WriteString (", \"IsDelete\":\"" )
        buffer.WriteString (strconv.FormatBool (response.IsDelete ))
        buffer.WriteString ("\"" )
        buffer.WriteString ("}" )
        //item,_:= json.Marshal (response)
        //buffer.Write (item)
        bArrayMemberAlreadyWritten = true
    }
    buffer.WriteString ("]" )
    return buffer, nil
}解析集合结果  
  func getListResult(resultsIterator shim.StateQueryIteratorInterface ) ([]byte, error) {
    defer resultsIterator.Close ()
    // buffer is a JSON array containing QueryRecords
    var buffer bytes.Buffer 
    buffer.WriteString ("[" )
    bArrayMemberAlreadyWritten := false
    for resultsIterator.HasNext () {
        queryResponse, err := resultsIterator.Next ()
        if err != nil {
            return nil, err
        }
        // Add  a comma before array members, suppress it for the first array member
        if bArrayMemberAlreadyWritten == true {
            buffer.WriteString ("," )
        }
        buffer.WriteString ("{\"Key\":" )
        buffer.WriteString ("\"" )
        buffer.WriteString (queryResponse.Key )
        buffer.WriteString ("\"" )
        buffer.WriteString (", \"Record\":" )
        // Record is a JSON object, so we write as-is
        buffer.WriteString (string(queryResponse.Value ))
        buffer.WriteString ("}" )
        bArrayMemberAlreadyWritten = true
    }
    buffer.WriteString ("]" )
    fmt.Printf ("queryResult:\n%s\n" , buffer.String ())
    return buffer.Bytes (), nil
}任意富查询  
  func (t *AccountChaincode) getResultForQueryString(stub shim.ChaincodeStubInterface, args []string ) pb.Response  {
    logger := getLogger(stub)
    logger.Debug("Enter [%s] account.getResultForQueryString, args: %s" , stub.GetChannelID(), args)
    if  len (args) < 1  {
        return shim.Error ("Incorrect number of arguments. Expecting 1" )
    }
    queryString := args[0 ]
    if  queryString == ""  {
        return shim.Error ("queryString is nil" )
    }
    queryResult, err  := stub.GetQueryResult(queryString)
    if  err  != nil {
        return shim.Error (err .Error ())
    }
    defer queryResult.Close()
    value, err  := getListResult(queryResult)
    if  err  != nil {
        return shim.Error (err .Error ())
    }
    logger.Debug("Leave [%s] account.getResultForQueryString, returned: %s" , stub.GetChannelID(), string (value))
    return shim.Success(value)
}