* Specialize Serialize(CSizeComputer&) for BLS objects
Speeds up size computation for BLS objects.
* Track memory usage in CDBTransaction and CEvoDB
* Take memory used by CEvoDB/CDBTransaction into account when flushing
* Implement specialized SerReadWrite for immer maps
This allows to use READWRITE and fixes compilation errors with CSizeComputer
* Log EvoDB memory usage independently
Co-Authored-By: UdjinM6 <UdjinM6@users.noreply.github.com>
* Generalize CBLSLazyWrapper so that it can be used of pubkeys and secret keys
* Implement == and != operators for CBLSLazyWrapper
* Implement cached hash for CBLSLazyWrapper
* Use CBLSLazyPublicKey for CDeterministicMNState::pubKeyOperator
* Speed up GetProjectedMNPayees by sorting the MN list by last paid
Instead of updating a temporary list for each projected height and calling
GetMNPayee() on it.
* Cache intermediate lists in GetListForBlock
This avoids re-loading and applying diffs again and again.
* Only update masternode list UI max once every 3 seconds
This avoids updating the UI on every block, which turned out to be very
expensive.
* Fix compilation
* Drop time restrictions for mn list update in ClientModel
They are fully handled by MasternodeList now.
* Make CBLSLazySignature thread safe
* Perform malleability check in CBLSLazySignature
* Use CBLSLazySignature in CRecoveredSig and CInstantSendLock
* Only sporadically verify self-recovered signatures
* test
In some cases it takes too much time to perform full deserialization of
BLS signatures in the message handler thread. Better to just read the
buffer and do the actual deserialization when the signature is needed for
the first time (which is can be in another thread).
* Implement secure verification in bls_batchverifier
* Rename CBLSInsecureBatchVerifier to CBLSBatchVerifier
* Add unit tests for simple BLS verifcation and CBLSBatchVerifier
* Check aggPubKey for IsValid() instead of aggSig
aggSig is not reliable here as it might already be initialized by the
previous message.
* Significantly reduce sleep time for each DKG phase
Turns out the DKG is much faster then expected, and waiting multiple
minutes for each phase in a devnet is not much fun.
* Correctly use SIGN_HEIGHT_OFFSET when checking for out of bound height
* Introduce startBlockHeight to make things more explicit
* Allow sub-batch verification in CBLSInsecureBatchVerifier
* Implement batch verification of CDKGDebugStatus messages
* Use uint8_t for statusBitset in CDKGDebugMemberStatus and CDKGDebugSessionStatus
No need to waste one byte per member and per LLMQ type.
* Reserve 4k of buffer for CSerializedNetMsg buffer
Profiling has shown that a lot of time is spent in resizing the data
vector when large messages are involved.
* Remove nHeight from CDKGDebugStatus
This field changes every block and causes all masternodes to propagate
its status for every block, even if nothing DKG related has changed.
* Leave out session statuses when we're not a member of that session
Otherwise MNs which are not members of DKG sessions will spam the network
* Remove receivedFinalCommitment from CDKGDebugSessionStatus
This is not bound to a session and thus is prone to spam the network when
final commitments are propagated in the finalization phase.
* Add "minableCommitments" to "quorum dkgstatus"
* Hold cs_main while calling GetMinableCommitment
* Abort processing of pending debug messages when spork18 gets disabled
* Don't ask for debug messages when we've already seen them
"statuses" only contains the current messages but none of the old messages,
so nodes kept re-requesting old messages.
* Don't delete/add values to the unique property map when it's null
This happens when revoking operator keys, as the revoked MN will then have
the address and operator keys set to the null representation. We shouldn't
add the null value to the unique property map as otherwise future revokes
crash in an assert.
* Assert that no null values are passed to Add/DeleteUniqueProperty
* Check for null values before calling Add/DeleteUniqueProperty
* Apply suggestions from code review
Co-Authored-By: codablock <ablock84@gmail.com>
* Add user generated default constructors to BLS primitives
Fixes build issues on Mac:
In file included from evo/deterministicmns.cpp:5:
./evo/deterministicmns.h:375:24: error: default initialization of an object of const type 'const CBLSPublicKey' without a user-provided default constructor
static const T nullValue;
^
https://github.com/dashpay/dash/pull/2409 removed the need to call the
Init method of the Chia BLS library, but we also accidently removed the
initialization of the secure allocator.
* Add pooled_secure_allocator and mt_pooled_secure_allocator
* Use mt_pooled_secure_allocator for BLS secure allocation
The old solution relied on thread-local-storage and was thus not compatible
to libc6 2.11 (which is the minimum supported version we use).
Also, the old solution turned out to be erroneous. It would have crashed
or memory leaked when ownership of CBLSPrivateKey would be handled over
to another thread.
* Add new header files to Makefile.am
* Fix copyright headers of new files
* Bail out early from secure deallocation
* Clean up global BLS keys when shutting down
* Move handling of size >= SerSize into SetBuf/GetBuf
Instead of performing this in the individual implementations of
InternalSetBuf and InternalGetBuf
* Assert that size if GetBuf is always SerSize