You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minifabric区块链连接问题:fabric-network与fabric-gateway选型咨询

模块选择与适配示例

模块选型结论

必须使用fabric-gateway模块,fabric-network已被官方标记为弃用,不再适配最新版本的Hyperledger Fabric网络(包括Minifabric默认部署的最新网络)。fabric-gateway是官方当前维护的客户端SDK,设计更简洁,贴合Fabric 2.4+的架构,能更好地兼容Minifabric部署的网络。

适配Minifabric的fabric-gateway版main.js示例

以下示例适配Minifabric生成的目录结构(证书、连接配置文件默认位于minifabric/vars目录),请根据你的实际组织、节点、链码名称调整参数:

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

async function main() {
    // 1. 加载组织的证书和私钥(Minifabric默认路径)
    const orgName = 'org1'; // 替换为你的组织名称
    const userId = 'admin'; // 替换为你的用户ID,比如admin
    const certPath = path.resolve(__dirname, 'minifabric', 'vars', 'crypto-config', 'peerOrganizations', `${orgName}.example.com`, 'users', `${userId}@${orgName}.example.com`, 'msp', 'signcerts', 'cert.pem');
    const keyPath = path.resolve(__dirname, 'minifabric', 'vars', 'crypto-config', 'peerOrganizations', `${orgName}.example.com`, 'users', `${userId}@${orgName}.example.com`, 'msp', 'keystore');
    
    // 读取证书
    const cert = fs.readFileSync(certPath, 'utf8');
    // 读取私钥目录下的第一个私钥文件(Minifabric生成的私钥文件名是随机的)
    const keyFiles = fs.readdirSync(keyPath);
    if (keyFiles.length === 0) {
        throw new Error('No private key files found in keystore');
    }
    const key = fs.readFileSync(path.join(keyPath, keyFiles[0]), 'utf8');

    // 2. 创建内存钱包并导入身份
    const wallet = await Wallets.newInMemoryWallet();
    const identityLabel = `${orgName}_${userId}`;
    await wallet.put(identityLabel, {
        credentials: {
            certificate: cert,
            privateKey: key,
        },
        mspId: `${orgName}MSP`, // 替换为你的组织MSP ID,比如org1MSP
        type: 'X.509',
    });

    // 3. 加载连接配置文件(Minifabric生成的connection-org1.json)
    const connectionPath = path.resolve(__dirname, 'minifabric', 'vars', 'connection-org1.json');
    const connectionProfile = JSON.parse(fs.readFileSync(connectionPath, 'utf8'));

    // 4. 创建网关并连接网络
    const gateway = new Gateway();
    try {
        await gateway.connect(connectionProfile, {
            wallet,
            identity: identityLabel,
            discovery: { enabled: true, asLocalhost: true }, // Minifabric默认是本地部署,asLocalhost设为true
        });

        // 5. 获取通道和链码
        const network = await gateway.getNetwork('mychannel'); // 替换为你的通道名称,默认是mychannel
        const contract = network.getContract('mycc'); // 替换为你的链码名称,默认是mycc

        // 6. 调用链码示例:查询和提交交易
        console.log('--> 执行链码查询:QueryAllAssets');
        const result = await contract.evaluateTransaction('QueryAllAssets');
        console.log(`查询结果:${result.toString()}`);

        // 提交交易示例(如果链码有初始化或写入方法)
        // console.log('--> 提交链码交易:CreateAsset');
        // await contract.submitTransaction('CreateAsset', 'asset1', 'blue', '5', 'Tom', '100');
        // console.log('交易提交成功');

    } finally {
        // 关闭网关连接
        gateway.disconnect();
    }
}

main().catch((err) => {
    console.error('执行出错:', err);
    process.exit(1);
});

使用说明

  1. 安装依赖:执行npm install @hyperledger/fabric-gateway,确保使用最新版本(当前推荐v1.5+)
  2. 调整参数:将示例中的组织名称、用户ID、MSP ID、通道名称、链码名称替换为你Minifabric部署的实际值
  3. 路径验证:确认minifabric/vars目录下的证书、连接配置文件路径与示例一致

确定使用fabric-gateway后,你可以提供具体错误信息,我会针对性排查问题。

内容的提问来源于stack exchange,提问作者Dario Colella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:52:47