0

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

我目前正在构建一个 Web 应用程序来与 Hyperledger Fabric 进行交互。我已经设法为对等节点、排序节点等启动 docker 容器,每个容器都在连接配置文件中定义,并具有自己的本地主机端口。

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

对于项目的区块链方面,我正在尝试修改“余额转移”(https://github.com/hyperledger/fabric-samples/blob/release-1.4/balance-transfer/app.js)示例我的用例的织物样品。

到目前为止,我已经设法建立“通道创建”端点,以允许 Web 应用程序上的管理员通过使用 Hyperledger Fabric SDK 通过上传 channel.tx 文件来执行通道创建。

但是当我必须将同伴加入频道时,我会迷失方向。织物示例示例具有以下代码。

// 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 的用户”。通过提供连接配置文件引用名称来指定哪些对等方加入通道似乎是一种静态(硬编码、非动态)方法。

我不明白的是:如何将经过身份验证的用户分配给他们的个人对等上下文,并且在 Web 应用程序上设置他们自己的对等上下文,用户能够自己加入频道?

Fabric 教程仅通过 CLI 执行 peer 上下文的切换,并通过 CLI 将 peer 加入通道。 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:9051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel join -b mychannel.block

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

在这样一个分散的设置中,我似乎无法理解物理意义上的对等点。请为我提供详细和外行的解释,以尽可能地理解这个概念。非常感谢!

4

1 回答 1

0

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

余额转移应用程序主要是使用 Fabric SDK 演示(以编程方式)H/Fabric 区块链网络的基本功能的示例应用程序/练习,例如创建通道、安装链代码(智能合约)、实例化链代码、调用链码和查询链码。

您的 Web 应用程序希望与正在运行的 Fabric 区块链网络(后端)进行交互。因此,我建议查看以下资源,以更好地了解您要实现的目标。

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

2) 试用此处介绍的示例 Fabcar 应用程序(元素包括合约、网络和 SDK API 与部署到对等方的合约交互(例如提交 txns、查询账本)-> https://hyperledger -fabric.readthedocs.io/en/release-1.4/understand_fabcar_network.html。实际的 Fabcar 示例应用程序在这里 -> https://github.com/hyperledger/fabric-samples/tree/release-1.4/fabcar (以及提供的连接配置文件,使用startFabric.sh那里连接到 Fabric BYFN 网络“站起来”) .

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

于 2019-06-10T10:35:53.230 回答