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); });
使用说明
- 安装依赖:执行
npm install @hyperledger/fabric-gateway,确保使用最新版本(当前推荐v1.5+) - 调整参数:将示例中的组织名称、用户ID、MSP ID、通道名称、链码名称替换为你Minifabric部署的实际值
- 路径验证:确认
minifabric/vars目录下的证书、连接配置文件路径与示例一致
确定使用fabric-gateway后,你可以提供具体错误信息,我会针对性排查问题。
内容的提问来源于stack exchange,提问作者Dario Colella
相关产品推荐
相关产品推荐

