联系我们 / Contact us 信阳宸信网络科技有限公司
电 话:17792598618 手 机:17746429147 E-mail :18884736@qq.com 公司地址:北京市丰台区66号 |
|
||||||||||
| fabric是什么意思(Fabric教程之编写应用程序 | |
| 来源:互联网 发布时间:2026-09-29 23:50:58 | |
fabric是什意思什么意(yi)思(Fabric教程(cheng)之编写应(ying)用程序) 前言 前面我们学习了Fabric的安装,以及Fabric的程之(zhi)程(cheng)序一些核心概念,下面我(wo)们将要构建第一个基于Fabric的编写应用。 我们将通过fabcar的应用例子来学(xue)习Fabric的知(zhi)识。值得注意的什意思是,我(wo)们将展示与证(zheng)书颁发机构进行交(jiao)互并生成注册证书的程之程序过程,之后(hou)我们将利用这些身份来查询和更新账本。编写 我们需要做(zuo)以下三步: 完成本教程(cheng)后,应用你应该基本了解应用程序如何与(yu)智能合(he)约一起编程,什意思以(yi)及与Fabric网络上的程之程(cheng)序账本进行交互。 设置开发环境 注意(yi),编写我们需要按照之前的教程在本地安装好开发(fa)环境。可以参考这篇文章: 手把手(shou)教你运行(xing)Fabric网络 在我们每次运行Fabric网络之前(qian),我们需要先把之前存(cun)在的Fabric网络给清除掉,可以使用(yong)下面(mian)的命令: 当一切安装完(wan)成(cheng)的时候,我们进入fabcar目录: 我们可(ke)以(yi)看到下面的文件: 我们还(hai)需要杀掉一些存在的容器: 清除掉在缓存中存在的网络: 如果你之(zhi)前运行过本demo,可以使用(yong)下面的命令删除fabcar智能合约: 安装客户端,运行网络 我们在fabric-samples/fabcar目录下运(yun)行npm install 来安装fabric-ca-client和fabric-client。等待相关的文件安装完(wan)成之后。我们执行下面的脚本: 这个脚本将会启动我们的Fabric实例,并(bing)为Golang写的链码启动一个只(zhi)能合约容器(qi)。 注意,使用node.js的版本将会比较慢。 到现在为止,我们已经启动(dong)一个Fabric网络。 注册管理(li)员用户 提示:打印CA日志对我们很有帮助。为了打印CA日志,新建(jian)一个命令行窗口,输入下面(mian)的命令: docker logs -f ca.example.com当运行Fabric网络的时候管理员账户被注册到CA。现在我们需要向CA服务器发(fa)送请求,获取用户的注册证书(shu)。通(tong)过下面(mian)的命令调用CA服务器: 这个程序将会调用证书签名请求(CSR),最终输出eCert和密钥在一个新创建的文件夹中hfc-key-store 。此后,我们的app在需要的时候,将会加载这个文件。 注册用户user1 我(wo)们已经使用CA服务器产生了管理员账户,下面(mian)我们再次注册一个新(xin)用户usr1。新用户用于(yu)查询和更(geng)新账本。需要注意(yi)的是,我们是使用管理员账户来进行(xing)注册新的账户的。 同样(yang)的,我们在hfc-key-store 目录下可以看到user1的相关信息。 查询账本 首先,我们运行query.js程序,返回账本上的所有车。 返回了10辆车。如上(shang)图(tu)所示(shi),下面我们来深入研究query.js文件。 这里指定了通道的名字和网络终端,以及证书的(de)位置。 var channel = fabric_client.newChannel('mychannel');var peer = fabric_client.newPeer('grpc://localhost:7051');channel.addPeer(peer);var member_user = null;var store_path = path.join(__dirname, 'hfc-key-store');console.log('Store path:'+store_path);var tx_id = null;下面是我们的查询函数: // queryCar chaincode function - requires 1 argument, ex: args: ['CAR4'],// queryAllCars chaincode function - requires no arguments , ex: args: [''],const request = { //targets : --- letting this default to the peers assigned to the channel chaincodeId: 'fabcar', fcn: 'queryAllCars', args: ['']};当应用运(yun)行的时候,将会调用peer节点上的链码,运行queryAllCars函数,什么参数也不传递。 账本的更新 我们首先创建一辆车,更新的操作在invoke.js中定义。 // createCar chaincode function - requires 5 args, ex: args: ['CAR12', 'Honda', 'Accord', 'Black', 'Tom'],// changeCarOwner chaincode function - requires 2 args , ex: args: ['CAR10', 'Barry'],// must send the proposal to endorsing peersvar request = { //targets: let default to the peer assigned to the client chaincodeId: 'fabcar', fcn: '', args: [''], chainId: 'mychannel', txId: tx_id};其(qi)中有两(liang)个函数,createcar和changeCarOwner。首先,我们创建一辆车, var request = { //targets: let default to the peer assigned to the client chaincodeId: 'fabcar', fcn: 'createCar', args: ['CAR10', 'Chevy', 'Volt', 'Red', 'Nick'], chainId: 'mychannel', txId: tx_id};下面我们执行node invoke.js,结果如下: 接(jie)下来,我们使用query.js即可查询到刚才添加的car: |
|
| 上一条: 黄石信息价查询_黄石专业的网站建设报价_3 | |
| 下一条: 高端定制网站设计_高端网站制作哪个好 | |