【问题标题】:Hyperledger Fabric 1.4 : How do we define assets?Hyperledger Fabric 1.4:我们如何定义资产?
【发布时间】:2019-03-04 13:44:35
【问题描述】:

之前我在 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?

【问题讨论】:

    标签: hyperledger-fabric blockchain hyperledger-composer


    【解决方案1】:

    由于您已经自己回答了问题,我只想添加您自己答案的用户标识部分。

    值得一提的是CID Lib。有了这个和AttributeBasedAccessControl 的概念,您可以在链上完美地管理对查询/调用的访问。

    希望对您的回答有所帮助并增加更多见解:)

    【讨论】:

    • 是的,当然,这将是任何人都会寻找的下一个东西。 Fabric 1.4中如何实现访问控制。
    【解决方案2】:

    我相信我找到了自己问题的答案,我希望这能帮助处于类似情况的任何人(从 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,他们只需创建一个“paper”对象(paper 类扩展 state 类。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);
    }
    

    在这里你可以观察到key是使用state类的方法生成的,它是由paper类继承的。

    来到最后一个关于关系的问题,我还没有找到具体的答案,但我相信你可以通过传递参与者 ID 或资产 id 来实现这一点(例如:用户由 userId 标识,所以我们只需在数据对象中传递 userId)。

    事后看来,这个问题看起来很愚蠢,但我希望它可以帮助一些人。

    请随时纠正我对 Hyperledger 示例的理解。我是来学习的:)

    【讨论】:

    • 这是一个很好的问题(和答案)。 Statelist 类中的函数有效地执行分类帐更新 - 更新分类帐上的资产实例(基于类)的状态(实际上是用于订购该类的资产实例的命名注册表)。
    • 该关系是关于将资源上的完全限定字段标识符(或数组)链接/存储到分类帐上的相关类实例(例如汽车 -> 所有者,商品 -> 所有者) .您可以使用 getState typescript example here 或使用 couchdb 查询从分类帐上的适当命名空间获取相关的多个“资产”的结果,并使用迭代器进行相应的迭代。
    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多