fabric是什么意思(Fabric教程之编写应用程序)

访客3年前黑客文章870

前言

前面我们学习了Fabric的安装,以及Fabric的一些核心概念,下面我们将要构建之一个基于Fabric的应用。

我们将通过fabcar的例子来学习Fabric的知识。值得注意的是,我们将展示与证书颁发机构进行交互并生成注册证书的过程,之后我们将利用这些身份来查询和更新账本。

我们需要做以下三步:

Fabric教程之编写应用程序(一)

  1. 设置开发环境:
  2. 学习我们将要使用的智能合约的参数。智能合约包含各种各样的函数,可以让我们和账本进行交互。
  3. 开发可以查询和更新账本资产的应用。

完成本教程后,你应该基本了解应用程序如何与智能合约一起编程,以及与Fabric *** 上的账本进行交互。

设置开发环境

注意,我们需要按照之前的教程在本地安装好开发环境。可以参考这篇文章:

手把手教你运行Fabric ***

在我们每次运行Fabric *** 之前,我们需要先把之前存在的Fabric *** 给清除掉,可以使用下面的命令:

./byfn.sh down

当一切安装完成的时候,我们进入fabcar目录:

cd fabric-samples/fabcar && ls

我们可以看到下面的文件:

Fabric教程之编写应用程序(一)

我们还需要杀掉一些存在的容器:

Fabric教程之编写应用程序(一)

清除掉在缓存中存在的 *** :

Fabric教程之编写应用程序(一)

如果你之前运行过本demo,可以使用下面的命令删除fabcar智能合约:

docker rmi dev-peer0.org1.example.com-fabcar-1.0-5c906e402ed29f20260ae42283216aa75549c571e2e380f3615826365d8269ba

安装客户端,运行 ***

我们在fabric-samples/fabcar目录下运行npm install 来安装fabric-ca-client和fabric-client。等待相关的文件安装完成之后。我们执行下面的脚本:

./startFabric.sh

这个脚本将会启动我们的Fabric实例,并为Golang写的链码启动一个只能合约容器。

同样也可以使用node.js版本。

./startFabric.sh node

注意,使用node.js的版本将会比较慢。

到现在为止,我们已经启动一个Fabric *** 。

Fabric教程之编写应用程序(一)

注册管理员用户

提示:打印CA日志对我们很有帮助。为了打印CA日志,新建一个命令行窗口,输入下面的命令:

docker logs -f ca.example.com

当运行Fabric *** 的时候管理员账户被注册到CA。现在我们需要向CA服务器发送请求,获取用户的注册证书。通过下面的命令调用CA服务器:

Fabric教程之编写应用程序(一)

这个程序将会调用证书签名请求(CSR),最终输出eCert和密钥在一个新创建的文件夹中hfc-key-store 。此后,我们的app在需要的时候,将会加载这个文件。

注册用户user1

我们已经使用CA服务器产生了管理员账户,下面我们再次注册一个新用户usr1。新用户用于查询和更新账本。需要注意的是,我们是使用管理员账户来进行注册新的账户的。

Fabric教程之编写应用程序(一)

同样的,我们在hfc-key-store 目录下可以看到user1的相关信息。

查询账本

Fabric教程之编写应用程序(一)

首先,我们运行query.js程序,返回账本上的所有车。

Fabric教程之编写应用程序(一)

返回了10辆车。如上图所示,下面我们来深入研究query.js文件。

这里指定了通道的名字和 *** 终端,以及证书的位置。

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: ['']};

当应用运行的时候,将会调用peer节点上的链码,运行queryAllCars函数,什么参数也不传递。

账本的更新

Fabric教程之编写应用程序(一)

我们首先创建一辆车,更新的操作在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};

其中有两个函数,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,结果如下:

Fabric教程之编写应用程序(一)

接下来,我们使用query.js即可查询到刚才添加的car:

Fabric教程之编写应用程序(一)

 

 

相关文章

綦怎么读?

綦怎么读?

綦怎么读?綦是什么意思?綦的词语出处也是那里?很多人在生活、学习中遇到“綦”这个词,大家都不知道怎么读这个生僻字。你想知道这些有趣的生僻字怎么读吗?豪友网专门精心整理了生僻字怎么读相关的内容,为你释疑...

​SaaS创业路线图 (76): 客户报备管理背后的战略价值

​SaaS创业路线图 (76): 客户报备管理背后的战略价值

“客户报备管理”在普遍使用CRM的年代似乎不应该是个问题,但很多企业并没有想清楚这件事背后的管理逻辑和战略价值。我们今天就从一个真实案例说起,谈谈很多toB公司在客户报备管理中的实际问题、解决思路及制...

探探撩妹聊天记录大全(怎么约探探里的高中生)

今天小编给大家讲的是一个让众多单身狗们十分愤怒而且羡慕的事,有一位即将升初中的小学生,在玩荒野行动的时候处了个CP。而且俩人还加了QQ和微信,看到他们的聊天记录,真让90后还单身的小编自愧不如...

momo游戏找黑客-黑客能侵入微信吗(黑客能侵入小我私家微信视频谈天吗)

淘宝网店怎么拉黑顾客抑制购买吗 福利彩票检举后帮我退钱了(网络彩票赌博怎么举报) 网络黑客与学什么专业相关 手机微信东拉西扯纪录怎么不同歩(同歩他人手机微信东拉西扯纪录) 怎么可以...

鄱阳湖枯水期变身花海怎么回事?鄱阳湖枯水期变身花海图片美轮美奂

鄱阳湖枯水期变身花海怎么回事?鄱阳湖枯水期变身花海图片美轮美奂

29日,鄱阳湖提前进入枯水期。丰水期烟波浩渺的湖面,已经变成一片草原花海。湖中的鞋山岛露出水面,这座平时的湖中小岛上了岸,变成了一座独特的“小山”。网友惊呼:这就是现实中的沧海桑田!...

微信怎么看在不在线(一文告诉你微信在线不在线的区别)

微信怎么看在不在线(一文告诉你微信在线不在线的区别)

手机微信不象QQ那般,能够见到你的朋友不在线上。但手机微信却不行,它一直全是默认设置线上的,即使你关掉也会在后台管理自启动的,即便 在屏保的状况下,依然会出现消息提醒你,因此 手机微信沒有区别不...