有什么方法可以使用节点API获取Hyperledger-composer中特定参与者的Historian?
我正在使用Node API开发基于hyperledger-
composer的应用程序。我想在其个人资料中显示特定参与者的交易历史记录。我已经为此创建了permission.acl,并且在操场上运行良好。但是,当我从节点API访问历史记录器时,它将提供网络的完整历史记录器。我不知道该如何过滤参与者。
您可以将自v0.20以来的REST
API调用的结果返回给调用的客户端应用程序,因此可以进行如下操作(未经测试,但是您知道了)。注意:您可以直接通过REST直接使用您的参数(或您为自己的业务网络创建的任何端点-
下面的示例是trade-network
)调用REST API结束(/ GET Trader
),而不是使用“只读”的示例如下所述的事务处理器端点,用于将更大的结果集返回到客户端应用程序。在文档中查看有关此内容的更多信息
使用API的NODE JS Client:
const BusinessNetworkConnection = require('composer-client').BusinessNetworkConnection;
const rp = require('request-promise');
this.bizNetworkConnection = new BusinessNetworkConnection();
this.cardName ='admin@mynet';
this.businessNetworkIdentifier = 'mynet';
this.bizNetworkConnection.connect(this.cardName)
.then((result) => {
//You can do ANYTHING HERE eg.
})
.catch((error) => {
throw error;
});
// set up my read only transaction object - find the history of a particular Participant - note it could equally be an Asset instead !
var obj = {
"$class": "org.example.trading.MyPartHistory",
"tradeId": "P1"
};
async function callPartHistory() {
var options = {
method: 'POST',
uri: 'http://localhost:3000/api/MyPartHistory',
body: obj,
json: true
};
let results = await rp(options);
// console.log("Return value from REST API is " + results);
console.log(" ");
console.log(`PARTICIPANT HISTORY for Asset ID: ${results[0].tradeId} is: `);
console.log("=============================================");
for (const part of results) {
console.log(`${part.tradeId} ${part.name}` );
}
}
// Main
callPartHistory();
//模型文件
@commit(false)
@returns(Trader[])
transaction MyPartHistory {
o String tradeId
}
只读交易处理器代码(在“ logic.js”中):
/**
* Sample read-only transaction
* @param {org.example.trading.MyPartHistory} tx
* @returns {org.example.trading.Trader[]} All trxns
* @transaction
*/
async function participantHistory(tx) {
const partId = tx.tradeid;
const nativeSupport = tx.nativeSupport;
// const partRegistry = await getParticipantRegistry('org.example.trading.Trader')
const nativeKey = getNativeAPI().createCompositeKey('Asset:org.example.trading.Trader', [partId]);
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) {
console.log("@debug val is " + val );
results.push(JSON.parse(val));
}
}
if (res && res.done) {
try {
iterator.close();
}
catch (err) {
}
}
}
var newArray = [];
for (const item of results) {
newArray.push(getSerializer().fromJSON(item));
}
console.log("@debug the results to be returned are as follows: ");
return newArray; // returns something to my NodeJS client (called via REST API)
}
这个问题与一般的“如何访问受邀参加日历活动的组成员”有点不同。我一直在使用AdminSDK/Directory API来做到这一点,它运行良好。 我的情况是这样的:我有2个不同的日历项目相隔6个月(一个在过去,一个在未来)。同一个谷歌小组已被邀请参加这些日历活动。在过去 3 个月中,该组的成员身份已更改。当我查看 GCal 中的 2 个事件并单击组名称旁边的箭头时,成员被正确列出,因为它知道过去邀
历史 现在的Android如日中天。每天150万部的Android设备被激活,全球Android用户有7亿。三星也凭借Android手机,成为第一大智能手机生产商。而Android在2007年最初发布时,当时负责微软移动开发的Scott Horn评论说,“我看不出他们(Android)能有多大的影响”。如今,Android的成功已经不需要预测。 移动操作系统份额 Android是Google收购的
历史 本书改编和包含了以下两本书的部分章节,这两本书均以GNU Free Documentation License发布。 How To Think Like A Computer Scientist: Learning with C++ 作者Allen B. Downey。原书由Green Tea Press发行,可以从http://www.greenteapress.com/下载到。 Prog
大部分1980年前的 Unix 竞争者都被拴到单个硬件平台上,随着这个硬件的消亡而消亡。为什么 VMS 可以坚持这么久?值得我们作为案例研究一个原因是:VMS 成功地从最初的 VAX 硬件移植到了 Alpha 处理器(2003年正从 Alpha 移植到 Itanium 上)。MacOS 也在1980年代后期成功完成了从摩托罗拉68000到 PowerPC 芯片的迁跃。微软的 Windows 处在计
C++是从C语言演变而来的,而C语言又是从两个编程语言BCPL和B演变而来的、BCPL是Martin Richards于1967年开发的,用于编写操作系统软件和编译器。Ken Thompson在他的B语言(1970年在贝尔实验室)。DCPL和B都是“无类型”语言,每个数据项在内存中占一个“字”(word)长、如果要将数据项作为整数或实数处理,编程的工作量会很大。 C语言是从D语言演变而成的,由贝尔
你可能会困惑,最初为什么要编写Autoconf?它是如何演变到今天的形式的?(为什么它看起来就像大猩猩的吐沫?) 如果你不困惑,那么本章就不包含对你有用的信息,你也可能会跳过它。如果你困惑,那就让它明白些... 起源(Genesis) 在1991年六月,我为自由软件基金会维护了许多GNU工具。由于它们被移植到更多的平台并且增加了更多的程序, 用户必须 在'Makefile'中选择的'-D'选项的数