You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Merge dashpay#6261: fix: assert in signing_shares for quorums with 3 members but 2 nodes only
f44edde tests: use only 2 MN and 2 Evo nodes in feature_asset_locks.py to be sure that is enough (Konstantin Akimov)
8286bdf fix: assert in signing_shares - amount of members can match with amount of attempts (Konstantin Akimov)
Pull request description:
## Issue being fixed or feature implemented
Currently we have several quorums which have size 3 with threshold 2 nodes: `llmq_test_instantsend`, `llmq_test_platform`, `llmq_test` and they are used on RegTest.
For extreme case when only 2 nodes exist the assert happens:
```
AssertionError: Unexpected stderr dashd: llmq/signing_shares.cpp:812: static CDeterministicMNCPtr llmq::CSigSharesManager::SelectMemberForRecovery(const llmq::CQuorumCPtr&, const uint256&, size_t): Assertion `size_t(attempt) < quorum->members.size()' failed.
Posix Signal: Aborted
0#: (0x5BF40CE70DA2) stl_vector.h:115 - std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl_data::_M_copy_data(std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl_data const&)
1#: (0x5BF40CE70DA2) stl_vector.h:127 - std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl_data::_M_swap_data(std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl_data&)
2#: (0x5BF40CE70DA2) stl_vector.h:1962 - std::vector<unsigned long, std::allocator<unsigned long> >::_M_move_assign(std::vector<unsigned long, std::allocator<unsigned long> >&&, std::integral_constant<bool, true>)
3#: (0x5BF40CE70DA2) stl_vector.h:771 - std::vector<unsigned long, std::allocator<unsigned long> >::operator=(std::vector<unsigned long, std::allocator<unsigned long> >&&)
4#: (0x5BF40CE70DA2) stacktraces.cpp:777 - HandlePosixSignal
5#: (0x7664C9245320) libc_sigaction.c - ???
6#: (0x7664C929EB1C) pthread_kill.c:44 - __pthread_kill_implementation
7#: (0x7664C929EB1C) pthread_kill.c:78 - __pthread_kill_internal
8#: (0x7664C929EB1C) pthread_kill.c:89 - __GI___pthread_kill
9#: (0x7664C924526E) raise.c:27 - __GI_raise
10#: (0x7664C92288FF) abort.c:81 - __GI_abort
11#: (0x7664C922881B) loadmsgcat.c:1177 - _nl_load_domain
12#: (0x7664C923B507) <unknown-file> - ???
13#: (0x5BF40C6E88C8) signing_shares.cpp:823 - llmq::CSigSharesManager::SelectMemberForRecovery(std::shared_ptr<llmq::CQuorum const> const&, uint256 const&, unsigned long)
14#: (0x5BF40C94A285) quorums.cpp:737 - operator()
15#: (0x5BF40C94A514) std_function.h:292 - _M_invoke
16#: (0x5BF40CE082C6) util.cpp:510 - RPCHelpMan::HandleRequest(JSONRPCRequest const&) const
17#: (0x5BF40C89824A) univalue.h:17 - UniValue::operator=(UniValue&&)
18#: (0x5BF40C89824A) server.h:108 - CRPCCommand::CRPCCommand(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, RPCHelpMan (*)())::{lambda(JSONRPCRequest const&, UniValue&, bool)#1}::operator()(JSONRPCRequest const&, UniValue&, bool) const
19#: (0x5BF40C9976F4) std_function.h:591 - std::function<bool (JSONRPCRequest const&, UniValue&, bool)>::operator()(JSONRPCRequest const&, UniValue&, bool) const
20#: (0x5BF40C9976F4) server.cpp:622 - ExecuteCommand
21#: (0x5BF40C99879F) server.cpp:511 - ExecuteCommands
22#: (0x5BF40C99879F) server.cpp:543 - CRPCTable::execute(JSONRPCRequest const&) const
23#: (0x5BF40CB75F24) httprpc.cpp:247 - HTTPReq_JSONRPC
```
Discovered during implementation of dashpay/dash-issues#77
## What was done?
Changed condition in assert, implemented special case of using Nth element from array size N for `SelectMemberForRecovery`, added test for this case.
## How Has This Been Tested?
Improved functional test `feature_asset_locks.py` to test this corner case for quorum `llmq_test_instantsend` and `llmq_test_platform`
## Breaking Changes
N/A
## Checklist:
- [x] I have performed a self-review of my own code
- [x] I have commented my code, particularly in hard-to-understand areas
- [x] I have added or updated relevant unit/integration/functional/e2e tests
- [ ] I have made corresponding changes to the documentation
- [x] I have assigned this pull request to a milestone
ACKs for top commit:
UdjinM6:
utACK f44edde
PastaPastaPasta:
utACK f44edde
Tree-SHA512: 5e8035960100778820bbbb242a8a354a27bce00c169bbebc4f3867737301dbdd3cc5993a8d806d55bf6eb467bfe1f36443087a271acc227ba7bb301c4f75bb7a
0 commit comments