All notable changes to this project will be documented in this file.
The changelog format is based on Keep a Changelog.
1.0.1.0 - 26-May-2021
- recover delegated harvesters on resync, #173
- reapply transactions oldest first when resolving fork
- fix reentrancy failures in diagnostics build
- server should make files writeable when copying seed, #168
- rollback bug leading to crashes in testnet
- add Failure_Link_Start_Epoch_Invalid when voting link is attempted with zero StartEpoch, #170
- upgrade dependencies to latest versions
- gcc 11 support
Mainnet launch.
0.10.0.8 - 26-Feb-2021
- sdk: basic support for BIP32 and BIP39
- fix deadlock between timesync and node selection, #162
- addressgen - fix matching logic when no substrings match
0.10.0.7 - 15-Feb-2021
- tool: importer to populate database from block files
- tool: verify to check the validity of blocks before import
- breaking: fix overflow in CalculateTransactionFee, #151
- recovery process needs to drop orphaned documents associated with previous block, #155
- check linked public key (remote) instead of main public key, #142
- minor issues: #153, #158, #159
- allow storing multiple payloads per file in FileDatabase to reduce inode usage, #152
0.10.0.6 - 02-Feb-2021
- mongo: new config-database settings writeTimeout and maxDropBatchSize
- new config-node setting: maxTimeBehindPullTransactionsStart - delay transaction pulls and processing of pushes until node is close to being synced
- allow remote links in linker tool
- local remote harvesting account should not require node link #142
- bypass MaxTransactionValidator for nemesis block
- prevent resolution statements from being created during chain undo #148
- breaking: split address tool into two separate tools: tool.addressgen (vanity generator) and tool.address (converter)
0.10.0.5 - 14-Jan-2021
- deep rollback
- insert gaps into AccountState stacks to fix deep rollback bug, #121
- prune newer account histories during rollback, #120
- write importance files to importance/wip and add commit step, #119
- importance block processing
- guarantee HighValueAccountCommitObserver is executed AFTER all other state-changing observers, #118
- fix calculation of VotingEligibleAccountsCount to only include currently eligible accounts
- fix potential deadlock when harvesting importance block, #137
- fix infinite loop in CompareChains when remote returns less than configured hashes, #126
- update boost to version 75
- pull finalization proofs more aggressively when unfinalizedBlocksDuration is 0
- UT and PT handling
- add MinDeadline filter to PT and UT requests
- only propagate valid PTs and UTs
- punish stateful transaction failures
- add configuration to ban nodes that send a lot of bad transactions
- memory enhancements
- change PT and UT limits from count to size
- add memory limits on dispatcher queues
- (mongo) cap size of transactionStatuses collection, #135
0.10.0.4 - 04-Dec-2020
- ipv6 support #63
- versions to all state primary documents in mongo #113 #115
- clang 11.0.1 support
- gcc 10.2.0 support
- finalization fork resolution #102
- add ListenInterface #55
- resolve confirmed transaction addresses #82
- recovery finalization support (EnableRevoteOnBoot), #90
- check node version when adding to node container #97
- allow non-voting nodes to pull finalization proofs more aggressively #99
- fix mongo indexes
- non-voting node with higher importances does not get rolled back when a fork is resolved #108
- reduce allocations
- in PatriciaTree
- using custom memory pool with OpenSSL
- Trail-of-Bits: cosmetic changes
- minor issues: #93, #96, #98, #100, #101, #104, #105, #116
- change voting key tree into key list
- change voting key link transaction, to use shorter keys
- mongo namespace meta.active -> meta.latest
- upgrade dependencies to latest versions
- drop use of boost::filesystem and boost::thread_group
- add extended importance blocks to allow trustless verification of finalization proofs #103
- only serialize non-empty AccountRestrictions #114
0.10.0.3 - 25-Sep-2020
- bugfix: importance files should not be spooled to disk when delta is detached
- removed phantom message.type from transfer transaction mongo mapping
- apply maxTransactionsPerBlock against embedded transactions in addition to top-level transactions
- Trail-of-Bits: set and check directory permissions
- Trail-of-Bits: strip RPATHs from built modules by default
0.10.0.2 - 22-Sep-2020
- bugfix: validation of nemesis block containing transactions dependent on DynamicFeeMultiplier
- bugfix: fix rollback when importance information is spooled to disk
- bugfix: allow same finalization proof to be received from proof and message sync
- bugfix: make time based (hash cache) pruning finalization aware
- reduce network traffic by requesting finalization messages within range
- optimize compare chains logic to do binary search of remote hashes
0.10.0.1 - 18-Sep-2020
- deterministic finalization extension based on GRANDPA!
- #85, validate nemesis block on server boot
- tie voting keys to finalization epochs instead of finalization points
- spool importance information to disk when finalization is enabled in order to allow deep rollbacks
- make all state { lock hash, lock secret, namespace } independent of
maxRollbackBlocks
setting - change chain comparision to allow syncing when finalization has stalled
- change "chain info" references to "chain statistics" everywhere
- refactor crypto code to allow different types of signature schemes for transaction processing and voting
- generalize one-time signatures tree into a tree that supports reusable (short-term) keys
- bugfix: #84, fix block generation in
maximize-fee
mode
0.9.6.4 - 27-Jul-2020
- allow nemesis block to contain balance transfers from non-nemesis account
- nemgen enhancements to support public network
- bugfix: credit main account not remote when hash lock expires
- bugfix, Trail-of-Bits: UB in container access
- bugfix, Trail-of-Bits: missing
O_CLOEXEC
flag - bugfix: high value addresses tracking
0.9.6.3 - 10-Jul-2020
- bugfix: mosaics inside Balances not correctly ordered after removing optimizedId in 0.9.6.2
0.9.6.2 - 23-Jun-2020
- one-time signatures tree
- voting key link transaction requires finalization points
- allow
maxVotingKeysPerAccount
voting key links - track voter-eligible accounts
- state entries indexed by address
- change the way pruning works (move to BlockChainSyncConsumer)
- minor: add VerifiableEntity::Size to database
- minor: binary address format has 24-bytes
- nodes cannot update identity keys in host-identity network
- recovery crash in reapplyBlocks caused by inconsistent BlockStatisticCache contents
0.9.5.1 - 22-May-2020
- major: VRF support, harvesters need to register VRF key that is used to generate VRF proof for given block
- harvest network fees
- unlock message behavior: message must specify vrf key, account must be linked to a node via NodeKeyLink
- renamed AccountLinkTransaction to AccountKeyLinkTransaction (consistency)
- bugfix: issue #68, delay ChainedSocketReader in PacketReaders
- bugfix: issue #69, mosaic divisibility validation
- more minor fixes
- eventsource extension
0.9.4.1 - 23-April-2020
- major: TLS support, changes are large, please refer to project documentation for details
- bugfix: namespace extension must preserve root alias
- bugfix: add timeout around accept (of incoming connection)
0.9.3.2 - 19-March-2020
- rocks upgraded to v6.6.4
0.9.3.1 - 05-March-2020
- forcibly disconnect connections to/from newly banned node identity
- use network fingerprint (id + generation hash) for nicer network separation
- missing mongo index on beneficiaryPublicKey
- unit221b pentesting: use ephemeral keys in unlock messages, use HKDF for key derivation
- unit221b pentesting: include S-part of signature in entity hash, to avoid "invalid tx announce" attack
- model: moved TransactionStatus.Deadline before Status
- bugfix: possible race in node selector
- bugfix: unconfirmed transactions subscriptions
- unit221b pentesting:
SIGNATURE_SCHEME_*
defines, catapult now uses standard ed25519 derivation with sha512 - in-source implementations of ripemd160, sha256, sha3, aes, use variants provided by openssl
0.9.2.1 - 23-January-2020
- bugfix: incomplete nemesis block data inside mongo
- bugfix: remove spurious check in CreateCacheBlockTouchObserver
- bugfix: make unconditional update of activity information based on account balance
- minor: do not migrate node identity key (when source is worse)
- minor: reprocessing of aggregates with different set of cosigners
0.9.1.1 - 06-December-2019
- Make nemesis epoch time configurable
- Network setting: maxHarvesterBalance
- Multiple recovery fixes
- Avoid banning hosts defined as local network
- Fixed point math based block time smoothing
- Unlocked accounts duplicate handling
- Propagate single blocks properly (unused mask)
- Mongo: save only non-empty account restrictions
- Mongo: missing transactionHash of aggregate transaction
0.9.0.1 - 08-November-2019
- Support for
make install
- Add hash variant name to binary descriptions
- Realign transaction binary layouts to maximize alignment of fields
- Add
AggregateTransaction::TransactionHash
that contains merkle hash of component transactions - Store
Version
andNetwork
directly inEntityBody
- GitHub Issues: #45 #46 #47 #48 #49 #50
- Bug in harvester
StateHash
calculation whentransactionSelectionStrategy
is notoldest
- Fix remaining UBSAN and TSAN warnings
0.8.0.3 - 02-October-2019
- Ability for network to identify servers by resolved IP instead of public key
- require single public key to map to single host at one time
- Basic DoS protection
- ban nodes that send transactions that fail stateless validation
- ban nodes that exceed data threshold
- close connections that send data unexpectedly
- Monitoring of static nodes for IP changes
- Add support for clang 9 and gcc 9
- Update all dependencies to latest versions
- Final set of naming review changes (mongo, config, results)
- Fix some UBSAN and TSAN warnings
- Bug in delegated harvester unlocking message processing
- Namespace and lock expiry receipt generation
- Notify cosignatories' public keys in order to allow added cosignatories to get aggregate notifications
- Potential deadlock in SpinReaderWriterLock
0.7.0.1 - 02-September-2019
- TrustedHosts filter for diagnostic packet handlers
- Prohibition of zero-based keys and derived addresses
- Delegated harvester unlocking (via special encrypted message directed to node owner)
- Dynamic rental fees
- Naming review changes
- catbuffer (models, validators, etc)
- mongo naming review changes
- config variable naming
- Use donna ed25519 implementation, use batched signature verification
- Use non-reversed private keys in
SIGNATURE_SCHEME_NIS1
- this change will require private keys used in catapult to be un-reversed, when switching from NIS1 - Generate nemesis block statement
- Turn coresystem into plugin
- Bug in harvesting ut facade factory
0.6.0.1 - 26-July-2019
- Restriction mosaic plugin
- Metadata plugin
- Outgoing address account restrictions
- Prevent creation of secret locks that violate restrictions at creation time
- Add receipt when namespace transitions from active to locked
- Allow configurable namespace depth and min namespace duration
- Update AddressValidator to always check network byte
- Bug in namespace lifetime grace period handling
- Do not delete deactivated mosaics from state hash
- Apply fee surplus to activity bucket total fees paid in harvester
- Synchronize FileTransactionStatusStorage::flush to avoid race condition
0.5.0.1 - 28-June-2019
- PoS+ consensus mechanism, see #26 for details
- Breaking, all transaction versions are now 1
- Rename
property
transaction/plugin torestriction account
- Renumber validation result codes
- Add cmake component groups
- Deadlock in broker process when small number of threads in thread pool
- Mongo mapping functions from model to dbmodel
0.4.0.1 - 31-May-2019
- New catapult.broker process that pushes changes into MongoDB and and ZMQ.
- New catapult.recovery process that repairs local state after ungraceful termination.
- catapult.server produces file-backed messages that are consumed by catapult.broker.
- Inflation support via new config-inflation.properties.
- Implementation of harvest fee sharing and beneficiary specification.
- Prevent transactions from being replayed on different networks by prepending the network generation hash to transaction data prior to signing and verifying.
- Cosignatories must opt-in before being added to a multisig account.
- Allow use of same secret with different recipients by adding Recipient to SecretLockTransaction.
- HashLockTransaction Mosaic supports aliases to to the currency mosaic.
- Allow aggregate bonded transaction lifetime to be configured independently of other transactions.
- Bugs in rollback causing potential fork.
- Bugs in state hash calculation causing potential fork.
- Bugs in receipts hash calculation causing potential fork.
- Mosaic levy references.
0.3.0.2 - 27-Feb-2019
- Upgrade boost from 1.64.0 to 1.69.0 and related changes around asio usage.
- Shift from c++14 to c++17.
- Optimized harvester performance.
- Fix harvester crash, CacheHeightView was not thread safe.
0.3.0.1 - 08-Feb-2019
- Receipts record any state-dependent change not observable from the block header or transaction data. The block header stores the root hash of all the receipts linked to the block.
- You can now attach namespaces and subnamespaces to addresses or mosaics using the AliasTransaction. A namespace can only be the alias of one account or mosaic at a time.
- Remote harvesting has been enabled. Remote harvesting enables an account to use a proxy private key that can be shared with a node securely to calculate new blocks.
- The base mosaic for currency is now configurable. This means other mosaic different than xem can be defined in private networks.
- Properties FeeMultiplier and BeneficiaryPublicKey were added to the block header.
- Transaction fee property was renamed to MaxFee.
- Dynamic fee handling - Transactions specify max fee and blocks set fee multiplier, which determines actual fee paid.
- Node reputation handling - When interacting with other nodes, each node will gather data, which will influence future partner node selection probability.
- Mosaics are no longer tied to namespaces. This means a mosaic is no longer identified by the namespace. Instead, the identifier is a random uint64.
- Mosaics can be set to not expire. This means there is no need to renew them. However, namespaces have to be renewed after a given count of blocks.
- MosaicDefinitionTransaction comes with an additional 32-bit field called nonce. The nonce is a random value used to generate the mosaic ID.
- SecretLockTransaction now supports Op_Sha3_256, Op_Keccak_256, Op_Hash_160, Op_Hash_256 hash algorithms.
0.2.0.2 - 02-Nov-2018
- Accounts can be configured to receive transactions only from an allowed list of addresses. Similarly, an account can specify a list of addresses that it doesn’t want to receive transactions from. The same behavior can be applied to allow or block transactions containing a given mosaic id or only allowing sending certain transactions by type.
- Block header now stores the state root hash. Light clients will therefore be able to verify the state in a certain block rapidly.
- Nodes can store chain state in a RocksDB when configured. This is useful for networks with a large number of accounts, as it demands less memory from network nodes.
- Lock plugin has been divided into two (lock hash and lock secret).
- Minor crash and bug fixes detected during the Catapult Developer Preview.
0.1.0.1 - 14-May-2018
- Initial code release.