快速搭建联盟链应用
,并结合Angular、Javascript等技术搭建出一个web交互界面。结构图如上,在Composer里,认为通过资产(Assets)、参与者(Participants)和交易(Transactions)这三个类即可描述一个联盟链场景,举个例子:一个菜市场上可流通的资产是白菜(那肯定需要预先定义好的类实例出白菜
这一对象)而这时有两个参与者西洋蔡
和王富贵
,而由于交易也作为一个数据实体存在区块中(参考BTC的复式记账法),则发生一次交易我们就可以认为实例化了一次交易这个类,而这个类的属性。
namespace org.mynetwork.market
// 定义一个叫Asset 的asset子类
asset Asset identified by assetName {
o String assetName // 这个相当于主键啦
o String description // 描述,可有可无
o String mainExchange // 度量单位,可有可无
o Double quantity // 度量数量,一般都有
--> Trader owner // 拥有者
// 这里有个小细节: .cto 原生类型(比如String)则写 'o', '-->' 表示这是自己定义的类
}
// 定义一个叫Trader 的participant子类
participant Trader identified by tradeId {
o String tradeId // 交易者id
o String firstName
}
// 定义一个叫Exchange 的transaction子类,这些信息在实际访问时才传入
transaction Exchange {
--> Asset asset // 交易的资产的类型
--> Trader newOwner // 新的拥有者
}
/**
* 在这里写函数的描述
* @param {org.mynetwork.market.Exchange} exchange -传入参数为一个Exchange对象的实例
* @transaction - 这里一定要有,来修饰以下函数是一个交易处理函数
*/
async function exchangeAsset(exchange) {
exchange.asset.owner = exchange.newOwner;
let assetRegistry = await getAssetRegistry('org.mynetwork.market.Asset');
await assetRegistry.update(exchange.Asset);
}
PS:不同类型的资产是只不同的asset子类,而不是指同一类Asset下的不同实例,比如描述黄金和房产证明所需要属性不一样,则需要另外建一个asset类。