加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

行使Hyperledger Fabric和Composer实现区块链应用措施

发布时间:2019-07-26 23:05:01 所属栏目:业界 来源:佚名
导读:今朝无法绕过技能规模的是区块链话题。但除了加密钱币之外,尚有更多风趣的应用措施可以带来很多冲感民气的软件生态体系。这也合用于Hyperledger项目,该项目提供了一个很是模块化的区块链框架。让我们看看行使Hyperledger Fabric和Composer实现区块链应用

在对体系建模之后,我们界说了可以在现有资产和参加者之上执行的全部可用操纵。这些是买卖营业资源。之后,我们为以下每个买卖营业模子测试并实现基本买卖营业逻辑。

  1. transaction EngineMerchantTransfer { 
  2.     --> Engine engine 
  3.     --> Merchant merchant 
  4.   
  5. transaction EngineCarInstallation { 
  6.     --> Engine engine 
  7.     --> Car car 
  8.   
  9. transaction EngineCreation { 
  10.     --> Manufacturer manufacturer 
  11.     o EngineProperties data 
  12.   
  13. transaction CarCreation { 
  14.     o String legalIdDocument 

此刻我们已经界说了也许产生的工作,我们可以在提交买卖营业时开始实现它怎样影响分类帐状态。起首,我们致力于建设引擎资产。引擎应该以UUID名目得到随机天生的ID,而且应该从一开始就始终属于制造商。以是我们清空logic.js文件并从新开始。我们界说常量modelsNamespace和函数uuid,由于我们将更频仍地必要它们。接下来是createEngineAsset函数。函数上方的文档块很是重要,以便Composer可以辨认打包代码时实现的买卖营业范例。

  1. /* global getAssetRegistry getFactory */ 
  2.   
  3. const modelsNamespace = 'org.acme.enginesupplychain' 
  4. function uuid() { 
  5.     const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1) 
  6.     return `${s4()}${s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}` 
  7.   
  8. /** 
  9. * Creation of a Engine asset triggered by physical production. 
  10. * @param {org.acme.enginesupplychain.EngineCreation} tx - the transaction to create an engine 
  11. * @transaction 
  12. */ 
  13. async function createEngineAsset(tx) { // eslint-disable-line no-unused-vars 
  14.     const engineRegistry = await getAssetRegistry(modelsNamespace + '.Engine') 
  15.     const engine = getFactory().newResource(modelsNamespace, 'Engine', uuid()) 
  16.     const engineData = getFactory().newConcept(modelsNamespace, 'EngineProperties') 
  17.   
  18.     engine.data = Object.assign(engineData, tx.data) 
  19.     engine.manufacturer = tx.manufacturer 
  20.   
  21.     await engineRegistry.add(engine) 

通过这种方法,我们还实现了其他买卖营业范例EngineMerchantTransferEngineCarInstallationCarCreation

  1. /** 
  2. * An engine is transfered to a merchant. 
  3. * @param {org.acme.enginesupplychain.EngineMerchantTransfer} tx - the engine transfer transaction 
  4. * @transaction 
  5. */ 
  6. async function transferEngineToMerchant(tx) { // eslint-disable-line no-unused-vars 
  7.     const engineRegistry = await getAssetRegistry(modelsNamespace + '.Engine') 
  8.     tx.engine.merchant = tx.merchant 
  9.   
  10.     await engineRegistry.update(tx.engine) 
  11.   
  12. /** 
  13. * An engine is installed in a car. 
  14. * @param {org.acme.enginesupplychain.EngineCarInstallation} tx - the engine into car installation transaction 
  15. * @transaction 
  16. */ 
  17. async function installEngineToCar(tx) { // eslint-disable-line no-unused-vars 
  18.     const engineRegistry = await getAssetRegistry(modelsNamespace + '.Engine') 
  19.     if (tx.car) { 
  20.         tx.engine.currentCar = tx.car 
  21.         await engineRegistry.update(tx.engine) 
  22.     } else { 
  23.         return Promise.reject('No target car was set on the transaction!') 
  24.     } 
  25.   
  26. /** 
  27. * A car is created. 
  28. * @param {org.acme.enginesupplychain.CarCreation} tx - transaction to create a new car 
  29. * @transaction 
  30. */ 
  31. async function createCar(tx) { // eslint-disable-line no-unused-vars 
  32.     const carRegistry = await getAssetRegistry(modelsNamespace + '.Car') 
  33.     const factory = getFactory() 
  34.     const carId = uuid() 
  35.     const car = factory.newResource(modelsNamespace, 'Car', carId) 
  36.     car.legalDocumentId = tx.legalIdDocument 
  37.   
  38.     await carRegistry.add(car) 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读