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 addedCONCORDIUM_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 variableCONCORDIUM_NODE_CLEAR_PERSISTED_PEERS
) to clear stored peers on startup. - Renamed the flag
--no-clear-bans
toclear-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 thegrpc-host
flag of thecollector
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.