1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-exonum

Клонировать/Скачать
CHANGELOG.md 100 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 13:46 ad78b52

Changelog

Все значимые изменения в этом проекте будут задокументированы в этом файле. Проект придерживается Semantic Versioning.

[Unreleased]

Новые функции

exonum-node

  • Функциональность модуля proposer была расширена. Теперь он также может использоваться для удаления транзакций из пула неподтверждённых транзакций. Модуль был переименован в pool, и соответствующие имена были обновлены соответствующим образом. (#1840)

exonum-api

  • Добавлена возможность установить максимальный допустимый размер полезной нагрузки JSON в файле конфигурации node.toml в разделе api (например, json_payload_size = 1048576). (#1918)

Внутренние улучшения

Exonum

  • Теперь можно кэшировать результаты проверки правильности транзакций, что приводит к умеренному улучшению производительности узла. (#1844)

  • Backtrace теперь включён в ExecutionError. (#1850)

exonum-cli

  • Добавлена возможность использовать доменные имена вместе с IP-адресами на этапе генерации конфигураций и в списке подключений. (#1870)

  • Введено новое свойство max_total_wal_size в секции конфигурации базы данных для настройки максимального размера журнала WAL журнала rocksdb. (#1961)

exonum-merkledb

  • Внутренняя база данных rocksdb была заменена на структуру данных в памяти в TemporaryDB. (#1872)

  • rocksdb был обновлён до версии 0.19. (#2069)

  • TemporaryDB можно использовать в двух вариантах:

    • в памяти (по умолчанию);
    • оболочка над RockDB (функция persisted_tempdb). (#2071)

Критические изменения

exonum-merkledb

  • Хрупкий ящик был заменён на time как устаревший и неподдерживаемый. (#2009)

  • protobuf был обновлен до версии 3. (#2073)

Улучшения производительности

exonum-merkledb

  • Были изменены некоторые настройки rocksdb и внесены оптимизации, которые предотвращают регресс производительности. (#2070)

1.0.0 — 2020-03-31

Критические изменения

exonum-api

  • ApiManagerConfig стал неисчерпывающим. (#1834)

Новые функции

exonum-node

  • Узлы Exonum теперь корректно завершают работу при получении сигналов SIGINT, SIGTERM и SIGQUIT (на платформах Unix) или прерывания ctrl + c (в Windows). Эти обработчики сигналов можно отключить с помощью NodeBuilder::disable_signals(). (#1834)

Исправления ошибок

exonum-cli

  • Исправлена ошибка в команде run-dev. Ранее использование существующих файлов конфигурации в blockchain-path приводило к ошибке. (#1827)

1.0.0-rc.3 — 2020-03-25

Критические изменения

exonum

  • Методы create_patch и commit в BlockchainMut были обобщены для поддержки пропуска блоков (см. раздел Новые функции для получения более подробной информации). (#1820)

exonum-cli

  • Команда run-dev была переработана. Теперь она не очищает файлы базы данных после запуска. Параметр artifacts-dir был переименован в blockchain-path. Файлы конфигурации теперь хранятся в подкаталоге config. (#1822)

exonum-supervisor

  • MigrationRequest стал неисчерпывающим. (#1823)

  • Конечные точки POST теперь ожидают ввода, закодированного в формате JSON, а не в шестнадцатеричном формате Protobuf. (#1823)

  • Метод supervisor_name был удалён. Вместо этого используйте Supervisor::NAME. (#1823)

Новые функции

exonum-cli

  • Несколько констант в модуле command стали общедоступными. (#1821)

exonum-node

  • Узлы Exonum теперь могут настраивать способ создания предложений блоков. Это можно использовать для внесения в белый или чёрный список авторов транзакций или служб, определения приоритета транзакций по расширенным критериям, реализации сложных ограничений скорости и т. д. Функциональность доступна через модуль pool. (#1820)

  • Узлы Exonum теперь могут пропускать генерацию блоков на определённой эпохе алгоритма консенсуса. Это можно использовать, чтобы поддерживать «пульс», когда нагрузка сети низкая, без увеличения объёма хранилища, используемого узлами. (#1820)

exonum-rust-runtime

  • ServiceApiScope::pb_endpoint_mut позволяет принимать сообщения, закодированные в Protobuf, с типом содержимого запроса, установленным на application/octet-stream, в дополнение к сообщениям, закодированным в JSON. (#1829)

exonum-testkit

  • Testkit может отправлять полезные данные, закодированные в Protobuf, на конечные точки POST. (#1831) Бесплатные ресурсы, связанные с артефактами во время выполнения, размещают их. (#1794)

exonum-supervisor

— Служба Supervisor поддерживает замораживание службы. (#1781)

— Добавлена конечная точка supervisor/services, которая получает информацию о развёрнутых артефактах и доступных службах. (#1790)

— Служба Supervisor поддерживает выгрузку артефактов. (#1798)

Exonum-rust-runtime

— Службы Rust поддерживают замораживание. (#1780)

— HTTP API служб Rust теперь включается во время миграции данных. (#1780)

Exonum-testkit

— Сервер Testkit теперь возвращает информацию об эмулируемых узлах. (#1799)

Внутренние улучшения

Exonum

— Core теперь предоставляет более подробные / контекстно-зависимые описания ошибок, связанных с жизненным циклом службы. (#1806)

Exonum-merkledb

— Очистка индекса теперь использует диапазон удалений для RocksDB, обеспечивая значительное повышение производительности этой операции. (#1791)

Исправления ошибок

Exonum

— Исправлена ошибка, связанная с тем, что узлы забывали транзакции после выполнения блока с ними. Ранее узлы забывали все транзакции в выполненных блоках; такие транзакции были удалены из эфемерного кэша транзакций, но не были сброшены в БД или куда-либо ещё. Это могло привести к зависанию консенсуса. (#1809)

Exonum-node

— Устранена потенциальная остановка узла, если узел получил предложение и сверхбольшинство транзакций, одобряющих его, до того, как станут известны все транзакции в предложении. (#1781)

— Отключено вещание транзакций, которые узел считает неправильными. (#1781)

— Исправлено неправильное аннулирование предложений блоков. (#1782)

— Обеспечена чёткая когерентность периода пула транзакций путём введения параметра конфигурации mempool.flush_config_strategy. Ранее транзакции сбрасывались в постоянный пул только при фиксации блока. Это приводило к неожиданному поведению некоторых API, таких как конечная точка получения транзакций в службе проводника. (#1809)

— Устранено состояние гонки, когда два узла пытаются установить исходящие соединения друг с другом одновременно. (#1804)

Exonum-testkit

— Testkit теперь не включает неправильные транзакции в блоки или пул памяти, аналогично реальным узлам Exonum. (#1785)

— Введён метод получения ссылки на базовый клиент API для TestKitApi. (#1811)

1.0.0-rc.1 — 2020-02-07

Критические изменения

Exonum

— Хук before_commit был переименован в after_transactions. (#1577)

— Хуки before_transactions и after_transactions в службах Rust теперь возвращают Result. Семантика такая же, как и для транзакций; ошибка или паника в хуке приведёт к откату состояния блокчейна. (#1576)

— Теперь ошибки, возникающие при выполнении транзакций и хуков before_transactions / after_transactions, агрегируются внутри каждого блока, а не глобально. Ошибки можно получить с помощью BlockWithTransactions. (#1576)

— Интерфейс Rust и представление Protobuf ExecutionError были переработаны. Поля ошибок были сделаны закрытыми, и была добавлена информация о неудачном вызове. (#1585)

— Макрос IntoExecutionError был переработан в отдельный признак ExecutionFail и соответствующий макрос деривации. (#1585)

— Агрегация хеш-состояния теперь выполняется автоматически MerkleDB. Соответствующие методы в Runtime и Service в среде выполнения Rust были удалены. (#1553)

commit_service был переименован в update_service_status и теперь принимает InstanceStatus в качестве дополнительного аргумента. start_adding_service было переименовано в initiate_adding_service, чтобы лучше различать запуск и остановку службы. (#1605)

— Хук after_transactions теперь вызывается для генезисного блока встроенных служб. Обратите внимание, что вызов blockchain::Schema::height внутри хука after_transactions вызовет панику для встроенной службы. (#1619)

— Поле proposer_id в Block было перемещено в дополнительные заголовки блоков. (#1602)

— Изменён способ взаимодействия со службами из среды выполнения Rust. Вместо использования признака Transaction теперь можно использовать... Интерфейсы сервисов

напрямую как черты Rust. Эти интерфейсные черты могут быть применены к ключевой паре (для генерации подписанных транзакций), к CallContext (для вызова другого сервиса) и некоторым другим типам. Подробнее см. документацию по среде выполнения Rust. (#1606)

Следующие публичные API были удалены или сделаны приватными:

blockchain::{error reexports} (доступно из runtime::);
— публичный реэкспорт blockchain::FatalError;
— структура blockchain::InstanceCollection;
— методы Blockchain::pool_size, Blockchain::get_saved_peers и Blockchain::remove_peer_with_pubkey;
— функция helpers::path_relative_from;
— черта helpers::ZeroizeOnDrop;
— тип helpers::Milliseconds;
— модули helpers::config и helpers::user_agent;
— функции helpers::generate_testnet_config, helpers::create_rust_runtime_and_genesis_config и helpers::clear_consensus_messages_cache;
— макрос impl_serde_hex_for_binary_value (перемещён в merkledb);
— модуль proto;
— модуль runtime::error (catch_panic был добавлен в список публичных реэкспортов из runtime::error).

Модуль node и P2P-сообщения из модуля message (за исключением AnyTx и Precommit) были перемещены в отдельный ящик exonum-node. Перемещённые P2P-сообщения стали приватными вместе с типами / методами, логически связанными с реализацией алгоритма консенсуса (например, NodeHandler и типы, используемые им). (#1698)

Идентификатор артефакта теперь имеет первоклассную семантическую версию. Ранее он был специфичен для среды выполнения Rust. (#1590)

Поле name идентификатора артефакта не может содержать символ : . (#1590)

Формат конечной точки proto-sources в среде выполнения Rust был изменён. Чтобы получить основные источники Protobuf, используйте конечную точку с запросом type=core. Чтобы получить источники артефакта, используйте запрос type=artifact&name=$name&version=$version, где $name и $version заменяются соответствующими значениями. (#1590)

Модуль среды выполнения Rust был перемещён из ящика exonum в отдельный ящик exonum-rust-runtime. (#1641)

update_service_status теперь не возвращает значение. (#1659)

Теперь BlockchainBuilder::build возвращает BlockchainMut вместо Result. (#1659)

Тип позиции транзакции в блоке был изменён на u32. (#1668)

Ошибка DispatcherError была разделена на два разных типа: CoreError и CommonError. (#1680)

Вариант Common был добавлен в перечисление ErrorKind. (#1680)

Модуль API ящика exonum был перемещён в 2 отдельных ящика (#1690):

— ящик exonum-api, определяющий базовую HTTP-оболочку;
— ящик exonum-system-api, реализующий системные API-конечные точки.

Добавлен новый метод initiate_resuming_service в трейт Runtime. Этот метод используется для возобновления ранее остановленных служб. (#1693)

Был переработан ExecutionContext (#1711):

ExecutionContext был расширен методами из exonum_rust_runtime::CallContext, поэтому больше нет необходимости использовать CallContext.
Публичные поля в ExecutionData были заменены соответствующими геттерами.
Прямой доступ fork в ExecutionContext был заменён на BlockchainData::unstructured_access, который возвращает доступ только для чтения ко всем данным блокчейна.

Общедоступные структуры и перечисления были сделаны неисчерпывающими. (#1710)

Доступ к данным блокчейна из ExecutionContext после ошибки во вложенном вызове запрещён. (#1733)

Объявления Protobuf были организованы в соответствии с их пакетами и, в случае пакета exonum.runtime, разделены на более мелкие фрагменты. Основные сообщения были перемещены из exonum.messages в пакет exonum. (#1756)

BlockchainBuilder теперь принимает GenesisConfig в качестве отдельного аргумента, а не как часть конструктора new. Конфигурацию можно пропустить, если гарантирована инициализация блокчейна. (#1761)

exonum-cli

Параметр supervisor-mode был добавлен для подкоманды generate-template. (#1598)

NodeBuilder::with_service был... renamed to the with_rust_service (#1765)

exonum-crypto

  • Protobuf declarations были организованы в соответствии с их пакетами (#1756).

exonum-explorer

  • Поле content структуры CommittedTransaction и вариант перечисления InPool перечисления TransactionInfo были переименованы в message (#1721).

exonum-supervisor

  • Структура Supervisor больше не является универсальной (#1587).
  • Структуру DeployConfirmation переименовали в DeployResult и расширили полем success (#1648).
  • Значения кодов ошибок были изменены и разделены на несколько перечислений, представляющих подгруппы (#1680).

exonum-merkledb

  • Крейт был реструктурирован, индексы теперь находятся в отдельном модуле. Итераторы индексов были сокращены до Iter, Keys и Values (#1628).
  • Метод SparseListIndex::indices был переименован в SparseListIndex::indexes (#1629).
  • Метод AccessExt::touch_index был заменён на index_type (#1630).
  • Общедоступные структуры и перечисления стали неполными (#1710).
  • Был представлен трейт CopyAccessExt. Этот трейт полезен для ссылок, реализующих Access, таких как &Fork или &dyn Snapshot. Методы из трейта AccessExt теперь принимают self по ссылке (#1739).
  • Сериализация ProofPath во время вычислений хэша карты была унифицирована. Теперь она использует формат LEB128(bit_length) || bytes, который ранее использовался для ветвей, но не для одноэлементных карт (#1743).
  • Сериализация сообщений ProofPath в Protobuf-сообщениях MapProof была изменена на более компактный и независимый от реализации формат (#1743).
  • Все типы индексов теперь имеют общий набор итераторов: Entries, Keys и Values (#1762).
  • KeySetIndex::insert теперь принимает элемент по ссылке (#1762).
  • KeySetIndex теперь поддерживает ключи без размера. Его методы получения больше не параметризуются типом ключа, аналогично MapIndex / ProofMapIndex (#1762).

exonum-proto

  • Протобуф-декларации были организованы в соответствии с их пакетами (#1756).

exonum-rust-runtime

  • Интерфейсы сервисов теперь должны указывать идентификаторы методов либо с атрибутом interface_method, либо с опцией auto_ids (#1701).
  • Методы интерфейса сервиса теперь могут быть помечены как удалённые (#1707).

exonum-testkit

  • Были удалены/сделаны приватными следующие общедоступные API:
    • модуль compare;
    • макрос txvec;
    • методы TestKit::probe_all и TestKit::probe.
  • Метод TestKitBuilder::create был переименован в build (#1740).
  • Теперь TestNode возвращает KeyPair вместо кортежа (PublicKey, SecretKey) (#1761).

exonum-time

  • Модули были сделаны приватными, теперь крейт предоставляет реэкспорт необходимых типов (#1716).

Новые функции

exonum

  • Был введён хук before_transactions для сервисов (#1577).
  • Было введено ErrorMatch для проверки (например, с помощью testkit), что ExecutionError имеет ожидаемый тип, сообщение об ошибке и/или местоположение (#1585).
  • Мы ввели набор общедоступных конечных точек для получения статуса вызовов, выполненных в блоке:
    • v1/call_status/transaction — получает статус транзакции;
    • v1/call_status/before_transactions — получает статус хука before_transactions;
    • v1/call_status/after_transactions — получает статус хука after_transactions. (#1612).
  • Экземпляры служб теперь можно остановить. Активный экземпляр службы можно остановить с помощью соответствующего запроса к Supervisor. Остановленный сервис больше не участвует в бизнес-логике, то есть он не выполняет транзакции, не обрабатывает события, не предоставляет пользовательские API и т. д. Данные сервиса становятся недоступными для других сервисов, но всё ещё существуют. Имя и идентификатор остаются зарезервированными для остановленного сервиса и не могут быть повторно использованы для добавления новых сервисов. (#1605).
  • В blockchain::Schema был добавлен новый метод next_height в качестве альтернативы height, которая не вызывает панику (#1619).
  • Новый метод in_genesis_block был добавлен в... CallContext для проверки выполнения сервисного хука для генезис-блока. (#1619)
  • Добавлены новые варианты ошибок api::Error: Gone и MovedPermanently. (#1607)

  • Теперь API-конечные точки могут быть помечены как устаревшие. (#1607)

  • Добавлен ProtobufConvert для Verified, BlockProof и IndexProof. (#1643)

  • Косая черта (/) теперь может быть частью имени артефакта/экземпляра. (#1681)

exonum-build

  • exonum-build теперь полностью поддерживает иерархические пути к файлам Protobuf. (#1756)

  • Можно отказаться от включения источников файлов в вывод, генерируемый ящиком. (#1756)

  • Blockchain::new теперь поддерживает любой тип, конвертируемый в KeyPair. (#1761)

exonum-cli

  • Добавлена команда обслуживания restart-migration для перезапуска скрипта миграции. (#1728)

  • В NodeBuilder добавлены методы with_instance и with_default_rust_service, которые запускают экземпляры служб сразу после создания генезис-блока. (№1765)

  • Добавлен конструктор NodeBuilder::development_node, который можно использовать для быстрой настройки одноузловой сети разработки. (#1765)

exonum-crypto

  • У KeyPair теперь есть конструкторы для генерации случайной пары ключей и генерации пары ключей из указанного семени. (#1761)

exonum-merkledb

  • MerkleDB теперь выполняет автоматическую агрегацию состояний, позволяя создавать доказательства для своего содержимого. Хешированные индексы, не входящие в группу, участвуют в этой агрегации. Подробнее о том, как работает агрегация, см. в документации по ящику. (#1553)

  • Добавлена хешированная версия Entry, называемая ProofEntry, которая участвует в агрегации состояний. (#1553)

  • Поддержка ключей без размера добавлена в MapIndex и ProofMapIndex. (#1621, #1626)

  • Добавлен механизм расширения заголовка блока. Блок теперь содержит хранилище значений ключей additional_headers, которое может содержать двоичные данные. (#1602)

  • Временную базу данных TemporaryDB теперь можно очистить. Это удалит содержимое всех индексов и сотрёт метаданные индекса. (#1630)

  • Макрос impl_serde_hex_for_binary_value перемещён из ядра в merkledb. (#1629)

  • Теперь можно перебирать ключи индексов внутри группы. (#1662)

  • Небезопасные оптимизации / экспериментальные функции теперь отключены по умолчанию. (#1740)

  • MerkleDB теперь предоставляет перечисления для всех поддерживаемых типов доступа к БД, которые можно использовать для упрощения универсального кода (например, в привязках). (#1747)

  • Теперь можно получить доступ только для чтения к данным вилки со статическим временем жизни. (#1763)

exonum-node

  • Логика узла (включая P2P-сеть и алгоритм консенсуса) была перенесена из ящика exonum в отдельный ящик exonum-node. (#1698)

exonum-rust-runtime

  • Модуль времени выполнения Rust был перенесён из ящика exonum в отдельный ящик exonum-rust-runtime. (#1641)

  • CallContext заменён на ExecutionContext. (#1711)

exonum-supervisor

  • Служба Supervisor теперь может иметь начальную конфигурацию и реализует интерфейс Configure. (#1587)

  • Был добавлен ConfigChange::StopService, чтобы отправлять запросы на остановку экземпляра службы. (#1605)

  • Была добавлена новая частная конечная точка deploy-status. (#1648)

  • Добавлена поддержка возобновления ранее остановленных служб. (#1706)

    • Метод resume_service добавлен в ConfigPropose.
    • Вариант ResumeService добавлен в перечисление ConfigChange.
  • Supervisor теперь поддерживает миграции. (#1727)

exonum-middleware-service

  • Добавлена служба middleware, которая может группировать транзакции и выполнять проверенные вызовы (вызовы, которые выполняются, если целевая служба соответствует определённому требованию к артефакту и версии). (#1590)

Внутренние улучшения

exonum

  • Модуль sandbox был перемещён в test-suite/consensus-tests. (#1627)

  • Некоторые общие тесты были перемещены в test-suite/node-tests. (#1633)

Исправления ошибок

exonum-merkledb

  • Исправлена реализация Snapshot для Patch. Предыдущая реализация могла привести к устареванию чтения из Patch или Fork. (#1611)

  • Максимальное значение высоты в ProofListIndex было исправлено с фиктивного значения 58 до... 56. (#1762)

  • Устранена некорректная установка пустого ключа для ListIndex. (#1762).

  • ProofListIndex теперь корректно обрабатывает все значения индекса; ранее некоторые его методы вызывали панику при вызове с индексом, превышающим 2 ** 56. (#1768).

0.13.0-rc.2 - 2019-12-04

Изменения

exonum

  • Самое важное: введена новая функция Dynamic Services. Подробнее см. раздел «Функция Dynamic Services» в журнале изменений.

  • Используемая версия rust обновлена до 1.38.0. (#1481).

  • Формат сериализации транзакций изменён на protobuf. (#1283).

  • Реализован метод create_checkpoint для структуры RocksDB. Этот метод использует функциональность контрольных точек RocksDB под капотом.

  • Сообщение об ошибке NotFound для конечной точки explorer/v1/block теперь включает фактическую высоту блокчейна. (#1498).

  • Конечная точка system/v1/rebroadcast удалена. (#1445).

  • Добавлена возможность указать алгоритм сжатия для базы данных. (#1447).

  • Обновлена зависимость hex с изменениями в сигнатурах методов ToHex. (#1468).

  • Ключи валидатора теперь получаются из одного главного ключа. Главный ключ хранится в зашифрованном файле. (#1459).

  • Параметры командной строки --service-key-pass и --consensus-key-pass были удалены в пользу параметра --master-key-pass. Например, теперь вы можете запустить узел с помощью команды ниже. (#1459):

cargo run -- run -d 0/db/ -c 0/node.toml --master-key-pass pass:123
  • Метод StoppedTestKit::resume принимает список времени выполнения вместо списка служб.

  • Удалён устаревший метод TestKit::blockchain_mut, а TestKit::blockchain теперь возвращает значение вместо ссылки.

  • Символ точки больше не допускается в именах служб. (#1558).

  • Службы теперь могут использовать типы BlockchainData и SnapshotExt для доступа к данным из блокчейна более структурированным образом. (#1523).

  • Тип GenesisConfig выделен в отдельную сущность. BlockchainBuilder, Node и Testkit явно принимают его во время создания. (#1541).

  • Добавлен признак DefaultInstance для объявления встроенных служб. (#1541).

exonum-merkledb

  • Вложенные доказательства для ProofListIndex заменены плоским (нерекурсивным) форматом. (#1450).

  • Введён дифференцированный доступ (только для чтения / чтение-запись) к базе данных. (#1523).

  • Теперь можно иметь доступ только для чтения к индексам, заданным через Fork, с помощью оболочки ReadonlyFork. Доступ только для чтения работает как RefCell::borrow (в отличие от RefCell::borrow_mut для Fork); можно создать неограниченное количество индексов только для чтения на основе одной и той же вилки. (#1523).

  • Схемы служб теперь могут использовать декларативный макет, в котором каждое поле соответствует отдельному индексу или группе индексов. Можно создать конструктор для таких схем с помощью макроса FromAccess. (#1523, #1562).

  • Добавлено новое ограничение на имена индексов. (#1558):

    • символ точки больше не разрешается в индексах с префиксным доступом.
    • имена индексов, начинающиеся с __ и не содержащие точки ., зарезервированы и используются только для системных индексов.

exonum-proto

  • Представлен новый ящик exonum-proto. Признак ProtobufConvert перемещён в этот ящик. (#1496).

exonum-protobuf-convert

  • Представлен новый ящик exonum-protobuf-convert. Макрос derive ProtobufConvert перемещён в этот ящик. (#1501).

  • Макрос derive ProtobufConvert больше не выводит признаки BinaryValue и ObjectHash. Для них есть отдельные макросы derive в ящике exonum-derive. (#1501).

exonum-build

  • Метод protobuf_generate теперь является приватным, используйте exonum_build::ProtobufGenerator вместо него. (#1496).
  • Метод ProtobufGenerator::frequently_used был удалён. (#1581).

exonum-crypto

  • Методы read_keys_from_file и generate_keys перемещены в новый модуль keys в exonum. (#1459).

  • Сериализация protobuf для криптотипов теперь реализована в ящике exonum-crypto. (#1496). Обзор

В версии 0.13 в exonum представлен новый рабочий процесс сервиса под названием «Динамические сервисы».

Основные моменты этой функции:

exonum теперь поддерживает различные среды выполнения кода (среды выполнения). По умолчанию включён только собственный rust-runtime, но поддержку различных языков программирования можно легко добавить.

Подробнее см. документацию по признаку Runtime и пример sample_runtime.

— Сервисы больше не связаны статически с скомпилированным двоичным файлом. Существует поддержка добавления новых типов сервисов (также известных как артефакты) динамически и запуска новых экземпляров сервисов.

Подробнее см. документацию модуля runtime.

— Теперь у сервисов могут быть параметры инициализации, предоставляемые в процессе запуска сервиса.

— Теперь сервисы поддерживают изменения конфигурации через интерфейс Configure.

— Сервис configuration был заменён на сервис supervisor, который способен не только изменять конфигурацию, но также развёртывать и запускать сервисы. Подробнее см. сервис supervisor.

Руководство по миграции

Выпуск 0.13 содержит множество несовместимых изменений. Чтобы увидеть изменения, сравните версии примера сервиса Cryptocurrency для выпусков [0.12.1] и [0.13.0].

Ключевые моменты:

— Схема Merkledb теперь декларативна и может содержать индексы в качестве полей.

— Доступ к базе данных теперь изолирован для сервисов. Сервис не может получить доступ на запись к другому сервису или схеме блокчейна.

— Транзакции больше не имеют метода execute. Вместо этого сервис определяет и реализует интерфейсный признак, содержащий всю бизнес-логику.

— По умолчанию сервисы не запускаются при запуске узла. Для запуска сервиса используйте инструмент exonum-launcher.

Важные PR для динамических сервисов

Ниже вы можете найти список запросов на вытягивание, которые имеют существенное значение для реализации функции динамических сервисов. Запросы на вытягивание упорядочены хронологически.

  • #1253: Моки интерфейса для динамических сервисов;
  • #1263: Добавить новый интерфейс сервисов rust;
  • #1261: Базовая функциональность диспетчера;
  • #1275: Интеграция динамических сервисов;
  • #1345: Реализовать новый признак Transaction [ECR-3222];
  • #1361: Первый шаг реализации постоянных динамических сервисов [ECR-3276];
  • #1371: Основная реализация службы супервизора [ECR-3291], [ECR-3298];
  • #1376: Восстановить системные API-конечные точки;
  • #1389: Проверить и улучшить процедуру проверки сообщений [ECR-3272];
  • #1446: MVP интерфейсов служб. [ECR-3474], [ECR-3484];
  • #1467: Реализовать интерфейс Configure [ECR-3306];
  • #1473: Извлечь службу супервизора из ядра;
  • #1482: Добавить метод завершения работы в признак времени выполнения;
  • #1484: Реализовать логику обновления конфигурации в супервизоре [ECR-3583];
  • #1492: Выполнить запуск и инициализацию сервиса за один шаг [ECR-3222];
  • #1537: Завершить макросы Exonum-derive [ECR-3800];
  • #1538: Режимы супервизора [ECR-3794] [ECR-3771].

Полная история реализации динамических сервисов

Ниже вы можете найти список всех запросов на вытягивание, связанных с реализацией функции динамических сервисов. Запросов на вытягивание упорядочен хронологически.

  • #1243: Диспетчер старого поведения;
  • #1509: Сделать. Диспетчер в основном синхронный:
  • #1245: Добавить базовый интерфейс среды выполнения + реализация на Rust.

  • #1253: Моки интерфейса для динамических сервисов.

  • #1261: Базовая функциональность диспетчера.

  • #1263: Добавить новый интерфейс сервисов на Rust.

  • #1267: Переместить службу конфигурации в ядро.

  • #1269: Артефакт Rust и дополнительная функциональность для среды выполнения Rust.

  • #1270: Динамическая служба конфигурации.

  • #1275: Интеграция динамических служб.

  • #1287: Удалить макрос из определения признака интерфейса службы.

  • #1290: Добавить поддержку расчёта хэша состояния в средах выполнения и службах.

  • #1291: Изменить конструктор службы и веб-API.

  • #1325: Динамические службы: исправить компиляцию службы времени.

  • #1326: Удалить genesis_init из динамических служб [ECR-3226].

  • #1327: Убрать небезопасный код из сред выполнения.

  • #1330: Небольшое количество улучшений кода. [ECR-3222].

  • #1331: Переименовать диспетчер в call_info.

  • #1332: Исправить тесты в модуле блокчейна.

  • #1334: Исправить тесты песочницы в динамических службах [ECR-3230].

  • #1336: Переименовать методы признаков в динамических службах [ECR-3222].

  • #1337: Исправить множество тестов в динамических службах.

  • #1338: Уточнить логику start_service [ECR-3222, ECR-3235].

  • #1340: Исправить testkit [ECR-3229].

  • #1343: Добавить имя службы и идентификатор в методы признака Service. [ECR-3235].

  • #1345: Реализовать новый признак Transaction [ECR-3222].

  • #1346: Исправить бенчмарки транзакций в динамических службах.

  • #1348: Исправить большую регрессию производительности в динамических службах.

  • #1349: Не проверять SignedMessage во время десериализации.

  • #1350: Рефакторинг кода проверки подписи [ECR-3222].

  • #1353: Переработать обозреватель блокчейна [ECR-3259].

  • #1354: Исправить компиляцию «cargo test --all».

  • #1357: Некоторые рефакторинги по предложению clippy.

  • #1361: Первый шаг реализации постоянных динамических служб [ECR-3276].

  • #1367: Переименовать ArtifactSpec в ArtifactId [ECR-3291].

  • #1371: Основная реализация службы супервизора [ECR-3291], [ECR-3298].

  • #1374: Улучшить код и сделать Трэвиса почти счастливым.

  • #1375: Добавить deadline_height в транзакцию StartService [ECR-3298].

  • #1376: Восстановить системные API-конечные точки.

  • #1378: Завершить логику развёртывания артефакта [ECR-3291].

  • #1379: Реализовать вычисление state_hash для диспетчера.

  • #1380: Сделать тесты зелёными снова.

  • #1381: Включить источники файлов proto в информацию об артефактах. [ECR-3309].

  • #1382: Заменить impl_service_dispatcher атрибутом в service_interface [ECR-3222].

  • #1387: Улучшить обработку ошибок выполнения для динамических служб [ECR-3236].

  • #1389: Проверить и улучшить процедуру проверки сообщений [ECR-3272].

  • #1392: Реализовать проверку для ArtifactId и InstanceSpec с помощью модульных тестов [ECR-3360].

  • #1393: Добавить макрос для реализации шестнадцатеричного представления serde для типов BinaryValue [ECR-3222].

  • #1394: Обновить документацию модуля сообщений [ECR-3275].

  • #1396: Документировать жизненный цикл среды выполнения [ECR-3275].

  • #1405: Тесты супервизора динамических служб [ECR-3266].

  • #1411: Уточнить Runtime-признак [ECR-3412].

  • #1427: Попытаться повторно развернуть артефакт перед регистрацией.

  • #1429: Провести обзор unwraps в динамических службах [ECR-3419].

  • #1430: Расширить документацию по использованию параметров конфигурации [ECR-3463].

  • #1431: Обновить информацию о диспетчере, чтобы показать изменения в списке развёрнутых артефактов.

  • #1432: Уточнить exonum-derive crate поверх darling [ECR-3343].

  • #1434: Заменить атрибут dispatcher в exonum_service на service_interface в ServiceFactory [ECR-3474].

  • #1438: Удалить ссылку на диспетчер из признака Runtime.

  • #1443: Заменить модуль fabric на exonum-cli crate [ECR-3457].

  • #1446: MVP интерфейсов служб [ECR-3474], [ECR-3484].

  • #1451: Добавить опцию имени интерфейса службы в файлы proto.

  • #1452: Удалить реализацию state_hash по умолчанию.

  • #1454: Упростить конфигурацию блокчейна [ECR-3357].

  • #1462: Исправить API Freeze при запуске.

  • #1465: Улучшить ProtobufConvert для вариантов перечислений.

  • #1467: Реализовать интерфейс Configure [ECR-3306].

  • #1472: Исправить некоторые проигнорированные doctests в testkit.

  • #1473: Извлечь службу супервизора из ядра.

  • #1476: Улучшить поддержку дополнительных сред выполнения в TestKit [ECR-3444].

  • #1482: Добавить метод shutdown в признак среды выполнения.

  • #1483: Использовать... Строки для файлов protobuf:

  • #1484: Реализовать логику обновления конфигурации в Supervisor [ECR-3583].

  • #1488: Добавить поддержку внешних сред выполнения в exonum-cli.

  • #1489: Избежать ожидания в конечной точке add_transaction [ECR-3222].

  • #1490: Исправить создание Supervisor.

  • #1491: Доработать Testkit [ECR-3222].

  • #1492: Выполнить запуск и инициализацию сервиса за один шаг [ECR-3222].

  • #1493: Документировать сервисы среды выполнения Rust [ECR-3275].

  • #1494: Улучшения в Testkit.

  • #1495: Реализовать API-конечные точки, которые показывают предложения конфигурации в Supervisor [ECR-3610].

И другие пункты из запроса.

Новые функции

Exonum

  • В NetworkConfiguration добавлены новые параметры конфигурации http_backend_config.server_restart_max_retries и http_backend_config.server_restart_retry_timeout. Они предназначены для настройки параметров перезапуска HTTP-сервера (#1536).

  • Теперь у exonum есть библиотека python для реализации интеграционных тестов (#1516).

  • У BlockchainMut теперь есть метод check_tx, который используется для проверки транзакций перед их добавлением в пул транзакций. Транзакции, для которых check_tx завершается неудачно, считаются недействительными и не могут быть включены в блок (#1579).

Exonum-merkledb

  • ProofListIndex теперь реализует методы truncate() и pop(), позволяющие удалять элементы из списка (#1455).

  • Для нескольких новых типов реализован признак IndexAccess, в частности, Rc<dyn Snapshot>, Arc<dyn Snapshot> и Rc<Fork> (#1455).

  • Метод HashTag::hash_list() был расширен для поддержки значений любого подходящего типа, а не только Hash (#1455).

  • Реализован ProtobufConvert для MapProof (#1512) и ListProof (#1513).

  • Представлен новый вариант ProofMapIndexRawProofMapIndex. Он используется для ключей, которые напрямую сопоставляются с ProofPath, например Hash и PublicKey (#1531).

    • По умолчанию ProofMapIndex используется для ключей, реализующих ObjectHash.

    • Для ключей Hash оба варианта карты работают одинаково, потому что реализация ObjectHash для Hash возвращает сам хеш.

Exonum-cli

  • Старый модуль fabric заменён новым ящиком exonum-cli (#1443).

  • exonum-cli предоставляет публичный реэкспорт ящика structopt (#1461).

Внутренние улучшения

Exonum

  • Изменена конечная точка system/v1/shutdown...

Далее идёт текст, который невозможно перевести из-за наличия специальных символов или непечатаемых символов. Текст запроса: with 0x04 prefix, root node with 0x03 (#1293).

  • Renamed method merkle_root of ProofMapIndex and ProofListIndex to object_hash (#1293).

  • Several mutable indexes now can be create from immutable reference to Fork (#1293)

  • Relaxed trait bounds for the ProofMapIndex keys (#1293)

    Now keys should just implement BinaryKey trait instead of the ProofMapKey, which will be ordered according to their binary representation, as in the MapIndex.

  • Changed ProofListIndex hashing rules for leaf nodes and branch nodes according to the certificate transparency specification. Leaf nodes contain hashes with 0x00 prefix, branch nodes - with 0x01. (#1293)

Перевод: с префиксом 0x04, корневой узел с 0x03 (№1293).

— Метод merkle_root в ProofMapIndex и ProofListIndex переименован в object_hash (№1293).

— Несколько изменяемых индексов теперь можно создать из неизменяемой ссылки на Fork (№1293).

— Ослаблены ограничения признаков для ключей ProofMapIndex (№1293).

Теперь ключи должны просто реализовывать признак BinaryKey, а не ProofMapKey, который будет упорядочен в соответствии с их двоичным представлением, как в MapIndex.

— Изменены правила хеширования ProofListIndex для листовых и узловых узлов в соответствии со спецификацией прозрачности сертификатов. Листовые узлы содержат хэши с префиксом 0x00, узловые — с 0x01 (№1293). Крейт теперь используется вместо exonum_rocksdb (#1286):

  • Добавлена новая конечная точка system/v1/services для отображения информации о доступных сервисах. (#1288).

  • Теперь используется крейт rocksdb вместо exonum_rocksdb. (#1286).

  • Реализована реализация признака From для Fork. (#1403).

exonum-testkit:

  • Реализованы «остановка» и «возобновление» TestKit, позволяющие имитировать перезапуск узла. (#1278).

0.11.0 — 2019-03-15

Критические изменения:

exonum:

  • Секретные ключи узлов теперь хранятся в отдельных файлах безопасным способом. Расширен интерфейс командной строки для генерации конфигураций узлов и запуска узлов, чтобы отразить эти изменения. (#1222, #1096, #1235).

  • Изменён ответ для конечной точки /healthcheck. (#1252).

  • Изменён код ответа для конечной точки /block в случае, если запрошенный блок не существует. (#1262).

  • Удалён подкоманду generate-testnet из интерфейса командной строки. (#1264).

exonum-crypto:

  • Функция create_keys_file переименована в generate_keys_file в модуле utils. (#1222, #1096).

Внутренние улучшения:

  • Все крэйте Exonum обновлены до Rust 2018 edition. Это означает, что для компиляции требуется использовать Rust 1.31 или более новую версию. (#1230).

exonum:

  • По умолчанию добавлен allow-origin для localhost для публичного и приватного API в режиме разработки. (#1234).

  • Реализован ProtobufConvert для Signature. (#1241).

0.10.3 — 2019-01-22

Внутренние улучшения:

exonum:

  • Зависимости были откреплены. (#1237).

0.10.2 — 2019-01-14

Новые функции:

exonum:

  • Поддержка i128/u128 для StorageKey, StorageValue. (#1179).

exonum-crypto:

  • Поддержка i128/u128 для CryptoHash. (#1179).

0.10.1 — 2019-01-04

Внутренние улучшения:

exonum:

  • Обновлены зависимости. (#1111, #1162, #1167, #1168).

  • Добавлен обработчик ctrl+c для корректной остановки узла. (#1163).

exonum-crypto:

  • Обновлено pwbox. (#1164).

0.10.0 — 2018-12-14

Критические изменения:

  • Изменено сообщение формата, что, в свою очередь, привело к изменениям в байтовом представлении транзакций и сообщений precommit. (#916).

  • Transaction::execute теперь принимает TransactionContext в качестве второго параметра. TransactionContext предоставляет открытый ключ автора транзакции, ID текущей службы и хэш транзакции. (#943).

  • Метод Transaction::verify был удалён. (#1085).

  • Каждая транзакция, содержащая открытый ключ автора, была переработана для использования автора, указанного в TransactionContext. (#984 #980 #979 #975 #971).

  • Конечная точка /transactions/ теперь может обрабатывать сообщения транзакций в шестнадцатеричном формате. Службы, которые использовали пользовательские конечные точки, были переработаны для использования explorer/v1/transactions. (#943 #984 #980 #979 #975 #971).

  • Параметр majority_count был перемещён из StoredConfiguration в ConfigurationService. (#828).

  • Удалена устаревшая опция enable_blockchain_explorer из NodeApiConfig. (#891).

  • Сообщения консенсуса и внутренние структуры теперь сериализуются с помощью protobuf. (#1028).

  • Параметр tx_pool_capacity был удалён из MemoryPoolConfig. (#1036).

  • Пользовательская сериализация была удалена. (#1088). Раунд-таймаут был переименован в фаст-раунд-тайм-аут.

Теперь время ожидания для раунда r составляет *фаст-раунд-тайм-аут + (r-1)раунд-увеличения, где раунд-увеличение определяется как определённый процент от фаст-раунда-тайм-аута. Значение этого процента определено в константе ConsensusConfig::TIMEOUT_LINEAR_INCREASE_PERCENT (10%). (#848)

Методы missing_keys, entries, all_entries класса CheckedMapProof и метод MapProof::missing_keys_unchecked теперь возвращают impl Iterator вместо Vec. (#918)

Поле сообщения Connect addr с SocketAddr было удалено, вместо него используется pub_addr со строкой неразрешённого внешнего адреса узла. (#942)

Конечная точка v1/peers теперь возвращает ConnectInfo во входящих соединениях вместо отдельных IP-адресов. (#959)

Метод Fork::remove_by_prefix() теперь определяет префикс как Option<&[u8]> вместо Option<&Vec>. (#1042)

TransactionResult теперь сериализуется с использованием protobuf. Пустое описание результата теперь эквивалентно отсутствию описания результата. (#1075)

Service::tx_from_raw теперь использует failure::Error в качестве типа ошибки. (#1088)

Макрос transactions! был удалён, вместо него следует использовать макрос TransactionSet из exonum-derive. (#1088)

Макрос encoding_struct! был удалён, теперь следует использовать protobuf. (#1088)

exonum-testkit

Структуры в тестах и примерах теперь сериализуются с помощью protobuf. (#1078)

exonum-timestamping

Структуры в тестах и примерах теперь сериализуются с помощью protobuf. (#1081)

exonum-cryptocurrency

Структуры в тестах и примерах теперь сериализуются с помощью protobuf. (#1081)

exonum-configuration

Vote и VoteAgainst теперь сохраняют хэш транзакции вместо полного сообщения о транзакции. (#984)

Структуры теперь сериализованы с использованием protobuf. (#1086)

exonum-time

Структуры теперь сериализованы с использованием protobuf. (№1086)

Новые функции

exonum-crypto

Добавлен модуль utils с функциями create_keys_file для создания и read_keys_from_file для чтения файлов, содержащих открытый ключ и зашифрованный секретный ключ. (#1056)

exonum

Добавлена возможность использования доменных имён вместо IP-адресов в качестве адресов узлов. (#826)

Добавлена конечная точка v1/rebroadcast, которую можно использовать для трансляции всех транзакций из пула на другие узлы. (#859)

Каждый последующий раунд теперь длиннее предыдущего на некоторый постоянный процент от фаст-раунд-тайм-аута. (#848)

Добавлена конечная точка /v1/blocks/subscribe для отслеживания событий фиксации блоков через WebSockets (#792).

Добавлен метод MapProof::all_entries_unchecked. Он используется для более эффективных вычислений в Exonum Java Bindings, но также может использоваться для целей отладки. (#918)

В командной строке добавлена опция listen-address для указания другого внешнего адреса (peer-address) и адреса прослушивания при создании файлов конфигурации. (#942)

Адрес узла разрешается при подключении, а не при запуске узла. (#942)

Теперь узлам требуется только одно соединение для обмена сообщениями между ними. (#945)

exonum-build

Добавлен crate exonum-build для упрощения написания файлов build.rs для сервисов, использующих генерацию кода protobuf. (#1076)

exonum-derive

Добавлен crate exonum-derive с пользовательскими производными для ProtobufConvert и TransactionSet. (#1055)

Исправления ошибок

exonum

Исправлена ошибка переполнения размера пула. (#853)

Исправлена ошибка в NoiseWrapper::decrypt_msg, вызванная неправильным вычислением размеров зашифрованных и расшифрованных сообщений. (#873)

Исправлено тестирование производительности проверки подписи транзакций. (#673)

Узел больше не паникует, когда в пуле транзакций много транзакций, а консенсус находится в раунде 0. (#673)

Узел теперь работает правильно после повторного включения консенсуса через API. (#902)

Исправлена ошибка с некорректной обработкой EOF при декодировании сетевых сообщений. (#917)

Исправлена ошибка, приводящая к удалению избыточных данных при очистке индекса, принадлежащего семейству индексов. Были внесены исправления. (#1042)

Улучшения API

Exonum

  • В #531 представлен конструктор индекса new_in_family, который теперь принимает &str и &[u8] в качестве значения index_id.

Внутренние улучшения

Exonum

  • NodeHandler::run_handler теперь возвращает Result<(), failure::Error> вместо io::Result. (#879)

  • Добавлен бенчмарк для проверки подписи транзакций. (#808)

  • Была добавлена новая функция storage::proof_list_index::root_hash(), которая позволяет эффективно вычислять корневой хеш Меркла из списка хешей без промежуточного ProofListIndex. Также была оптимизирована проверка корневых хешей блоков. (#802)

  • Теперь NoiseHandshake::finalize возвращает ошибку, если открытый ключ удалённого узла не находится в ConnectList. (#811)

  • Узлы быстрее переходят на min_propose_timeout для тайм-аута предложения блока, если они получают более propose_timeout_threshold транзакций во время max_propose_timeout. (#844)

  • Было удалено пользовательское форматирование журнала (вместе с зависимостями colored и term) в пользу env_logger. (#857)

  • Были обновлены несколько зависимостей. (#861, #865, #871)

  • Транзакции теперь проверяются в пуле потоков. Размер пула по умолчанию установлен на оптимальное значение (количество ядер ЦП) или может быть настроен вручную. (#673)

  • Команда finalize теперь не включает сам узел как доверенный узел в сгенерированной конфигурации. (#892)

  • Появилась возможность создать ServiceApiBuilder с блокчейном. (#929)

  • ConnectInfo и ConnectList теперь хранят неразрешённые адреса в виде строк. (#942)

  • Модуль network теперь использует PublicKeys для идентификации узлов. (#942)

  • Конечная точка system/v1/peers теперь правильно возвращает входящие и исходящие соединения узла. (#942)

0.9.5 — 2018-12-18

Внутренние улучшения

Exonum

  • Обновлена версия зависимости snow.

0.9.4 — 2018-10-24

Новые функции

Exonum

  • Реализован сегментный тип поля для Option, позволяющий хранить необязательные значения внутри транзакций. (#1004)

0.9.3 — 2018-10-04

Критические изменения

Exonum

  • Параметр конфигурации external_address теперь является обязательным значением. (#826)

Новые функции

Exonum

  • Возможность использовать доменные имена вместо IP-адресов в качестве адресов узлов. В файле конфигурации доменные имена можно использовать в конфигурации ConnectList, и адреса будут разрешены один раз при запуске. (#826)

0.9.2 — 2018-09-11

Внутренние улучшения

Exonum

  • Добавлена возможность создания ServiceApiBuilder с блокчейном. (#929)

0.9.1 — 2018-08-02

Исправления ошибок

Exonum

  • Версия failure обновлена до 0.1.2, чтобы исправить проблему сборки с failure_derive. (#845)

  • Исправлена ошибка с «неизвестным предложением» выполнения. (#841)

0.9.0 — 2018-07-19

Критические изменения

Exonum

  • Признак Command в модуле helpers::fabric стал общедоступным. (#778) Путь миграции: Если вы переопределяете метод ServiceFactory::command и выполняете сопоставление по имени команды, просто добавьте импорт use helpers::fabric::Command.

  • Поле schema_version в Block было удалено. (#774)

  • Хранилище в exonum теперь версионировано. Старые базы данных не будут работать с этим обновлением. (#707)

  • Веб-API на основе Iron был заменён новой реализацией на основе actix-web. (#727) Путь миграции: Для бэкенда: — Удалите старые зависимости от iron и его компаньонов bodyparser, router и других. — Упростите обработчики API следующим образом:

    fn my_handler(state: &ServiceApiState, query: MyQueryType)
    -> Result<MyResponse, ApiError>
    {
      // ...
    }

    где тип MyQueryType реализует признак Deserialize, а MyResponse — признак Serialize. — Замените старые методы public_api_handler и private_api_handler признака Service одним методом wire_api, который принимает ServiceApiBuilder. Вы можете использовать этот построитель как фабрику для вашего сервисного API. — Методы get, get_err и post в TestKitApi были заменены более удобными. РайзБравнер.

Не забудьте обновить тесты API на основе тест-кита.

Для фронтенда:

  • Новая реализация API поддерживает только параметры запроса в запросах GET. Таким образом, запросы типа GET api/my_method/:first/:second следует заменить на GET api/my_method?first=value1&second=value2.
  • Парсер JSON для запросов POST теперь более строгий. Теперь вы должны отправлять null в теле запроса даже для обработчиков без параметров запроса.

Смотрите наши примеры для получения дополнительной информации.

— Модуль storage::base_index стал приватным вместе с типами BaseIndex и BaseIndexIter (#723).

— Черта ServiceFactory была расширена функцией service_name (#730).

— Метод name был удалён из структур Run, GenerateCommonConfig, GenerateNodeConfig, Finalize, GenerateTestnet и Maintenance (модуль helpers/fabric) (#731).

— Whitelist был заменён на ConnectList. Теперь соединение между узлами может быть установлено только в том случае, если узлы существуют в списках соединений друг друга (#739).

Путь миграции:

  • Замените раздел [whitelist] в конфиге на раздел [connect_list.peers] и укажите здесь все публичные ключи консенсуса валидаторов с соответствующими IP-адресами. Например, 16ef83ca...da72 = "127.0.0.1:6333".

— Конечные точки healthcheck и consensus (v1/healthcheck и v1/consensus_status) были объединены в v1/healthcheck (#736, #766).

— Файл конфигурации узла теперь обновляется при обновлении ConnectList. Это достигается через новую сущность ConfigManager (#777).

Путь миграции (требуется только если вы создаёте узел вручную):

Если вам нужно обновить ConnectList в файловой системе, передайте Some(path_to_node_config) в качестве последнего аргумента метода Node::new. В противном случае передайте None.

— Типы exonum::crypto теперь имеют усечённые представления Display/Debug (#797).

Путь миграции:

Используйте encoding::serialize::ToHex вместо Display для создания полного шестнадцатеричного представления. Вы должны вручную проверить, нужно ли переключаться или можно продолжать использовать усечённое представление.

Используйте encoding::serialize::FromHex вместо FromStr для обратного преобразования. Реализация FromStr была удалена из криптотипов, чтобы избежать ошибок.

Новые функции

exonum

— Существующая криптографическая подсистема на базе sodiumoxide за опциональной функцией sodiumoxide-crypto. Она также позволяет использовать собственную криптографическую библиотеку с exonum (#756).

— Добавлен новый тип команд CLI: команда info, которую можно использовать для получения различной информации от узла, который ещё не запущен (#731). В настоящее время поддерживаются следующие подкоманды: * core-version — печатает версию Exonum в виде простой строки. * list-services — печатает список служб, с которыми построен узел, в формате JSON.

— Введён модуль exonum::crypto::x25519 для преобразования ключей из Ed25519 в формат X25519 (#722).

— У модуля storage::Entry появились методы take и swap (#781).

— При обработке входящего сообщения Connect добавлена удалённая проверка подлинности открытого ключа (#786).

Исправления ошибок

exonum

— Исправлена ошибка с неправильным статусом пиров для выключенного узла (#730).

— handle_consensus больше не записывает предупреждение для сообщения с предыдущей высоты (#729).

— К индексу Entry добавлен конструктор new_in_family (#790).

— В окончательную конфигурацию аудитора добавлено отсутствующее поле external_address (#805).

Внутренние улучшения

— BlockResponse отправляет транзакции по Hash вместо RawMessage. Если у узла нет некоторых транзакций, создаются запросы для соответствующих транзакций. Из-за этих изменений размер блока значительно уменьшился (#664).

0.8.1 — 2018-06-15

Новые функции

exonum

— Структура RunDev стала общедоступной, поэтому её можно расширить.

— Команда RunDev теперь генерирует значения по умолчанию для адресов API в конфиге.

Внутренние улучшения

exonum

— Обновлены версии зависимостей:

  • exonum_sodiumoxide до 0.0.19.
  • exonum_rocksdb до Был переименован в merkle_root. (#547)
  • Доказательства существования / отсутствия для ProofMapIndex были переработаны. Теперь они имеют линейную структуру с двумя компонентами: пары ключ-значение и дополнительная доказательная информация, позволяющая восстановить корень Меркла всего индекса. Интерфейс MapProof был переработан соответствующим образом. (#380)

    Путь миграции:

    • Ознакомьтесь с документами для обновлённого рабочего процесса создания и проверки MapProof.
    • См. README в модуле storage::proof_map_index для теоретических подробностей о новой структуре доказательств.
  • Конструктор with_prefix всех типов индексов был переименован в new_in_family. Теперь он использует index_id вместо префиксов. Более того, метод blockchain::gen_prefix был удалён. Вместо этого любой тип, реализующий признак StorageKey, может служить index_id. (#531)

  • Несколько методов Schema были переименованы (#565):

    • tx_location_by_tx_hash в transactions_locations.
    • block_txs в block_transactions.
  • SystemTime, ранее использовавшийся в качестве ключа или значения хранилища, показал различное поведение на разных платформах и, следовательно, был заменён на chrono::DateTime, который ведёт себя одинаково в любой среде. (#557)

    Путь миграции:

    • Замените все поля SystemTime на поля chrono::DateTime.
    • Используйте методы DateTime::from и into() для преобразования существующих экземпляров SystemTime в подходящий тип при создании транзакций или работе с базой данных.
  • Метод Blockchain tx_from_raw() теперь возвращает Result<Box, MessageError> вместо Option<Box>. (#567)

  • Модуль events становится приватным. (#568)

  • Признак CryptoHash больше не реализуется для Hash. (#578)

  • Атрибут network_id был удалён из NodeInfo и RawMessage. HEADER_LENGTH остаётся прежним, первый байт RawMessage теперь зарезервирован и всегда установлен в 0. (#579)

  • Модуль exonum::explorer был переработан для добавления новой функциональности. (#535, #600). В частности:

    • Исследователь теперь позволяет перебирать блоки в блокчейне в заданном диапазоне высот, заменяя старый метод blocks_range.
    • Методы block_info и tx_info исследователя переименованы в блок и транзакция соответственно.
    • TransactionInfo перемещён из модуля api::public в модуль explorer.
    • BlocksRange перемещён из модуля explorer в модуль api::public.
    • TxInfo переименован в CommittedTransaction.
    • Поля BlockInfo теперь являются приватными, но доступными через методы получения.

    Путь миграции:

    • Переименуйте импортированные типы и методы, как указано выше.
    • Используйте явный параметр типа в TransactionInfo и CommittedTransaction (например, TransactionInfo<serde_json::Value> или TransactionInfo), если вам нужно десериализовать данные, связанные с транзакциями, возвращаемые из HTTP API исследователя.
    • Обратитесь к документации модуля explorer для получения дополнительной информации о возможных изменениях в API.
  • Добавлен параметр validators-count в командной строке. Теперь при генерации шаблона конфигурации с помощью команды generate-template необходимо указать количество валидаторов. (#586)

  • Параметр majority_count добавлен в StoredConfiguration. Подробнее см. изменения в exonum-configuration. (#546)

exonum-testkit

  • Механизм отката в Testkit переработан для работы с контрольными точками (#582):

    • старый откат по блокам в Testkit был удалён;
    • введён метод checkpoint для установки контрольных точек;
    • новый откат откатывается до последней установленной контрольной точки.

    Путь миграции:

    • Замените каждый старый откат (блоки) парой контрольная точка () и откат ().
  • В API Testkit теперь есть два метода для работы с пулом транзакций (#549):

    • is_tx_in_pool — для проверки существования транзакции в пуле;
    • add_tx — для добавления новой транзакции в пул.

    Путь миграции:

    • Вместо вызова mempool() следует использовать методы is_tx_in_pool или add_tx.
  • Метод TestKitApi::get_err теперь возвращает ApiError. Скорее, чем десериализованный объект, как это происходит для get. Для проверки таких результатов в тестах вы можете использовать assert_matches.

Exonum-configuration

  • Введён параметр конфигурации majority_count: Option. Позволяет увеличить пороговое количество голосов, необходимое для принятия нового предложения по конфигурации. По умолчанию количество голосов рассчитывается как 2/3 + 1 от общего количества валидаторов. (#546).

Exonum-time

  • SystemTime был заменён на chrono::DateTime, так как он обеспечивает более предсказуемое поведение на всех системах. (#557).

Новые функции

Exonum

  • Метод ExecutionError::with_description теперь принимает Into вместо String, что позволяет передавать &str напрямую. (#592).

  • Новое поле database добавлено в NodeConfig. Эта дополнительная настройка регулирует параметры, специфичные для базы данных, такие как количество одновременно открытых файлов. (#538).

  • Добавлен метод v1/user_agent с информацией об Exonum, Rust и версиях ОС. (#548).

  • ProofMapIndex теперь позволяет получить доказательство присутствия / отсутствия для произвольного числа элементов одновременно с помощью метода get_multiproof. Соответственно, MapProof позволяет проверять доказательства для произвольного количества элементов. (#380).

  • Представлена черта storage::UniqueHash, представляющая собой уникальную, но не обязательно криптографическую хеш-функцию. (#579).

  • Реализованы черты CryptoHash, Field, StorageKey и StorageValue для uuid::Uuid. (#588).

  • Для типов из модуля crypto реализована черта Display. (#590).

  • Макрос transactions! теперь допускает пустое тело. (#593).

Exonum-testkit

  • Методы create_block* класса TestKit теперь возвращают информацию о созданном блоке. (#535).

  • Метод TestKit::explorer() позволяет получить доступ к обозревателю блокчейна. (#535).

Exonum-cryptocurrency-advanced

  • Добавлен более сложный пример, демонстрирующий лучшие практики написания сервисов. (#595).

Внутренние улучшения

Exonum

  • RawTransaction теперь имеет собственную реализацию признака fmt::Debug вместо #[derive(Debug)]. Шаблон сообщения отладки RawTransaction — Transaction { version: #, service_id: #, message_type: #, length: #, hash: Hash(###) }. (#603).

  • Неподтверждённые транзакции теперь постоянно хранятся в хранилище, а не в пуле памяти. (#549).

  • Песочные тесты были перенесены внутрь ядра exonum. (#568).

  • Запрошенные транзакции в TransactionsRequest теперь отправляются пакетами, а не по одной. Количество пакетов зависит от ограничений размера сообщения. (#583).

Exonum-testkit

  • Ведение журнала запросов для TestKitApi теперь охватывает все запросы. Формат журнала немного изменён, чтобы обеспечить общую форму запроса / ответа. (#601).

0.6 — 2018-03-06

Критические изменения

Exonum

  • Введена черта exonum::crypto::CryptoHash, и методы StorageValue::hash и Message::hash удалены. (#442). Путь миграции: — Для реализаций StorageValue переместите метод hash в реализацию CryptoHash. — Для реализаций Message просто удалите метод hash, существует общая реализация impl of CryptoHash для Message. — Добавьте use exonum::crypto::CryptoHash для использования метода hash.

  • Черта StorageKey повторно реализована для целочисленных типов со знаком (i8, i16, i32 и i64), чтобы добиться естественного упорядочения создаваемых ключей. (#443). Это изменение нарушит индексы, использующие целые числа со знаком в качестве ключей. Чтобы эмулировать старую реализацию, вы можете создать оболочку вокруг типа (например, struct). Хранилище данных и криптографический хэш реализованы для типа bool. (#385)

  • Высота реализует std::str::FromStr. (#474)

  • Конечная точка v1/transactions дополнена статусом выполнения транзакции. (#488)

  • Интерфейс Key-indexes теперь позволяет использовать заимствованные типы для операций поиска. (#392)

  • Добавлена конечная точка v1/shutdown для корректного завершения работы узла. (#526)

  • TransactionInfo из модуля public api стал публичным. (#537)

exonum-testkit

  • Изменена сигнатура метода TestKitApi::send, который ранее не принимал Box. (#505)

  • В TestKitBuilder появилась возможность инициализировать регистратор. (#524)

exonum-configuration

  • Информация о конфигурациях в конечных точках /v1/configs/actual, /v1/configs/following и /v1/configs/committed дополнена хэшем соответствующего предложения и голосами за предложение. (#481)

  • Реализована обработка ошибок на основе кодов ошибок. (#496)

Исправления ошибок

Exonum

  • Для F32 и F64 реализован признак ExonumJsonDeserialize. (#461)

  • Проверяются время раунда и время предложения. (#523)

  • Исправлена ошибка с дополнительным созданием конфигурации генезиса. (#527)

  • Во время завершения работы узла исправлен сбой «невозможно отменить процедуру». (#530)

Внутренние улучшения

Exonum

  • Сообщения консенсуса сохраняются постоянно (в базе данных), поэтому перезапуск не влияет на поведение узла. (#322)

  • Выполнены проверки типов во время выполнения для каждого индекса. (#525)

0.5.1 — 2018-02-01

Исправление ошибок

  • Исправлено ведение журнала. (#451)

Версия 0.5 — 2018-01-30

Критические изменения

  • Порядок байтов и битов в ключах DBKey ProofMapIndex стал согласованным. (#419)

Это изменение влияет на то, как строятся деревья Меркла Патриции для ProofMapIndex: биты в каждом байте ключа DBKey теперь перечисляются от младшего значащего бита (LSB) к старшему значащему биту (MSB), по сравнению с порядком MSB-to-LSB, использовавшимся ранее. Обратите внимание: это изменение нарушит работу старых хранилищ, использующих доказательства карт.

  • Упрощена черта Database: больше не требуется реализовывать метод клонирования с разделением состояния. Вместо этого метод merge теперь принимает общую ссылку на self. (#422)

  • message! и encoding_struct! больше не требуют ручной спецификации SIZE и смещения. (#413)

  • Метод from_raw(raw: RawMessage) перемещён в черту Message. Чтобы выполнить миграцию, добавьте use exonum::messages::Message. (#427)

  • Итераторы над данными Patch и Changes заменены на пользовательские типы вместо стандартных итераторов коллекций. (#393)

Исправлена опечатка в SparceListIndexKeys и SparceListIndexValues. (#398)

Убрана реализация state_hash по умолчанию в черте Service. (#399)

Из черты Transaction удалён метод info. (#402)

Заменено значение config param timeout_events_capacity на internal_events_capacity. (#388)

Черта Transaction теперь наследуется от ExonumJson. (#402)

Переименован DBKey в ProofPath и часть его функциональности перенесена в черту BitsRange. (#420)

Новые функции

  • К структуре Fork добавлен метод patch. (#393)
  • Добавлен общедоступный эндпоинт healthcheck. (#405)
  • Обеспечена поддержка сериализации типов с плавающей запятой через специальную оболочку (F32 и F64). Эта функция скрыта за воротами float_serialize. Обратите внимание: специальные значения (бесконечность и NaN) не поддерживаются. (#384)
  • Появилась возможность установить максимальный размер сообщения (поле pub max_message_len в ConsensusConfig). (#426)
  • Поддерживается CORS. (#406)
  • Добавлена команда run-dev, которая выполняет упрощённый запуск узла для целей тестирования. (#423)

Исправление ошибок

  • Исправлен консенсус при пороге в 1/3 спящих валидаторов. (#388)
  • Исправлено множество несоответствий и ошибок в документации. (#439)
  • Исправлена ошибка проверки заголовка сообщения. (#430)

Внутреннее улучшение

  • Список одноранговых подключений теперь восстанавливается до последнего состояния после перезапуска процесса. (#378)
  • Обновлена зависимость журнала до версии 0.4, что может вызвать... issues с предыдущими версиями. (#433)
  • Улучшенное сообщение об ошибках для конфигураций в формате .toml. (#429)

0.4 - 2017-12-08

Добавлено

  • Разрешено создание аудитора узла из командной строки. (#364)
  • Добавлена новая функция merge_sync. В этой функции запись будет сброшена из буфера кэша операционной системы, прежде чем запись будет считаться завершённой. (#368)
  • Добавлено преобразование в упакованные значения для значений, которые реализуют черты Service или Transaction. (#366)
  • Добавлен конструктор для ServiceContext, который может быть полезен для альтернативных реализаций узлов. (#366)
  • Реализован AsRef<RawMessage> для любых сообщений Exonum, созданных с помощью макроса message!. (#372)
  • Реализованы дополнительные проверки для преобразования из необработанного сообщения. (#372)

Изменено

  • Изменена сигнатура функции open в модуле rocksdb. RocksDBOptions должен передаваться по ссылке. (#369)
  • ValidatorState в ServiceContext заменён на ValidatorId. (#366)
  • add_transaction в ServiceContext заменена на transaction_sender, которая реализует черту TransactionSend. (#366)
  • Конструктор Node теперь требует переменные db и services вместо экземпляра blockchain. (#366)
  • Конструктор Blockchain теперь требует пару ключей сервисов и экземпляр ApiSender. (#366)
  • Методы mount_*_api в экземпляре Blockchain теперь не требуют ApiContext. (#366)
  • Метод last_height переименован в height в Schema. (#379)
  • last_block теперь возвращает Block вместо Option<Block>. (#379)
  • Заменён параметр командной строки rocksdb на более общий db-path. (#376)
  • Устаревший признак HexValue заменён признаками FromHex и ToHex. (#372)
  • Признаки Patch и Changes заменены на непрозрачные структуры. (#371)
  • Текст справки отображается, если требуемый аргумент не указан. (#390)

Удалено

  • Удалён метод round из ServiceContext. (#366)
  • Удалён избыточный признак FromRaw. (#372)
  • Удален избыточный метод current_height в Schema. (#379)

Исправлено

  • Исправлена ошибка использования макроса crate_authors!, этот макрос не может возвращать статическую строку в новой версии clap. (#370)
  • Исправлена ошибка в описании геттера высоты в ServiceContext. (#366)
  • Исправлено #15 консенсус относительно порога в 1/3 спящих валидаторов. (#388)

0.3 - 2017-11-02

Добавлено

  • Новая реализация событий на основе tokio с разделёнными очередями для сетевых событий и тайм-аутов и разными потоками для сетевого кода и кода узла (#300)
  • Добавлен новый индекс SparseListIndex. Это список элементов, хранящихся в последовательном порядке. Аналогично ListIndex, но он может содержать индексы без элементов (#312)
  • Реализация признаков FromStr и ToString для публичных типов натрия (#318)
  • Добавление нового макроса metric! для сбора статистической информации (#329)
  • Сделать тип DBKey публичным, поскольку он используется в MapProof (#306)

Изменено

  • RocksDB является хранилищем по умолчанию (#178)
  • Поле events_pool_capacity в MemoryPoolConfig заменено новой конфигурацией EventsPoolCapacity (#300)
  • Изменён метод сборки new и добавлен новый метод сборки with_prefix для индексов (#178)
  • Изменена подпись функции gen_prefix в модуле schema (#178)
  • NodeBuilder работает с ServiceFactory как объект признака вместо (#357)
  • Отладочные форматы для криптотипов улучшены (#353)
  • Добавлено описание ошибки десериализации для типов сообщений (#337)
  • Уточнено использование Transaction.info() (#345)

Убрано

  • Поддержка LevelDB удалена (#178)

Исправленное

  • Исправлена проблема, приводящая к игнорированию тайм-аутов при заполнении пула событий (#300)
  • Исправлены сетевые сбои из-за неправильной обработки входящего буфера (#322) PROOF_MAP_KEY_SIZE константа (#270)

Изменено:

  • Поля варианта MapProof переименованы: left_hash и right_hash в left_node и right_node (#286).
  • RequestBlock переименован в BlockRequest, а Block — в BlockResponse (#287).
  • Все сообщения запросов переименованы из RequestFoo в FooRequest (#287).
  • Улучшено форматирование журнала (#291 #294).
  • Сделана более понятной паническая ошибка при разборе аргументов командной строки (#257).

Исправлено:

  • Исправлена ошибка сетевого обнаружения из-за некорректной обработки входящего буфера (#299).
  • Исправлено поведение моментального снимка для MemoryDB (#292).
  • Запрещено создание тестовой сети с 0 узлами (#258).

0.1.1 — 2017-09-13

Исправлено:

  • Устранён сбой сегментации при уничтожении LevelDBSnapshot после LevelDB (#285).
  • Исключена паническая ситуация при обработке сообщения BlockResponse, если пул транзакций заполнен (#264).
  • Исключена паническая ситуация во время десериализации неправильно сформированных сообщений (#278 #297).

0.1 — 2017-07-17

Первый выпуск Exonum.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-exonum.git
git@api.gitlife.ru:oschina-mirror/mirrors-exonum.git
oschina-mirror
mirrors-exonum
mirrors-exonum
master