Sawtooth 1.1.2 Получение 'отклонено из-за неверного предшественника' при добавлении блока в блок генеза

Я не могу добавить новый блок в цепочку, потому что sawtooth-validator-default сообщает:[2019-01-25 18:18:54.029 WARNING block_validator] Block 7f3...370e (block_num:1, state:c3a...954, previous_block_id:0d8...09d) failed validation: Block 7f3...370e (block_num:1, state:c3a...954, previous_block_id:0d8...09d) rejected due to invalid predecessor 0d8...09d (block_num:0, state:66e...ee1, previous_block_id:0000000000000000)

Я предполагаю, что это проблема времени, потому что это только начало происходить и все еще работает хорошо в среде коллеги.

Я попытался выполнить следующую последовательность операций 7 раз этим утром:

  1. докер-сочинять
  2. gradle чистой сборки
  3. docker-составь --build
  4. ПОЛУЧИТЕ localhost:8008/ блоков -> 1 блок, как и ожидалось
  5. POST locApplication для цепочки
  6. ПОЛУЧИТЬ localhost:8008/blocks -> показывает добавленный блок... или нет
  7. ПОЛУЧИТЬ localhost:20005/api/v1/lettersofcredit/ Applications/? Id=d26...f2d

Работает? Y|N|N|Y|Y|Y|N

Я не вижу никакого вывода из settings_tp, только из валидатора по умолчанию. Каждый раз, когда новый блок отправки возвращает 202 ПРИНЯТО.

Я работаю в режиме разработчика и использую docker-compose для запуска всех контейнеров на одной виртуальной машине Ubuntu 18.0.4. Вот docker-compose.yaml:

version: "2.1"

services:

  settings-tp:
    image: hyperledger/sawtooth-settings-tp:1.1
    container_name: sawtooth-settings-tp-default
    depends_on:
      - validator
    entrypoint: settings-tp -vv -C tcp://validator:4004

  intkey-tp-python:
    image: hyperledger/sawtooth-intkey-tp-python:1.1
    container_name: sawtooth-intkey-tp-python-default
    depends_on:
      - validator
    entrypoint: intkey-tp-python -vv -C tcp://validator:4004

  xo-tp-python:
    image: hyperledger/sawtooth-xo-tp-python:1.1
    container_name: sawtooth-xo-tp-python-default
    depends_on:
      - validator
    entrypoint: xo-tp-python -vv -C tcp://validator:4004

  validator:
    image: hyperledger/sawtooth-validator:1.1
    container_name: sawtooth-validator-default
    expose:
      - 4004
    ports:
      - "4004:4004"
    # start the validator with an empty genesis batch
    entrypoint: "bash -c \"\
        sawadm keygen && \
        sawtooth keygen my_key && \
        sawset genesis -k /root/.sawtooth/keys/my_key.priv && \
        sawadm genesis config-genesis.batch && \
        sawtooth-validator -vv \
          --endpoint tcp://validator:8800 \
          --bind component:tcp://eth0:4004 \
          --bind network:tcp://eth0:8800 \
          --bind consensus:tcp://eth0:5050 \
        \""

  devmode-engine:
    image: hyperledger/sawtooth-devmode-engine-rust:1.1
    container_name: sawtooth-devmode-engine-rust-default
    depends_on:
      - validator
    entrypoint: devmode-engine-rust -C tcp://validator:5050

  rest-api:
    image: hyperledger/sawtooth-rest-api:1.1
    container_name: sawtooth-rest-api-default
    expose:
      - 8008
    ports:
      - "8008:8008"
    depends_on:
      - validator
    entrypoint: sawtooth-rest-api -C tcp://validator:4004 --bind rest-api:8008

  shell:
    image: hyperledger/sawtooth-all:1.1
    container_name: sawtooth-shell-default
    depends_on:
      - rest-api
    entrypoint: "bash -c \"\
        sawtooth keygen && \
        tail -f /dev/null \
        \""

  importer-webserver:
    image: sawtooth-trade-finance/importer-web:latest
    container_name: importer-webserver
    depends_on:
      - rest-api
    ports:
      - "20005:8080"

  importer-processor:
    container_name: importer-processor
    image: sawtooth-trade-finance/importer-processor:latest
    build:
      context: .
      dockerfile: ./tf_processor/Dockerfile
    depends_on:
      - validator

Любые предложения о том, как я могу отладить эту проблему, будут с благодарностью приняты. Благодарю.

2 ответа

Вы пытались удалить все контейнеры, изображения и тома в докере? Меня устраивает. Docker удаляет все контейнеры, изображения и тома

Для работы в Developer Mod вы должны установить и запустить DevMod Consensus.
установить

sudo apt-get install sawtooth-devmode-engine-rust   

После запуска валидатора запустите консенсус в другом терминале

sudo -u sawtooth devmode-engine-rust -vv --connect tcp://localhost:5050

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

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

Развертывание: возможно, когда вы настраиваете сетевой узел Hyperledger Sawtooth, он выбирает существующий файл хранилища блоков и инициализируется непреднамеренным блоком. Все последующие проверки блока завершатся ошибкой, потому что ваше окончательное глобальное состояние не будет соответствовать тому, что находится в новом блоке. Перед запуском новой настройки сети очистите файлы среды / устаревшие файлы.

Смарт-контракт / процессор транзакций (TP): если ваш TP не написан таким образом, что вы получаете детерминированный результат, вам нужно покопаться в своем приложении и определить это. Это означает, что ваш TP дает уникальные результаты на разных машинах или в разные моменты времени, поэтому один из ваших узлов создает хэш глобального состояния, который не совпадает с хешем в новом блоке. Убедитесь, что ваш TP детерминирован.

Другие вопросы по тегам