【问题标题】:How to use hyperledger getnative API如何使用超级账本 getnative API
【发布时间】:2018-03-28 13:14:51
【问题描述】:

我遇到了 getNative API,通过它调用 Hyperledger composer 的链代码。见这里:https://github.com/hyperledger/composer/issues/3120

谁能告诉我这是如何工作的?假设我有一个非常简单的带有 getter 和 setter 的链代码,我可以从 composer 中的 JS 代码中调用它们吗

【问题讨论】:

    标签: hyperledger-fabric hyperledger hyperledger-composer


    【解决方案1】:

    要在composer 的事务处理器函数中调用 Hyperledger Fabric API,必须调用函数 getNativeAPIgetNativeAPI 允许用户直接调用 Fabric shim API,它为应用程序开发人员提供 API 以实现 Hyperledger Fabric 后端的“智能合约”,也称为 Chaincodes

    这是在 composer 中使用 getNativeAPI 的示例示例,它调用 Hyperledger Fabric API 函数 getHistoryForKey 以将指定资产的历史记录作为迭代器返回。然后事务处理器函数将返回的数据存储在一个数组中。

    async function simpleNativeHistoryTransaction (transaction) {    
        const id = transaction.assetId;
        const nativeSupport = transaction.nativeSupport;
    
        const nativeKey = getNativeAPI().createCompositeKey('Asset:systest.transactions.SimpleStringAsset', [id]);
        const iterator = await getNativeAPI().getHistoryForKey(nativeKey);
        let results = [];
        let res = {done : false};
        while (!res.done) {
            res = await iterator.next();
    
            if (res && res.value && res.value.value) {
                let val = res.value.value.toString('utf8');
                if (val.length > 0) {
                    results.push(JSON.parse(val));
                }
            }
            if (res && res.done) {
                try {
                    iterator.close();
                }
                catch (err) {
                }
            }
        }
    }
    

    记住:getStateputState Hyperledger Fabric API 函数将绕过 Hyperledger Composer 访问控制规则。

    一些资源:

    希望这些能帮助你理解。

    【讨论】:

    • +1 @mohammadjh:只需添加一个指向您可以从 getnativeAPI() 调用的函数(供读者使用)的链接 -> fabric-shim.github.io/ChaincodeStub.html 随时将其添加到您的答案中(尽管您提供主索引页面已经)。
    【解决方案2】:

    有 Composer 链代码(用 javascript 编写)和 Fabric 的原生链代码(用 GO 编写)。如果你想调用 Composer 工具部署的链码(作为业务网络定义的一部分),你不需要调用原生 API。您将需要它来进行低级调用,例如获取特定事务的信息。

    【讨论】:

    • 当我们部署原生链代码时,我们会看到一个用于对等点的沙箱容器。最近,我们知道 Fabric 已经开始支持 JS 链码。 composer 链码 -> 是否与 js 链码相同?或者作曲家链码是在 docker 网络中出现的另一个容器,它将调用 Fabric 原生链码的通用容器?关键是,当我们部署 Composer 链码时,每个对等点会出现多少个容器? 1个还是2个?
    • Composer 与 docker 容器完全无关。所有容器都与 Fabric 相关——peers、couchdb 和 SA。与往常一样,每个对等点都在一个容器中。如果您熟悉 Web 编程,那么原生链代码(js 或 GO)就像解析原始请求。您获取原始数据,将其解析为 URL、方法、标头等,并基于此进行处理。 Composer 链码看起来像是在使用 Web 框架,因此您有多个函数,每个函数都处理自己的路由/方法。此外,查询和 ACL 纯粹是声明性的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多