Как я могу отправить запрос на обновление конфигурации канала в Orderer, используя узел SDK? - PullRequest
1 голос
/ 29 марта 2019

В процессе обновления конфигурации канала есть три основных этапа:

  • (1) Получить последнюю конфигурацию от Заказчика.
  • (2) Изменить конфигурацию.
  • (3) Подпишите и отправьте транзакцию заказчику для обновления конфигурации канала.

Я получил ошибку на шаге (3) при попытке вызвать функцию updateChannel(), которая является:

{status: 'BAD_REQUEST',

info: 'ошибка авторизации обновления: ошибка при проверке DeltaSet: политика для [Value] / Channel / Orderer / BatchSize не выполнена: не удалосьдостигнуть неявного порога в 1 суб-политики, требуется 1 оставшийся '}

Я следовал коду из hyperledger-sdk-node репо об обновлении канала здесь

Политика Заказчика сети выглядит следующим образом (я не уверен насчет возникшей здесь проблемы)

# Policies defines the set of policies at this level of the config tree
# For Orderer policies, their canonical path is
#   /Channel/Orderer/<PolicyName>
Policies:
    Readers:
        Type: ImplicitMeta
        Rule: "ANY Readers"
    Writers:
        Type: ImplicitMeta
        Rule: "ANY Writers"
    Admins:
        Type: ImplicitMeta
        Rule: "MAJORITY Admins"
    # BlockValidation specifies what signatures must be included in the block
    # from the orderer for the peer to validate it.
    BlockValidation:
        Type: ImplicitMeta
        Rule: "ANY Writers"

Подробнее о соответствующем коде:

    let signatures = [];
    signatures.push(client.signChannelConfig(config_proto));


    let request = {
        name: channelName,
        // orderer: channel.getOrderer("orderer.example.com"), // Do I really need this?
        config: config_proto, // response from requesting configtxlator/compute
        txId: client.newTransactionID(),
        signatures: signatures
    };

    try {
        let result = await client.updateChannel(request); // ERROR HERE
        console.log("result", result);
    } catch (error) {
        console.log(error);
    }

Если вам нужна дополнительная информация, просто скажите мне!Любые идеи должны быть полезны

1 Ответ

0 голосов
/ 12 апреля 2019

Я нашел способ заставить эту штуку работать!

В моем случае я хочу изменить свойство BatchSize конфигурации заказчика, что требует подписей большинства администраторов организаций-заказчиков.( подробнее ).

После завершения модификации мне нужно подписать запрос администратора заказа.

Следующий код включает:

(1) Получите key и certificate от администратора заказчика:

const keyPath = path.join(__dirname, '../../fabric/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore');
const keyPEM = Buffer.from(readAllFiles(keyPath)[0]).toString();
const certPath = path.join(__dirname, '../../fabric/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts');
const certPEM = readAllFiles(certPath)[0];

(2) Назначьте подписывающий идентификатор для client:

client.setAdminSigningIdentity(keyPEM.toString(), certPEM.toString(), "OrdererMSP");

Теперь он готов кбыть подписанным и отправить заказчику!

let signatures = [];
signatures.push(client.signChannelConfig(config_proto));

let request = {
    name: channelName,
    config: config_proto, // response from requesting configtxlator/compute
    txId: client.newTransactionID(),
    signatures: signatures
};

try {
    let result = await client.updateChannel(request);
    console.log("result", result);
} catch (error) {
    console.log(error);
}

функция readAllFiles:

function readAllFiles(dir) {
    const files = fs.readdirSync(dir);
    const certs = [];
    files.forEach((file_name) => {
        const file_path = path.join(dir, file_name);
        logger.debug(' looking at file ::' + file_path);
        const data = fs.readFileSync(file_path);
        certs.push(data);
    });
    return certs;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...