Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge #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
- Loading branch information