以前,我是在Hyperledger Composer上开发应用程序的。现在,我正在尝试将应用程序迁移到Hyperledger Fabric 1.4。
根据Fabric 1.4文档which you can find here,我实现了Commercial-Paper教程。一切正常。
现在,我想针对我的应用程序对其进行定制,并想要定义更多资产。
他们在commercial-paper / organization / digibank / contract / lib中有一个paper.js文件,这是“纸”资产的定义吗?
如果需要定义其他资产,是否还要在同一位置创建文件myasset.js,然后调用智能合约?
还是有更好的方法来定义资产?
PS:我正在尝试将资产从Hyperledger作曲者映射到Hyperledger fabric 1.4。
此外,您如何定义资产与参与者或其他资产之间的关系?在Composer中,我们曾经使用->来定义关系,我们如何实现相同的东西fabric-1.4?
答案 0 :(得分:1)
由于您已经回答了自己的问题,因此我只想在用户标识中添加您自己的答案。
值得一提的是CID Lib。有了AttributeBasedAccessControl的概念,您就可以完美地管理对查询/调用的访问。
希望有帮助,并为您的答案增加更多见解:)
答案 1 :(得分:0)
我相信我找到了自己的问题的答案,希望这对处于类似情况(从Hyperledger Composer迁移到Fabric 1.4的人)的人有所帮助
@RunWith(SpringRunner.class)
@SpringBootTest
public class RTWFlowsTest {
RTWFlows rtwFlows = new RTWFlows();
@Test
public void rtwTifFileSharePoller() {
System.out.println("executing test");
FileReadingMessageSource getFile = rtwFlows.rtwTifFileSharePoller().get();
Message<File> msg = null;
while( (msg = getFile.receive()) != null)
msg.getHeaders().forEach((key, value) -> System.out.println(key + ": " + value));
}
}
我们只需使用以上代码即可添加资产。在fabcar示例中找到了一个非常简化的版本。
ctx.stub.putState(key, data);
这里我们要添加一辆汽车,这是一项资产。
在商业票据示例中,他们已使用面向对象的方法完成了此任务。通过paper.js,他们只是创建了一个“纸张”对象(纸张类扩展了状态类。状态类具有制作和拆分键的方法,将在以后使用),然后将其传递给“ paperlist”,然后使用定义的方法在statelist.js中(paperlist类扩展了statelist类,该类具有将状态写入总帐的所有方法),可以使用以下代码创建此资产
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 ===========');
}
在这里,您可以看到密钥是使用state类的方法生成的,该状态类是paper类所继承的。
关于关系的最后一个问题,我还没有找到具体的答案,但是我相信您可以通过传递参与者ID或资产ID来实现(例如:用户由userId标识,因此我们只需在数据对象中传递userId)。
事后看来,这个问题看起来很愚蠢,但我希望它能帮助一些人。
请随时纠正我对Hyperledger示例的理解。我在这里学习:)