链码go语言 链码编码

fabric-sdk-go的简单使用

使用fabric提供的cryptogen工具生成文件模板

成都创新互联公司于2013年开始,先为开平等服务建站,开平等地企业,进行企业商务咨询服务。为开平企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

$ cryptogen showtemplate crypto-config.yaml

进行修改,添加一个组织,一个orderer节点.

根据crypto-config.yaml文件生成证书文件:

$ cryptogen generate --config=crypto-config.yaml

查看生成的证书文件夹结构:

需要从fabric的源码案例中拷贝configtx.yaml文件

$ cp $GOPATH/src/github点抗 /hyperledger/fabric-samples/first-network/configtx.yaml ./

对configtx.yaml文件进行修改.

修改之前,创建一个文件夹,来保存即将创建的创世区块文件

将创建区块文件和通道的命令写到一个脚本中! generate.sh

脚本文件和配置文件的目录结构:

执行generate.sh文件生成创世区块文件和通道,其实只有一个组织,也没必要生成锚节点更新文件..

$ ./generate.sh

配置docker-compose文件:

启动容器, 启动后查看容器运行情况

$ docker-compose up -d

$ docker-compose ps

在这里,创建两个脚本文件,用于docker容器的管理

clear_docker.sh 文件:

restart.sh 文件:

创建配置文件的时候,有两个文件可以进行参考...

修改后的sdk配置文件:

创建出一个模型对象,给其赋值,并开始初始化sdk

使用 pkg/fabsdk/fabsdk.go中的New()方法进行实例化

创建请求之前,需要使用 gopackager.NewCCPackage 方法生成一个resource.CCPackage 对象,传递两个参数,一个是链码的路径(相对于工程的路径), 一个是GOPATH的路径.

安装链码,使用pkg/client/resmgmt/resmgmt.go文件中的方法

创建请求之前,需要生成一个*cb.SignaturePolicyEnvelope类型的对象,使用 third_party/github点抗 /hyperledger/fabric/common/cauthdsl/cauthdsl_builder.go 文件中的方法即可,提供了好几个方法, 使用任意一个即可.这里使用 SignedByAnyMember 方法: 需要传入所属组织ID

实例化链码

使用 pkg/client/channel/chclient.go 中的 Execute() 方法,来进行数据写入的操作:

rsp, err := model.Channelclient.Execute(req)

写入之前,要创建请求:

tempArgs是要传给链码的参数,可以做下封装,就不受参数个数的限制了

使用 pkg/client/channel/chclient.go 中的 Query() 方法,来进行数据查询的操作: 查询之前,同样需要创建请求.

链码在工程中的路径应该是 工程名/chaincode文件夹

比如:

driverFabricDemo/chaincode

而不应该省略掉工程名这样写: chaincode

错误原因:cert.URIs 和 tpl.URIs 这两个字段没有被定义.

进入tpl对象中, /usr/local/go/src/crypto/x509/x509.go 是个结构体,并没有发现 URIs 字段

对go版本进行升级,从1.9.3升级到1.11.3, 再次进入 /usr/local/go/src/crypto/x509/x509.go 文件中,查看结构体内容:

在执行sdk的Excute()方法时报错.

方法不存在,一般是由于链码的Invoke方法中的方法名和Excute()方法传入的方法名不一样.

但是可以肯定的是,链码的Invoke方法中的方法名和,项目中执行Excute()方法时传入的方法名是完全一样的! 但是很奇怪了,为什么会出现这个错误呢? 使用 docker rmi 删除掉 dev-peerx.travle.xq点抗 的镜像,再重新运行即可.

在创建实例化链码请求的时候

总是提示

Cannot use str (type *cb.SignaturePolicyEnvelope) as type *common.SignaturePolicyEnvelope less... (⌘F1) Inspection info: Reports composite literals with incompatible types and values

明明是相同的类型,却总是报错,应该是IDE的问题.把vendor文件夹删除后,就不会有提示了. 再使用vendor对工程进行init 和 add +external 就好了!!

出现这个错误,一般都是配置文件哪个地方写错了,需要细心检查

go是什么编程语言?主要应用于哪些方面?

Go语言由Google公司开发,并于2009年开源,相比Java/Python/C等语言,Go尤其擅长并发编程,性能堪比C语言,开发效率肩比Python,被誉为“21世纪的C语言”。

Go语言在云计算、大数据、微服务、高并发领域应用应用非常广泛。BAT大厂正在把Go作为新项目开发的首选语言。

Go语言能干什么?

1、服务端开发:以前你使用C或者C++做的那些事情,用Go来做很合适,例如日志处理、文件系统、监控系统等;

2、DevOps:运维生态中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go语言开发;

3、网络编程:大量优秀的Web框架如Echo、Gin、Iris、beego等,而且Go内置的 net/http包十分的优秀;

4、Paas云平台领域:Kubernetes和Docker Swarm等;

5、分布式存储领域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;

6、区块链领域:区块链里面有两个明星项目以太坊和fabric都使用Go语言;

7、容器虚拟化:大名鼎鼎的Docker就是使用Go语言实现的;

8、爬虫及大数据:Go语言天生支持并发,所以十分适合编写分布式爬虫及大数据处理。

学习区块链开发是学习go语言、hyper ledger fabric比较好、还是以太坊智能合约比较好或者公链开发?

Fabric区块链开发详解,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、通道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、链码与应用开发的操作实践,是学习Fabric区块链开发的最佳选择。

给你个免费区块链博客看看。


网站标题:链码go语言 链码编码
URL标题:http://pwwzsj.com/article/ddssigi.html