<commit_before># Changelog

All notable changes to this project will be documented in this file.
The project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## Unreleased

### Breaking changes

#### exonum

- `before_commit` hook was renamed to the `after_transactions`. (#1577)

- `before_transactions` and `after_transactions` hooks in Rust services
  now return a `Result`. The semantics is the same as for transactions;
  an error or panic in the hook will lead to the rollback of the blockchain
  state. (#1576)

- Errors occurring while executing transactions and `before_transactions` /
  `after_transactions` hooks are now aggregated within each block, rather than
  globally. Errors can be retrieved using `BlockWithTransactions`. (#1576)

- The Rust interface and Protobuf presentation of `ExecutionError` have been reworked.
  Error fields were made private and information about a failing call
  was added. (#1585)

- `IntoExecutionError` macro was reworked into a separate trait, `ExecutionFail`,
  and a corresponding derive macro. (#1585)

- State hash aggregation is now performed automatically by MerkleDB.
  The relevant methods in `Runtime` and `Service` in Rust runtime
  have been removed. (#1553)

- `commit_service` has been renamed to the `update_service_status` and now takes
  `InstanceStatus` as an additional argument.
  `start_adding_service` has been renamed to `initiate_adding_service` to
  better distinguish between starting and stopping a service. (#1605)

- `after_transactions` hook is now invoked on the genesis block for the builtin
  services. Note that calling `blockchain::Schema::height` within `after_transactions`
  hook will cause a panic for a builtin service. (#1619)

- `proposer_id` field in `Block` has been moved to additional block headers. (#1602)

- Interaction with services from the Rust runtime has been changed. Instead of
  using the `Transaction` trait, it is now possible to use service interfaces
  directly as Rust traits. These interface traits can be applied to a keypair
  (to generate signed transactions), to `CallContext` (to call another service)
  and some other types. See Rust runtime docs for more details. (#1606)

- The following public APIs were removed/made private: (#1629)
  - `blockchain::{error reexports}` (available from `runtime::`);
  - `blockchain::FatalError` public re-export;
  - `blockchain::InstanceCollection` structure;
  - `Blockchain::pool_size`, `Blockchain::get_saved_peers` and
    `Blockchain::remove_peer_with_pubkey` methods;
  - `helpers::path_relative_from` function;
  - `helpers::ZeroizeOnDrop` trait;
  - `helpers::Milliseconds` type;
  - `helpers::config` and `helpers::user_agent` modules;
  - `helpers::generate_testnet_config`, `helpers::create_rust_runtime_and_genesis_config`
    and `helpers::clear_consensus_messages_cache` functions;
  - `impl_serde_hex_for_binary_value` macro (moved to `merkledb`);
  - `messages::BinaryValue` public re-export;
  - `node::state` module (constants from `node::state` are now accessible in
    `node::constants` module);
  - `proto` module;
  - `runtime::error` module (`catch_panic` was added to the list of public
    re-exports from `runtime::error`).

- The artifact identifier now has first-class semantic version. Previously, it was
  specific to the Rust runtime. (#1590)

- The format of the `proto-sources` endpoint in the Rust runtime has been changed.
  To get the core Protobuf sources, use the endpoint with the `type=core` query.
  To get the sources of an artifact, use query `type=artifact&name=$name&version=$version`,
  where `$name` and `$version` are replaced with appropriate values. (#1590)

#### exonum-merkledb

- `SparseListIndex::indices` method was renamed to `SparseListIndex::indexes`. (#1629)

- `AccessExt::touch_index` method has been replaced with `index_type`. (#1630)

#### exonum-supervisor

- `Supervisor` structure isn't generic anymore. (#1587)<commit_msg>Update changelog with breaking change (#1647)<commit_after># Changelog

All notable changes to this project will be documented in this file.
The project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## Unreleased

### Breaking changes

#### exonum

- `before_commit` hook was renamed to the `after_transactions`. (#1577)

- `before_transactions` and `after_transactions` hooks in Rust services
  now return a `Result`. The semantics is the same as for transactions;
  an error or panic in the hook will lead to the rollback of the blockchain
  state. (#1576)

- Errors occurring while executing transactions and `before_transactions` /
  `after_transactions` hooks are now aggregated within each block, rather than
  globally. Errors can be retrieved using `BlockWithTransactions`. (#1576)

- The Rust interface and Protobuf presentation of `ExecutionError` have been reworked.
  Error fields were made private and information about a failing call
  was added. (#1585)

- `IntoExecutionError` macro was reworked into a separate trait, `ExecutionFail`,
  and a corresponding derive macro. (#1585)

- State hash aggregation is now performed automatically by MerkleDB.
  The relevant methods in `Runtime` and `Service` in Rust runtime
  have been removed. (#1553)

- `commit_service` has been renamed to the `update_service_status` and now takes
  `InstanceStatus` as an additional argument.
  `start_adding_service` has been renamed to `initiate_adding_service` to
  better distinguish between starting and stopping a service. (#1605)

- `after_transactions` hook is now invoked on the genesis block for the builtin
  services. Note that calling `blockchain::Schema::height` within `after_transactions`
  hook will cause a panic for a builtin service. (#1619)

- `proposer_id` field in `Block` has been moved to additional block headers. (#1602)

- Interaction with services from the Rust runtime has been changed. Instead of
  using the `Transaction` trait, it is now possible to use service interfaces
  directly as Rust traits. These interface traits can be applied to a keypair
  (to generate signed transactions), to `CallContext` (to call another service)
  and some other types. See Rust runtime docs for more details. (#1606)

- The following public APIs were removed/made private: (#1629)
  - `blockchain::{error reexports}` (available from `runtime::`);
  - `blockchain::FatalError` public re-export;
  - `blockchain::InstanceCollection` structure;
  - `Blockchain::pool_size`, `Blockchain::get_saved_peers` and
    `Blockchain::remove_peer_with_pubkey` methods;
  - `helpers::path_relative_from` function;
  - `helpers::ZeroizeOnDrop` trait;
  - `helpers::Milliseconds` type;
  - `helpers::config` and `helpers::user_agent` modules;
  - `helpers::generate_testnet_config`, `helpers::create_rust_runtime_and_genesis_config`
    and `helpers::clear_consensus_messages_cache` functions;
  - `impl_serde_hex_for_binary_value` macro (moved to `merkledb`);
  - `messages::BinaryValue` public re-export;
  - `node::state` module (constants from `node::state` are now accessible in
    `node::constants` module);
  - `proto` module;
  - `runtime::error` module (`catch_panic` was added to the list of public
    re-exports from `runtime::error`).

- The artifact identifier now has first-class semantic version. Previously, it was
  specific to the Rust runtime. (#1590)

- The `name` field of the artifact identifier cannot contain `:` symbol. (#1590)

- The format of the `proto-sources` endpoint in the Rust runtime has been changed.
  To get the core Protobuf sources, use the endpoint with the `type=core` query.
  To get the sources of an artifact, use query `type=artifact&name=$name&version=$version`,
  where `$name` and `$version` are replaced with appropriate values. (#1590)

#### exonum-merkledb

- `SparseListIndex::indices` method was renamed to `SparseListIndex::indexes`. (#1629)

- `AccessExt::touch_index` method has been replaced with `index_type`. (#1630)

#### exonum-supervisor

- `Supervisor` structure isn't generic anymore. (#1587)
{'fraction_non_alphanumeric': 0.09451068057625435, 'fraction_numerical': 0.01763537009438649, 'mean_word_length': 4.921323529411764, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4641009', 'n_tokens_mistral': 2412, 'n_tokens_neox': 2262, 'n_words': 906}