当前位置: 首页 > 知识库问答 >
问题:

为Hyperledger Fabric web应用程序分配对等上下文

衡翰翮
2023-03-14

免责声明:我之前没有任何软件开发经验,从4个月前开始,我的任务是开发一个区块链应用程序。请原谅我对大多数事情缺乏了解。

我目前正在构建一个与Hyperledger Fabric交互的web应用程序。我已经设法为对等节点、订单节点等旋转了docker容器,每个节点都在连接概要文件中定义,并有自己的本地主机端口。

我还在get go上开发了一个简单的前端和服务器端restAPI,并实现了允许用户登录和设置用户上下文并执行某些特定于应用程序的功能的功能。

对于项目的区块链方面,我试图修改fabric示例中的“Balance Transfer”(https://github.com/hyperledger/fabric-samples/blob/release-1.4/Balance-Transfer/app.js)示例。

到目前为止,我已经成功地建立了“channel Creating”endpoint,以允许html" target="_blank">web应用程序的管理员通过上载channel.tx文件,通过use Hyperledger fabric SDK执行通道创建。

但当我不得不加入通道的同行时,我就迷失了。fabric示例示例具有以下代码。

// Join Channel
app.post('/channels/:channelName/peers', async function(req, res) {
    logger.info('<<<<<<<<<<<<<<<<< J O I N  C H A N N E L >>>>>>>>>>>>>>>>>');
    var channelName = req.params.channelName;
    var peers = req.body.peers;
    logger.debug('channelName : ' + channelName);
    logger.debug('peers : ' + peers);
    logger.debug('username :' + req.username);
    logger.debug('orgname:' + req.orgname);

    if (!channelName) {
        res.json(getErrorMessage('\'channelName\''));
        return;
    }
    if (!peers || peers.length == 0) {
        res.json(getErrorMessage('\'peers\''));
        return;
    }

    let message =  await join.joinChannel(channelName, peers, req.username, req.orgname);
    res.send(message);
});

根据testapi.sh脚本(https://github.com/hyperledger/fabric-samples/blob/release-1.4/balance-transfer/testapis.sh)中的一个片段

echo "POST request Join channel on Org1"
echo
curl -s -X POST \
  http://localhost:4000/channels/mychannel/peers \
  -H "authorization: Bearer $ORG1_TOKEN" \
  -H "content-type: application/json" \
  -d '{
    "peers": ["peer0.org1.example.com","peer1.org1.example.com"]
}'
echo
echo

echo "POST request Join channel on Org2"
echo
curl -s -X POST \
  http://localhost:4000/channels/mychannel/peers \
  -H "authorization: Bearer $ORG2_TOKEN" \
  -H "content-type: application/json" \
  -d '{
    "peers": ["peer0.org2.example.com","peer1.org2.example.com"]
}'
echo
echo

对等点名称(必须在连接配置文件中指定)似乎是作为将对等点加入通道的请求提供的。这对我来说不太有意义,因为我想象对等点就像访问web应用程序的“不同IP的用户”。通过提供连接配置文件引用名称来指定哪些对等点加入通道似乎是一种静态(硬编码、非动态)方法。

fabric教程只通过CLI执行对等上下文的切换,并通过CLI加入对等通道。core_peer_mspconfigpath=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerorganizations/org2.example.com/users/admin@org2.example.com/msp core_peer_address=peer0.org2.example.com/msp core_peer_localmspid=“org2msp”对等通道联接-B mychannel.block

如何通过Hyperledger Fabric SDK实现对等上下文的切换?或者将1个对等上下文转换为1个经过身份验证的用户,并且作为另一个用户登录将意味着对等上下文被更改为当前经过身份验证的另一个用户。

在这样一个分散的环境中,我似乎不能把我的头缠在物理意义上的同龄人身上。请提供详细和外行的解释,让我尽可能多地理解概念。非常感谢!

共有1个答案

柴阳云
2023-03-14

将区块链网络视为您的web应用程序(远程,在网络IP上下文中,到写到分类帐的对等方)需要与之交互的后端数据库(分类帐DB)。您的应用程序需要知道的是:什么是连接信息(配置文件),我如何连接,与什么智能合约交互,以及我想调用什么事务函数(在该合约中),写到分类账(或查询,读取等)。

balance transfer应用程序在很大程度上是使用Fabric SDK演示(以编程方式)H/Fabric区块链网络基本功能的示例应用程序/练习,例如创建通道、安装chaincode(智能合约)、实例化chaincode、调用chaincode和查询chaincode。

您的web应用程序希望与您正在运行的Fabric区块链网络(后端)进行交互。因此,我建议看看下面的参考资料,以便更好地理解您试图实现的目标。

1)阅读https://hyperledger-fabric.readthedocs.io/en/release-1.4/write_first_app.html的文档,以掌握使用Hyperledger Fabric 1.4新编程模型编写第一个应用程序的概念并阅读逻辑流程(旨在使编写应用程序变得更容易,而不必具备专业的“区块链”开发知识)。

2)试用这里介绍的样例Fabcar应用程序(元素包括契约、网络和与部署到对等方的契约交互的SDK API(例如提交TXN、查询分类帐)->https://hyperledger-fabric.readthedocs.io/en/release-1.4/condernand_fabcar_network.html。实际的Fabcar样例应用程序在这里->https://github.com/hyperledger/Fabric-samples/tree/release-1.4/Fabcar(以及提供的连接配置文件,通过使用startfabric.sh连接到Fabric

3)一旦您的web应用程序能够进行交互(最初无需应用程序级别身份验证),您就可以继续为您的web应用程序/前端实施您选择的身份验证策略。一旦在您的应用程序中进行身份验证,应用程序用户就使用钱包(包含X509证书/密钥组合)与区块链进行交互。Github https://Github.com/ibm/build-blockchain-insurance-app上的这个示例应该有助于您理解应用程序的体系结构以及哪些组件属于何处。

 类似资料:
  • 我尝试了一个显示其他响应的测试用例,我将一步一步地解释它: > 我在我的设备上安装了MDM配置文件,这提示我安装了一个应用程序,并且我成功地安装了它。应用程序已进入“应用程序中的配置文件”部分。 然后我手动删除了应用程序。

  • 我有一些测试(我没有编写它们,我正在维护它们)使用spring ContextConfiguration注释来提供应用程序上下文: 总之,有几个问题。我不太熟悉spring自定义上下文位置,这些位置不指定file:/或classpath:/。这是什么意思?这个测试类路径上有很多同名的资源。都上膛了吗?如果不是,Spring如何知道要加载哪个? 第二,有没有一种方法可以通过编程方式访问以这种方式连接

  • 我多年来一直在使用Spring MVC,我试图理解与Spring Boot的一些关键区别。 你能帮我确认一下吗?或者让我明白我在这里遗漏了什么?

  • Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点。Spring Cloud建立在此之上,并添加了一些可能系统中所有组件将使用或偶尔需要的功能。 引导应用程序上下文 一个Spring Cloud应用程序通过创建一个“引导”上下文来进行操作,这个上下文是主应用程序的父上下文。开箱即用,负责从外部源加载配置属性,还解

  • 问题内容: 有没有办法在Spring应用程序中静态/全局地请求ApplicationContext的副本? 假设主类启动并初始化了应用程序上下文,它是否需要通过调用堆栈将其向下传递给需要它的任何类,或者是否有一种方法可以让类要求先前创建的上下文?(我认为必须是单身人士?) 问题答案: 如果需要访问容器的对象是容器中的Bean,则只需实现BeanFactoryAware或ApplicationCon