将新同行加入频道

时间:2018-05-04 15:03:57

标签: hyperledger-fabric blockchain hyperledger

我对这个问题感到很累。 如果你知道,请和我解释如何解决这个问题。我求求

我正在研究“Fabcar”样本,它在fabric-samples文件夹中有1个peer / 1 orderer / 1 ca服务器。

我想再添加2个对等网络并将它们加入到频道(称为我的频道)

所以我已经修改了3个文件:crypto-config.yaml,docker-compose.yml,start.sh(在基本网络文件夹中)。

我也使用加密工具为新的2个同行制作了加密材料。

但问题是当我在peer0.org1.example.com容器中执行“peer channel join -b myblock.block”以便将这些新对等体加入到通道时,会显示以下错误消息:

This error message

它说“JoinChain”请求通道[mychannel]的授权检查失败:[在使用策略[管理员]的无渠道检查策略期间验证提案的创建者是否满足本地MSP主体:[此身份不是管理员]]))< / p>

我也用peerer exec命令在peer0.org1.example内外尝试了这个命令,并且使用了sudo并且没有任何效果。

似乎我需要使用管理员的证书启动交易,但我真的不知道如何制作它以及如何解决此授权问题。

请知道如何处理此问题的人向我详细解释这一点。

我很长一段时间都遇到了这个问题。我真的很绝望。

如果你告诉我如何,我真的很感激。期待你的回复。谢谢。

3 个答案:

答案 0 :(得分:0)

错误消息是告诉:peer channel join。您需要为给定的peer / org使用admin的标识才能执行fabric-samples/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp命令。

cryptogen创建加密材料的方式是填充特定结构的目录树。对于管理员证书,您需要使用此身份:

users.collect { case SomeClass(_, id, _, Some(someVariable), time) => // bunch of stuff here }

以成为Org1的管理员。创建通道并加入默认样本中的一个对等体的脚本使用以下命令完成:

https://github.com/hyperledger/fabric-samples/blob/f05a132586ae9ca7ce86b9e56ae4bd3b084bc959/basic-network/start.sh#L26

答案 1 :(得分:0)

此问题归因于您所使用的凭据的访问级别。 您需要成为管理员才能向频道添加对等方,因此您可以访问系统链码cscc。

另一个可能的问题是,在网络配置(通常是configtx.yaml文件)中,有一些策略会限制您将对等方加入通道的访问权限,如果您希望我可以查看一下configtx文件,看看我能不能帮忙。

在使用Fabcar示例时,它被Node SDK调用,您也可以使用SDK添加对等体。

请尝试:

实例化Fabric Client对象并注册一个admin用户。您可以根据Fabcar的enrollAdmin.js在脚本中完成此操作,

在Fabcar的enrollAdmin.js第72行中,您可以看到以下行:

console.log('Assigned the admin user to the fabric client ::' + admin_user.toString());

从此处开始,在第71行开始的“ then”内部。 您必须使用该方法以管理员身份注册

fabric_client.setAdminSigningIdentity(pk, cert, MSPID);

pk参数是管理员私钥,cert是他的证书,MSPID是您在configtx.yaml文件中为其组织指定的证书。

您可以使用Node addins中的文件系统模块来获取pk和证书:

let fs = require('fs');

let cert = fs.readFileSync(path.join(__dirname, 'PATH_TO_CERT/CERT_NAME.pem'))
let pk = fs.readFileSync(path.join(__dirname, 'PATH_TO_PK','PK_NAME'))

管理员证书的常用路径是

/fabric-samples/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts

私钥是:

/fabric-samples/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore

现在,您刚刚将管理员身份添加到客户的实例中,如果一切正常,则需要使用对等方的地址创建一个对等方实例,如下例:

peer=fabric_client.newPeer(grpc://localhost:7051);

别忘了使用grpc协议,如果启用了tls,则必须使用grpcs。

现在使用channel id作为参数创建您的频道的频道实例:

let channel_i=fabric_client.newChannel('mychannel')

然后创建一个对通道生成(配置)块的请求:

let orderer = fabric_client.newOrderer(ORDERER_URL);//the urlalso with grpc protocol
let tx_id=fabric.client.newTransactionID(true); //true means it's an administrative request
let g_request={
    txId: tx_id,
    orderer : orderer
}

最后,发出阻止请求,然后使用它加入频道:

channel_i.getGenesisBlock(g_request).then((block) =>{

    tx_id = fabric.client.newTransactionID(true);
    let j_request = {
          targets : peer,
          block : block,
          txId : tx_id,
     };

    // send genesis block to the peer
        return channel_i.joinChannel(j_request, 10000).then((results) =>{
            if(results[0].response.status == 200) {
                // join successful
                console.log("Join successful!!!");
            } else {
                // not good
                console.log("Error:: "+ results);
                throw  results;
            }
        })

答案 2 :(得分:0)

对于管理员身份错误,请将该身份签名证书复制到Org MSP admincerts文件夹中,然后生成频道tx文件。