Почему мне нужно больше 2 секунд, чтобы совершить транзакцию? - PullRequest
1 голос
/ 08 июля 2019

У меня Hyperledger Fabric работает с док-станциями.У меня есть клиент Hyperledger, пишет в Node.js, используя Fabric Node SDK.

У меня есть указатель API / createEntity, который вызывает функцию "createEntity" в контракте с contract.submitTransaction () и записывает некоторыеданные в блокчейне.

Я отправляю данные и правильно вижу в журналах док-станции однорангового узла, что функция контракта вызывается правильно, и она завершается через несколько миллисекунд, добавляя новые данные в блокчейн.Но требуется около 2 секунд, чтобы фактически ответить серверу Node.js, что транзакция выполнена и данные записаны.Итак, мой сервер Node.js ждет ответов в течение 2 секунд.

Просто для того, чтобы иметь некоторые тайминги:

Это печатается сервером Node.js, как только я вызываю API createEntity: Создать объект: 2019-07-08T13: 29: 28.781Z

Это напечатано в журналах докера Hyperledger: createEntity 2019-07-08 13: 29: 28.814697426

Итак, через несколько миллисекунд приходит транзакция, а через несколько миллисекунд транзакция создается и записывается в книгу, фактически я записываю время после завершения функции createEntity в контракте и получаю: createEntity Законченов: 2019-07-08 13: 29: 28.818830574

Но ответ на сервер Node.js приходит по адресу: Транзакция отправлена ​​2019-07-08T13: 29: 30.842Z

Кто-нибудь знает, что это за задержка?Я не хочу, чтобы транзакция занимала 2 секунды, она должна быть немедленной.

Спасибо

Ответы [ 3 ]

3 голосов
/ 08 июля 2019

Для выполнения функции submitTransaction потребуется время, так как по умолчанию включен прослушиватель фиксации.

Таким образом, он будет ожидать фиксации данных и затем отвечать обратно.

Вы можете отключить commitListener, добавив eventHandlerOptions:{strategy:null} в опции соединения при настройке шлюза.

Надеюсь, что приведенный ниже код поможет вам.

 let connectionOptions = {
        identity: USER_ID,
        wallet: wallet,
        discovery: { enabled: false, asLocalhost: true },
        eventHandlerOptions: {
             strategy: null
             }
         }

    await gateway.connect(connectionProfile, connectionOptions)
0 голосов
/ 08 июля 2019

В файле configtx.yml, используемом для создания артефактов, в разделе заказа есть параметр, который говорит:

BathTimeout: 2s

Это определяет, сколько времени будет удерживать транзакцию перед ее фиксацией.к пэру.По умолчанию это 2 секунды, но вы можете изменить его, например,

BathTimeout: 500ms

Разумеется, используйте его с умом, так как он может создавать, в зависимости от загрузки вашей книги, блоки с одной транзакцией.

Проверка транзакции должна быть очень быстрой всего за миллисекунды.Конечно, это зависит от сложности вашего цепного кода и загруженности ваших коллег.

0 голосов
/ 08 июля 2019

Не забывайте, что заказчик также вовлечен в это.

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

По этой причине оно не может быть мгновенным.

...