Создание канала фабрики Hyperledger через узел SDK - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь создать канал через узел фабрики Hyperledger, но получаю следующие ошибки.

Отклонение трансляции сообщения конфигурации от 172.25.0.1:34196 из-за ошибки: ошибка при проверке транзакции создания канала для нового канала 'arun1', не удалось успешно применить обновление к конфигурации шаблона: ошибка при авторизации обновления: ошибка при проверке DeltaSet: политика для [Group] / Channel / Application не удовлетворена: неявная оценка политики завершилась неудачно - 0 под-политик были выполнены, но для этой политики требуется 1 изПодполитики «Администраторы» должны быть удовлетворены

Вот мой метод узлов

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

    // Check to see if we've already enrolled the user.
    const userExists = await wallet.exists('user2');

    if (!userExists) {
        console.log('An identity for the user "user2" 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(ccpPath, { wallet, identity: 'user2', discovery: { enabled: false, asLocalhost: true } });
    var client = gateway.getClient()

    // first read in the file, this gives us a binary config envelope
    let envelope_bytes = fs.readFileSync(path.join(__dirname, '..','..','..','fabric-samples/first-network/channel-artifacts/channel1.tx'));
    let adminKey = fs.readFileSync(path.join(__dirname, '..','..','..','fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/pem.key'));
    let adminCert = fs.readFileSync(path.join(__dirname, '..','..','..','fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem'));
    client.setAdminSigningIdentity(adminKey.toString(),adminCert.toString(),"Org1MSP")
    console.log(`admin key=====   ${adminKey}`);
    console.log(`admin cert=====   ${adminCert}`);
    // have the nodeSDK extract out the config update
    var signatures = new Array();

    var config_update = client.extractChannelConfig(envelope_bytes);
    var configSignature=client.signChannelConfig(config_update)

    signatures.push(configSignature);
    // create an orderer object to represent the orderer of the network
    var orderer=client.getOrderer("orderer.example.com") 
    let request = {
        config: config_update, //the binary config
        signatures: signatures, // the collected signatures
        name: 'arun1', // the channel name
        orderer: orderer, //the orderer from above
        txId: client.newTransactionID(true) //the generated transaction id
    };
    console.log(`configupdate${config_update}`);

    // this call will return a Promise
    console.log("Transaction sent 2");
    const result = await client.createChannel(request)
    return {
        status: 200,
        data: {
            data: JSON.parse(result.toString())
        }
    };

} catch (error) {
    console.error(`Failed to evaluate transaction: ${error}`);
    //  process.exit(1);
    return {
        status: 400,
        data: {
            data: `${error}`
        }
    };
}

Вот мое соединение. Json

    {
    "name": "first-network-org1",
    "version": "1.0.0",
    "client": {
        "organization": "Org1",
        "connection": {
            "timeout": {
                "peer": {
                    "endorser": "300"
                }
            }
        }
    },
    "organizations": {
        "Org1": {
            "mspid": "Org1MSP",
            "adminPrivateKey": {
                "path": "/home/arun/Hyperledger_1.4.2/fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/pem.key"
            },
            "signedCert": {
                "path": "/home/arun/Hyperledger_1.4.2/fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem"
            },
            "peers": [
                "peer0.org1.example.com",
                "peer1.org1.example.com"
            ],
            "certificateAuthorities": [
                "ca.org1.example.com"
            ]

        }
    },
    "orderers": {
        "orderer.example.com": {
            "url": "grpcs://localhost:7050",
            "tlsCACerts": {
                "path": "crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem"
            },
            "grpcOptions": {
                "ssl-target-name-override": "orderer.example.com"
            }
        }

    },
    "peers": {
        "peer0.org1.example.com": {
            "url": "grpcs://localhost:7051",
            "tlsCACerts": {
                "path": "crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer0.org1.example.com"
            }
        },
        "peer1.org1.example.com": {
            "url": "grpcs://localhost:8051",
            "tlsCACerts": {
                "path": "crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer1.org1.example.com"
            }
        }
    },
    "certificateAuthorities": {
        "ca.org1.example.com": {
            "url": "https://localhost:7054",
            "caName": "ca-org1",
            "tlsCACerts": {
                "path": "crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem"
            },
            "httpOptions": {
                "verify": false
            }
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 05 октября 2019

Согласно вашему ответу на ошибку, он отклоняется, потому что вы не передаете права администратора при создании нового канала.

Это политика записи канала фабрики, только администраторы могут создавать канал

        "adminPrivateKey": {
            "path": "/home/arun/Hyperledger_1.4.2/fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/pem.key

Вы уверены, что pem.key?

0 голосов
/ 07 октября 2019

Я обнаружил ошибку, мой путь к admincert был неверным

    let adminCert = fs.readFileSync(path.join(__dirname, '..','..','..','fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem'));

Заменили cacerts на admincerts

    let adminCert = fs.readFileSync(path.join(__dirname, '..','..','..','fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem'));
0 голосов
/ 04 октября 2019

Я думаю, что это может быть проблема с безопасностью Fabric, а не с вашим кодом.

Как настроены ваши Fabric, вы используете «старую» копию configtx.yaml? Я не знаю, когда это изменилось, но в configtx.yaml вам теперь нужно указать политику канала, поэтому вам понадобится строка, такая как <<: *ChannelDefaults в разделе ваших профилей в файле. Например:

Profiles:

ThreeOrgsOrdererGenesis:
    <<: *ChannelDefaults
    Orderer:
        <<: *OrdererDefaults
        Organizations:
            - *OrdererOrg
        Capabilities:
            <<: *OrdererCapabilities
    Consortiums:
        constrade:
            Organizations:
                - *Org1
                - *Org2
                - *Org3
ThreeOrgsChannel:
    Consortium: constrade
    <<: *ChannelDefaults
    Application:
        <<: *ApplicationDefaults
        Organizations:
            - *Org1
            - *Org2
            - *Org3
        Capabilities:
            <<: *ApplicationCapabilities

, и вам, очевидно, понадобятся политики, определенные в разделе ChannelDefaults вашего файла.

В последнем первом сетевом образце в фабричных образцах указаны правильные значения. формат файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...