Multiple updates regarding LLMQs (#42)

* Add description of new LLMQ merkle roots to DIP4

* Rename deletedMNcount -> deletedMNsCount

* Add quorumType to parameter description and DIP6 P2P messages

* Remove quorumMinMemberAge from parameter description

This was never implemented

* Rename badVotesThreshold -> quorumDkgBadVotesThreshold

* Update testing LLMQ type to LLMQ_5_60

* Better describe active LLMQs in DIP6 and DIP7

* Bump CbTx version

* Handle review comments
This commit is contained in:
Alexander Block 2019-04-29 14:20:26 +02:00 committed by thephez
parent 60ade37fee
commit 745adcee3f
4 changed files with 75 additions and 10 deletions

View file

@ -61,12 +61,15 @@ If different members signed the same request with differing message hashes, only
## Choosing the active LLMQ to perform signing
As multiple LLMQs might be active at the same time and masternodes might be members of multiple LLMQs as well, its important that all masternodes agree on which LLMQ should service the signing request. Otherwise it would be impossible to collect enough signature shares for the same signing session and thus recovery of the threshold signature would never succeed.
As multiple LLMQs are active at the same time and masternodes might be members of multiple LLMQs as well, its important
that all masternodes agree on which LLMQ should service the signing request. Otherwise it would be impossible to collect
enough signature shares for the same signing session and thus recovery of the threshold signature would never succeed.
To calculate which LLMQ is responsible for a signing request, each masternode should perform the following:
1. Take the last `X` activated LLMQs. The value of `X` depends on the use case, and could be 4 as an example.
2. For each LLMQ, calculate `hash(quorumHash, requestId)`
1. Take the active LLMQ set from 8 blocks before the current chain tip. Active LLMQ sets are described in
[DIP6 - Long-Living Masternode Quorums](https://github.com/dashpay/dips/blob/master/dip-0004.md) section "Active LLMQ sets".
2. For each LLMQ of the active set, calculate `hash(quorumType, quorumHash, requestId)`
3. Sort the list of LLMQs based on the result of step 2 in ascending order.
4. Use the first entry of the sorted list as the LLMQ to perform the signing request