Hyperledger-Composer:如何为参与者构建交易处理器功能发布身份?

Hyperledger-Composer: How to build transaction processor function issuing identity for participant?

我构建了一个 hyperledger-composer 应用程序(angular 前端,连接到 composer-rest-server),到目前为止,缺少身份验证。

我在尝试弄清楚如何实施身份验证时遇到了一些困难。

连第一步都不行。正如我从文档中了解到的那样,实施身份验证的第一步是为网络中的每个参与者颁发身份。

我创建了一个最小示例,它说明了我目前遇到的问题。

这是这个最小示例网络的 model.cto 文件:

namespace org.comp.network


participant SampleParticipant identified by participantId {
  o String participantId
  o String firstName
  o String lastName
}

transaction IssueID {
  --> SampleParticipant participant
  o String identity
}

这是 logic.js 文件:

'use strict';

/**
 * Sample transaction
 * @param {org.comp.network.IssueID} issueID
 * @transaction
 */
async function issueID(tx) {


   let ID = tx.participant.participantId;

   let p = 'org.comp.network.SampleParticipant#' + ID;

   let IDENTITY = tx.identity;

   await issueIdentity(p, IDENTITY);

}

函数 "issueIdentity" 应该为给定参与者发布身份(参见 https://hyperledger.github.io/composer/latest/managing/identity-issue.html

然而,当提交交易"issueID"时,我收到以下错误信息:

显然,函数 "issueIdentity" 不是 "known"(尽管它在文档中的此处使用:https://hyperledger.github.io/composer/latest/managing/identity-issue

我如何构建交易处理器函数来为我的网络中的参与者颁发身份?

关于你上面的例子的一些观察......

您遇到的 ReferenceError 是因为您使用 @param 装饰器定义的参数是 issueID,但您为函数声明的参数是 发送。如果将装饰器行更改为:

* @param {org.comp.network.IssueID} tx

那么ReferenceError就解决了

我看到的第二个问题是运行时 API(这是事务使用的)不包括 issueIdentity 方法。 issueIdentityBusinessNetworkConnection class 的一种方法,它是客户端 Api 而非运行时的一部分 API.

为了(向现有参与者)颁发身份,您不能使用交易逻辑,您需要编写单独的 Javascript API 程序,或使用 REST API 或命令行。