| 
                         在对系统建模之后,我们定义了可以在现有资产和参与者之上执行的所有可用操作。这些是交易资源。之后,我们为以下每个交易模型测试并实现基础交易逻辑。  
- transaction EngineMerchantTransfer { 
 -     --> Engine engine 
 -     --> Merchant merchant 
 - } 
 -   
 - transaction EngineCarInstallation { 
 -     --> Engine engine 
 -     --> Car car 
 - } 
 -   
 - transaction EngineCreation { 
 -     --> Manufacturer manufacturer 
 -     o EngineProperties data 
 - } 
 -   
 - transaction CarCreation { 
 -     o String legalIdDocument 
 - } 
 
  
现在我们已经定义了可能发生的事情,我们可以在提交交易时开始实现它如何影响分类帐状态。首先,我们致力于创建引擎资产。引擎应该以UUID格式获得随机生成的ID,并且应该从一开始就始终属于制造商。所以我们清空logic.js文件并从头开始。我们定义常量modelsNamespace和函数uuid,因为我们将更频繁地需要它们。接下来是createEngineAsset函数。函数上方的文档块非常重要,以便Composer可以识别打包代码时实现的交易类型。  
- /* global getAssetRegistry getFactory */ 
 -   
 - const modelsNamespace = 'org.acme.enginesupplychain' 
 - function uuid() { 
 -     const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1) 
 -     return `${s4()}${s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}` 
 - } 
 -   
 - /** 
 - * Creation of a Engine asset triggered by physical production. 
 - * @param {org.acme.enginesupplychain.EngineCreation} tx - the transaction to create an engine 
 - * @transaction 
 - */ 
 - async function createEngineAsset(tx) { // eslint-disable-line no-unused-vars 
 -     const engineRegistry = await getAssetRegistry(modelsNamespace + '.Engine') 
 -     const engine = getFactory().newResource(modelsNamespace, 'Engine', uuid()) 
 -     const engineData = getFactory().newConcept(modelsNamespace, 'EngineProperties') 
 -   
 -     engine.data = Object.assign(engineData, tx.data) 
 -     engine.manufacturer = tx.manufacturer 
 -   
 -     await engineRegistry.add(engine) 
 - } 
 
  
通过这种方式,我们还实现了其他交易类型EngineMerchantTransfer,EngineCarInstallation和CarCreation。  
- /** 
 - * An engine is transfered to a merchant. 
 - * @param {org.acme.enginesupplychain.EngineMerchantTransfer} tx - the engine transfer transaction 
 - * @transaction 
 - */ 
 - async function transferEngineToMerchant(tx) { // eslint-disable-line no-unused-vars 
 -     const engineRegistry = await getAssetRegistry(modelsNamespace + '.Engine') 
 -     tx.engine.merchant = tx.merchant 
 -   
 -     await engineRegistry.update(tx.engine) 
 - } 
 -   
 - /** 
 - * An engine is installed in a car. 
 - * @param {org.acme.enginesupplychain.EngineCarInstallation} tx - the engine into car installation transaction 
 - * @transaction 
 - */ 
 - async function installEngineToCar(tx) { // eslint-disable-line no-unused-vars 
 -     const engineRegistry = await getAssetRegistry(modelsNamespace + '.Engine') 
 -     if (tx.car) { 
 -         tx.engine.currentCar = tx.car 
 -         await engineRegistry.update(tx.engine) 
 -     } else { 
 -         return Promise.reject('No target car was set on the transaction!') 
 -     } 
 - } 
 -   
 - /** 
 - * A car is created. 
 - * @param {org.acme.enginesupplychain.CarCreation} tx - transaction to create a new car 
 - * @transaction 
 - */ 
 - async function createCar(tx) { // eslint-disable-line no-unused-vars 
 -     const carRegistry = await getAssetRegistry(modelsNamespace + '.Car') 
 -     const factory = getFactory() 
 -     const carId = uuid() 
 -     const car = factory.newResource(modelsNamespace, 'Car', carId) 
 -     car.legalDocumentId = tx.legalIdDocument 
 -   
 -     await carRegistry.add(car) 
 - } 
 
                          (编辑:91站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |