Board logo

标题: Hyperledger Composer 基础,第 1 部分 建模和测试您的区块链网络-2 [打印本页]

作者: look_w    时间: 2018-3-17 12:24     标题: Hyperledger Composer 基础,第 1 部分 建模和测试您的区块链网络-2

Hyperledger Composer 建模语言在使用 Hyperledger Composer 测试并部署区块链业务网络之前,您需要为它构建一个模型。Hyperledger Composer                拥有完成此工作的自己的建模语言。
好了,又要学习另一种语言,对吧?幸运的是,CTO 建模语言很简单(而且很直观,如果您已经接触过面向对象的概念)。高度专注(用于建模业务网络的)少数几个关键字,所以没有太多东西要学。业务网络的模型位于一个文件中,该文件具有                .cto 文件扩展名,并包含以下元素的定义:
如果您的模型非常大,可以在必要时拥有多个 .cto 模型文件。每个 .cto                模型文件都必须包含一个命名空间和至少一个资源定义。
命名空间一个命名空间创建一个边界,名称需要在这个边界范围内保持唯一。每个 .cto 模型文件都需要一个命名空间,这意味着                .cto 模型文件中的每个名称都必须是唯一的。
即使没有实现这些命名空间概念,但您已经熟悉了它们。文件系统使用目录作为命名空间,所以同一个目录中的两个文件不能同名。但是,不同目录中的两个文件允许同名,因为它们位于不同的命名空间中。
总结一下:一个 CTO 模型文件(命名空间边界)中的两个资源不能同名。
资源资源是以下类型之一:
每种资源类型对应于与它同名的模型类型(例如 asset 用于建模资产,participant                用于建模参与者,等等)。
资源具有以下属性:
在 Perishable Goods 网络中,将一个 Shipment 资产建模为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
  * A business network for shipping perishable goods
  * The cargo is temperature controlled and contracts
  * can be negociated based on the temperature
  * readings received for the cargo
  */
namespace org.acme.shipping.perishable
.
.
/**
* A shipment being tracked as an asset on the ledger
*/
asset Shipment identified by shipmentId {
  o String shipmentId
  o ProductType type
  o ShipmentStatus status
  o Long unitCount
  o TemperatureReading[] temperatureReadings optional
  --> Contract contract
}




让我们分析一下上面的示例,我会指出一些需要注意的地方。
命名空间是 org.acme.shipping.perishable。
asset 关键字指出 Shipment                是一种资产。属性(用小写字母“o”表示)shipmentId 是 String                类型,而且唯一地标识了一个 Shipment(用 identified by 表示)。
它的每个属性都有一个类型,这可以是基础类型(比如 String)、枚举类型(比如                ProductType)或交易(比如一个 TemperatureReading 数组)。
对 Contract 的引用(用 -->                表示)被称为一种关系,而且是单向的(不是双向的)。
枚举类型当某个特定属性可以拥有的一组值是已知值时,应该将该属性建模为枚举类型。这样约束值就会变得更容易,从而让验证变得更简单。
枚举类型的声明方式如下:
/**
  * The type of perishable product being shipped
  */
enum ProductType {
   o BANANAS
   o APPLES
   o PEARS
   o PEACHES
   o COFFEE
}




概念如果某个实体存在于您的业务模型中,但它不是资产、参与者、交易或事件,那么可以将它建模为概念
/**
* A concept for a simple street address
*/
concept Address {
  o String city optional
  o String country
  o String street optional
  o String zip optional
}




Address 是业务模型中的一个重要概念,它无法准确地划分到其他类别中,因此将它建模为一个概念。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0