区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新
  zqXXM0K5gNRE 2023年11月02日 27 0


导读


超级账本,作为最火热的联盟链技术,得到了广泛地使用,也得到了很多科研人员的青睐。

今天这篇文章,我们一起来学习利用JS语句来操作区块链网络,具体包括调用JS合约实现账本的查询和更新操作。


让我们一起走进文章,来感受Fabric并深入理解联盟链吧!



1、说点题外话


遇到问题是必然的,遇到困难也是肯定的。面对困难的心态,是我们应该关心的。


有人在遇到困难后,选择迎难而上,有人选择自暴自弃和退缩。有人在取得短暂成绩后,又觉得好像一切尽在掌握之中,开始急功近利,开始盲干!


马克思主义要求我们所有的无产阶级战士们,摒弃掉上面这个错误的思想,错误的作风;要求我们用马克思主义的科学态度去解决遇到的各种困难。


态度方面,我们要摒弃一切主观的、散漫的非无产阶级的态度。这些需要我们在社会实践中,不断地改正自己,提升自己。错误的态度,错误的习惯,绝不是立刻就能改好的,也绝不是永远都不能改变的。我们既反对毕其功于一役的盲动和急性病,也反对明知缺点,却找各种理由借口拒绝改变的死不悔改病。


做事风格方面,要用马克思主义和无产阶级战士的要求检查自己!首先,遇到困难,解决办法绝不是一个人或者几个人围坐在一起,绞尽脑汁空想出来的。毛泽东同志在《反对本本主义》中告诉我们:

“一切结论产生于调查情况的末尾,而不是在它的先头。只有蠢人,才是他一个人,或者邀集一堆人,不作调查,而只是冥思苦索地“想办法”,“打主意”。须知这是一定不能想出什么好办法,打出什么好主意的。换一句话说,他一定要产生错办法和错主意。”

关于调研,由于时代的发展,我们可以有更多的形式,可以有更好的方法,更快的效果。例如我们在网上搜索别人的解决方案,例如我们寻找身边的“大神”给我们提供经验。


其次,是要实践。只有调查也是不够的,更需要实践。毛泽东同志在《实践论》中强调:

“我们的实践证明:感觉到了的东西,我们不能立刻理解它,只有理解了的东西才更深刻地感觉它。感觉只解决现象问题,理论才解决本质问题。这些问题的解决,一点也不能离开实践。无论何人要认识什么事物,除了同那个事物接触,即生活于(实践于)那个事物的环境中,是没有法子解决的。……如果要直接地认识某种或某些事物,便只有亲身参加于变革现实、变革某种或某些事物的实践的斗争中,才能触到那种或那些事物的现象,也只有在亲身参加变革现实的实践的斗争中,才能暴露那种或那些事物的本质而理解它们。”。

因此,我们只做调研,不对调研的内容做深入的理解,不做深入的实践,是不能真正认识这些内容的。


一起努力,学习科学的马克思主义,学习毛泽东思想,用于改造我们的错误思想,用于完善我们的意识,用于指导我们的实践!


2、准备工作


1、环境测试

测试包括区块链环境测试与网络环境测试。具体可以看上一篇文章。在这里,我们分享一个新的解决网络不能联通的问题。

打开任务管理器,找到VM开头的:

区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_javascript

保证这四个都是正在运行的。

2、必要环境安装

使用如下命令:


sudo apt install build-essential


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_lua_02


准备工作完成后,确保都没问题后,我们就可以学习今天的内容啦

2

启动与配置

前面我们学习了如何使用go的链码执行相关的操作,今天我们来看使用JavaScript来执行相关的操作。


1、启动网络

进到fabcar文件夹,具体路径为:

~/HyperledgerFabric2.3/fabric/scripts/fabric-samples/fabcar

大家的路径可能跟我的有差别,但是从HyperledgerFabric2.3后面基本上都是一致的。

然后在这个文件夹下打开一个新的终端,并启动网络:

./startFabric.sh javascript

区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_区块链_03


然后我们切换到子文件夹javascript,并查看当前文件夹下的所有文件:


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_区块链_04

cdls


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_javascript_05



在做后面的操作之前,我们可以先打开新终端运行下面的命令,方便我们查看CA的日志流:



docker


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_javascript_06


2、登记管理员用户


我们在创建网络的时候,一个管理员用户(Admin)会被证书授权服务器(CA)创建为注册员。首先我们先为管理员用户生成公私钥和x.509证书:



node enrollAdmin.js


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_javascript_07


这个命令会将CA管理员的证书保存在wallet目录中的admin.id文件:


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_lua_08



我们打开该文件:


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_lua_09



我们换个格式:











{"credentials":  {"certificate":"-----BEGIN CERTIFICATE-----\nMIIB8jCCAZmgAwIBAgIUXiTQUhkvIUOiAXC3042RRumdY6wwCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwNzEzMDIwMzAwWhcNMjMwNzEzMDcwMjAw\nWjAhMQ8wDQYDVQQLEwZjbGllbnQxDjAMBgNVBAMTBWFkbWluMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAEC2DcUqhHXVheKYdY2HImDDv37ZlTsIiH7Ld5ldOuyqmk\nJ0RBBuBI9nQUujmhqX6hsdHJA181ongKOixSmopQxaNgMF4wDgYDVR0PAQH/BAQD\nAgeAMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOxKWXw6hK+0kSJHqH27EVgbdAUv\nMB8GA1UdIwQYMBaAFFs4F3VRO/SXat5/iL8hhb7zJPMrMAoGCCqGSM49BAMCA0cA\nMEQCIHlHYi/v4ec/sLHR+IMWplp3NB+n+Tp3hJDTtHMN5jKhAiApKUjgWRpuWoGk\nOZLWvFL9MWcnPYLX6iTOKowCjT97Aw==\n-----END CERTIFICATE-----\n","privateKey":"-----BEGIN PRIVATE KEY-----\r\nMIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8ranUSOHhx0/mgRJ\r\nckb0/azQDnOwBVF0/rx73iuwxPihRANCAAQLYNxSqEddWF4ph1jYciYMO/ftmVOw\r\niIfst3mV067KqaQnREEG4Ej2dBS6OaGpfqGx0ckDXzWieAo6LFKailDF\r\n-----END PRIVATE KEY-----\r\n"  },"mspId":"Org1MSP","type":"X.509","version":1}



3、注册和等级应用程序用户


接下来我们创建一个用户,用于和区块链交互:



node registerUser.js


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_区块链_10


4、查询账本


接下来我们查询所有的信息:



node query.js


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_区块链_11














Wallet path: /home/shuiyixin/HyperledgerFabric2.3/fabric/scripts/fabric-samples/fabcar/javascript/walletTransaction has been evaluated, result is: [{"Key":"CAR0","Record":{"color":"blue","docType":"car","make":"Toyota","model":"Prius","owner":"Tomoko"}},{"Key":"CAR1","Record":{"color":"red","docType":"car","make":"Ford","model":"Mustang","owner":"Brad"}},{"Key":"CAR2","Record":{"color":"green","docType":"car","make":"Hyundai","model":"Tucson","owner":"Jin Soo"}},{"Key":"CAR3","Record":{"color":"yellow","docType":"car","make":"Volkswagen","model":"Passat","owner":"Max"}},{"Key":"CAR4","Record":{"color":"black","docType":"car","make":"Tesla","model":"S","owner":"Adriana"}},{"Key":"CAR5","Record":{"color":"purple","docType":"car","make":"Peugeot","model":"205","owner":"Michel"}},{"Key":"CAR6","Record":{"color":"white","docType":"car","make":"Chery","model":"S22L","owner":"Aarav"}},{"Key":"CAR7","Record":{"color":"violet","docType":"car","make":"Fiat","model":"Punto","owner":"Pari"}},{"Key":"CAR8","Record":{"color":"indigo","docType":"car","make":"Tata","model":"Nano","owner":"Valeria"}},{"Key":"CAR9","Record":{"color":"brown","docType":"car","make":"Holden","model":"Barina","owner":"Shotaro"}}]


上面的查询是查所有的,如果我们只想查某个车辆的相关信息,我们就可以打开query.js文件:


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_区块链_12


修改第46行语句:



const result = await contract.evaluateTransaction('queryAllCars');


为:



const result = await contract.evaluateTransaction('queryCar', 'CAR4');


结果如下:


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_lua_13


5、更新账本


接下来我们来学习如何更新账本,首先我们要先学会如何创建一辆新车,我们打开invoke.js文件:


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_lua_14


然后在这个文件中,我们能够找到提交交易的代码:







// Submit the specified transaction.// createCar transaction - requires 5 argument, ex: ('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom')// changeCarOwner transaction - requires 2 args , ex: ('changeCarOwner', 'CAR12', 'Dave')await contract.submitTransaction('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom');console.log('Transaction has been submitted');


前三行是注释,对具体的操作类型和内容做了说明,第四行是提交一个交易,交易的内容是创建一辆车,然后是车的相关信息,和前面在账本中的相对应。有兴趣的,可以简单做一些修改,查看不同的结果。最后一条语句是执行成功的提示。


了解了实现过程,然后我们使用如下命令来调用:



node invoke.js


结果为:


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_lua_15


然后如果我们想要验证我们创建的汽车记录在账本中,我们再次修改查询语句并查询即可,打开query.js文件,并将



const result = await contract.evaluateTransaction('queryCar', 'CAR4');


修改为:



const result = await contract.evaluateTransaction('queryCar', 'CAR12');


然后再次查询:



node query.js


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_lua_16


我们注意看创建过程中的注释:





// Submit the specified transaction.// createCar transaction - requires 5 argument, ex: ('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom')// changeCarOwner transaction - requires 2 args , ex: ('changeCarOwner', 'CAR12', 'Dave')


也就是说我们也可以用这个功能,更换一下类型(将createCar修改为changeCarOwner),就可以实现资产的转移了,我们按照注释修改参数:


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_区块链_17


然后再次调用两个命令:




node invoke.jsnode query.js


我们就会发现,拥有者已经改变了:


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_javascript_18


完成了这些内容,我们最后需要将策略网络关闭,我们退回到上层fabcar文件夹,然后执行关闭命令:




cd./networkDown.sh


区块链 | Hyperledger Fabric 05 超详细图解——JS版本合约实现账本的查询与更新_javascript_19


3

说在后面的话

到这里,我们就了解应用JS对链上的数据进行简单的操作了!今天内容相比较之前的内容简单了一些。但是也需要大家熟练掌握呀!

一起加油啦!



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
zqXXM0K5gNRE