前面我们学习了Fabric的安装,以及Fabric的一些核心概念,下面我们将要构建之一个基于Fabric的应用。
我们将通过fabcar的例子来学习Fabric的知识。值得注意的是,我们将展示与证书颁发机构进行交互并生成注册证书的过程,之后我们将利用这些身份来查询和更新账本。
我们需要做以下三步:
完成本教程后,你应该基本了解应用程序如何与智能合约一起编程,以及与Fabric *** 上的账本进行交互。
注意,我们需要按照之前的教程在本地安装好开发环境。可以参考这篇文章:
手把手教你运行Fabric ***
在我们每次运行Fabric *** 之前,我们需要先把之前存在的Fabric *** 给清除掉,可以使用下面的命令:
./byfn.sh down
当一切安装完成的时候,我们进入fabcar目录:
cd fabric-samples/fabcar && ls
我们可以看到下面的文件:
我们还需要杀掉一些存在的容器:
清除掉在缓存中存在的 *** :
如果你之前运行过本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 *** 。
提示:打印CA日志对我们很有帮助。为了打印CA日志,新建一个命令行窗口,输入下面的命令:
docker logs -f ca.example.com
当运行Fabric *** 的时候管理员账户被注册到CA。现在我们需要向CA服务器发送请求,获取用户的注册证书。通过下面的命令调用CA服务器:
这个程序将会调用证书签名请求(CSR),最终输出eCert和密钥在一个新创建的文件夹中hfc-key-store 。此后,我们的app在需要的时候,将会加载这个文件。
我们已经使用CA服务器产生了管理员账户,下面我们再次注册一个新用户usr1。新用户用于查询和更新账本。需要注意的是,我们是使用管理员账户来进行注册新的账户的。
同样的,我们在hfc-key-store 目录下可以看到user1的相关信息。
首先,我们运行query.js程序,返回账本上的所有车。
返回了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函数,什么参数也不传递。
我们首先创建一辆车,更新的操作在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,结果如下:
接下来,我们使用query.js即可查询到刚才添加的car:
在计算机中,该命令是在对程序进行编程时发出的编程命令。我们的小伙伴们很少触碰电脑指令。但是,了解修复命令有助于解决计算机问题。接下来,我将与您共享CHKDSK命令来修复磁盘 如何使用CHKDSK命令...
淘宝关键词优化,相信这个对于大部分卖家来说已经不陌生了。在做淘宝的时候关键词是尤其重要的,关键词可以说简单但又复杂,但既复杂又简单。其实这个根本就没有我们想得那么复杂,也是很多买家弄来一大推关键词然后...
苹果手机当属全球最抢手热门的手机品牌,因此购买苹果手机的人越来越多。很多朋友在初次使用手机时,都会出现要注册苹果id和激活的问题。那么,苹果id怎么注册呢?你会注册激活苹果id吗?下面让我们一起看下苹...
用户名:密 码:验证码:alt="看不清?点击更换" src="../include/vdimgck.php"/>看不清? ...
其他谜底:<title>{$ctitle$}-{$SiteName}</title> 【阿城seo培训教程】 其他谜底:1、网站内容质量阐明 这里的内容质量阐明不只是阐明网站内...
刚把一只小泰迪犬抱回家时你是不是非常兴奋呢!可是兴奋过后面对一个弱小而活跃的生命,没有经验的你难免手忙脚乱一番。想让泰迪狗狗乖乖的听话,自然是离不开的就是汪主的耐心的训导,不会训练狗狗的汪主也挺多的,...