特定参与者的历史记录
Historian for a particular participant
有什么方法可以让我使用节点 API 为 hyperledger-composer 中的特定参与者获取 Historian?
我正在使用 Node APIs.I 开发基于 hyperledger-composer 的应用程序,想在 his/her 个人资料中显示特定参与者的交易历史。我为此创建了 permission.acl 并且在操场上运行良好。但是当我从节点 API 访问历史记录时,它提供了完整的网络历史记录。我不知道如何为参与者过滤。
您可以 return 从 v0.20 开始对调用客户端应用程序的 REST API 调用的结果,因此类似下面的内容将起作用(未测试,但您明白了)。注意:您可以使用您的参数(或您为自己的业务网络创建的任何端点 - 下面的示例是 trade-network
)通过 REST 直接调用 REST API 端(/GET Trader),而不是下面描述的使用 'READ-ONLY' 事务处理器端点的示例,用于 return 将更大的结果集发送到您的客户端应用程序。请参阅文档
中的 more on this
NODE JS 客户端使用 APIs:
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)
}
有什么方法可以让我使用节点 API 为 hyperledger-composer 中的特定参与者获取 Historian?
我正在使用 Node APIs.I 开发基于 hyperledger-composer 的应用程序,想在 his/her 个人资料中显示特定参与者的交易历史。我为此创建了 permission.acl 并且在操场上运行良好。但是当我从节点 API 访问历史记录时,它提供了完整的网络历史记录。我不知道如何为参与者过滤。
您可以 return 从 v0.20 开始对调用客户端应用程序的 REST API 调用的结果,因此类似下面的内容将起作用(未测试,但您明白了)。注意:您可以使用您的参数(或您为自己的业务网络创建的任何端点 - 下面的示例是 trade-network
)通过 REST 直接调用 REST API 端(/GET Trader),而不是下面描述的使用 'READ-ONLY' 事务处理器端点的示例,用于 return 将更大的结果集发送到您的客户端应用程序。请参阅文档
NODE JS 客户端使用 APIs:
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)
}