go语言中怎么利用fabric实现区块链开发

发布时间:2021-07-06 15:57:06 作者:Leah
来源:亿速云 阅读:361

go语言中怎么利用fabric实现区块链开发,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1.go语言环境搭建,安装go,安装后,配置gopath和goroot

gopath下目录应该有三层:

go语言中怎么利用fabric实现区块链开发

src下包含自己的项目及引入的依赖包

2.安装mingw-w64,下载地址:https://sourceforge.net/projects/mingw-w64/   

解决exec: "gcc": executable file not found in %PATH%异常

安装过程中适配好自己的电脑配置

安装后配置到系统path,安装成功后cmd输入gcc -v出现如下,说明成功:

go语言中怎么利用fabric实现区块链开发

3.引入fabric包,下载地址:https://github.com/hyperledger/fabric

放置到gopath的src\github.com\hyperledger\fabric目录下即可

下载好 https://github.com/miekg/pkcs11

4.开启智能合约的开发:

..\..\vendor\github.com\miekg\pkcs11\pkcs11.go:26:10: fatal error: ltdl.h: No such file or directory
 #include <ltdl.h>
          ^~~~~~~~
compilation terminated.

执行go get -u --tags nopkcs11即可

注意git项目权限问题,要同时具有pull & push权限

5.基于fabric的msp(权限):

msp的实现是CA,fabric的实现是fabric-ca

前提go版本1.10以上,配置了gopath,安装了libtool和libtdhl-dev工具包

先安装号fabric-ca,安装命令:go get -u github.com/hyperledger/fabric-ca/cmd/...

然后启动facric-ca-server的服务端,命令:fabric-ca-server start -b admin:adminpw --cacount 2

生成了ca1 和ca2的证书

go语言中怎么利用fabric实现区块链开发

生成的证书在ca1 和ca2目录下ca-cert.pem,

查看证书内容,进入ca1目录:

命令: openssl x509 -in ca-cert.pem -inform pem -noout -text

go语言中怎么利用fabric实现区块链开发

证书包含申请者公钥信息,签名算法信息,申请者基本信息等。

进入sqlite数据库查看信息:先安装号sqlite,配置号path即可

命令:sqlite3 fabric-ca-server.db

go语言中怎么利用fabric实现区块链开发

可看到有以上这些表,其中users目前只有启动时引导的节点:

certificates没有任何证书发放的记录

查看user信息如下:

go语言中怎么利用fabric实现区块链开发

登陆启动时引导节点:

客户端:

go语言中怎么利用fabric实现区块链开发

服务端显示:

go语言中怎么利用fabric实现区块链开发

登陆成功后,查看ca-server下的证书信息,已经全部记录在sqlite数据库中了,查看如下:

go语言中怎么利用fabric实现区块链开发

然后使用ca-client来注册一个节点,这一步过程就是对facric中的peer,user角色进行注册并登记的过程了,

注册命令:fabric-ca-client register --id.name admin2 --id.type user --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,foo=bar'

需要注意:

1. --id.type参数必须是是server端配置文件里hf.Registrar.Roles属性值里的一个

打开fabric-ca-server的配置文件:可注册的类型有client,user,peer,validator和auditor

go语言中怎么利用fabric实现区块链开发

2. --id.affiliation这个属性表示:被注册对象的从属关系参数一定要归属于预先配置的组织属性。

go语言中怎么利用fabric实现区块链开发

添加之后执行以上命令:fabric-ca-client register --id.name admin2 --id.type user --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,foo=bar'

注意要记住生成的密码,后面登陆的时候需要用到

go语言中怎么利用fabric实现区块链开发

然后可以登陆后面的admin2的节点,可查看server端的证书内容即可:

登陆命令: fabric-ca-client enroll -u http://admin2:ItpaeebVWAuY@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/msp

go语言中怎么利用fabric实现区块链开发

说明信息注册进去了,然后打开ca-server端sqlite的user,可以查看到多了一条客户端证书信息:

go语言中怎么利用fabric实现区块链开发

可看到一个client节点的admin, 一个user节点的admin2,其中admin是intermediateCA,打开certificates表可查看到admin2的证书信息:

go语言中怎么利用fabric实现区块链开发

在节点即将到期时,需要重新登记节点,登记命令: fabric-ca-client reenroll

go语言中怎么利用fabric实现区块链开发

登记即重新发送签名证书请求,获取新的数字证书。

查看服务端,可看到证书颁发的时间不同,如下:

go语言中怎么利用fabric实现区块链开发

注销证书命令:  fabric-ca-client revoke -e <enrollment_id> -r <reason>

reason的参数可以为下面的这些:

1. keycompromise 
2. cacompromise 
3. affiliationchange 
4. superseded 
5. cessationofoperation 
6. certificatehold 
7. removefromcrl 
8. privilegewithdrawn 
9. aacompromise
10. unspecified

我们将刚刚登记的节点admin2注销掉,执行命令:fabric-ca-client revoke -e admin2

go语言中怎么利用fabric实现区块链开发

然后查看sqlite的服务端的证书信息,可看到已经变成revoked,已经注销掉了

go语言中怎么利用fabric实现区块链开发

----同理可新建个中间CA,命令:fabric-ca-server start -b admin1:adminpw1 -u http://admin:adminpw@localhost:7054

重新启动一个CA服务器,作为引导节点CA服务器下的中间CA

ca-chain.pem可查看刚刚注册的中间CA

同意添加节点,可以先注册然后enroll

当一个用户拥有两条链的权限时,需要用到交叉认证(本质上时通过restful接口获取到另一个CA链上的证书信息)

交叉认证命令 : fabric-ca-client getcacert -u http://localhost:7055 -M $FABRIC_CA_CLIENT_HOME/msp

关于链码这块,fabric提供了基于权限的扩展,即msp模块,本质上是给服务端和客户端生成证书,证书作为权限的标识,其中在链码中我们获取这个标识的方式可通过如下:

id, err := cid.GetID(stub)

得到如下:

eDUwOTo6Q049YWRtaW4sT1U9RmFicmljLE89S7777777777777777779Tm9ydGggQ2Fyb2xpbmEsQz1VUzo6Q049ZXhhbXBsZS5jb20sT1U9V88888888850ZXJuZXQgV2lkZ2V0cyxMPVNhbiBGcmFuY2lzY28sU1Q9Q2FsaWZvcm5pYSxDPVAA

当然也可通过

creator,err :=stub.GetCreator()

得到证书如下:

SampleOrg�-----BEGIN CERTIFICATE-----
MIICXTCCAgSgAwIBAgIUeLy6uQnq8wwyElU/jCKRYz3tJiQwCgYIKoZIzj0EAwIw
eTELssssssVkZ2VyMQ8wDQYDVQQLEwZGYWJyaWMxDjAMBgNV
BAMs's's's'sFkwyyyyyyQcDQgAEFq/90YMuH4tWugHa
oyZtt4MbxxxxxxW5pbHMtTWFjQm9vay1Qcm8ubG9jYWwwCgYI
KoZIzj0EAwIDRwAwRAIgCoXaCdU8ZiRKkai0QiXJM/GL5fysLnmG2oZ6XOIdwtsC
IEmCsI8Mhrvx1doTbEOm7kmIrhQwUVDBNXCWX1t3kJVN
-----END CERTIFICATE-----

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

推荐阅读:
  1. HyperLeger Fabric SDK开发(一)——Fabric SDK开发简介
  2. HyperLeger Fabric开发(七)——HyperLeger Fabric链码开发

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

go语言 fabric

上一篇:Go语言中怎么实现一个负载均衡算法

下一篇:Go语言中怎么利用CURD操作MySQL

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》