之前我在Hyperledger Composer上开发了我的应用程序。现在,我正在尝试将应用程序迁移到Hyperledger Fabric 1.4。
我在Fabric 1.4文档which you can find here中实现了商业用纸教程。一切都很好。
现在,我想根据我的应用程序来定制它,并想定义更多的资产。
他们在commercial-paper/organization/digibank/contract/lib,上有一个文件paper.js这是“纸张”资产的定义吗?
如果我需要定义额外的资产,我是否还要在同一位置创建一个文件myasset.js,然后调用智能合约?
或者有没有更好的方法来定义资产?
PS:我正在尝试将Hyperledger composer中的资源映射到Hyperledger fabric 1.4。
此外,您如何定义资产和参与者或其他资产之间的关系?在Composer中,我们通常使用-->来定义关系,我们如何实现与fabric-1.4相同的功能?
发布于 2019-03-05 00:04:11
我相信我找到了我自己问题的答案,我希望这能帮助处于类似情况(从Hyperledger Composer到Fabric 1.4)的任何人。
ctx.stub.putState(key, data); 我们只需使用上面的代码来添加资产。在fabcar示例中可以找到一个非常简化的版本。
async createCar(ctx, carNumber, make, model, color, owner) {
console.info('============= START : Create Car ===========');
const car = {
color,
docType: 'car',
make,
model,
owner,
};
await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car)));
console.info('============= END : Create Car ===========');
}在这里,我们添加了一辆汽车,这是一项资产。
在商业票据的例子中,他们使用了面向对象的方法来实现这一点。使用paper.js,他们只创建了一个“纸”对象(纸类扩展了状态类。State类具有生成和拆分密钥的方法),然后将其传递给'paperlist‘,后者随后使用statelist.js中定义的方法(paperlist类扩展了statelist类,它具有将状态写入账本的所有方法),并使用以下代码创建此资产
async addState(state) {
let key = this.ctx.stub.createCompositeKey(this.name, state.getSplitKey());
let data = State.serialize(state);
await this.ctx.stub.putState(key, data);
}在这里,您可以观察到键是使用状态类中的方法生成的,而状态类是由paper类继承的。
关于关系的最后一个问题,我还没有找到具体的答案,但我相信您可以通过在数据对象中传递参与者ID或资产id (例如:用户由userId标识,所以我们只传递userId)来实现这一点。
事后看来,这个问题看起来真的很愚蠢,但我希望它能帮助一些人。
请随时纠正我对Hyperledger示例的理解。我在这里学习:)
发布于 2019-03-05 19:08:59
由于您已经回答了这个问题,所以我只想添加您自己答案的用户标识部分。
值得一提的是CID Lib。有了它和AttributeBasedAccessControl的概念,你就可以完美地链上管理对查询/调用的访问。
希望这对您有所帮助,并为您的答案添加更多见解:)
https://stackoverflow.com/questions/54984576
复制相似问题