go语言中怎么利用fabric实现区块链开发
go语言中怎么利用fabric实现区块链开发,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
1.go语言环境搭建,安装go,安装后,配置gopath和goroot
gopath下目录应该有三层:
src下包含自己的项目及引入的依赖包
2.安装mingw-w64,下载地址:https://sourceforge.net/projects/mingw-w64/
解决exec: "gcc": executable file not found in %PATH%异常
安装过程中适配好自己的电脑配置
安装后配置到系统path,安装成功后cmd输入gcc -v出现如下,说明成功:
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的证书
生成的证书在ca1 和ca2目录下ca-cert.pem,
查看证书内容,进入ca1目录:
命令: openssl x509 -in ca-cert.pem -inform pem -noout -text
证书包含申请者公钥信息,签名算法信息,申请者基本信息等。
进入sqlite数据库查看信息:先安装号sqlite,配置号path即可
命令:sqlite3 fabric-ca-server.db
可看到有以上这些表,其中users目前只有启动时引导的节点:
certificates没有任何证书发放的记录
查看user信息如下:
登陆启动时引导节点:
客户端:
服务端显示:
登陆成功后,查看ca-server下的证书信息,已经全部记录在sqlite数据库中了,查看如下:
然后使用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
2. --id.affiliation这个属性表示:被注册对象的从属关系参数一定要归属于预先配置的组织属性。
添加之后执行以上命令:fabric-ca-client register --id.name admin2 --id.type user --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,foo=bar'
注意要记住生成的密码,后面登陆的时候需要用到
然后可以登陆后面的admin2的节点,可查看server端的证书内容即可:
登陆命令: fabric-ca-client enroll -u http://admin2:ItpaeebVWAuY@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/msp
说明信息注册进去了,然后打开ca-server端sqlite的user,可以查看到多了一条客户端证书信息:
可看到一个client节点的admin, 一个user节点的admin2,其中admin是intermediateCA,打开certificates表可查看到admin2的证书信息:
在节点即将到期时,需要重新登记节点,登记命令: fabric-ca-client reenroll
登记即重新发送签名证书请求,获取新的数字证书。
查看服务端,可看到证书颁发的时间不同,如下:
注销证书命令: 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
然后查看sqlite的服务端的证书信息,可看到已经变成revoked,已经注销掉了
----同理可新建个中间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-----
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对亿速云的支持。