如何使用hyperledger getnative API

时间:2018-03-28 13:14:52

标签: hyperledger-fabric hyperledger hyperledger-composer

我遇到了getNative API,通过该API调用来自Hyperledger编写器的链码。见这里:https://github.com/hyperledger/composer/issues/3120

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

2 个答案:

答案 0 :(得分:10)

要在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 :(得分:3)

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