admin 管理员组文章数量: 888526
Fabric链码实战(二)公民身份信息
title: Fabric链码实战(二)公民身份信息
tags: Hyperledger, fabric ,区块链,chaincode
功能简述
使用链码可以添加和查询公民信息
功能实现
1.导入包
package mainimport ("github.com/hyperledger/fabric/core/chaincode/shim"pb "github.com/hyperledger/fabric/protos/peer""log""encoding/json"
)
2.定义结构体
定义公民信息、国家信息和智能合约结构体
//个人基本信息
type People struct {//区分数据类型DataType string `json:"dataType"`//身份证号码Id string `json:"id"`//性别Sex string `json:"sex"`//姓名Name string `json:"name"`//出生地BrithLocation Location `json:"birthLocation"`//现居住地LiveLocation Location `json:"liveLocation"`//母亲身份证号MotherId string `json:"montherID"`//父亲身份证号FatherId string `json:"fatherID"`
}//位置
type Location struct {//国家Country string `json:"country"`//省Province string `json:"province"`//城市City string `json:"city"`//镇Town string `json:"town"`//详细地址Detail string `json:"detail"`
}//公民链
type CitizensChain struct {
}
3.实现基础函数
设置Init、Invoke和main方法
//初始化方法
func (c *CitizensChain) Init(stub shim.ChaincodeStubInterface) pb.Response {function, _ := stub.GetFunctionAndParameters()if function != "init" {return shim.Error("方法名错误")}log.Println("初始化成功")return shim.Success(nil)
}//链码交互入口
func (c *CitizensChain) Invoke(stub shim.ChaincodeStubInterface) pb.Response {//接收参数判断function, args := stub.GetFunctionAndParameters()//判断if function == "register" {//录入公民信息return c.register(stub, args)} else if function == "query" {//查询公民信息return c.query(stub, args)} else {return shim.Error("无效的方法名")}return shim.Success(nil)
}func main() {err := shim.Start(new(CitizensChain))if err != nil {log.Println(err)}
}
4. 功能实现
定义信息录入和查询操作
//录入公民信息
//-c Args[register,身份证号,json]
//参数1:身份证号,是存储的key
//参数2:个人信息,当成value取存储
func (c *CitizensChain) register(stub shim.ChaincodeStubInterface, args []string) pb.Response {//判断参数个数if len(args) != 2 {return shim.Error("参数错误")}//接收身份证号key := args[0]//接收公民信息(json)value := args[1]perple := People{}//转换err := json.Unmarshal([]byte(value), &perple)if err != nil {return shim.Error("注册失败,参数无法解析")}//更新世界状态stub.PutState(key, []byte(value))return shim.Success(nil)
}//查询公民信息
func (c *CitizensChain) query(stub shim.ChaincodeStubInterface, args []string) pb.Response {if len(args) < 1 {return shim.Error("参数错误")}//接收查询的keykey := args[0]//去世界状态中查数据result, err := stub.GetState(key)if err != nil {return shim.Error("查询失败")}return shim.Success(result)
}
测试链码
链码部署步骤和上一篇一样这里我不在叙述。
###链码实例化###peer chaincode instantiate -n mycc -v 0 -c '{"Args":["init"]}' -C myc###身份录入###
peer chaincode invoke -C mychannel -n mycc -c '{"Args":["register","110229","{\"dataType\":\"citizens\",\"id\":\"110229\",\"sex\":\"man\",\"name\":\"zhangsan\"}"]}'###身份查询###
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","110229"]}'
本文标签: Fabric链码实战(二)公民身份信息
版权声明:本文标题:Fabric链码实战(二)公民身份信息 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1686636823h20200.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论