首先简单介绍一下此次流程步骤,在go build阶段出现问题,然后说明一下如何解决的问题。
出现的问题的提示代码为:
问题1、go: github.com/hyperledger/fabric-chaincode-go@v0.0.0-20190823162523-04390e015b85: Get "https://proxy.golang.org/github.com/hyperledger/fabric-chaincode-go/@v/v0.0.0-20190823162523-04390e015b85.mod": dial tcp 216.58.200.49:443: connect: connection refused

解决方案1:执行以下命令
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.io,direct
然后再执行go build,不再出现此类错误

问题2:go build github.com/hyperledger/fabric-samples/chaincode/sacc: copying /tmp/go-build462413933/b001/exe/a.out: open sacc: permission denied

解决方案2:
经分析,应该是权限问题,尝试很多办法,包括更改文件夹权限777等,最终发现更改文件夹权限无法作用到docker容器中,所以采用直接简单的一种方法,那就是以root身份进入容器执行各种操作。进入chaincode容器的指令如下:$ docker exec -it -u root chaincode sh

问题3:Error starting SimpleAsset chaincode: flag 'peer.address' must be set

解决方案3:尚未解决,各位大佬如果知道解决方案请留言

Fabric-samples开发模式下chaincode操作流程步骤:

1、在$GOPATH下的src文件夹下建立一个sacc文件,并创建一个sacc.go文件进行chaincode编码

$ mkdir -p $GOPATH/src/sacc && cd $GOPATH/src/sacc
$ touch sacc.go

2、在sacc.go中进行编码,编写InitInvokesetget等函数,进行整合。具体的代码如下:

package main
import("fmt""github.com/hyperledger/fabric-chaincode-go/shim""github.com/hyperledger/fabric-protos-go/peer")// SimpleAsset implements a simple chaincode to manage an asset
type SimpleAsset struct {}// Init is called during chaincode Instantiation to initialize any data
// Note that chaincodeee upgrade also calls this function to reset or to migrate data,
// so be careful to avoid a scenario where you inadvertently clobber your ledger's data
func (t *SimpleAsset) Init(stub shim.ChaincodeStubInterface) peer.Response{// Get the args from the transaction proposalargs := stub.GetStringArgs()if len(args) != 2 {return shim.Error("Incorrect arguments. Expection a key and a value...")}// Set up any variables or assets here by calling stub.PutStata()// We store the key and the value on the ledgererr := stub.PutState(args[0], []byte(args[1]))if err != nil {return shim.Error(fmt.Sprintf("Failed to create asset: %s", args[0]))}return shim.Success(nil)
}// Invoke is called per transaction on the chaincode. Each transaction is either a 'get'
// or a 'set' on the asset created by Init function. The 'set' method may create a new
// asset by specifying a new key-value pair.
func (t *SimpleAsset) Invoke(stub shim.ChaincodeStubInterface) peer.Response{// Extract the function and args from the transaction proposalfn, args := stub.GetFunctionAndParameters()var result stringvar err errorif fn == "set" {result, err = set(stub, args)}else{result, err = get(stub, args)}if err != nil {return shim.Error(err.Error())}// Return the result as success payloadreturn shim.Success([]byte(result))
}// Set stores the asset (both key and value) on the ledger. If the key exists,
// it will override the value with the new one
func set(stub shim.ChaincodeStubInterface, args []string) (string, error){if len(args) != 2 {return "", fmt.Errorf("Incorrect arguments. Expecting a key and a value")} err := stub.PutState(args[0], []byte(args[1]))if err != nil {return "", fmt.Errorf("Failed to set asset: %s", args[0])}return args[1], nil
}// Get returns the value of the specified asset key
func get(stub shim.ChaincodeStubInterface, args []string) (string, error){if len(args) != 1 {return "", fmt.Errorf("Incorrect arguments. Expecting a key and a value")} value, err := stub.GetState(args[0])if err != nil {return "", fmt.Errorf("Failed to set asset: %s with error: %s", args[0], err)}if value == nil {return "", fmt.Errorf("Asset not found: %s", args[0])}return string(value), nil
}// main function starts up the chaincode in the container during instantiate
func main() {err := shim.Start(new(SimpleAsset))if err != nil {fmt.Printf("Error starting SimpleAsset chaincode: %s", err)}
}

3、编译chaincode

$ go get -u --tags nopkcs11 github.com/hyperledger/fabric-chaincode-go/shim
$ go build --tags nopkcs11

4、在开发模式下进行测试(在/fabric-samples/chaincode-docker-devmode目录下启动3个终端)

(tip:需要先安装fabric-samples, 在我之前博客中有篇专门介绍如何安装)

$ cd hyerledger/fabric-samples/chaincode-docker-devmode

终端1:

$ docker-compose -f docker-compose-simple.yaml up

终端2:

$ docker exec -it chaincode sh
/opt/gopath/src/chaincode $ cd sacc
/opt/gopath/src/chaincode/sacc $ go build

当执行到这里出现错误:go: github.com/hyperledger/fabric-chaincode-go@v0.0.0-20190823162523-04390e015b85: Get "https://proxy.golang.org/github.com/hyperledger/fabric-chaincode-go/@v/v0.0.0-20190823162523-04390e015b85.mod": dial tcp 216.58.200.49:443: connect: connection refused
解决方法参考上述解决方案1,截图 如下 :
上面报的443错误已解决,但是go build后出现新的错误:go build github.com/hyperledger/fabric-samples/chaincode/sacc: copying /tmp/go-build462413933/b001/exe/a.out: open sacc: permission denied
经分析,应该是权限问题,尝试很多办法,包括更改文件夹权限777等,最终发现更改文件夹权限无法作用到docker容器中,所以采用直接简单的一种方法,那就是以root身份进入容器执行各种操作。

更改终端2指令(最终版)如下:

$ docker exec -it -u root chaincode sh
/opt/gopath/src/chaincode $ cd sacc
/opt/gopath/src/chaincode/sacc $ go env -w GO111MODULE=on
/opt/gopath/src/chaincode/sacc $ go env -w GOPROXY=https://goproxy.io,direct
/opt/gopath/src/chaincode/sacc $ go build
/opt/gopath/src/chaincode/sacc $ CORE_PEEER_ADDRESS=peer:7051 CORE_CHAINCODE_ID_NAME=mycc:0 ./sacc

又出现了错误:Error starting SimpleAsset chaincode: flag 'peer.address' must be set
尚未解决

终端3:

$ docker exec -it cli bash
$ peer chaincode install -p chaincodedev/chaincode/sacc -n mycc -v 0
$ peer chaincode instantiate -n mycc -v 0 -c '{"Args":["a","10"]}' -C myc
$ peer chaincode invoke -n mycc -v 0 -c '{"Args":["set","a","20"]}' -C myc
$ peer chaincode invoke -n mycc -v 0 -c '{"Args":["query","a"]}' -C myc

Fabric-samples开发模式下chaincode操作流程及错误锦集相关推荐

  1. 4.4 开发模式下的测试:简化我们对链码的测试过程

    4.4 开发模式下的测试:简化我们对链码的测试过程 原创kevin-hf(ID不是微信) 最后发布于2019-02-26 16:48:19 阅读数 180  收藏 展开 目标 熟练掌握链码的 dev ...

  2. 敏捷开发模式下如何更好的进行测试

    最近CTO组建了一个敏捷开发团队,团队人员包括  PM.设计.开发.测试角色,主要由PM来主导团队走向,因为以前并没有参加过敏捷开发的经验,对敏捷开发做了简单理解后,参考了前人的一些意见,总结出在 敏 ...

  3. 前后端分离开发模式下后端质量的保证 —— 单元测试

    概述 在今天, 前后端分离已经是首选的一个开发模式.这对于后端团队来说其实是一个好消息,减轻任务并且更专注.在测试方面,就更加依赖于单元测试对于API以及后端业务逻辑的较验.当然单元测试并非在前后端分 ...

  4. Vue - 去除控制台“你正在开发模式下运行Vue”的警告

    目录 1. 警告内容 2. 解决方案 1. 警告内容 调试 Vue 代码时,Console 控制台老是有警告,警告内容 文字信息如下: You are running Vue in developme ...

  5. 如何在微信公众帐号开发模式下,通过程序代码向用户发送符号表情。

    本文重点介绍如何在微信公众帐号开发模式下,通过程序代码向用户发送符号表情.部分代码来自:FreeEIM 至于如何识别用户发送的是符号表情,就不在此讲解了,留给大家一点学习思考的空间.我只是给大家一个提 ...

  6. cocos2d-x+lua开发模式下编辑器的选择

    cocos2d-x+lua开发模式下编辑器的选择 原本打算直接用CocosIDE的,毕竟是官方出品,并且支持Android远程调试,windows下的调试也非常方便,调试的信息也非常全,智能提示也不错 ...

  7. ultraedit 运行的是试用模式_单元测试 —— 前后端分离开发模式下后端质量的保证...

    概述 在今天, 前后端分离已经是首选的一个开发模式.这对于后端团队来说其实是一个好消息,减轻任务并且更专注.在测试方面,就更加依赖于单元测试对于API以及后端业务逻辑的较验.当然单元测试并非在前后端分 ...

  8. Nodejs搭建前后端分离开发模式下的微信网页项目

    原文链接:<Nodejs搭建前后端分离开发模式下的微信网页项目>- 陈帅华 本文涉及对前后端分离及微信网页项目中的前端如何在本地环境中开发与调试的思考. 主要问题 1.如何配置微信公众平台 ...

  9. 微信三方开发平台开发模式下被动回复用户消息

    微信三方开发平台开发模式下被动回复用户消息视频

最新文章

  1. vue 全局排序_搞定VUE [ 一 ]
  2. php mysql $_php中mysql语句的基本写法
  3. Cpp / __builtin_expect 说明
  4. 安卓进阶系列-03上弹选择框(PopupDialog)的使用
  5. 安卓学习-界面-View的自定义
  6. 能设值多个rowkey吗_顶楼送了露台,悄悄搭建阳光房,偏偏我家露台多个帽子,能拆吗?...
  7. 酷睿i7cpu适合的linux,[图]英特尔酷睿i7 1165G7和AMD Ryzen 7 Pro 4750U Linux性能对比
  8. windows 2003系列之搭建域环境
  9. 液晶显示器尺寸对照表_安徽CHARACTER液晶显示屏
  10. ios 苹果手机适配代码
  11. 计算机五笔是什么时候学的吗,电脑五笔输入法怎么学
  12. 安卓手机XPosed框架安装(详细版本)
  13. 欲为苍鹰,勿与鸟鸣, 欲为强者,莫与弱争!
  14. 网站漏洞扫描工具--Safe3 Web Vul Scanner功能展示
  15. wordpress后台打开速度非常慢怎么办
  16. OLT 的PON口拆分流程
  17. 利用ADB固定Android手机的CPU频率
  18. 【Android】自动瘦脸与眼睛放大美颜算法
  19. 数据库--MYSQL高级(多表),数据库的完整性,约束,数据类型,多表实现 CRUD 操作
  20. 计算机科技英语一千字作文,关于科技的英语作文3篇

热门文章

  1. 用python turtle画小黄人源码_Python turtle模块小黄人程序
  2. July, 20(R)
  3. 训练日记 | 2021.03.21 | 天梯赛选拔赛
  4. php泡点,夜猫首页更新PHP程序 是一个应用于网站
  5. MySQL经典四表查询(教师,学生,成绩,课程表)多表查询
  6. Postman返回乱码问题解决
  7. 高动态卫星DSSS信号Turbo迭代捕获算法
  8. redis集群的发布订阅模式
  9. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第十一集
  10. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第二十集