2019独角兽企业重金招聘Python工程师标准>>>

Netkiller Blockchain 手札

作者正在找工作,联系方式 13113668890

Mr. Neo Chan, 陈景峯(BG7NYT)

中国广东省深圳市望海路半岛城邦三期
518067
+86 13113668890

<netkiller@msn.com>

文档始创于2018-02-10

版权 © 2018 Netkiller(Neo Chan). All rights reserved.

版权声明

转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。

http://www.netkiller.cn
http://netkiller.github.io
http://netkiller.sourceforge.net
微信订阅号 netkiller-ebook (微信扫描二维码)
QQ:13721218 请注明“读者”
QQ群:128659835 请注明“读者”

2.10.6. 资产上链的 Hyperledger Fabic 链码

我们希望资产上链适用于任何领域,后面也方便将业务拓展。所以我实现了一个万能合约。以不变应万变。

package mainimport ("fmt""github.com/hyperledger/fabric/core/chaincode/shim"pb "github.com/hyperledger/fabric/protos/peer"
)type SmartContract struct {}func (s *SmartContract) Init(stub shim.ChaincodeStubInterface) pb.Response {return shim.Success(nil)
}func (s *SmartContract) Query(stub shim.ChaincodeStubInterface) pb.Response {return shim.Success(nil)
}func (s *SmartContract) Invoke(stub shim.ChaincodeStubInterface) pb.Response {// Retrieve the requested Smart Contract function and argumentsfunction, args := stub.GetFunctionAndParameters()// Route to the appropriate handler function to interact with the ledger appropriatelyif function == "create" {return s.create(stub, args)} else if function == "find" {return s.find(stub, args)} else if function == "update" {return s.update(stub, args)} else if function == "delete" {return s.delete(stub, args)}return shim.Error("Invalid Smart Contract function name.")
}func (s *SmartContract) create(stub shim.ChaincodeStubInterface, args []string) pb.Response {if len(args) != 2 {return shim.Error("Incorrect number of arguments. Expecting 2")}_key    := args[0]_data    := args[1]if(_data == ""){return shim.Error("Incorrect string of data")}existAsBytes,err := stub.GetState(_key)if string(existAsBytes) != "" {fmt.Println("Failed to create account, Duplicate key.")return shim.Error("Failed to create account, Duplicate key.")}err = stub.PutState(_key, []byte(_data))if err != nil {return shim.Error(err.Error())}fmt.Printf("create %s %s \n", _key, string(_data))return shim.Success(nil)
}func (s *SmartContract) find(stub shim.ChaincodeStubInterface, args []string) pb.Response {if len(args) != 1 {return shim.Error("Incorrect number of arguments. Expecting 1")}_key      := args[0]_data, err := stub.GetState(_key)if err != nil {return shim.Error(err.Error())}if string(_data) == "" {return shim.Error("The key isn't exist.")}else{fmt.Printf("query %s %s \n", _key, string(_data))}return shim.Success(_data)
}func (s *SmartContract) update(stub shim.ChaincodeStubInterface, args []string) pb.Response {if len(args) != 2 {return shim.Error("Incorrect number of arguments. Expecting 2")}_key    := args[0]_data    := args[1]if(_data == ""){return shim.Error("Incorrect string of data")}err := stub.PutState(_key, []byte(_data))if err != nil {return shim.Error(err.Error())}else{fmt.Printf("update %s %s \n", _key, string(_data))}return shim.Success(nil)
}// Deletes an entity from state
func (t *SmartContract) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response {if len(args) != 1 {return shim.Error("Incorrect number of arguments. Expecting 1")}_key := args[0]// Delete the key from the state in ledgererr := stub.DelState(_key)if err != nil {return shim.Error("Failed to delete state")}return shim.Success(nil)
}func main() {err := shim.Start(new(SmartContract))if err != nil {fmt.Printf("Error creating new Smart Contract: %s", err)}
}

链码有四个函数,分别是创建,查找,更新,删除。

if function == "create" {return s.create(stub, args)        // 创建} else if function == "find" {return s.find(stub, args)        // 查找} else if function == "update" {return s.update(stub, args)        // 更新} else if function == "delete" {return s.delete(stub, args)        // 删除}

上链使用 create 方法,函数有两个参数,一个是 key, 另一个是数据。

key 使用 UUID 存储再数据库和链上,同时 UUID 对应通证的

data 是序列化 byte 数据。例如可以使用 json, hession, msgpack 等序列化后的数据。

err = stub.PutState(_key, []byte(_data))

这个链码考虑到前期产品上市,不确定性因素很多,需要更新和删除等等。后期我们可以在数据中设置一个 status 变量,当 status = false 就不在允许数据的删除和更新。

转载于:https://my.oschina.net/neochen/blog/2907388

艺术品区块链溯源防伪平台(连载三)数字资产如何上链相关推荐

  1. 溯源系统服务器,区块链溯源服务平台系统架构!

    原标题:区块链溯源服务平台系统架构! 区块链溯源架构: 区块链溯源服务平台为企业客户提供完整的商品溯源服务,基于一物一码(芯)锚定商品,通过对接第三方系统.PDA或扫码设备,不仅降低了企业客户的管理成 ...

  2. 数字经济发展新时代下,区块链溯源防伪防窜货技术为企业发展赋能

    随着互联网技术的快速发展,数字经济发展加快,大多企业已经不单单只是重在销售了,也开始注重产品质量以保证原品售出,以及企业品牌的打造,提升消费者的体验度,为企业的长期发展打下坚实的基础. 产品的质量是生 ...

  3. 云图说丨华为云区块链引擎服务:高安全的区块链技术服务平台,轻松部署,快速上链

    摘要:华为云区块链引擎服务以BCS自主研发区块链内核为底座,结合可信硬件,具有高安全.高性能.高可扩展.强隐私保护等特点,满足企业级和金融级的可信和协同要求. 本文分享自华为云社区<[云图说] ...

  4. 区块链溯源防伪认证在新零售电商中的价值体现在哪里?

    区块链的数据不可篡改与交易可追溯两大特性相结合,可解决传统溯源中存在的信任问题,在电子商务之中应用区块链技术也是一种有效的创新. 对消费者而言,作为区块链技术本身所具有的可溯源性以及信任机制,可以把产 ...

  5. php防伪溯源x系统_区块链溯源防伪追溯系统开发解决方案

    随着互联网技术的不断成熟,区块链可追溯性已逐渐成为防伪手段的升级版本.由于分布式记账.加密技术和区块链智能合约技术具有去中心化.开放性和透明性.非篡改性和可追溯性等特点,正好满足了商品的可追溯性和防伪 ...

  6. 产业区块链:像投资股票一样投资数字资产

    导语: 巴菲特:你买的不是股票,你买的是一部分企业生意. 产业区块链:像投资股票一样投资数字资产 币圈,一个迷幻而真实的地方,金钱的诱惑往往让人看不清本质. 币圈暴雷的项目年年有,而被骗的人也一直有. ...

  7. 区块链溯源防伪新零售:优化供应链管理及经销商体系

    供应链管理,使供应链运作达到最优化,以最少的成本,令供应链从采购开始,到满足最终客户的的所有过程,包括工作流.实物流.资金流和信息流等均能高效率地操作,把合适的产品.以合理的价格,及时准确地送达消费者 ...

  8. 区块链溯源防伪新零售创新企业发展模式,带动企业持续健康发展

    当然,数字经济处于快速发展时期,同时也需要区块链.大数据.人工智能等新兴技术的支持,很多企业开始向数字化产业转型,这对企业的持续健康发展发挥着很大的作用.当前产品质量和推广销售是企业关注较多的两大问题 ...

  9. 400万瓶酒庄酒上链,腾讯安全领御与张裕共建区块链溯源平台

    假冒伪劣商品向来是世界性的难题,尤其是葡萄酒等高价值商品,往往难以逃脱被造假仿冒的风险.消费者对"真假"存疑,正规品牌深受其害,这类问题该如何解决? 7月30日,腾讯安全领御区块链 ...

最新文章

  1. 华为昇腾AI全栈知识深入解读,师资培训沙龙深圳场圆满落幕!
  2. Java为什么冷启动开销大?我们又该如何解决?
  3. DPDK vhost-user研究(九)
  4. 如何采用简化方法进行需求分析
  5. php aws s3查看所有文件_国内AWS没有文件系统服务,快来看如何通过EC2挂载S3存储桶替代...
  6. PHP通过__call实现简单的AOP(主事务后的其他操作)比如前置通知,后置通知
  7. 使用TFS CI/CD 完成 VSTS 插件自动化部署和发布
  8. mysql的使用优化问题吗_如何对 mysql 进行优化的问题
  9. 如何快速提升 Go 程序性能?
  10. 你要清楚SEO内容优化注意事项
  11. 2019北邮网安考研经验
  12. APM2.8 Rover 自动巡航车设计(硬件连接)
  13. cogs339 维修数列 ……
  14. 我的世界玩服务器虚拟内存高崩,服务端崩溃 - 崩溃解答 - MC百科社群 - MC百科|最大的Minecraft中文MOD百科...
  15. strings.Builder 源码阅读与分析
  16. 学习teardrop攻击并伪造一个ip包
  17. Xz1android9打电话延迟,索尼Xperia XZ与XZ1系列正式获得Android 9升级;但这新
  18. java与seo_java实现seo优化 提高运行效率
  19. 从零到一搭建大数据分析引擎HIVE
  20. App竞品技术分析 (3)减小安装包的体积

热门文章

  1. .NET的ConcurrentDictionary,线程安全集合类
  2. 关于RuntimeError: CUDA error: out of memory问题的解决方法
  3. Loadrunner如何使用谷歌浏览器录制脚本
  4. 大数据就业生就业信息分析可视化
  5. boss直聘一句话介绍优势_boss直聘开场白聊啥?这样做才吸引人!
  6. 机器学习——特征值分解
  7. typora如何导出深色背景的pdf
  8. 2022年使用的至佳Java IDE
  9. psql: error: connection to server on socket “/tmp/.s.PGSQL.5432“ failed: No such file or directory
  10. python pip-什么是pip?Python新手入门指南