- Support for wire-protocol version 0 is dropped, meaning that the node cannot connect to peers that do not support wire-protocol version 1, which is supported since version 1.1.0.
- The macOS installer no longer overwrites the service files when reinstalling.
- Cache smart contract modules on startup from existing state to improve smart contract execution.
- Make consensus queries more robust, by validating input more extensively.
This affects all queries whose input was a block or transaction hash.
These queries now return
InvalidArgument
error, as opposed toUnknown
which they returned previously.
- Fix a starvation bug in some cases of parallel node queries.
- Fix a bug due to incorrect use of LMDB database environments where a node would crash if queried at specific times.
- Faster state queries by avoiding locking the block state file when reading.
- Fix a bug by shutting down RPC before the node, which caused the node to crash when attempting a graceful shutdown while processing RPC requests.
- Introduce support for account aliases via protocol P3. Accounts can be queried
in
GetAccountInfo
,GetAccountNonFinalizedTransactions
,GetNextAccountNonce
by any alias. GetAccountInfo
object has an additional fieldaccountAddress
that contains the canonical address of the account.- The node now drops all connections on an unrecognized protocol update and refuses to accept new transactions.
- Fix a number of bugs that led to node crashes due to failed block lookup in some situations.
- Support custom path for genesis data via
CONCORDIUM_NODE_CONSENSUS_GENESIS_DATA_FILE
.
- Fix regression where expired transactions were not immediately rejected.
- Fix response of the transaction status query. Due to incorrect serialization the response was incorrectly reported as finalized even if transaction was only committed.
- For macOS:
- Added option to use the native mac logging system. To enable it, provide
the new flag
--use-mac-log <subsystem-name>
. The flag is available on both the node and collector with corresponding, respective, environment variablesCONCORDIUM_NODE_MACOS_USE_MAC_LOG
andCONCORDIUM_NODE_COLLECTOR_USE_MAC_LOG
. - When the flag is provided, you can view the logs with
log show --predicate 'subsystem == "<subsystem-name>"'
, or by using Console.app.
- Added option to use the native mac logging system. To enable it, provide
the new flag
-
Node improvements and new features
- Update dependencies, code cleanup, and removal of the staging_net feature.
- Fix a bug in average throughput calculation that was triggered in some cases of bad connectivity.
- Add support for configuring the node and the collector via environment variables in addition to command line arguments. This is a breaking change in that flags now need to have an explicit argument.
- Remove use of
unbound
for DNS resolution. This also removes the dnssec functionality, and the flag--no-dnssec
is no longer supported. The command-line option--resolv-conf
is also removed, as the system resolver will be used. - Introduce protocol P2 that supports transfers with memo.
- Implement protocol updates, allowing migration to a new protocol. Two protocol updates are implemented. One which does not switch to a new protocol version, but allows for updating a number of genesis parameters that would otherwise be immutable, while retaining the state. A second protocol update updates from P1 to P2.
- Reduced logging of certain events. Received blocks, finalization messages/records, and transactions are only logged at Trace level. GRPC queries are not logged.
- Support log4rs logging, by specifying a configuration file
(in toml or yaml format) with the
--log-config
argument orCONCORDIUM_NODE_LOG_CONFIG
environment variable. - A Windows node runner service and installer. See service/windows/README.md.
-
Network API changes
- Remove unused
--bootstrap-server
flag. - Support for a new wire-protocol version (version 1) that adds a genesis index to non-transaction messages, a version header to catch-up messages. Version 0 is still supported for communication with legacy nodes during migration.
- Relax compatibility check so that the node only checks a lower bound on the peer major version, in contrast to requiring an exact major version match.
- Remove unused
-
Database changes
- Global state database now includes version metadata. The treestate directory and blockstate file names are suffixed with "-n" to indicate genesis index n. A legacy database will automatically be migrated by renaming and adding version metadata.
- Change the automatically created indices on the transaction logging database.
Instead of an index on the
id
column onati
andcti
tables there are now multi-column indices that better support the intended use-cases. This only affects newly created databases. - The block export format has been revised to a new version (version 3) which allows for protocol updates. Version 2 is no longer supported.
-
GRPC API changes
- In the GetRewardStatus GRPC call, the amounts that were previously represented as integers are now represented as strings in the JSON serialization. This is in line with how amounts are serialized elsewhere.
- The behaviour of GetAccountList, GetInstances, and GetModuleList have changed in the case where the block hash is ill-formed. Instead of returning the JSON string "Invalid block hash.", these functions will now return the JSON null value.
- GetConsensusStatus return value has additional fields to indicate the protocol version and effected protocol updates.
- GetBlockInfo return value has additional fields indicating the genesis index and local height (relative to the genesis block at the genesis index) of the block. The block height reported is absolute. The reported parent of a re-genesis block will be the last final block of the preceding chain, so the absolute height indicates how many times the parent pointer should be followed to reach the initial genesis.
- GetBlocksAtHeight supports specifying a genesis index, with the supplied height being treated as relative to the genesis block at that index. An additional flag allows restricting the query to just that index.
- Check that baker keys are consistent (private key matches the public one) on startup.
- Prevent rebroadcast of catch-up status messages.
- Expose accountIndex in the
getAccountInfo
query. - Fix serialization bug in smart contracts get_receive_sender when the address is that of an account.
- Make sure to not rebroadcast transactions that consensus marked as not rebroadcastable.
- Fix command-line parsing issue in concordium-node related to --import-blocks-from.
Start of changelog.