Releases: microsoft/CCF
Releases · microsoft/CCF
7.0.0-rc1
Added
- Added support for inline transaction receipt construction at commit time. Endpoint authors can use
build_receipt_for_committed_tx()to construct a fullTxReceiptImplfrom theCommittedTxInfopassed to theirConsensusCommittedEndpointFunctioncallback. See the logging sample app (/log/blocking/private/receipt) for example usage (#7785).
Changed
- The
ConsensusCommittedEndpointFunctioncallback signature now receives aCommittedTxInfo&struct (containingrpc_ctx,tx_id,status,write_set_digest,commit_evidence,claims_digest) instead of individual arguments. This enables commit callbacks to construct receipts inline (#7785). ccf::endpoints::default_respond_on_commit_funchas been removed from the public API. A sample implementation is provided in the logging and basic sample apps (#7785).
Deprecated
snapshots.read_only_directoryconfiguration option is deprecated and will be removed in a future release. A warning will be logged if this option is set at startup. Usesnapshots.backup_fetchto have backup nodes automatically fetch snapshots from the primary node instead.
7.0.0-rc0
Added
- Added
files_cleanup.max_snapshotsconfiguration option to limit the number of committed snapshot files retained on disk. When the number of committed snapshots exceeds this value, the oldest snapshots (by sequence number) are automatically deleted. The value must be at least 1 if set. - Added
files_cleanup.intervalconfiguration option (default"30s") to periodically scan the snapshot directory and delete old committed snapshots exceedingmax_snapshots. This ensures backup nodes (which receive snapshots viabackup_fetch) also prune old snapshots. Only effective whenmax_snapshotsis set. - Added
POST /node/snapshot:create, gated by theSnapshotCreateRPC interface operator feature, to create a snapshot via an operator endpoint rather than a governance action. - Added
make_cose_verifier_from_pem_cert()andmake_cose_verifier_from_der_cert()that accept certificates in a known format. The existingmake_cose_verifier_cert()is renamed tomake_cose_verifier_any_cert()(#7768).
Changed
- The
sincequery parameter on theGET /node/snapshotendpoint now uses closed (inclusive) semantics, consistent with thesinceparameter onGET /node/ledger_chunk. A request with?since=Nwill now return snapshots with index greater than or equal toN, rather than strictly greater thanN(#7742).
6.0.27
6.0.26
7.0.0-dev13
Added
- Added time-based snapshot scheduling. Snapshots can now be triggered after a configurable wall-clock interval (
snapshots.time_interval) elapses, in addition to the existing transaction-count threshold (snapshots.tx_count). A newsnapshots.min_tx_countoption (default 2) sets the minimum number of transactions required before a time-based snapshot fires. Snapshot timing state is replicated to backups via a newpublic:ccf.internal.snapshot_statusinternal table (#7731). - Added support for endpoints that defer their HTTP response until the submitted transaction reaches a terminal consensus state (committed or invalidated). Endpoint authors can call
set_consensus_committed_function()when installing an endpoint to register a callback that is invoked once the transaction is globally committed or invalidated. The callback receives theccf::TxIDand accf::FinalTxStatus(eitherCommittedorInvalid), and may inspect or modify the response before it is sent. A built-inccf::endpoints::default_respond_on_commit_funcis provided that returns the original response on commit, or an error on invalidation. See the logging sample app (/log/blocking/private) for example usage (#7562).
Fixed
- Fixed the Turin SEV-SNP CPUID mapping used for product detection. (#7748)
6.0.25
7.0.0-dev12
Added
- Backup nodes can now be configured to automatically fetch snapshots from the primary when snapshot evidence is detected. This is controlled by the
snapshots.backup_fetchconfiguration section, withenabled,max_attempts,retry_interval,max_sizeandtarget_rpc_interfaceoptions. Note that the target RPC interface selected must have theSnapshotReadoperator feature enabled. - Added
ccf::IdentityHistoryNotFetchedexception type to distinguish identity-history-fetching errors from other logic errors in the network identity subsystem (#7708). - Added
ccf::describe_cose_receipt_v1(receipt)to obtain COSE receipts with Merkle proof in unprotected header for non-signature TXs, and empty unprotected header for signature TXs (#7700). NetworkIdentitySubsystemInterfacenow exposesget_trusted_keys(), returning all trusted network identity keys as aTrustedKeysmap (#7690).- Added support for self-transparent code update policies (#7681).
Changed
- On recovery, the UVM descriptor SVN is now set to the minimum of the previously stored value in the KV and the value found in the new node's startup endorsements. On start, the behaviour is unchanged (#7716).
- Refactored the user facing surface of self-healing-open and local sealing. The whole feature is now
sealing-recoverywithself-healing-opennow referred to as therecovery-decision-protocol(#7679). - Local sealing is enabled by setting the
sealing-recoveryconfig field (for both the sealing node, and the unsealing recovery node). - The local sealing identity is under
sealing-recovery.location.name. - The recovery-decision-protocol is configured via
sealing-recovery.recovery_decision_protocol. - Snapshots now carry COSE receipts, JSON receipts are no longer included (#7711).
6.0.24
Fixed
- Fix race condition when initialising a ledger secret's commit secret (#7689)
- Add missing cases for
FailedInvalidCPUIDandFailedInvalidTcbVersionin quote verification error handling (#7696). - On recovery, the UVM descriptor SVN is now set to the minimum of the previously stored value in the KV and the value found in the new node's startup endorsements. On start, the behaviour is unchanged (#7716).
7.0.0-dev11
Changed
- When
fetch_recent_snapshotis enabled, snapshot fetching now occurs in response to aStartupSeqnoIsOlderror during join, rather than eagerly at startup. Fetched snapshots are verified before use, and corrupt local snapshots are skipped. See documentation (#7630).
7.0.0-dev10
Added
GETandHEAD/node/ledger-chunk?since={seqno}and/node/ledger-chunk/{chunk_name}endpoints, gated by theLedgerChunkDownloadRPC interface operator feature. See documentation for more detail.GETandHEAD/node/ledger-chunk/{chunk_name}and/node/snapshot/{snapshot_name}now support theWant-Repr-Digestrequest header and return theRepr-Digestresponse header accordingly (RFC 9530). Supported algorithms aresha-256,sha-384, andsha-512. If no supported algorithm is requested, the server defaults tosha-256(#7650).ETagandIf-None-Matchsupport onGET /node/ledger-chunk/{chunk_name}, using SHA-256 by default for theETagresponse header. Clients can supplyIf-None-Matchwithsha-256,sha-384, orsha-512digest ETags to avoid re-downloading unchanged content (#7652).
Changed
ccf::crypto::HashProvider::Hash()has been renamed toccf::crypto::HashProvider::hash()for consistency with the rest of the API (#7660).
Fixed
- Only rollback uncommittable indices during become_leader (#7620)
- x509 parsing now correctly handles times validity beyond 2262. To support this, some public function signatures (
ccf::ds::time_point_from_string(),ccf::crypto::Verifier::remaining_seconds()) now usetime_points fromccf::nonstd::SystemClockrather thanstd::chrono::system_clock(#7648)