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

HyperLedger 2.3.1无法连接到提交服务器

马欣德
2023-03-14

我试图在Hyperledger fabric测试网络(Fabcar javascript智能合约)上执行智能合约,当我试图使用invoke调用链码时,会出现以下错误。fabcar javascript示例中的js文件:

错误:[ServiceEndpoint]:错误:未能在截止日期之前连接到委员会-名称:_buildOrderer,url:_buildPeer,连接:false,连接尝试:true 2021-05-05T23:44:02.951Z-错误:[ServiceEndpoint]:waitForReady-未能连接到远程gRPC服务器orderer0.example.com:7050url:grpcs://localhost:7050超时:3000 2021-05-05T23:44:02.952Z-错误:[DiscoveryService]:orderer0.example.com:7050[myChannel]-无法连接到发现的订单orderer0.example.com:7050由于错误:未能在截止日期之前连接到委员会-名称:orderer0.example.com:7050,url:grpcs://localhost:7050,连接:false,连接尝试:true 2021-05-05T23:44:05.957Z-错误:[ServiceEndpoint]:错误:未能在截止日期之前连接到Endorser-名称:peer0.org01.example.com:7051,url:grpcs://localhost:7051,连接:false,连接尝试:true 2021-05-05T23:44:05.957Z-错误:[ServiceEndpoint]:waitForReady-未能连接到远程gRPC服务器peer0.org01.example.com:7051url:grpcs://localhost:7051超时:3000 2021-05-05T23

需要注意的是,我已经更改了默认测试网络中的端口转发和对等/组织名称。我的连接配置文件如下(为了清晰起见,删除了证书):

{
"name": "test-network-org1",
"version": "1.0.0",
"client": {
    "organization": "Org1",
    "connection": {
        "timeout": {
            "peer": {
                "endorser": "300"
            }
        }
    }
},
"channels": {
    "mychannel": {
        "orderers": [
            "orderer0.example.com"
        ],
        "peers": [
            "peer0.org01.example.com"
        ]
    }
},
"organizations": {
    "Org1": {
        "mspid": "Org1MSP",
        "peers": [
            "peer0.org01.example.com"
        ],
        "certificateAuthorities": [
            "ca.org1.example.com"
        ]
    }
},
"peers": {
    "peer0.org01.example.com": {
        "url": "grpcs://localhost:6041",
        "tlsCACerts": {
            "pem": "-----BEGIN CERTIFICATE-----**********-----END CERTIFICATE-----\n"
        },
        "grpcOptions": {
            "ssl-target-name-override": "peer0.org01.example.com",
            "hostnameOverride": "peer0.org01.example.com"
        }
    }
},
"orderers": {
    "orderer0.example.com": {
        "url": "grpcs://localhost:6040",
        "tlsCACerts": {
            "pem": "-----BEGIN CERTIFICATE-----**********-----END CERTIFICATE-----\n"
        },
        "grpcOptions": {
            "ssl-target-name-override": "orderer0.example.com"
        }
    }
},
"certificateAuthorities": {
    "ca.org1.example.com": {
        "url": "https://localhost:6054",
        "caName": "ca-org1",
        "tlsCACerts": {
            "pem": ["-----BEGIN CERTIFICATE-----******-----END CERTIFICATE-----\n"]
        },
        "httpOptions": {
            "verify": false
        }
    }
}

}

令我困惑的一件事(我认为这是错误的根本原因)是订单者的grpcs url。在连接配置文件中,我明确地将其指定为grpcs://localhost:6041,但是从错误中可以看出,错误将url声明为grpcs://localhost:7050。我已经检查了测试网络中的各种文件,并且无法弄清楚为什么grpcs url没有从连接配置文件中读取。

这个问题仅限于查询。js和invoke。fabcar示例中的js文件(我能够在网络上成功执行enrollAdmin.js和registerUser.js)。

下面是调用。我执行的js文件导致上述错误:

   'use strict';

const { Gateway, Wallets } = require('fabric-network');
const fs = require('fs');
const path = require('path');

async function main() {
    try {
        // load the network configuration
        const ccpPath = path.resolve(__dirname, '..', '..', 'test-network', 'organizations', 'peerOrganizations', 'org1.example.com', 'connection-org1.json');
        let ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8'));

        // Create a new file system based wallet for managing identities.
        const walletPath = path.join(process.cwd(), 'wallet');
        const wallet = await Wallets.newFileSystemWallet(walletPath);
        console.log(`Wallet path: ${walletPath}`);

        // Check to see if we've already enrolled the user.
        const identity = await wallet.get('appUser3');
        if (!identity) {
            console.log('An identity for the user "appUser3" does not exist in the wallet');
            console.log('Run the registerUser.js application before retrying');
            return;
        }

        // Create a new gateway for connecting to our peer node.
        const gateway = new Gateway();
        await gateway.connect(ccp, { wallet, identity: 'appUser3', discovery: { enabled: true, asLocalhost: true } });

        // Get the network (channel) our contract is deployed to.
        const network = await gateway.getNetwork('mychannel');

        // Get the contract from the network.
        const contract = network.getContract('fabcar');

        // Submit the specified transaction.
        // createCar transaction - requires 5 argument, ex: ('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom')
        // changeCarOwner transaction - requires 2 args , ex: ('changeCarOwner', 'CAR12', 'Dave')
        await contract.submitTransaction('createCar', 'CAR312', 'Skoda', 'Kadiq', 'White', 'JOHNSON');
        console.log('Transaction has been submitted');

        // Disconnect from the gateway.
        await gateway.disconnect();

    } catch (error) {
        console.error(`Failed to submit transaction: ${error}`);
        process.exit(1);
    }
}

main();

任何帮助都将不胜感激谢谢

共有1个答案

徐飞龙
2023-03-14

我认为关键信息是错误信息的这一部分:

无法连接到发现的订购者订购者0。实例通讯:7050

这是客户端使用服务发现找到的节点,未在连接配置文件中定义。

我怀疑发生的事情是,即使您更改了本地机器和Docker网络之间的端口映射,订购方仍在侦听Docker网络中的端口7050。

发现。asLocalhost连接选项用于支持区块链网络在客户端本地机器上的Docker网络中运行的场景,因此它会导致任何发现的主机名被视为localhost,但发现的端口号保持不变。因此,当使用发现时。作为localhost选项,节点在Docker网络中侦听的端口号必须映射到本地计算机上的相同端口号。

如果要更改端口号,则需要在实际节点上更改端口号,而不仅仅是在Docker网络映射中。

 类似资料:
  • 我在设置打开班次时遇到问题,并在连接到我的服务器域后收到以下错误: 我不确定这是在告诉我做什么。我尝试按字面意思使用指令,但它无法识别命令。 有什么想法吗?

  • 问题内容: 我不确定如何解决此问题 我不知道为什么在尝试以下操作时会出现此错误: 当我尝试连接到postgres时: 问题答案: 可能是一些问题: PostgreSQL没有运行。用sudo检查 你的PostgresSQl不在端口5432上运行。你可以检查其键入 尝试连接到数据库时出现错误,例如用户名,密码或数据库名。检查它们是否是postgres要求你连接的对象,并且这是你要访问的db_name。

  • 在我做了和之后,我的postgres遇到了一些问题。我试着卸载postgres并重新安装它,但它并没有那么好用。 这就是我所做的: 现在,在我重新安装homebrew之后,当我使用时,它不显示任何错误消息。 但是我在我的Rails应用程序中运行,它显示: 更新 这对我也管用。

  • 注意:连接是LAN,在隧道模式下工作正常,但速度较慢

  • 我正在尝试连接两个docker容器,一个是posgresql,另一个是python flask应用程序。两者都链接正确,python应用程序中的所有连接变量都直接取自postgres容器中通过链接公开的连接变量,并且与检查postgresql容器时发现的连接变量相同。当我将psql与连接字符串中的精确参数一起使用时,即: 成功连接到postgres容器中的数据库,因此我知道postgres正在通过