add chincode code

parent d7ba709c
...@@ -57,7 +57,6 @@ func (t *GXHCC) Invoke(stub shim.ChaincodeStubInterface) pb.Response { ...@@ -57,7 +57,6 @@ func (t *GXHCC) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
return shim.Error(fmt.Sprintf("update function err: %s", err)) return shim.Error(fmt.Sprintf("update function err: %s", err))
} }
return shim.Success([]byte(res)) return shim.Success([]byte(res))
case "cert": case "cert":
testCertificate(stub) testCertificate(stub)
...@@ -339,13 +338,13 @@ func testCertificate(stub shim.ChaincodeStubInterface) pb.Response{ ...@@ -339,13 +338,13 @@ func testCertificate(stub shim.ChaincodeStubInterface) pb.Response{
if err != nil { if err != nil {
fmt.Errorf("ParseCertificate failed") fmt.Errorf("ParseCertificate failed")
} }
fmt.Println("cert %v ",cert) fmt.Println("cert ",cert)
result,err := json.Marshal(cert) result,err := json.Marshal(cert)
if err!=nil{ if err!=nil{
fmt.Println("Marshal err:",err) fmt.Println("Marshal err:",err)
} }
fmt.Println("cert marshal:",string(result)) fmt.Println("cert marshal:",string(result))
fmt.Println("cert Subject %v ",cert.Subject) fmt.Println("cert Subject ",cert.Subject)
uname:=cert.Subject.CommonName uname:=cert.Subject.CommonName
fmt.Println("Name:"+uname) fmt.Println("Name:"+uname)
......
...@@ -26,10 +26,11 @@ func TestGXHCC(t *testing.T) { ...@@ -26,10 +26,11 @@ func TestGXHCC(t *testing.T) {
func TestGXHSchema(t *testing.T){ func TestGXHSchema(t *testing.T){
input := `{"id":"1","aname":"alibusi","aname":"alibus","atype":"type","alinkman":"","aader":"aader", // input := `{"id":"1","aname":"alibusi","aname":"alibus","atype":"type","alinkman":"","aader":"aader",
"amob":"1234567890","backup":{"id":"1","aname":"alibusi","atype":"type","alinkman":"", //"amob":"1234567890","backup":{"id":"1","aname":"alibusi","atype":"type","alinkman":"",
"aader":"aader","amob":"1234567890"}}` //"aader":"aader","amob":"1234567890"}}`
schema := `{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"fields":{"acid":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":3},"id":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"1"},"actionid":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":1},"adiscounts":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"0.8"},"aid":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":0},"altdate":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"2010-01-01 15:38:54"},"are":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":1},"backup":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":{}},"cid":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":0},"contract":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"16161616032"},"cosperson":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":100},"did":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":2},"dineraprice":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":80},"dineretime":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"15:30:59"},"dinerprice":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":100},"dinersprice":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":90},"dinerstime":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"11:10:00"},"distype":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":16},"dledate":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"2010-01-01 15:38:54"},"esign":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"2010-12-31 15:38:54"},"fid":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":4},"firrenew":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"2010-01-02 15:38:54"},"haver":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":1},"indate":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"2018/10/29 16:46:57"},"ischain":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":1},"isset":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":1},"issnp":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":1},"keywords":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"test"},"lat":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"43.840345"},"licence":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"103451015521"},"linedate":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"2010-01-02 15:38:54"},"lng":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"125.28796"},"mact":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"123456"},"mactname":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"联系人1"},"maddr":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"测试地址1"},"marea":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":1},"mbtype":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":1},"mdiposit":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"中国银行"},"mlinkman":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"联系人1"},"mlinkmob":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"18555555555"},"mname":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"测试连锁店1"},"mno":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"59118600000005"},"mno2":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"05910005"},"msubtype":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":10},"mtype":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":9},"murl":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"http://www.baidu.com"},"ordertel":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"13444444444"},"paystatue":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":1},"perquisites":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":3},"persales":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":100},"pname":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"8820180008552970"},"ppass":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"152820"},"regular":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":6000},"relevel":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":5},"retype":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":0},"rregular":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":6000},"sdiscounts":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"0.85"},"shophours":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"24小时营业"},"sregular":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":6000},"ssign":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"2010-01-01 15:38:54"},"statue":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":0},"supperaprice":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":90},"supperetime":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"23:59:59"},"supperprice":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":120},"suppersprice":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":110},"supperstime":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"15:31:00"},"tstatue":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":1},"mcode":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"11201700000003"},"warmline":{"auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}},"val":"600"}},"schema_auth":{"read":{"roles":null,"users":null},"write":{"roles":null,"users":null}}}`
inputarrary := `[{"id":"1","aname":"alibusi","atype":"type","alinkman":"", inputarrary := `[{"id":"1","aname":"alibusi","atype":"type","alinkman":"",
"aader":"aader","amob":"1234567890","backup":{"id":"1","aname":"alibusi","atype":"type", "aader":"aader","amob":"1234567890","backup":{"id":"1","aname":"alibusi","atype":"type",
"alinkman":"","aader":"aader","amob":"1234567890"}},{"id":"2","aname":"alibusi","atype":"type", "alinkman":"","aader":"aader","amob":"1234567890"}},{"id":"2","aname":"alibusi","atype":"type",
...@@ -46,7 +47,7 @@ func TestGXHSchema(t *testing.T){ ...@@ -46,7 +47,7 @@ func TestGXHSchema(t *testing.T){
fmt.Println("========================================invoke schema put============================================") fmt.Println("========================================invoke schema put============================================")
fmt.Println() fmt.Println()
fmt.Println() fmt.Println()
responseByPutschema := stub.MockInvoke("invoke1",[][]byte{[]byte("schema"), []byte("put"),[]byte("alibusi"),[]byte(input)}) responseByPutschema := stub.MockInvoke("invoke1",[][]byte{[]byte("schema"), []byte("put"),[]byte("alibusi"),[]byte(schema)})
fmt.Printf("Invoke status %d,message %s and payload %s\n", fmt.Printf("Invoke status %d,message %s and payload %s\n",
responseByPutschema.Status,responseByPutschema.Message,string(responseByPutschema.Payload)) responseByPutschema.Status,responseByPutschema.Message,string(responseByPutschema.Payload))
...@@ -54,6 +55,7 @@ func TestGXHSchema(t *testing.T){ ...@@ -54,6 +55,7 @@ func TestGXHSchema(t *testing.T){
fmt.Printf("Invoke status %d,message %s and payload %s\n", fmt.Printf("Invoke status %d,message %s and payload %s\n",
responseByGet.Status,responseByGet.Message,string(responseByGet.Payload)) responseByGet.Status,responseByGet.Message,string(responseByGet.Payload))
fmt.Println() fmt.Println()
return
fmt.Println("========================================invoke data put============================================") fmt.Println("========================================invoke data put============================================")
fmt.Println() fmt.Println()
fmt.Println() fmt.Println()
......
This diff is collapsed.
This diff is collapsed.
package main package main
import (
"fmt"
"github.com/hyperledger/fabric/core/chaincode/shim"
"testing"
)
func TestInvokeTable(t *testing.T){
cc := new(GXHCC)
stub := shim.NewMockStub("GXHCC",cc)
stub.MockInit("init",nil)
responseByPutschema := stub.MockInvoke("invoke1",[][]byte{[]byte("InvokeTable"), []byte("alibusi"),[]byte(inputC)})
fmt.Printf("Invoke status %d,message %s and payload %s\n",
responseByPutschema.Status,responseByPutschema.Message,string(responseByPutschema.Payload))
}
This diff is collapsed.
This diff is collapsed.
package main
import (
"fmt"
"github.com/hyperledger/fabric/core/chaincode/shim"
"testing"
)
func TestGetCommonName(t *testing.T){
cc := new(GXHCC)
stub := shim.NewMockStub("GXHCC",cc)
stub.MockInit("init",nil)
fmt.Println()
fmt.Println("========================================invoke schema put============================================")
fmt.Println()
fmt.Println()
responseByPutschema := stub.MockInvoke("invoke1",[][]byte{[]byte("getCertCommonName")})
fmt.Printf("Invoke status %d,message %s and payload %s\n",
responseByPutschema.Status,responseByPutschema.Message,string(responseByPutschema.Payload))
}
//7455 162316 ns/op
//5402 214421 ns/op
func BenchmarkPut(b *testing.B){
cc := new(GXHCC)
stub := shim.NewMockStub("GXHCC",cc)
stub.MockInit("init",nil)
fmt.Println()
fmt.Println("========================================invoke schema put============================================")
fmt.Println()
fmt.Println()
responseByPutschema := stub.MockInvoke("invoke1",[][]byte{[]byte("schema"), []byte("put"),[]byte("alibusi"),[]byte(schemaCheck)})
fmt.Printf("Invoke status %d,message %s and payload %s\n",
responseByPutschema.Status,responseByPutschema.Message,string(responseByPutschema.Payload))
fmt.Println()
fmt.Println("========================================invoke schema get============================================")
fmt.Println()
fmt.Println()
responseByget := stub.MockInvoke("invoke1",[][]byte{[]byte("schema"), []byte("get"),[]byte("alibusi")})
fmt.Printf("Invoke status %d,message %s ,and payload %s \n",
responseByget.Status,responseByget.Message,string(responseByget.Payload))
for i:=0;i<b.N ;i++ {
responseByPut := stub.MockInvoke("invoke1",[][]byte{[]byte("put"), []byte("alibusi"),[]byte(inputCs)})
if responseByPut.Status != 200{
fmt.Println()
fmt.Println("========================================invoke data put============================================")
fmt.Println()
fmt.Println()
fmt.Printf("Invoke status %d,message %s ,and payload %s\n",
responseByPut.Status,responseByPut.Message,string(responseByPut.Payload))
return
}
}
}
package testcc package main
import (
"encoding/json"
"fmt"
"github.com/hyperledger/fabric/core/chaincode/shim"
pb "github.com/hyperledger/fabric/protos/peer"
)
type TestCC struct {
}
// Init does nothing for this cc
func (t *TestCC) Init(stub shim.ChaincodeStubInterface) pb.Response {
return shim.Success([]byte("GXHCC init successful! "))
}
// Invoke for this chaincode exposes
func (t *TestCC) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
// get arguments and transient
functionName, args := stub.GetFunctionAndParameters()
switch functionName {
case "put":
res,err := put(args,stub)
if err!=nil{
return shim.Error(fmt.Sprintf("put function err: %s", err))
}
return shim.Success([]byte(res))
case "putNo":
res,err := putNo(args,stub)
if err!=nil{
return shim.Error(fmt.Sprintf("put function err: %s", err))
}
return shim.Success([]byte(res))
default:
return shim.Error(fmt.Sprintf("Unsupported function %s", functionName))
}
return shim.Success([]byte("GXHCC invoke successful "))
}
/*
put
args 字段说明:
1:args[0]代表我们具体操作的表,
2:args[1:]后面的数据表示要记录到数据库的数据,每一个string 必须是json字符串,并且需要每一个json 字符串都必须包含id 字段
*/
func put(args []string, stub shim.ChaincodeStubInterface) (string, error) {
//if len(args) < 2 {
// return "", fmt.Errorf("Expected more than 2 parameters to function put!")
//}
var Result []map[string]interface{}
if err := json.Unmarshal([]byte(args[0]), &Result); err != nil {
return "", fmt.Errorf("parameters Unmarshal fail,args string not json array, err:%s", err)
}
for _, mapres := range Result{
Id ,ok:= mapres["id"]
if !ok{
return "", fmt.Errorf("The id field must exist ")
}
tablename,ok := mapres["tablename"].(string)
if !ok{
return "", fmt.Errorf("tablename fields type not string! ")
}
putDate,_:=json.Marshal(mapres)
if err := stub.PutState(tablename+Id.(string), putDate); err != nil {
return "", fmt.Errorf("PutState fail, err :%s", err)
}
err := tableDifferentiate(tablename,mapres,stub)
if err != nil{
return "", err
}
}
return fmt.Sprintf("%s put data success!", args[0]), nil
}
/*
put
args 字段说明:
1:args[0]代表我们具体操作的表,
2:args[1:]后面的数据表示要记录到数据库的数据,每一个string 必须是json字符串,并且需要每一个json 字符串都必须包含id 字段
*/
func putNo(args []string, stub shim.ChaincodeStubInterface) (string, error) {
//if len(args) < 2 {
// return "", fmt.Errorf("Expected more than 2 parameters to function put!")
//}
var Result []map[string]interface{}
if err := json.Unmarshal([]byte(args[0]), &Result); err != nil {
return "", fmt.Errorf("parameters Unmarshal fail,args string not json array, err:%s", err)
}
for _, mapres := range Result{
Id ,ok:= mapres["id"]
if !ok{
return "", fmt.Errorf("The id field must exist ")
}
tablename,ok := mapres["tablename"].(string)
if !ok{
return "", fmt.Errorf("tablename fields type not string! ")
}
putDate,_:=json.Marshal(mapres)
if err := stub.PutState(tablename+Id.(string), putDate); err != nil {
return "", fmt.Errorf("PutState fail, err :%s", err)
}
}
return fmt.Sprintf("%s put data success!", args[0]), nil
}
/*
根据参数区分不同的表,并执行不同的操作
*/
func tableDifferentiate(tableName string,value map[string]interface{}, stub shim.ChaincodeStubInterface)(error){
switch tableName {
case "alibusi":
return addCompositeKey(tableName,value, stub)
case "alibusirecord":
//return addAlibusirecord(tableName,value, stub)
case "merchants":
//return merchantsLeadger(tableName,value, stub)
case "couincomingparts":
//return addMerchantsale(args[1:],stub)
case "merchantsale":
//return addMerchantsale(tableName,value, stub)
case "coutickets":
//return couticketsLeadger(tableName,value, stub)
case "coutcantm":
//return coutcantmLeadger(tableName,value, stub)
case "couticketcodes":
//return coupartnersLeadger(args[1:],stub)
case "coupartners":
//return coupartnersLeadger(tableName,value, stub)
case "couticketorders":
// return addCouticketorders(tableName,value,stub)
default:
return fmt.Errorf(fmt.Sprintf("Unsupported table name of %s", tableName))
}
return nil
}
func addCompositeKey(tableName string,value map[string]interface{}, stub shim.ChaincodeStubInterface)error{
valBy,_ := json.Marshal(value)
Id := value["id"].(string)
aname,ok := value["aname"].(string)
if !ok{
return fmt.Errorf("aname fields type not string! ")
}
anamecomKey,err :=stub.CreateCompositeKey(tableName,[]string{aname,Id})
if err!=nil{
return err
}
if err := stub.PutState(anamecomKey, valBy); err != nil {
return fmt.Errorf("Put %s date fail, err :%s ",anamecomKey, err)
}
return nil
}
func main() {
err := shim.Start(&TestCC{})
if err != nil {
fmt.Printf("Error starting EncCC chaincode: %s", err)
}
}
\ No newline at end of file
package main
import (
"fmt"
"github.com/hyperledger/fabric/core/chaincode/shim"
"testing"
)
func TestPutData(t *testing.T){
cc := new(TestCC)
stub := shim.NewMockStub("TestCC",cc)
response:= stub.MockInit("init",nil)
fmt.Println(string(response.Payload))
input := `[{"id":"1","aname":"共享惠","tablename":"alibusi"},{"id":"2","aname":"共享惠","tablename":"alibusi"}]`
responseByPut := stub.MockInvoke("invoke1",[][]byte{[]byte("put"),[]byte(input)})
fmt.Printf("Invoke status %d,message %s and payload %s\n",responseByPut.Status,responseByPut.Message,string(responseByPut.Payload))
}
func TestPutNoData(t *testing.T){
cc := new(TestCC)
stub := shim.NewMockStub("TestCC",cc)
response:= stub.MockInit("init",nil)
fmt.Println(string(response.Payload))
input := `[{"id":"1","aname":"共享惠","tablename":"alibusi"},{"id":"2","aname":"共享惠","tablename":"alibusi"}]`
responseByPut := stub.MockInvoke("invoke1",[][]byte{[]byte("putNo"),[]byte(input)})
fmt.Printf("Invoke status %d,message %s and payload %s\n",responseByPut.Status,responseByPut.Message,string(responseByPut.Payload))
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment