温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

HyperLedger如何实现链码开发实例FabCar

发布时间:2021-12-06 14:05:09 来源:亿速云 阅读:164 作者:小新 栏目:互联网科技

这篇文章主要为大家展示了“HyperLedger如何实现链码开发实例FabCar”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HyperLedger如何实现链码开发实例FabCar”这篇文章吧。

应用程序与链码开发 —FabCar

编写第一个应用程序

通过几个实例程序,了解 Fabric 应用的工作原理。
SDK 来调用智能合约(关于二者的详细信息在 SDK 应用程序和智能合约处理两个章节)

三步骤

  1. 建立开发环境。**使用first-network搭建基本的网络(两个组织和一个排序节点;两组之间有一个 mychannel)

  2. 了解智能合约示例 Fabcar.**查看智能合约如何运行,以及应用程序如何使用它们来查询和更新分类账

  3. 开发使用 Fabcar 的示例应用程序。**应用程序使用智能合约查询和更新账面上的汽车资产。利用应用程序创建事务 — 查询汽车、创建新汽车。

完成本教程应该学习到:应用程序如何与智能合约交互,Fabric 网络中对等实体上托管和复制分类账的交互过程。


docker rm -f (docker ps -aq)
docker rmi -f (docker images | grep fabcar | awk '{print 3}')
使用上述命令终止先前运行的所有 fabric 容器。

cd xxx/fabric-samples/FabCar/ && ./startFabric.sh javascript
上述命令将自动初始化 first-network, 与此同时部署 JavaScript 版本的 chaincode 到两个对等节点上。
cd ./javascript && npm install
node enrollAdmin.js
创建一个管理员用户(称为管理员实际上为证书颁发机构 CA 的注册商)
node registerUsre.js
通过管理员凭据来注册新用户(可使用该用户来查询和更新分类账)user1
node query.js
查询账面信息

解析 Fabcar 的 javascript 应用程序

const { FileSystemWallet, Gateway} = require('fabric-network')从 fabric-network 模块引入 FileSystemWallet 和 Gateway 两个关键类。
cosnt gateway = new Gateway()
await gateway.connect(ccp,{wallet,identity:'user1'})
使应用程序连接到网络(用 user1 的身份). 其中的 ccp 表示的是网关将访问的网络。 ccp 通过如下代码配置:

const ccpPath = path.resolve(__dirname,'..','..','first-network','connection.json')
const ccpJSON = fs.readFileSync(ccpPath,'utf8')
const ccp = JSON.parse(ccpJSON)
  • (关于网络配置文件的结构和定义网络的方式可以查看连接配置文件) - 接到网络后我们需要连接特定的 channel , 以期获得特定世界状态的权限
    const network = await gateway.getNetwork('mychannel')
    接入 channel 之后需要连接特定的 chaincode , 以期通过智能合约与世界状态交互。
    const contact = network.getContract('fabcar')

Fabcar 中定义了许多的事务 (transaction)

  1. 使用const result = await contact.evaluateTransaction('queryAllCars')来查询世界状态。
    上述操作是最简单的智能合约交互,它选取一个在连接配置文件中定义的节点发送请求,节点执行评估命令 –>智能合约查询节点账本副本所记载的所有汽车信息 –>返回结果给应用

  2. 使用contract.submitTransaction('createCar','CAR12','Honda','Accord','Black','Tom')来创建一辆新车的信息。 submitTransaction() 表示提交交易,它比 evaluateTransaction 复杂很多,它的工作原理如下:首先将 submitTransaction 天发送给每一个对等实体 –>每一个对等实体执行命令,返回结果给 SDK–>SDK 收集所有回复合成一个交易发给 Order 节点 –>Order 收集并造块广播 –>每个事务都得到验证和提交之后允许它将控制权返回到应用程序 (submitTransaction 包括了一个侦听器).

  3. 使用await contract.submitTransaction('changeCarOwner','CAR12','Dave')命令改变汽车车主

解析 Fabcar 的 javascript 智能合约

cd xxx/fabric-samples/chaincode/fabcar/javascript/lib/fabcar.js
了解如何使用 Contract 类来定义智能合约
class FabCar extends Contract{}

在此结构中将定义如下事务: initLedger , queryCar , queryAllCars , createCar 和 changeCarWoner .
async queryCar(ctx, carnumber){...}
async queryAllCars(ctx) {...}

分析 querAllCars 这个交易

async queryAllCars(ctx){
    const startKey = 'CAR0'
    const endKey = 'CAR999'
    cosnt iterator = await ctx.stub.getStateByRange(starKey,endKey)
    ...
}

这段代码遍历访问每辆车,并将结果打包成 JSON 返回到应用程序当中。 getStateByRange() 是事务的 API , 关于 API 可以访问 javascript 智能合约 API

以上是“HyperLedger如何实现链码开发实例FabCar”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI