Skip to content

Releases: Concordium/concordium-node

6.3.0

20 Feb 13:11
Compare
Choose a tag to compare

6.3.0 is a maintenance release of the node with some robustness and performance improvements.

Changes

  • Fix a bug where GetBlockPendingUpdates fails to report pending updates to the finalization
    committee parameters.
  • Run GRPC queries in dedicated threads. This improves node resource management
    and increases responsiveness of the GRPC server in cases of high number of
    concurrent queries. To support this a new option --grpc2-max-threads
    (environment variable CONCORDIUM_NODE_GRPC2_MAX_THREADS) is
    added which specifies the number of threads that the node should use for
    processing gRPC requests. If not set this defaults to the number of (logical)
    CPUs.
  • The option --grpc2-max-concurrent-streams now defaults to 200 from the
    previous unbounded value. This makes the node defaults safer.

6.2.3

05 Dec 14:45
4052ba5
Compare
Choose a tag to compare

Node version 6.2.3 removes V1 API, supports new "validator" terminology in place of "baker", and improves account state management to reduce memory and disk usage.

The node's public API is extended with a new DryRun endpoint that can simulate effects of sequences of transactions.

Changes

  • The transaction table is only used for tracking next available account nonce
    for accounts that have non-finalized transactions. This reduces memory usage
    and startup time.

  • The account map is now kept solely on disk in a separate lmdb database and it is no longer part of the internal block state database.
    This change results in less memory usage per account and a decrease in the growth of the database.

  • Support validatorId in addition to bakerId in the credentials to start a validator.

  • Add options CONCORDIUM_NODE_VALIDATOR_CREDENTIALS_FILE and
    CONCORDIUM_NODE_VALIDATOR_DECRYPT_CREDENTIALS that alias
    CONCORDIUM_NODE_BAKER_CREDENTIALS_FILE
    CONCORDIUM_NODE_BAKER_DECRYPT_CREDENTIALS, respectively
    The latter two options are still available, but hidden in the help text.

  • Remove V1 GRPC API from the node. This removes configuration options
    CONCORDIUM_NODE_RPC_SERVER_PORT, CONCORDIUM_NODE_RPC_SERVER_ADDRESS,
    CONCORDIUM_NODE_RPC_SERVER_TOKEN, CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS
    and their command line equivalents.

  • Add an additional health-check service to the V2 GRPC API.
    This service conforms to the standard GRPC health service API.

  • New DryRun endpoint that allows simulating the execution of transactions.

6.1.7

08 Nov 20:34
f0f3eca
Compare
Choose a tag to compare

Node 6.1.7 release adds improved node API, especially in relation to staking, and makes the node substantially more robust in certain scenarios.

In particular the node now remembers its peers across restarts, so it is less reliant on a bootstrapper.

The gRPC V2 API has also received a number of configuration options for limiting resources it is allowed to use, making the node more robust.

Detailed changes

  • Add load-shedding to the V2 GRPC API. In particular, if at the time of the
    request the node is already handling more than
    CONCORDIUM_NODE_GRPC2_MAX_CONCURRENT_REQUESTS requests then the incoming
    request will be immediately rejected.
  • Fix a regression in the start up time. When upgrading from an earlier version, the first start-up
    time may be longer than usual, as the genesis state hashes are computed. Subsequent restarts
    will not suffer this penalty.
  • Enable out of band catchup by default in all distributions.
  • Expose the health check service via grpc-web when grpc-web is enabled.
  • Support for out-of-band catch-up for protocol versions beyond P6.
  • Extend Prometheus exporter with metric grpc_connected_clients, see
    docs/prometheus-exporter.md for more details.
  • Add configuration options for imposing resource limits to the V2 gRPC server.
    The following environment variables are added
    • CONCORDIUM_NODE_GRPC2_KEEPALIVE_INTERVAL
    • CONCORDIUM_NODE_GRPC2_KEEPALIVE_TIMEOUT
    • CONCORDIUM_NODE_GRPC2_TCP_KEEPALIVE
    • CONCORDIUM_NODE_GRPC2_INVOKE_MAX_ENERGY
    • CONCORDIUM_NODE_GRPC2_MAX_CONCURRENT_REQUESTS
    • CONCORDIUM_NODE_GRPC2_MAX_CONCURRENT_REQUESTS_PER_CONNECTION
    • CONCORDIUM_NODE_GRPC2_MAX_CONCURRENT_STREAMS
    • CONCORDIUM_NODE_GRPC2_MAX_CONNECTIONS
    • CONCORDIUM_NODE_GRPC2_REQUEST_TIMEOUT
      See
      docs/grpc2.md
      for an explanation of the options.
  • Fix incorrect peer_bucket_size metric calculation exposed by the
    bootstrapper. What was counted was not the number of peers in the bucket, but
    rather, roughly, how many times peers that are in the bucket have
    reconnected.
  • Fix a bug where the block state hash was not returned properly for the genesis block.
  • Do not reset banned peers on startup by default.
  • The node remembers peers across restarts. When starting up it will try to connect to stored peers in addition to any supplied bootstrap and given nodes.
    Use the new flag --clear-persisted-peers (environment variable CONCORDIUM_NODE_CLEAR_PERSISTED_PEERS) to clear stored peers on startup.
  • Renamed the flag --no-clear-bans to clear-bans. When set it will clear the banned peers on startup.
  • Fix a bug where credential registration IDs for genesis accounts were not
    correctly recorded. As a result, the index of accounts by credential ids was
    incorrect if the chain was started from genesis by node versions 5.1.3 up to
    and including 6.0. If a chain was started by an older node version and then
    the node was upgraded the index is loaded correctly. This index is used when
    checking for duplicate credential registration IDs, and when looking up an
    account via a credential registration ID.
  • Fix a bug in the InvokeInstance endpoint where the amount sent was
    used incorrectly. The consequence was that in some cases the calls would fail
    with an error indicating insufficient amount on the account where the amount
    was sufficient for the transaction.
  • Fix a bug where it was not possible to use the collector with a node configured with TLS.
    One has to configure the grpc-host flag of the collector with domain stated in the certificate that the
    node is configured with.
  • Apply fix for processing of chain parameter updates when they occur at the same time
    retroactively to all protocol versions. This may break compatibility with any local/private
    chains on which the bug occurs.
  • Remove the concept of pending blocks.
  • GetPoolInfo now also returns the commission rates for the current reward period.
  • Add GetBakersRewardPeriod to GRPCV2 API. Provided a block, then it returns information about bakers
    for the reward period of the block.
  • Add endpoint GetBlockCertificates to GRPCV2 API. Provided a block, then it returns
    quorum certificate, timeout certificate and epoch finalization entry contained in the block (where present).
  • Add endpoint GetBakerEarliestWinTime to GRPCV2 API. Provided a baker ID, it returns the
    earliest time at which the node projects that the baker could be required to bake a block.
  • Add endpoint GetFirstBlockEpoch to GRPCV2 API. It returns the block hash of the first block in
    a given epoch.
  • Add endpoint GitWinningBakersEpoch to GRPCV2 API. It returns a list of the bakers that won
    rounds in a specified (finalized) epoch. This only supports consensus version 1.
  • Fix a bug in how the last timeout certificate is recovered at start-up.
  • Fix the behaviour of the block last finalized pointer in the GetBlockInfo so that it
    consistently returns the last finalized block at the time the block was baked.
  • Add debug-level logging when a round is advanced, either due to a quorum certificate or a
    timeout certificate.

6.0.4

11 Sep 13:24
0152a89
Compare
Choose a tag to compare

Node version 6 adds support for protocol version 6.

Protocol 6 is a major protocol update that implements the new consensus algorithm, Concordium BFT.
In addition to the new consensus, protocol 6 adds new functionality to smart contracts. In particular it makes it easier to support sponsored transactions.

Additionally, node version 6 will not start V1 GRPC server by default. This is in preparation for the removal of the V1 API in a release in November. Please migrate services to V2 API.

Changes

  • Support the new ConcordiumBFT consensus (protocol version 6).
  • Fix a bug that causes bakers in genesis to restake their earnings when they should not. This affects genesis data at protocol version P5; P1-P4 genesis data are not affected. This breaks compatibility with chains started with P5 genesis data, where some genesis bakers are not set to restake earnings. Other chains (including mainnet and testnet) are not affected.
  • Changes to the GetConsensusStatus endpoint:
    • Slot duration only returned in protocol versions 0-5.
    • Endpoint extended to return current timeout duration, current round, current epoch and trigger block time in protocol version 6.
  • Changes to the GetBlockInfo endpoint:
    • Block slot only returned in protocol versions 0-5.
    • In protocol version 6, the returned finalized block is the last finalized block until itself is finalized. Then it is itself.
    • Endpoint extended to return block round and epoch in protocol version 6.
  • Changes to the ElectionInfo endpoint:
    • Election difficulty only returned in protocol versions 0-5.
  • Remove configuration option no-rpc-server and environment variable
    CONCORDIUM_NODE_DISABLE_RPC_SERVER, as well as default values of
    rpc-server-port (CONCORDIUM_NODE_RPC_SERVER_PORT) and rpc-server-addr
    (CONCORDIUM_NODE_RPC_SERVER_ADDR). The V1 gRPC server is only started if
    both of these options are supplied.
  • Fix a network layer bug where initial messages after the handshake could be dropped in some circumstances.
  • Fix a bug that caused an incorrect reporting of total stake in the first payday just after genesis when the node started from genesis at protocols 4 or 5.
  • Smart contract changes and bugfixes
    • Revise the behaviour of rollbacks in P6.
    • Changes in Wasm validation and execution in P6
      • Disallow globals in initialization sections for V1 contracts in P6.
      • Support sign extension instructions in Wasm in P6.
      • Do not count custom sections towards module size when executing contracts.
      • Support new invoke operations for retrieving account keys and checking signatures.

5.4.2

14 Jun 10:26
Compare
Choose a tag to compare

This minor release extends the node API, makes it easier to use the node's grpc-web API, and contains robustness improvements.

Changes

  • Support using block height as block identifiers in gRPC v2 API.
  • Extend gRPC v2 API call GetBlockInfo with the protocol version of the block.
  • Do not use peer buckets when running as a normal node (not as a bootstrapper).
  • Enable CORS support in grpc-web. This only applies when grpc-web is enabled.
  • Robustness and security improvements.

5.3.2

27 Apr 12:23
43522a6
Compare
Choose a tag to compare

This release brings improvements to the node monitoring and bugfixes in the GRPC V2 API.

Additionally, the node collector that is part of the distributions is migrated to V2 API.

Changelog

  • Extend Prometheus exporter with metric peer_bucket_size, see
    docs/prometheus-exporter.md for more details.
  • Add an option --grpc2-health-min-peers (environment variable CONCORDIUM_NODE_GRPC2_HEALTH_MIN_PEERS)
    that causes the grpc V2 health endpoint to check minimum number of peers.
  • Extend the node health check so that if the node is configured with baker
    credentials then it is required to be in the baking committee for it to be
    considered healthy.
  • Add a new option --grpc2-invoke-max-energy (environment variable
    CONCORDIUM_NODE_GRPC2_INVOKE_MAX_ENERGY) that allows the node runner to
    control the maximum amount of energy allowed by an InvokeInstance (and the
    V1 GRPC InvokeContract) call. The behaviour of the endpoint is slightly
    changed as well. The energy is no longer required in the request, and the
    effective energy used by the call will be min(request.energy, grpc-invoke-max-energy). This differs from the previous behaviour where a
    request would fail if the request either omitted the energy, or supplied an
    excessive value.
  • Fix a bug that could cause the node to hang indefinitely during the out-of-
    band-catchup when the node is a finalizer.
  • Fix an additional bug in GetAccountInfo endpoint in GRPCv2 where
    incoming_amounts field of encrypted amounts was not always set correctly.
  • The node collector is migrated to a separate package and now uses the V2 GRPC API.
  • Extend Prometheus exporter with metrics: grpc_request_response_time_seconds, grpc_in_flight_requests, consensus_baking_committee, consensus_finalization_committee, consensus_baking_lottery_power, consensus_baked_blocks_total, consensus_finalized_baked_blocks_total, network_soft_banned_peers_total, consensus_non_finalized_transactions and consensus_unsupported_pending_protocol_version see docs/prometheus-exporter.md for more details.

5.2.4

16 Mar 12:58
Compare
Choose a tag to compare

The major feature of this release is the revised Prometheus interface that is now fully documented and supported. See prometheus-exporter for documentation of the metrics available via this API.

Changelog.

Bugfixes

  • Fix a bug in GetAccountInfo endpoint in GRPCv2 where incoming_amounts
    field of encrypted amounts was not set correctly.
  • Fix an issue where the node configuration file (main.config.json) was
    sometimes corrupted.

Prometheus interface changes and additions.

  • Remove current_queue_size, resend_queue_size, packets_dropped, invalid_packets_received
    unknown_packets_received, invalid_network_packets_received,
    packets_resend metrics from the Prometheus server since they were never updated.
  • Rename a number of metrics exposed by the Prometheus exporter:
    • peer_number is now network_connected_peers.
    • conn_received is now network_connections_received_total.
    • packets_received is now network_packets_received_total.
    • packets_sent is now network_packets_sent_total.
    • inbound_high_priority_consensus_drops is now network_inbound_high_priority_message_drops_total.
    • inbound_low_priority_consensus_drops is now network_inbound_low_priority_message_drops_total.
    • inbound_high_priority_consensus_counter is now network_inbound_high_priority_messages_total.
    • inbound_low_priority_consensus_counter is now network_inbound_low_priority_messages_total.
    • inbound_high_priority_consensus_size is now network_inbound_high_priority_message_queue_size.
    • inbound_low_priority_consensus_size is now network_inbound_low_priority_message_queue_size.
    • outbound_high_priority_consensus_size is now network_outbound_high_priority_message_queue_size.
    • outbound_low_priority_consensus_size is now network_outbound_low_priority_message_queue_size.
    • bytes_received is now network_received_bytes.
    • bytes_sent is now network_sent_bytes.
  • Remove last_throughput_measurement_timestamp, avg_bps_in and avg_bps_out metrics exposed by the Prometheus exporter.
  • Change behavior of Prometheus metrics network_sent_bytes and network_received_bytes. Before this change these metrics were calculated as a sum of all the bytes sent/received to peers, which causes the metrics to drop when a peer is dropped. They were only updated during the scheduled "housekeeping" (every 30 secons by default). The new behavior is to update the metric every time a message is sent/received to a peer.
  • Extend Prometheus exporter with metrics: consensus_last_finalized_block_height, consensus_last_finalized_block_timestamp, consensus_last_arrived_block_height, consensus_last_arrived_block_timestamp, consensus_received_messages_total, consensus_sent_messages_total, network_soft_banned_peers, network_peers_total, node_info and node_startup_timestamp see docs/prometheus-exporter.md for more details.
  • Remove metrics network_inbound_high_priority_message_drops_total, network_inbound_low_priority_message_drops_total, network_inbound_high_priority_messages_total and network_inbound_high_priority_messages_total as they can be derived using the labels of consensus_received_messages_total.

Other API changes

  • Add an option to disable only the node specific grpc V1 endpoints that can be
    used to control the node. All the endpoints that are consensus related are
    kept allowing the node to be used as a gateway to the chain. The mentioned can
    be disabled by setting CONCORDIUM_NODE_DISABLE_RPC_SERVER_NODE_ENDPOINTS
    or using the flag --no-rpc-server-node-endpoints.

5.1.3

19 Jan 14:04
Compare
Choose a tag to compare

This is a maintenance release that brings performance improvements and bugfixes.

  • Fix a bug in the GetAccountInfo endpoint in GRPCv2 where the ar_data field
    always would be empty.
  • Avoid deadlocks during node shutdown in specific scenarios.
  • The node will now shut down to start if an error occurs in a required service
    (e.g., grpc server). In particular, the node will shut down if a required
    service could not be started.
  • Add timeout to downloading out of band catchup files when block indices and
    catch-up chunk files are specified by an URL. The timeout is controlled
    by the option --download-blocks-timeout (environment variable
    CONCORDIUM_NODE_CONSENSUS_DOWNLOAD_BLOCKS_TIMEOUT) and defaults to 5 min.
    timeout is 5 now minutes per chunk instead of waiting indefinitely.
  • Relay blocks earlier. In particular this means that blocks are now processed in
    two steps, block receive and block execute. The former performs verification of block meta data
    while the latter adds the block to the tree.
    Blocks are now enqueued in the outgoing message queue in between the the two steps.
  • Removed the configuration option 'no_rebroadcast_consensus_validation'.
  • Improvements to allow greater concurrency with transaction processing.
    (Checking transaction signatures is done without acquiring the global
    state lock.)

5.0.6

29 Nov 10:30
Compare
Choose a tag to compare

5.0.6

This major release brings support for protocol 5 and fixes a security issue that exists in version 4 nodes.

The detailed changelog follows.

  • Add support for protocol version 5. This adds the following features:
    • Support for smart contract upgradability.
    • Query the current exchange rates, account balances and contract balances from a smart contract.
    • Relax restrictions on smart contracts
      • Parameter size limit: 1kiB -> 65kiB
      • Return value size limit: 16kiB -> no limit (apart from energy)
      • Number of logs per invocation: 64 -> no limit (apart from energy)
    • A new representation of accounts that is better optimised for common operations.
    • Revised the hashing scheme for transaction outcomes in protocol version 5. In particular the exact reject reasons are no longer part of the computed hash. Further the transaction outcomes are being stored in a merkle tree for P5 resulting in some queries being faster.
    • More efficient indexing of accounts with scheduled releases.
  • Fix an issue where the catch-up downloader would fail at a protocol update.
  • Fix an issue in the node GRPC V2 API where a baker transaction was encoded in an unintended way.
  • Enforce parameter limits in InvokeContract endpoint.

The details of the security issue will be released on Dec 13 in the form of a security advisory.

4.5.0

25 Oct 14:02
d7b9127
Compare
Choose a tag to compare

The node release 4.5.0 brings a new GRPC API and performance and stability improvements.

  • The node is now able to recover after crashes which leave only treestate or only blockstate usable.
  • Fix a memory leak that could occur in certain usage scenarios involving smart contracts.
  • Support for a new GRPC API which uses typed proto definitions. This adds a number of new configuration options for the node. These are detailed in grpc2.md