我遇到了getNative API,通过该API调用来自Hyperledger编写器的链码。见这里:https://github.com/hyperledger/composer/issues/3120
有人可以告诉我这究竟是如何运作的?假如我有一个带有getter和setter的非常简单的链代码,我可以从composer中的JS代码中调用它们吗
答案 0 :(得分:10)
要在composer
的事务处理器函数中调用Hyperledger Fabric API,必须调用函数getNativeAPI
。 getNativeAPI
允许用户直接调用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) {
}
}
}
}
请记住:getState
和putState
Hyperledger Fabric API功能将绕过Hyperledger Composer访问控制规则。
某些资源:
希望这些能帮助你理解。
答案 1 :(得分:3)
有Composer链代码(用javascript编写)和Fabric的本机链代码(用GO编写)。如果要调用Composer工具部署的链代码(作为业务网络定义的一部分),则不需要调用本机API。您需要它来进行低级别调用,例如获取特定交易的信息。