Commit Graph

25310 Commits

Author SHA1 Message Date
Kittywhiskers Van Gogh
e5295dec1f
refactor: move activeMasternodeInfo{Cs} into CActiveMasternodeManager 2024-03-24 07:20:57 +00:00
Kittywhiskers Van Gogh
b8c1f010e7
refactor: avoid accessing active masternode info if not in masternode mode
A later commit will be moving activeMasternodeInfo into activeMasternodeManager
and that is only conditionally initialized if the node is in masternode
mode, which will render access attempts outside of masternode mode invalid.
We need to adjust behaviour to account for that.
2024-03-24 07:20:41 +00:00
Kittywhiskers Van Gogh
9a3c5a3c48
trivial: access activeMasternodeInfo when lock is in scope 2024-03-22 12:26:50 +00:00
pasta
1c30df0afe
Merge #5947: fix: revert "drop circular dependencies over deterministicmns in validationinterface"
419a8af274 fix: revert "drop circular dependencies over deterministicmns in validationinterface" (Kittywhiskers Van Gogh)

Pull request description:

  ## Additional Information

  In https://github.com/dashpay/dash/pull/5933, a commit was added that changed a copy to a ref in the arguments of a lambda (fa6847d2fb), which helped get rid of a circular dependency. This unfortunately also caused a functional test to start failing (`interface_zmq_dash.py`).

  This is reflected in the PR itself and in `develop` with CI results:
  * PR at commit before fa6847d2fb, i.e. f8d1853903 ([build](https://gitlab.com/dashpay/dash/-/pipelines/1219453638), passes)
  * PR at commit fa6847d2fb ([build](https://gitlab.com/dashpay/dash/-/pipelines/1221199595), fails 2/4 instances)
  * `develop`, as of this writing, a7e61114f8 ([build](https://gitlab.com/dashpay/dash/-/pipelines/1221235772), fails 3/4 instances)

  This change was also confirmed locally....

  <details>
  <summary>
  develop (a7e61114f8):
  </summary>

  ```
  dash@1914d5152e74:/src/dash$ ./test/functional/interface_zmq_dash.py
  2024-03-21T12:18:10.643000Z TestFramework (INFO): Initializing test directory /tmp/dash_func_test_m7b0f114
  2024-03-21T12:18:10.644000Z TestFramework (INFO): Creating and starting controller node
  2024-03-21T12:18:10.644000Z TestFramework (INFO): Creating and starting 1 simple nodes
  2024-03-21T12:18:11.587000Z TestFramework (INFO): Generating 4100 coins
  2024-03-21T12:18:13.424000Z TestFramework (INFO): Activating DIP3
  2024-03-21T12:18:13.427000Z TestFramework (INFO): Preparing 4 masternodes
  [...]
  2024-03-21T12:19:36.716000Z TestFramework (INFO): Testing 3 ChainLock publishers
  2024-03-21T12:19:37.139000Z TestFramework (INFO): Testing 4 governance publishers
  2024-03-21T12:19:38.547000Z TestFramework (ERROR): Unexpected exception caught during testing
  Traceback (most recent call last):
    File "/src/dash/test/functional/test_framework/authproxy.py", line 108, in _request
      return self._get_response()
    File "/src/dash/test/functional/test_framework/authproxy.py", line 170, in _get_response
      http_response = self.__conn.getresponse()
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1348, in getresponse
      response.begin()
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 316, in begin
      version, status, reason = self._read_status()
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 285, in _read_status
      raise RemoteDisconnected("Remote end closed connection without"
  http.client.RemoteDisconnected: Remote end closed connection without response

  During handling of the above exception, another exception occurred:

  Traceback (most recent call last):
    File "/src/dash/test/functional/test_framework/test_framework.py", line 157, in main
      self.run_test()
    File "./test/functional/interface_zmq_dash.py", line 152, in run_test
      self.test_governance_publishers()
    File "./test/functional/interface_zmq_dash.py", line 409, in test_governance_publishers
      self.nodes[0].gobject("vote-many", rpc_proposal_hash, map_vote_signals[1], map_vote_outcomes[1])
    File "/src/dash/test/functional/test_framework/coverage.py", line 49, in __call__
      return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
    File "/src/dash/test/functional/test_framework/authproxy.py", line 146, in __call__
      response, status = self._request('POST', self.__url.path, postdata.encode('utf-8'))
    File "/src/dash/test/functional/test_framework/authproxy.py", line 113, in _request
      self.__conn.request(method, path, postdata, headers)
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1256, in request
      self._send_request(method, url, body, headers, encode_chunked)
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1302, in _send_request
      self.endheaders(body, encode_chunked=encode_chunked)
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1251, in endheaders
      self._send_output(message_body, encode_chunked=encode_chunked)
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1011, in _send_output
      self.send(msg)
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 951, in send
      self.connect()
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 922, in connect
      self.sock = self._create_connection(
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/socket.py", line 808, in create_connection
      raise err
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/socket.py", line 796, in create_connection
      sock.connect(sa)
  ConnectionRefusedError: [Errno 111] Connection refused
  2024-03-21T12:19:39.050000Z TestFramework (INFO): Stopping nodes
  2024-03-21T12:19:39.051000Z TestFramework.node0 (ERROR): Unable to stop node.
  Traceback (most recent call last):
    File "/src/dash/test/functional/test_framework/test_node.py", line 338, in stop_node
      self.stop(wait=wait)
    File "/src/dash/test/functional/test_framework/coverage.py", line 49, in __call__
      return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
    File "/src/dash/test/functional/test_framework/authproxy.py", line 146, in __call__
      response, status = self._request('POST', self.__url.path, postdata.encode('utf-8'))
    File "/src/dash/test/functional/test_framework/authproxy.py", line 107, in _request
      self.__conn.request(method, path, postdata, headers)
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1256, in request
      self._send_request(method, url, body, headers, encode_chunked)
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1267, in _send_request
      self.putrequest(method, url, **skips)
    File "/usr/local/pyenv/versions/3.8.16/lib/python3.8/http/client.py", line 1093, in putrequest
      raise CannotSendRequest(self.__state)
  http.client.CannotSendRequest: Request-sent
  2024-03-21T12:19:39.052000Z TestFramework (ERROR): Unexpected exception caught during shutdown
  Traceback (most recent call last):
    File "/src/dash/test/functional/test_framework/test_framework.py", line 324, in shutdown
      self.stop_nodes()
    File "/src/dash/test/functional/test_framework/test_framework.py", line 665, in stop_nodes
      node.stop_node(expected_stderr=expected_stderr, wait=wait, wait_until_stopped=False)
    File "/src/dash/test/functional/test_framework/test_node.py", line 352, in stop_node
      raise AssertionError("Unexpected stderr {} != {}".format(stderr, expected_stderr))
  AssertionError: Unexpected stderr dashd: ./immer/immer/detail/hamts/node.hpp:144: auto immer::detail::hamts::node<T, Hash, Equal, MemoryPolicy, B>::nodemap() const [with T = std::pair<uint256, std::pair<uint256, unsigned int> >; Hash = immer::map<uint256, std::pair<uint256, unsigned int>, CDeterministicMNList::ImmerHasher>::hash_key; Equal = immer::map<uint256, std::pair<uint256, unsigned int>, CDeterministicMNList::ImmerHasher>::equal_key; MemoryPolicy = immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap>, immer::refcount_policy, immer::spinlock_policy>; unsigned int B = 5]: Assertion `kind() == kind_t::inner' failed.
  Posix Signal: Aborted
  No debug information available for stacktrace. You should add debug information and then run:
  dashd -printcrashinfo=bvcgc43iinzgc43ijfxgm3ybaacwiyltnbsbkudponuxqictnftw4ylmhiqecytpoj2gkzaaaa====== !=
  2024-03-21T12:19:39.052000Z TestFramework (WARNING): Not cleaning up dir /tmp/dash_func_test_m7b0f114
  2024-03-21T12:19:39.052000Z TestFramework (ERROR): Test failed. Test logging available at /tmp/dash_func_test_m7b0f114/test_framework.log
  2024-03-21T12:19:39.053000Z TestFramework (ERROR):
  2024-03-21T12:19:39.053000Z TestFramework (ERROR): Hint: Call /src/dash/test/functional/combine_logs.py '/tmp/dash_func_test_m7b0f114' to consolidate all logs
  2024-03-21T12:19:39.053000Z TestFramework (ERROR):
  2024-03-21T12:19:39.053000Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
  2024-03-21T12:19:39.053000Z TestFramework (ERROR): https://github.com/dashpay/dash/issues
  2024-03-21T12:19:39.054000Z TestFramework (ERROR):
  [node 0] Cleaning up leftover process
  [node 4] Cleaning up leftover process
  [node 3] Cleaning up leftover process
  [node 2] Cleaning up leftover process
  [node 1] Cleaning up leftover process
  ```

  </details>

  <details>
  <summary>
  develop with revert (419a8af274)
  </summary>

  ```
  dash@1914d5152e74:/src/dash$ ./test/functional/interface_zmq_dash.py
  2024-03-21T12:23:50.749000Z TestFramework (INFO): Initializing test directory /tmp/dash_func_test__2tlpe0x
  2024-03-21T12:23:50.751000Z TestFramework (INFO): Creating and starting controller node
  2024-03-21T12:23:50.751000Z TestFramework (INFO): Creating and starting 1 simple nodes
  2024-03-21T12:23:51.717000Z TestFramework (INFO): Generating 4100 coins
  2024-03-21T12:23:53.648000Z TestFramework (INFO): Activating DIP3
  2024-03-21T12:23:53.651000Z TestFramework (INFO): Preparing 4 masternodes
  [...]
  2024-03-21T12:25:22.935000Z TestFramework (INFO): Testing 3 ChainLock publishers
  2024-03-21T12:25:23.357000Z TestFramework (INFO): Testing 4 governance publishers
  2024-03-21T12:25:24.750000Z TestFramework (INFO): Testing 5 InstantSend publishers
  2024-03-21T12:25:30.789000Z TestFramework (INFO): Testing 5 InstantSend publishers
  2024-03-21T12:25:39.270000Z TestFramework (INFO): Moved from block 1013 to 1032
  2024-03-21T12:25:39.270000Z TestFramework (INFO): Testing 5 InstantSend publishers
  2024-03-21T12:25:48.155000Z TestFramework (INFO): Moved from block 1033 to 1056
  2024-03-21T12:25:48.155000Z TestFramework (INFO): Testing 5 InstantSend publishers
  2024-03-21T12:25:56.533000Z TestFramework (INFO): Moved from block 1057 to 1080
  2024-03-21T12:25:56.533000Z TestFramework (INFO): Testing 5 InstantSend publishers
  2024-03-21T12:26:02.538000Z TestFramework (INFO): Mining quorum: expected_members=4, expected_connections=2, expected_contributions=4, expected_complaints=0, expected_justifications=0, expected_commitments=4
  2024-03-21T12:26:04.923000Z TestFramework (INFO): Expected quorum_0 at:1104
  2024-03-21T12:26:04.924000Z TestFramework (INFO): Expected quorum_0 hash:0a0edca11eb8f6c3716c396ef96d31a175dc7cb9f1fbc66334d720774989aedf
  2024-03-21T12:26:04.924000Z TestFramework (INFO): quorumIndex 0: Waiting for phase 1 (init)
  2024-03-21T12:26:04.928000Z TestFramework (INFO): quorumIndex 0: Waiting for quorum connections (init)
  2024-03-21T12:26:05.947000Z TestFramework (INFO): Expected quorum_1 at:1105
  2024-03-21T12:26:05.947000Z TestFramework (INFO): Expected quorum_1 hash:6ea7ea40198c86f773933c1fa086ea054f1b3bc3efa1b78d64a578f6019f9831
  2024-03-21T12:26:05.947000Z TestFramework (INFO): quorumIndex 1: Waiting for phase 1 (init)
  2024-03-21T12:26:06.458000Z TestFramework (INFO): quorumIndex 1: Waiting for quorum connections (init)
  2024-03-21T12:26:07.475000Z TestFramework (INFO): quorumIndex 0: Waiting for phase 2 (contribute)
  2024-03-21T12:26:09.502000Z TestFramework (INFO): quorumIndex 1: Waiting for phase 2 (contribute)
  2024-03-21T12:26:11.027000Z TestFramework (INFO): quorumIndex 0: Waiting for phase 3 (complain)
  2024-03-21T12:26:12.551000Z TestFramework (INFO): quorumIndex 1: Waiting for phase 3 (complain)
  2024-03-21T12:26:14.075000Z TestFramework (INFO): quorumIndex 0: Waiting for phase 4 (justify)
  2024-03-21T12:26:15.600000Z TestFramework (INFO): quorumIndex 1: Waiting for phase 4 (justify)
  2024-03-21T12:26:17.123000Z TestFramework (INFO): quorumIndex 0: Waiting for phase 5 (commit)
  2024-03-21T12:26:19.149000Z TestFramework (INFO): quorumIndex 1: Waiting for phase 5 (commit)
  2024-03-21T12:26:20.674000Z TestFramework (INFO): quorumIndex 0: Waiting for phase 6 (finalization)
  2024-03-21T12:26:22.267000Z TestFramework (INFO): quorumIndex 1: Waiting for phase 6 (finalization)
  2024-03-21T12:26:28.780000Z TestFramework (INFO): Mining final commitments
  2024-03-21T12:26:34.892000Z TestFramework (INFO): Waiting for quorum(s) to appear in the list
  2024-03-21T12:26:34.894000Z TestFramework (INFO): h(1116) quorums: {'llmq_test': ['0a0edca11eb8f6c3716c396ef96d31a175dc7cb9f1fbc66334d720774989aedf', '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676'], 'llmq_test_v17': ['0a0edca11eb8f6c3716c396ef96d31a175dc7cb9f1fbc66334d720774989aedf', '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676'], 'llmq_test_dip0024': ['0a0edca11eb8f6c3716c396ef96d31a175dc7cb9f1fbc66334d720774989aedf', '6ea7ea40198c86f773933c1fa086ea054f1b3bc3efa1b78d64a578f6019f9831'], 'llmq_test_platform': []}
  2024-03-21T12:26:35.047000Z TestFramework (INFO): New quorum: height=1104, quorumHash=0a0edca11eb8f6c3716c396ef96d31a175dc7cb9f1fbc66334d720774989aedf, quorumIndex=0, minedBlock=4e0193af47e244afe7ca8b4644e8b7f655afc29035de61e42b7c867bfd0469c4
  2024-03-21T12:26:35.047000Z TestFramework (INFO): New quorum: height=1105, quorumHash=6ea7ea40198c86f773933c1fa086ea054f1b3bc3efa1b78d64a578f6019f9831, quorumIndex=1, minedBlock=4e0193af47e244afe7ca8b4644e8b7f655afc29035de61e42b7c867bfd0469c4
  2024-03-21T12:26:35.047000Z TestFramework (INFO): quorum_info_0:{'height': 1104, 'type': 'llmq_test_dip0024', 'quorumHash': '0a0edca11eb8f6c3716c396ef96d31a175dc7cb9f1fbc66334d720774989aedf', 'quorumIndex': 0, 'minedBlock': '4e0193af47e244afe7ca8b4644e8b7f655afc29035de61e42b7c867bfd0469c4', 'previousConsecutiveDKGFailures': 4, 'members': [{'proTxHash': 'b1ff91bb4247d4883c988d40c9f847b422f20a011ae681ad0852368f3e31d266', 'service': '127.0.0.1:14125', 'pubKeyOperator': '93ec5f0eee5bfc0a24b7c95c088a60d3765b288bf975888765cd049d21c62215a558af147678162e9f5401cc44d9ed9c', 'valid': True}, {'proTxHash': '01a1dd6d7de668d3d2e8d225ded648d713c405e98d2b155e294cf2e8d8279a13', 'service': '127.0.0.1:14126', 'pubKeyOperator': '05ec4b528a5bdbdd353e4687f9187caf0399a713590bae6ebff8fc44af3dffeb953c378bd91b7416484ee55d99602498', 'valid': True}, {'proTxHash': 'cef65784031e9f1e30887474375ea1086088839d012450da1fc030e413bf330a', 'service': '127.0.0.1:14123', 'pubKeyOperator': '074729dd7f8ea073f4694550de8c6c5e258c742f6e300067646bedc09c66e53256bc7b40ae835f6fdcc5b5c420aa925a', 'valid': True}, {'proTxHash': '9c0a7c8a579ab8a3feab270b870a56fa06732a66246da291543ee93d781f5828', 'service': '127.0.0.1:14124', 'pubKeyOperator': '12dae6139d97b43b44b6d6017ee1bfc9c37337d9987d08c0308dca421ba5c2074341b59a9b35a91935e5a8ac83953335', 'valid': True}], 'quorumPublicKey': '9731adc67399062095a817c369c977ceedc5f0e8597d72b6d70a4ba1a4a496cf780d0d62e3f038f129998b8a323d20c4'}
  2024-03-21T12:26:35.047000Z TestFramework (INFO): quorum_info_1:{'height': 1105, 'type': 'llmq_test_dip0024', 'quorumHash': '6ea7ea40198c86f773933c1fa086ea054f1b3bc3efa1b78d64a578f6019f9831', 'quorumIndex': 1, 'minedBlock': '4e0193af47e244afe7ca8b4644e8b7f655afc29035de61e42b7c867bfd0469c4', 'previousConsecutiveDKGFailures': 4, 'members': [{'proTxHash': 'cef65784031e9f1e30887474375ea1086088839d012450da1fc030e413bf330a', 'service': '127.0.0.1:14123', 'pubKeyOperator': '074729dd7f8ea073f4694550de8c6c5e258c742f6e300067646bedc09c66e53256bc7b40ae835f6fdcc5b5c420aa925a', 'valid': True}, {'proTxHash': '9c0a7c8a579ab8a3feab270b870a56fa06732a66246da291543ee93d781f5828', 'service': '127.0.0.1:14124', 'pubKeyOperator': '12dae6139d97b43b44b6d6017ee1bfc9c37337d9987d08c0308dca421ba5c2074341b59a9b35a91935e5a8ac83953335', 'valid': True}, {'proTxHash': 'b1ff91bb4247d4883c988d40c9f847b422f20a011ae681ad0852368f3e31d266', 'service': '127.0.0.1:14125', 'pubKeyOperator': '93ec5f0eee5bfc0a24b7c95c088a60d3765b288bf975888765cd049d21c62215a558af147678162e9f5401cc44d9ed9c', 'valid': True}, {'proTxHash': '01a1dd6d7de668d3d2e8d225ded648d713c405e98d2b155e294cf2e8d8279a13', 'service': '127.0.0.1:14126', 'pubKeyOperator': '05ec4b528a5bdbdd353e4687f9187caf0399a713590bae6ebff8fc44af3dffeb953c378bd91b7416484ee55d99602498', 'valid': True}], 'quorumPublicKey': '98e0e6f79d1697f88867bb7c4f7ef5f07dd39e34daf206f9865179dd1e63ec7d24b20592b664cc86e9278e3613db856d'}
  2024-03-21T12:26:35.093000Z TestFramework (INFO): h(1124):{'extraShare': False, 'quorumSnapshotAtHMinusC': {'activeQuorumMembers': [True, True, True, True], 'mnSkipListMode': 1, 'mnSkipList': [1]}, 'quorumSnapshotAtHMinus2C': {'activeQuorumMembers': [True, True, True, True], 'mnSkipListMode': 1, 'mnSkipList': [0, 1, 1]}, 'quorumSnapshotAtHMinus3C': {'activeQuorumMembers': [True, True, True, True], 'mnSkipListMode': 1, 'mnSkipList': [0, 1, 2, -1]}, 'mnListDiffTip': {'nVersion': 1, 'baseBlockHash': '000008ca1832a4baf228eb1553c03d3a2c8e02399550dd6ea8d65cec3ef23d2e', 'blockHash': '253738c2e3254a2b784f467972ba707761ed501fb5cb3c90551da506abe5ad70', 'cbTxMerkleTree': '01000000010cae3eb3b5c3fb57b5d29d780fb31713a37b37348c91e7fd884aaf83785aeca00101', 'cbTx': '03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff050264040101ffffffff03aa8b4e1e030000001976a9148708dff2bf8b31363cb4201d179b4714aa7b54a088acec36570e030000001976a914f4f68699fb7649bdfa3fb8fe578000d213917a8488acb654f70f000000001976a914eb747196393894238cb18ebd758b97c3529fae7288ac0000000046020064040000e1cb7a0efab5d02b994a4771530f7cbbbec97354a60e1189d3903837cdc310fb4550993dacee7dc971faa0a337b12825293d124aff20d939fd4b5f9addd43eb8', 'deletedMNs': [], 'mnList': [{'nVersion': 1, 'nType': 0, 'proRegTxHash': 'b1ff91bb4247d4883c988d40c9f847b422f20a011ae681ad0852368f3e31d266', 'confirmedHash': '4d6a402ef0eea8ccfb24199f1618708fc34e0461abdd4692b4c23bafbd4e3713', 'service': '127.0.0.1:14125', 'pubKeyOperator': '93ec5f0eee5bfc0a24b7c95c088a60d3765b288bf975888765cd049d21c62215a558af147678162e9f5401cc44d9ed9c', 'votingAddress': 'ybcNcsLwcyVQg7xYKhBfNdsJ349ZMebvS5', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': '9c0a7c8a579ab8a3feab270b870a56fa06732a66246da291543ee93d781f5828', 'confirmedHash': '646f457335100a95018c2eb649113d1073455c962c522db363bb433968239e15', 'service': '127.0.0.1:14124', 'pubKeyOperator': '12dae6139d97b43b44b6d6017ee1bfc9c37337d9987d08c0308dca421ba5c2074341b59a9b35a91935e5a8ac83953335', 'votingAddress': 'yerSqmXyuxUZrdt7XKPg34aGyyKzNuVUiw', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': 'cef65784031e9f1e30887474375ea1086088839d012450da1fc030e413bf330a', 'confirmedHash': '0befc211c744b063cca4e02277a0f60728b42c27ace99ff9724afec226bbfd0e', 'service': '127.0.0.1:14123', 'pubKeyOperator': '074729dd7f8ea073f4694550de8c6c5e258c742f6e300067646bedc09c66e53256bc7b40ae835f6fdcc5b5c420aa925a', 'votingAddress': 'yi923TRM2dQLTA9S2zDWtFtrxrm97qZn3t', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': '01a1dd6d7de668d3d2e8d225ded648d713c405e98d2b155e294cf2e8d8279a13', 'confirmedHash': '15fe17827cb7815a0e5751be60a54d7e7f37ee17f2bdf8894665ab2a88ebbf3e', 'service': '127.0.0.1:14126', 'pubKeyOperator': '05ec4b528a5bdbdd353e4687f9187caf0399a713590bae6ebff8fc44af3dffeb953c378bd91b7416484ee55d99602498', 'votingAddress': 'yQ4EppPanEhNtnrLv9PnmuYu7FeBnBCANj', 'isValid': True}], 'deletedQuorums': [], 'newQuorums': [{'version': 3, 'llmqType': 100, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': 'af5b4e78031a9e331a268815e34006e459be897cc6e127b166a6f5ab6673db82bfd42bc58939177fe643fba89d74a0b6', 'quorumVvecHash': 'a861a37614e2104197931ac07d39c91a2cc4a1ae69a8029c94ebbfe19d2cb926', 'quorumSig': '911808c92a4bc2619ac26551f9e8060fa1a9b29e34f10f6707a608c10fd6658eea706f0fbcbbdee0866076d5bb05d7430c4267c97c051d274202230fc54cc625511542ad6d85e93a23f55b92d0b50439b0cf1ff0734849f253e42f9cd3ea7e9f', 'membersSig': '94e8ac60c25554bb16d8707c61c40c2cef15a0eee283e962875ef85eb5a3760de0a4196ef1c02c5f5df08cea0e644b4f13c4529a6f826230a088800db7f34a2feab70959e5932690b6d8ad5276a7eca2fe4bb79abf0618bc0bab30800714eab8'}, {'version': 3, 'llmqType': 100, 'quorumHash': '0a0edca11eb8f6c3716c396ef96d31a175dc7cb9f1fbc66334d720774989aedf', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': 'a5c2d937b34c8eb136b61cf3fba2ee3de855a48e3c66a229be3347eaf66163d055c48139031674b0239ed6b0ee9ca86a', 'quorumVvecHash': 'c24cb0c0b34d6b4e66a52bff65b580aae1264e3ed8d4470ef9515b7098343ffd', 'quorumSig': '9240f7c351fd4125fe6bd41b25cf77154ba71c8c045eed32d7ae5d16a59103287dda670072d5614baeb85e6f83666d91161b9fe0fd5d9754fe9bc8d1f8ff3be1b123d72546855d790a17a38f3d5e0a1ae1fb12b2730fecd942152012375b6f5c', 'membersSig': 'ab5816f66fb9ff46094a8c2e0581736ea9daa2b928e61c8c5ab286bfd99114e5eddea37583f8749ec29d87f2199a6878009c6c416ed63ec47c83ef0028522fd115791c27ec951a20dcfb85831139bd7ef4b9464ccad03edc18ead38cc8eb8d1c'}, {'version': 3, 'llmqType': 102, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 3, 'signers': '07', 'validMembersCount': 3, 'validMembers': '07', 'quorumPublicKey': 'af1ad4c55ab202ab037ebc926692e46236c1ece38a7f54fb14149ce26d14a4adb91f6786d6c37a560a8a82390541af57', 'quorumVvecHash': 'b723ccd68828dbea11ac1ab7951db69ad9682b1bc1d9e9388fa8d7078dd4c18d', 'quorumSig': '8a96a6b8acce6ad81f5f7e643e31e00f6e7407220c9e1764655940ca13ee7432add78b858eac6629d29966b97d294716061f2a6f107cf8131321da26ca718f771a41a912763bd74f4c7cf5859a02a7fe536a93223b58d691484f73e804184862', 'membersSig': 'b073fef22c18faf0ed70e3c5681419f850eac1059c3417fc126275468b6477d06287bf7cdc710c128314ec19a6a5f0961266c6ada6e84466437ec3a966c45aa31709d7af3d8b6edb196e50386d9c501ae5e247b6b850060f324c8c7031a62b90'}, {'version': 3, 'llmqType': 102, 'quorumHash': '0a0edca11eb8f6c3716c396ef96d31a175dc7cb9f1fbc66334d720774989aedf', 'quorumIndex': 0, 'signersCount': 3, 'signers': '07', 'validMembersCount': 3, 'validMembers': '07', 'quorumPublicKey': '849e7ae1ee8769979f2882ff0e66cd73bbbaf9a7d6caeddbd6cfbf1d2127dd2363f64e18b8f8659ed5bd3dd585fea08e', 'quorumVvecHash': '586e3b287b62684f8293af74942c01a3a60546e63891bd7e60ab4aecb7d2fe24', 'quorumSig': '8329edb1d468a5a0ec4d53c66311918eb06a75379942b06de77a25d9eaa97b3eda09ad5287e471afd02a9d5049337cb000ec3a8fd41c8b3b0516d138c6ec5ace54314a3f5fff0a563174a5c6a2fe9e36f7fb9e2d75e6fcc371c45f12e2a5ca53', 'membersSig': 'b95cc6c940e462d0840c530878bc4f9ff21e2ab6bb626e6a81b0804a1da4eb1d23f76cd1d421efcf54f4d9505d70328904ed7e20b2b4b674b937e377557bb87bd5c1bbcb24e3e79795d3035472e9157902946d47a5a1371e2a90f7d162a3bc0e'}, {'version': 4, 'llmqType': 103, 'quorumHash': '6ea7ea40198c86f773933c1fa086ea054f1b3bc3efa1b78d64a578f6019f9831', 'quorumIndex': 1, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': '98e0e6f79d1697f88867bb7c4f7ef5f07dd39e34daf206f9865179dd1e63ec7d24b20592b664cc86e9278e3613db856d', 'quorumVvecHash': '167be83587b1d056d0767ae711ad3cfe991ce99eb3729466c40d8a68ef5808e2', 'quorumSig': '99ba923647e8fa942cf929969be2c498853236e114cd52805529e43c778c9b6413e6bbc5e3871ee3fff4895f302eff900f0d8f773f36ed739308fdc3a157d0c5fd2caca4a8bf4fb50385489de5cf2e45b2dd5ae4fa64635ae12edcf4038c5ca5', 'membersSig': 'b4a1cc904b7570c448713e0912d77dd550a143d775fbb97750f3d675661af7bb37c11b7ca39650d7ca041bc2b241a7830f39880987834e7a0c160de9d156c2a2cba6773c14985a00521c362750ee7ea27bf0c77ce9abc056aecbd9747dd223f7'}, {'version': 4, 'llmqType': 103, 'quorumHash': '0a0edca11eb8f6c3716c396ef96d31a175dc7cb9f1fbc66334d720774989aedf', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': '9731adc67399062095a817c369c977ceedc5f0e8597d72b6d70a4ba1a4a496cf780d0d62e3f038f129998b8a323d20c4', 'quorumVvecHash': '90ab3d4a2ffa7d6eb801032b679efef9974f2f9979c7c2cb3e8ef9b33cbee6f2', 'quorumSig': '906c32ecc9ef25466ce3f2970e9c95fc6f896866ccb45b2a140fccca15d1a3c8801c1b7a6e8de365e211ef87f69b361416d09f03d6f0779aa211aefc7658b3b2a45d990a24577956ff7fdc2307d0a943ff9945bf5fe2ef29ff8cfd42ee4e29ee', 'membersSig': 'af1aebef49703fae9144cee3543b8d79bdd191371b80bfff70d59479c1a1cbe3fb496572abc2bf58c63dce84ecb0409e07c605b1f207d34385eda8bca3277ea21e8408b4081d917eda4b07ebbe1372edd2dfe4ca8e50c0d78ddeae1f131a3d99'}], 'merkleRootMNList': 'fb10c3cd373890d389110ea65473c9bebb7c0f5371474a992bd0b5fa0e7acbe1', 'merkleRootQuorums': 'b83ed4dd9a5f4bfd39d920ff4a123d292528b137a3a0fa71c97deeac3d995045', 'quorumsCLSigs': []}, 'mnListDiffH': {'nVersion': 1, 'baseBlockHash': '000008ca1832a4baf228eb1553c03d3a2c8e02399550dd6ea8d65cec3ef23d2e', 'blockHash': '07a540b8771f23ff922ed652687f866e5efc27b94a6d922aec68d91225127939', 'cbTxMerkleTree': '0600000004ddafdc2768a33ace8cb6984492f3e8290b7e87a53eeea1a7d2574607edde4c269e1a578d8b4639335e0571893e738378ac9d97e6b5f607e730942eeadb4e378b1da3ab94d9851954b265a5f94ebe7d837ef36d555a6d7dbbb0754c53920e84022b3c986ce641cb943e56a63c085f9988c01b38fc1b5b90f76dd3345bcf0d0693010f', 'cbTx': '03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff050248040101ffffffff03aa8b4e1e030000001976a9148708dff2bf8b31363cb4201d179b4714aa7b54a088acec36570e030000001976a914f4f68699fb7649bdfa3fb8fe578000d213917a8488acb654f70f000000001976a914eb747196393894238cb18ebd758b97c3529fae7288ac0000000046020048040000e1cb7a0efab5d02b994a4771530f7cbbbec97354a60e1189d3903837cdc310fba3bb79ae14a2179a5debbdc1dd4497b993f5162ba779a16fc0fc57d593f71fa0', 'deletedMNs': [], 'mnList': [{'nVersion': 1, 'nType': 0, 'proRegTxHash': 'b1ff91bb4247d4883c988d40c9f847b422f20a011ae681ad0852368f3e31d266', 'confirmedHash': '4d6a402ef0eea8ccfb24199f1618708fc34e0461abdd4692b4c23bafbd4e3713', 'service': '127.0.0.1:14125', 'pubKeyOperator': '93ec5f0eee5bfc0a24b7c95c088a60d3765b288bf975888765cd049d21c62215a558af147678162e9f5401cc44d9ed9c', 'votingAddress': 'ybcNcsLwcyVQg7xYKhBfNdsJ349ZMebvS5', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': '9c0a7c8a579ab8a3feab270b870a56fa06732a66246da291543ee93d781f5828', 'confirmedHash': '646f457335100a95018c2eb649113d1073455c962c522db363bb433968239e15', 'service': '127.0.0.1:14124', 'pubKeyOperator': '12dae6139d97b43b44b6d6017ee1bfc9c37337d9987d08c0308dca421ba5c2074341b59a9b35a91935e5a8ac83953335', 'votingAddress': 'yerSqmXyuxUZrdt7XKPg34aGyyKzNuVUiw', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': 'cef65784031e9f1e30887474375ea1086088839d012450da1fc030e413bf330a', 'confirmedHash': '0befc211c744b063cca4e02277a0f60728b42c27ace99ff9724afec226bbfd0e', 'service': '127.0.0.1:14123', 'pubKeyOperator': '074729dd7f8ea073f4694550de8c6c5e258c742f6e300067646bedc09c66e53256bc7b40ae835f6fdcc5b5c420aa925a', 'votingAddress': 'yi923TRM2dQLTA9S2zDWtFtrxrm97qZn3t', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': '01a1dd6d7de668d3d2e8d225ded648d713c405e98d2b155e294cf2e8d8279a13', 'confirmedHash': '15fe17827cb7815a0e5751be60a54d7e7f37ee17f2bdf8894665ab2a88ebbf3e', 'service': '127.0.0.1:14126', 'pubKeyOperator': '05ec4b528a5bdbdd353e4687f9187caf0399a713590bae6ebff8fc44af3dffeb953c378bd91b7416484ee55d99602498', 'votingAddress': 'yQ4EppPanEhNtnrLv9PnmuYu7FeBnBCANj', 'isValid': True}], 'deletedQuorums': [], 'newQuorums': [{'version': 3, 'llmqType': 100, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': 'af5b4e78031a9e331a268815e34006e459be897cc6e127b166a6f5ab6673db82bfd42bc58939177fe643fba89d74a0b6', 'quorumVvecHash': 'a861a37614e2104197931ac07d39c91a2cc4a1ae69a8029c94ebbfe19d2cb926', 'quorumSig': '911808c92a4bc2619ac26551f9e8060fa1a9b29e34f10f6707a608c10fd6658eea706f0fbcbbdee0866076d5bb05d7430c4267c97c051d274202230fc54cc625511542ad6d85e93a23f55b92d0b50439b0cf1ff0734849f253e42f9cd3ea7e9f', 'membersSig': '94e8ac60c25554bb16d8707c61c40c2cef15a0eee283e962875ef85eb5a3760de0a4196ef1c02c5f5df08cea0e644b4f13c4529a6f826230a088800db7f34a2feab70959e5932690b6d8ad5276a7eca2fe4bb79abf0618bc0bab30800714eab8'}, {'version': 3, 'llmqType': 102, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 3, 'signers': '07', 'validMembersCount': 3, 'validMembers': '07', 'quorumPublicKey': 'af1ad4c55ab202ab037ebc926692e46236c1ece38a7f54fb14149ce26d14a4adb91f6786d6c37a560a8a82390541af57', 'quorumVvecHash': 'b723ccd68828dbea11ac1ab7951db69ad9682b1bc1d9e9388fa8d7078dd4c18d', 'quorumSig': '8a96a6b8acce6ad81f5f7e643e31e00f6e7407220c9e1764655940ca13ee7432add78b858eac6629d29966b97d294716061f2a6f107cf8131321da26ca718f771a41a912763bd74f4c7cf5859a02a7fe536a93223b58d691484f73e804184862', 'membersSig': 'b073fef22c18faf0ed70e3c5681419f850eac1059c3417fc126275468b6477d06287bf7cdc710c128314ec19a6a5f0961266c6ada6e84466437ec3a966c45aa31709d7af3d8b6edb196e50386d9c501ae5e247b6b850060f324c8c7031a62b90'}, {'version': 4, 'llmqType': 103, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': 'b877734e0ed98cb7f4baf8fc8539d456eebdd64036c64987690da226ce68207b38669a8a0d91b764235bde95bc41ab16', 'quorumVvecHash': '5f1c8afcd752bfe5befa0e8a244abcdc425ed7f32f51e9711c337aab540b5dd9', 'quorumSig': 'a36e754b87a834f1ca812eb090677029e8e91a2e4e5abbef1c6fcc8762fb74532aec1a9fd106fad64357345cc2817be0056208b0669836f65fb4e875858df025707c64d933afbf8410a2f946cc2428b6ad7465e5e6a03f860856fde1b8839e2e', 'membersSig': '883188df63b21a4dc82a4f9403effd74819d9fcf1620e3ca8bb8d1666f8be65ff3c732f7c6b6f80014c611adb891fd2614a69c9ef9eba8105c90c1c6ae0e3f69dc1529e1834dbb5c44e36e7feff4b927954393c80891e3251f302f322ddec152'}, {'version': 4, 'llmqType': 103, 'quorumHash': '297c60280af8be06a9188b7c5292bd99fee26f98338759f2464fccc70111e18b', 'quorumIndex': 1, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': '9285d97ba5cb48c750f271cc03e1435fe33218760932f6480e6616816f3192d08352179a588609d03f3202e23d327a2c', 'quorumVvecHash': '5bf005cd26d533c89fe164a1f36bad1cb2ac91dc58dbdc478c2fd423711a3882', 'quorumSig': '84a1616edc76a39a0b299ffd5e1a5b35ca8a2a059bf983c3e63116b177c6e9e3e021342faac70a73f6ecaef81e141d8f0a2f711433acd1d9c4725a58f4ffcce12e5085dd3476b41b38dd3f9e1779938f0acd9f33f1c758397c9629f0b7f1d6b5', 'membersSig': 'a493232862a3c89eaea55418d66cf2b943b6ed38fda0193901e06de1258d12da09c028bdf6e87cdd6d20af14bd70c577076042815407cd5e371e4b7bc89a0457659325e085c2bafe57856a86cc6e38431f2f08116762e4ecb82af02e28b0cfad'}], 'merkleRootMNList': 'fb10c3cd373890d389110ea65473c9bebb7c0f5371474a992bd0b5fa0e7acbe1', 'merkleRootQuorums': 'a01ff793d557fcc06fa179a72b16f593b99744ddc1bdeb5d9a17a214ae79bba3', 'quorumsCLSigs': []}, 'mnListDiffAtHMinusC': {'nVersion': 1, 'baseBlockHash': '000008ca1832a4baf228eb1553c03d3a2c8e02399550dd6ea8d65cec3ef23d2e', 'blockHash': '12c7009f07b53d874420231f8f2ec5288ae5cbf51cb6476dfdd5c36fd4cbbad0', 'cbTxMerkleTree': '06000000045fa16425880430a42bef8a38474acfa2094b86a1d2bec4c8b9641997b2c39a618a2f871ab75360c9175095ef3e628b9f6d38cbfe4f4092466a280bbf4c27c1fdbef343683f1251082048bafa1b393dd61d915316cbb89fbee2c0824c144c9a94b2d012772005631a1b84112cfd307e31a02518f4a1e42967cd12c9480eafc4fb010f', 'cbTx': '03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff050230040101ffffffff03aa8b4e1e030000001976a9148708dff2bf8b31363cb4201d179b4714aa7b54a088acec36570e030000001976a914f4f68699fb7649bdfa3fb8fe578000d213917a8488acb654f70f000000001976a914eb747196393894238cb18ebd758b97c3529fae7288ac0000000046020030040000e1cb7a0efab5d02b994a4771530f7cbbbec97354a60e1189d3903837cdc310fba3bb79ae14a2179a5debbdc1dd4497b993f5162ba779a16fc0fc57d593f71fa0', 'deletedMNs': [], 'mnList': [{'nVersion': 1, 'nType': 0, 'proRegTxHash': 'b1ff91bb4247d4883c988d40c9f847b422f20a011ae681ad0852368f3e31d266', 'confirmedHash': '4d6a402ef0eea8ccfb24199f1618708fc34e0461abdd4692b4c23bafbd4e3713', 'service': '127.0.0.1:14125', 'pubKeyOperator': '93ec5f0eee5bfc0a24b7c95c088a60d3765b288bf975888765cd049d21c62215a558af147678162e9f5401cc44d9ed9c', 'votingAddress': 'ybcNcsLwcyVQg7xYKhBfNdsJ349ZMebvS5', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': '9c0a7c8a579ab8a3feab270b870a56fa06732a66246da291543ee93d781f5828', 'confirmedHash': '646f457335100a95018c2eb649113d1073455c962c522db363bb433968239e15', 'service': '127.0.0.1:14124', 'pubKeyOperator': '12dae6139d97b43b44b6d6017ee1bfc9c37337d9987d08c0308dca421ba5c2074341b59a9b35a91935e5a8ac83953335', 'votingAddress': 'yerSqmXyuxUZrdt7XKPg34aGyyKzNuVUiw', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': 'cef65784031e9f1e30887474375ea1086088839d012450da1fc030e413bf330a', 'confirmedHash': '0befc211c744b063cca4e02277a0f60728b42c27ace99ff9724afec226bbfd0e', 'service': '127.0.0.1:14123', 'pubKeyOperator': '074729dd7f8ea073f4694550de8c6c5e258c742f6e300067646bedc09c66e53256bc7b40ae835f6fdcc5b5c420aa925a', 'votingAddress': 'yi923TRM2dQLTA9S2zDWtFtrxrm97qZn3t', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': '01a1dd6d7de668d3d2e8d225ded648d713c405e98d2b155e294cf2e8d8279a13', 'confirmedHash': '15fe17827cb7815a0e5751be60a54d7e7f37ee17f2bdf8894665ab2a88ebbf3e', 'service': '127.0.0.1:14126', 'pubKeyOperator': '05ec4b528a5bdbdd353e4687f9187caf0399a713590bae6ebff8fc44af3dffeb953c378bd91b7416484ee55d99602498', 'votingAddress': 'yQ4EppPanEhNtnrLv9PnmuYu7FeBnBCANj', 'isValid': True}], 'deletedQuorums': [], 'newQuorums': [{'version': 3, 'llmqType': 100, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': 'af5b4e78031a9e331a268815e34006e459be897cc6e127b166a6f5ab6673db82bfd42bc58939177fe643fba89d74a0b6', 'quorumVvecHash': 'a861a37614e2104197931ac07d39c91a2cc4a1ae69a8029c94ebbfe19d2cb926', 'quorumSig': '911808c92a4bc2619ac26551f9e8060fa1a9b29e34f10f6707a608c10fd6658eea706f0fbcbbdee0866076d5bb05d7430c4267c97c051d274202230fc54cc625511542ad6d85e93a23f55b92d0b50439b0cf1ff0734849f253e42f9cd3ea7e9f', 'membersSig': '94e8ac60c25554bb16d8707c61c40c2cef15a0eee283e962875ef85eb5a3760de0a4196ef1c02c5f5df08cea0e644b4f13c4529a6f826230a088800db7f34a2feab70959e5932690b6d8ad5276a7eca2fe4bb79abf0618bc0bab30800714eab8'}, {'version': 3, 'llmqType': 102, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 3, 'signers': '07', 'validMembersCount': 3, 'validMembers': '07', 'quorumPublicKey': 'af1ad4c55ab202ab037ebc926692e46236c1ece38a7f54fb14149ce26d14a4adb91f6786d6c37a560a8a82390541af57', 'quorumVvecHash': 'b723ccd68828dbea11ac1ab7951db69ad9682b1bc1d9e9388fa8d7078dd4c18d', 'quorumSig': '8a96a6b8acce6ad81f5f7e643e31e00f6e7407220c9e1764655940ca13ee7432add78b858eac6629d29966b97d294716061f2a6f107cf8131321da26ca718f771a41a912763bd74f4c7cf5859a02a7fe536a93223b58d691484f73e804184862', 'membersSig': 'b073fef22c18faf0ed70e3c5681419f850eac1059c3417fc126275468b6477d06287bf7cdc710c128314ec19a6a5f0961266c6ada6e84466437ec3a966c45aa31709d7af3d8b6edb196e50386d9c501ae5e247b6b850060f324c8c7031a62b90'}, {'version': 4, 'llmqType': 103, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': 'b877734e0ed98cb7f4baf8fc8539d456eebdd64036c64987690da226ce68207b38669a8a0d91b764235bde95bc41ab16', 'quorumVvecHash': '5f1c8afcd752bfe5befa0e8a244abcdc425ed7f32f51e9711c337aab540b5dd9', 'quorumSig': 'a36e754b87a834f1ca812eb090677029e8e91a2e4e5abbef1c6fcc8762fb74532aec1a9fd106fad64357345cc2817be0056208b0669836f65fb4e875858df025707c64d933afbf8410a2f946cc2428b6ad7465e5e6a03f860856fde1b8839e2e', 'membersSig': '883188df63b21a4dc82a4f9403effd74819d9fcf1620e3ca8bb8d1666f8be65ff3c732f7c6b6f80014c611adb891fd2614a69c9ef9eba8105c90c1c6ae0e3f69dc1529e1834dbb5c44e36e7feff4b927954393c80891e3251f302f322ddec152'}, {'version': 4, 'llmqType': 103, 'quorumHash': '297c60280af8be06a9188b7c5292bd99fee26f98338759f2464fccc70111e18b', 'quorumIndex': 1, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': '9285d97ba5cb48c750f271cc03e1435fe33218760932f6480e6616816f3192d08352179a588609d03f3202e23d327a2c', 'quorumVvecHash': '5bf005cd26d533c89fe164a1f36bad1cb2ac91dc58dbdc478c2fd423711a3882', 'quorumSig': '84a1616edc76a39a0b299ffd5e1a5b35ca8a2a059bf983c3e63116b177c6e9e3e021342faac70a73f6ecaef81e141d8f0a2f711433acd1d9c4725a58f4ffcce12e5085dd3476b41b38dd3f9e1779938f0acd9f33f1c758397c9629f0b7f1d6b5', 'membersSig': 'a493232862a3c89eaea55418d66cf2b943b6ed38fda0193901e06de1258d12da09c028bdf6e87cdd6d20af14bd70c577076042815407cd5e371e4b7bc89a0457659325e085c2bafe57856a86cc6e38431f2f08116762e4ecb82af02e28b0cfad'}], 'merkleRootMNList': 'fb10c3cd373890d389110ea65473c9bebb7c0f5371474a992bd0b5fa0e7acbe1', 'merkleRootQuorums': 'a01ff793d557fcc06fa179a72b16f593b99744ddc1bdeb5d9a17a214ae79bba3', 'quorumsCLSigs': []}, 'mnListDiffAtHMinus2C': {'nVersion': 1, 'baseBlockHash': '000008ca1832a4baf228eb1553c03d3a2c8e02399550dd6ea8d65cec3ef23d2e', 'blockHash': '42fcbde4cc4dcf7099d0eccb217724e67cd188c7cbd881ab1c98fedfb976b572', 'cbTxMerkleTree': '060000000400177b12c13e03602a6cccb93fa168d936aa9e2b5bfc31745123d9dbd20a3b807d7d6c62591b7eb9302cc2c0a0f6188b4f051da48469dbef7835a4bd1ac7af112bc47a257531df3f48ba843e121888c9918e9598e76a1439e65d2ddf3ac7e1969903ece25a1b5678d0ca9c9771cf43063d349042f6527927f3645c2b5bc32d17010f', 'cbTx': '03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff050218040101ffffffff038d0cb75b030000001976a9148708dff2bf8b31363cb4201d179b4714aa7b54a088acd94e854a030000001976a914f4f68699fb7649bdfa3fb8fe578000d213917a8488acb0bd3111000000001976a914eb747196393894238cb18ebd758b97c3529fae7288ac0000000046020018040000e1cb7a0efab5d02b994a4771530f7cbbbec97354a60e1189d3903837cdc310fba3bb79ae14a2179a5debbdc1dd4497b993f5162ba779a16fc0fc57d593f71fa0', 'deletedMNs': [], 'mnList': [{'nVersion': 1, 'nType': 0, 'proRegTxHash': 'b1ff91bb4247d4883c988d40c9f847b422f20a011ae681ad0852368f3e31d266', 'confirmedHash': '4d6a402ef0eea8ccfb24199f1618708fc34e0461abdd4692b4c23bafbd4e3713', 'service': '127.0.0.1:14125', 'pubKeyOperator': '93ec5f0eee5bfc0a24b7c95c088a60d3765b288bf975888765cd049d21c62215a558af147678162e9f5401cc44d9ed9c', 'votingAddress': 'ybcNcsLwcyVQg7xYKhBfNdsJ349ZMebvS5', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': '9c0a7c8a579ab8a3feab270b870a56fa06732a66246da291543ee93d781f5828', 'confirmedHash': '646f457335100a95018c2eb649113d1073455c962c522db363bb433968239e15', 'service': '127.0.0.1:14124', 'pubKeyOperator': '12dae6139d97b43b44b6d6017ee1bfc9c37337d9987d08c0308dca421ba5c2074341b59a9b35a91935e5a8ac83953335', 'votingAddress': 'yerSqmXyuxUZrdt7XKPg34aGyyKzNuVUiw', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': 'cef65784031e9f1e30887474375ea1086088839d012450da1fc030e413bf330a', 'confirmedHash': '0befc211c744b063cca4e02277a0f60728b42c27ace99ff9724afec226bbfd0e', 'service': '127.0.0.1:14123', 'pubKeyOperator': '074729dd7f8ea073f4694550de8c6c5e258c742f6e300067646bedc09c66e53256bc7b40ae835f6fdcc5b5c420aa925a', 'votingAddress': 'yi923TRM2dQLTA9S2zDWtFtrxrm97qZn3t', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': '01a1dd6d7de668d3d2e8d225ded648d713c405e98d2b155e294cf2e8d8279a13', 'confirmedHash': '15fe17827cb7815a0e5751be60a54d7e7f37ee17f2bdf8894665ab2a88ebbf3e', 'service': '127.0.0.1:14126', 'pubKeyOperator': '05ec4b528a5bdbdd353e4687f9187caf0399a713590bae6ebff8fc44af3dffeb953c378bd91b7416484ee55d99602498', 'votingAddress': 'yQ4EppPanEhNtnrLv9PnmuYu7FeBnBCANj', 'isValid': True}], 'deletedQuorums': [], 'newQuorums': [{'version': 3, 'llmqType': 100, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': 'af5b4e78031a9e331a268815e34006e459be897cc6e127b166a6f5ab6673db82bfd42bc58939177fe643fba89d74a0b6', 'quorumVvecHash': 'a861a37614e2104197931ac07d39c91a2cc4a1ae69a8029c94ebbfe19d2cb926', 'quorumSig': '911808c92a4bc2619ac26551f9e8060fa1a9b29e34f10f6707a608c10fd6658eea706f0fbcbbdee0866076d5bb05d7430c4267c97c051d274202230fc54cc625511542ad6d85e93a23f55b92d0b50439b0cf1ff0734849f253e42f9cd3ea7e9f', 'membersSig': '94e8ac60c25554bb16d8707c61c40c2cef15a0eee283e962875ef85eb5a3760de0a4196ef1c02c5f5df08cea0e644b4f13c4529a6f826230a088800db7f34a2feab70959e5932690b6d8ad5276a7eca2fe4bb79abf0618bc0bab30800714eab8'}, {'version': 3, 'llmqType': 102, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 3, 'signers': '07', 'validMembersCount': 3, 'validMembers': '07', 'quorumPublicKey': 'af1ad4c55ab202ab037ebc926692e46236c1ece38a7f54fb14149ce26d14a4adb91f6786d6c37a560a8a82390541af57', 'quorumVvecHash': 'b723ccd68828dbea11ac1ab7951db69ad9682b1bc1d9e9388fa8d7078dd4c18d', 'quorumSig': '8a96a6b8acce6ad81f5f7e643e31e00f6e7407220c9e1764655940ca13ee7432add78b858eac6629d29966b97d294716061f2a6f107cf8131321da26ca718f771a41a912763bd74f4c7cf5859a02a7fe536a93223b58d691484f73e804184862', 'membersSig': 'b073fef22c18faf0ed70e3c5681419f850eac1059c3417fc126275468b6477d06287bf7cdc710c128314ec19a6a5f0961266c6ada6e84466437ec3a966c45aa31709d7af3d8b6edb196e50386d9c501ae5e247b6b850060f324c8c7031a62b90'}, {'version': 4, 'llmqType': 103, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': 'b877734e0ed98cb7f4baf8fc8539d456eebdd64036c64987690da226ce68207b38669a8a0d91b764235bde95bc41ab16', 'quorumVvecHash': '5f1c8afcd752bfe5befa0e8a244abcdc425ed7f32f51e9711c337aab540b5dd9', 'quorumSig': 'a36e754b87a834f1ca812eb090677029e8e91a2e4e5abbef1c6fcc8762fb74532aec1a9fd106fad64357345cc2817be0056208b0669836f65fb4e875858df025707c64d933afbf8410a2f946cc2428b6ad7465e5e6a03f860856fde1b8839e2e', 'membersSig': '883188df63b21a4dc82a4f9403effd74819d9fcf1620e3ca8bb8d1666f8be65ff3c732f7c6b6f80014c611adb891fd2614a69c9ef9eba8105c90c1c6ae0e3f69dc1529e1834dbb5c44e36e7feff4b927954393c80891e3251f302f322ddec152'}, {'version': 4, 'llmqType': 103, 'quorumHash': '297c60280af8be06a9188b7c5292bd99fee26f98338759f2464fccc70111e18b', 'quorumIndex': 1, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': '9285d97ba5cb48c750f271cc03e1435fe33218760932f6480e6616816f3192d08352179a588609d03f3202e23d327a2c', 'quorumVvecHash': '5bf005cd26d533c89fe164a1f36bad1cb2ac91dc58dbdc478c2fd423711a3882', 'quorumSig': '84a1616edc76a39a0b299ffd5e1a5b35ca8a2a059bf983c3e63116b177c6e9e3e021342faac70a73f6ecaef81e141d8f0a2f711433acd1d9c4725a58f4ffcce12e5085dd3476b41b38dd3f9e1779938f0acd9f33f1c758397c9629f0b7f1d6b5', 'membersSig': 'a493232862a3c89eaea55418d66cf2b943b6ed38fda0193901e06de1258d12da09c028bdf6e87cdd6d20af14bd70c577076042815407cd5e371e4b7bc89a0457659325e085c2bafe57856a86cc6e38431f2f08116762e4ecb82af02e28b0cfad'}], 'merkleRootMNList': 'fb10c3cd373890d389110ea65473c9bebb7c0f5371474a992bd0b5fa0e7acbe1', 'merkleRootQuorums': 'a01ff793d557fcc06fa179a72b16f593b99744ddc1bdeb5d9a17a214ae79bba3', 'quorumsCLSigs': []}, 'mnListDiffAtHMinus3C': {'nVersion': 1, 'baseBlockHash': '000008ca1832a4baf228eb1553c03d3a2c8e02399550dd6ea8d65cec3ef23d2e', 'blockHash': '4d3be11188ed1bb0ab7049b68dd5907106cc72f092f8f1d20b32b99c80012a10', 'cbTxMerkleTree': '06000000043efffa4312a68d2ecca7513b85ac9a06f6c57be827d791f356af2f657ff55c6042d1895271a7baa9b7705201a35351e7411a3b738788a4545aee28995f47b2d53d7a9ff92fe3843e0d22dcf5fdca7b9e8609b046981468f58c636a0d69e7e697181d8915e0fe965c3ce9f1c833ceac88f86f8d7a22e9f4b5987f8b154b4b270a010f', 'cbTx': '03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff050200040101ffffffff038d0cb75b030000001976a9148708dff2bf8b31363cb4201d179b4714aa7b54a088acd94e854a030000001976a914f4f68699fb7649bdfa3fb8fe578000d213917a8488acb0bd3111000000001976a914eb747196393894238cb18ebd758b97c3529fae7288ac0000000046020000040000e1cb7a0efab5d02b994a4771530f7cbbbec97354a60e1189d3903837cdc310fba3bb79ae14a2179a5debbdc1dd4497b993f5162ba779a16fc0fc57d593f71fa0', 'deletedMNs': [], 'mnList': [{'nVersion': 1, 'nType': 0, 'proRegTxHash': 'b1ff91bb4247d4883c988d40c9f847b422f20a011ae681ad0852368f3e31d266', 'confirmedHash': '4d6a402ef0eea8ccfb24199f1618708fc34e0461abdd4692b4c23bafbd4e3713', 'service': '127.0.0.1:14125', 'pubKeyOperator': '93ec5f0eee5bfc0a24b7c95c088a60d3765b288bf975888765cd049d21c62215a558af147678162e9f5401cc44d9ed9c', 'votingAddress': 'ybcNcsLwcyVQg7xYKhBfNdsJ349ZMebvS5', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': '9c0a7c8a579ab8a3feab270b870a56fa06732a66246da291543ee93d781f5828', 'confirmedHash': '646f457335100a95018c2eb649113d1073455c962c522db363bb433968239e15', 'service': '127.0.0.1:14124', 'pubKeyOperator': '12dae6139d97b43b44b6d6017ee1bfc9c37337d9987d08c0308dca421ba5c2074341b59a9b35a91935e5a8ac83953335', 'votingAddress': 'yerSqmXyuxUZrdt7XKPg34aGyyKzNuVUiw', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': 'cef65784031e9f1e30887474375ea1086088839d012450da1fc030e413bf330a', 'confirmedHash': '0befc211c744b063cca4e02277a0f60728b42c27ace99ff9724afec226bbfd0e', 'service': '127.0.0.1:14123', 'pubKeyOperator': '074729dd7f8ea073f4694550de8c6c5e258c742f6e300067646bedc09c66e53256bc7b40ae835f6fdcc5b5c420aa925a', 'votingAddress': 'yi923TRM2dQLTA9S2zDWtFtrxrm97qZn3t', 'isValid': True}, {'nVersion': 1, 'nType': 0, 'proRegTxHash': '01a1dd6d7de668d3d2e8d225ded648d713c405e98d2b155e294cf2e8d8279a13', 'confirmedHash': '15fe17827cb7815a0e5751be60a54d7e7f37ee17f2bdf8894665ab2a88ebbf3e', 'service': '127.0.0.1:14126', 'pubKeyOperator': '05ec4b528a5bdbdd353e4687f9187caf0399a713590bae6ebff8fc44af3dffeb953c378bd91b7416484ee55d99602498', 'votingAddress': 'yQ4EppPanEhNtnrLv9PnmuYu7FeBnBCANj', 'isValid': True}], 'deletedQuorums': [], 'newQuorums': [{'version': 3, 'llmqType': 100, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': 'af5b4e78031a9e331a268815e34006e459be897cc6e127b166a6f5ab6673db82bfd42bc58939177fe643fba89d74a0b6', 'quorumVvecHash': 'a861a37614e2104197931ac07d39c91a2cc4a1ae69a8029c94ebbfe19d2cb926', 'quorumSig': '911808c92a4bc2619ac26551f9e8060fa1a9b29e34f10f6707a608c10fd6658eea706f0fbcbbdee0866076d5bb05d7430c4267c97c051d274202230fc54cc625511542ad6d85e93a23f55b92d0b50439b0cf1ff0734849f253e42f9cd3ea7e9f', 'membersSig': '94e8ac60c25554bb16d8707c61c40c2cef15a0eee283e962875ef85eb5a3760de0a4196ef1c02c5f5df08cea0e644b4f13c4529a6f826230a088800db7f34a2feab70959e5932690b6d8ad5276a7eca2fe4bb79abf0618bc0bab30800714eab8'}, {'version': 3, 'llmqType': 102, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 3, 'signers': '07', 'validMembersCount': 3, 'validMembers': '07', 'quorumPublicKey': 'af1ad4c55ab202ab037ebc926692e46236c1ece38a7f54fb14149ce26d14a4adb91f6786d6c37a560a8a82390541af57', 'quorumVvecHash': 'b723ccd68828dbea11ac1ab7951db69ad9682b1bc1d9e9388fa8d7078dd4c18d', 'quorumSig': '8a96a6b8acce6ad81f5f7e643e31e00f6e7407220c9e1764655940ca13ee7432add78b858eac6629d29966b97d294716061f2a6f107cf8131321da26ca718f771a41a912763bd74f4c7cf5859a02a7fe536a93223b58d691484f73e804184862', 'membersSig': 'b073fef22c18faf0ed70e3c5681419f850eac1059c3417fc126275468b6477d06287bf7cdc710c128314ec19a6a5f0961266c6ada6e84466437ec3a966c45aa31709d7af3d8b6edb196e50386d9c501ae5e247b6b850060f324c8c7031a62b90'}, {'version': 4, 'llmqType': 103, 'quorumHash': '7efe443cd3f6c0faa09cc0faa5f9f09af1f17a27751d529bfb3f83b695965676', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': 'b877734e0ed98cb7f4baf8fc8539d456eebdd64036c64987690da226ce68207b38669a8a0d91b764235bde95bc41ab16', 'quorumVvecHash': '5f1c8afcd752bfe5befa0e8a244abcdc425ed7f32f51e9711c337aab540b5dd9', 'quorumSig': 'a36e754b87a834f1ca812eb090677029e8e91a2e4e5abbef1c6fcc8762fb74532aec1a9fd106fad64357345cc2817be0056208b0669836f65fb4e875858df025707c64d933afbf8410a2f946cc2428b6ad7465e5e6a03f860856fde1b8839e2e', 'membersSig': '883188df63b21a4dc82a4f9403effd74819d9fcf1620e3ca8bb8d1666f8be65ff3c732f7c6b6f80014c611adb891fd2614a69c9ef9eba8105c90c1c6ae0e3f69dc1529e1834dbb5c44e36e7feff4b927954393c80891e3251f302f322ddec152'}, {'version': 4, 'llmqType': 103, 'quorumHash': '297c60280af8be06a9188b7c5292bd99fee26f98338759f2464fccc70111e18b', 'quorumIndex': 1, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': '9285d97ba5cb48c750f271cc03e1435fe33218760932f6480e6616816f3192d08352179a588609d03f3202e23d327a2c', 'quorumVvecHash': '5bf005cd26d533c89fe164a1f36bad1cb2ac91dc58dbdc478c2fd423711a3882', 'quorumSig': '84a1616edc76a39a0b299ffd5e1a5b35ca8a2a059bf983c3e63116b177c6e9e3e021342faac70a73f6ecaef81e141d8f0a2f711433acd1d9c4725a58f4ffcce12e5085dd3476b41b38dd3f9e1779938f0acd9f33f1c758397c9629f0b7f1d6b5', 'membersSig': 'a493232862a3c89eaea55418d66cf2b943b6ed38fda0193901e06de1258d12da09c028bdf6e87cdd6d20af14bd70c577076042815407cd5e371e4b7bc89a0457659325e085c2bafe57856a86cc6e38431f2f08116762e4ecb82af02e28b0cfad'}], 'merkleRootMNList': 'fb10c3cd373890d389110ea65473c9bebb7c0f5371474a992bd0b5fa0e7acbe1', 'merkleRootQuorums': 'a01ff793d557fcc06fa179a72b16f593b99744ddc1bdeb5d9a17a214ae79bba3', 'quorumsCLSigs': []}, 'lastCommitmentPerIndex': [{'version': 4, 'llmqType': 103, 'quorumHash': '0a0edca11eb8f6c3716c396ef96d31a175dc7cb9f1fbc66334d720774989aedf', 'quorumIndex': 0, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': '9731adc67399062095a817c369c977ceedc5f0e8597d72b6d70a4ba1a4a496cf780d0d62e3f038f129998b8a323d20c4', 'quorumVvecHash': '90ab3d4a2ffa7d6eb801032b679efef9974f2f9979c7c2cb3e8ef9b33cbee6f2', 'quorumSig': '906c32ecc9ef25466ce3f2970e9c95fc6f896866ccb45b2a140fccca15d1a3c8801c1b7a6e8de365e211ef87f69b361416d09f03d6f0779aa211aefc7658b3b2a45d990a24577956ff7fdc2307d0a943ff9945bf5fe2ef29ff8cfd42ee4e29ee', 'membersSig': 'af1aebef49703fae9144cee3543b8d79bdd191371b80bfff70d59479c1a1cbe3fb496572abc2bf58c63dce84ecb0409e07c605b1f207d34385eda8bca3277ea21e8408b4081d917eda4b07ebbe1372edd2dfe4ca8e50c0d78ddeae1f131a3d99'}, {'version': 4, 'llmqType': 103, 'quorumHash': '6ea7ea40198c86f773933c1fa086ea054f1b3bc3efa1b78d64a578f6019f9831', 'quorumIndex': 1, 'signersCount': 4, 'signers': '0f', 'validMembersCount': 4, 'validMembers': '0f', 'quorumPublicKey': '98e0e6f79d1697f88867bb7c4f7ef5f07dd39e34daf206f9865179dd1e63ec7d24b20592b664cc86e9278e3613db856d', 'quorumVvecHash': '167be83587b1d056d0767ae711ad3cfe991ce99eb3729466c40d8a68ef5808e2', 'quorumSig': '99ba923647e8fa942cf929969be2c498853236e114cd52805529e43c778c9b6413e6bbc5e3871ee3fff4895f302eff900f0d8f773f36ed739308fdc3a157d0c5fd2caca4a8bf4fb50385489de5cf2e45b2dd5ae4fa64635ae12edcf4038c5ca5', 'membersSig': 'b4a1cc904b7570c448713e0912d77dd550a143d775fbb97750f3d675661af7bb37c11b7ca39650d7ca041bc2b241a7830f39880987834e7a0c160de9d156c2a2cba6773c14985a00521c362750ee7ea27bf0c77ce9abc056aecbd9747dd223f7'}], 'quorumSnapshotList': [], 'mnListDiffList': []}
  2024-03-21T12:26:35.093000Z TestFramework (INFO): Testing 5 InstantSend publishers
  2024-03-21T12:26:42.353000Z TestFramework (INFO): Stopping nodes
  2024-03-21T12:26:43.360000Z TestFramework (INFO): Cleaning up /tmp/dash_func_test__2tlpe0x on exit
  2024-03-21T12:26:43.360000Z TestFramework (INFO): Tests successful
  ```

  </details>

  ## Breaking Changes

  None. Fixes crash.

  ## Checklist:
    _Go over all the following points, and put an `x` in all the boxes that apply._
  - [x] I have performed a self-review of my own code
  - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)**
  - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)**
  - [x] I have made corresponding changes to the documentation **(note: N/A)**
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

Top commit has no ACKs.

Tree-SHA512: f94799aeb091dc85a36599f231df5cd00784172320750e2e23dd1c29ce22539340d39c66f7ced9d7a935e73b5db38666e9b800220ed7071a664c5b01b0bc2be1
2024-03-21 13:41:57 -05:00
Kittywhiskers Van Gogh
419a8af274
fix: revert "drop circular dependencies over deterministicmns in validationinterface"
This reverts commit fa6847d2fb.
2024-03-21 12:24:38 +00:00
pasta
a7e61114f8
Merge #5933: refactor: reduce CDeterministicMNManager globals use
fa6847d2fb refactor: drop circular dependencies over deterministicmns in validationinterface (Konstantin Akimov)
f8d1853903 refactor: even more passing CDeterministicMNManager by ref (Kittywhiskers Van Gogh)
d4aa891735 refactor: more passing CDeterministicMNManager by ref (Kittywhiskers Van Gogh)
e628d7517a refactor: pass CDeterministicMNManager by ref to CJContext members (Kittywhiskers Van Gogh)
d731f4127e refactor: pass CDeterministicMNManager by ref to LLMQContext members (Kittywhiskers Van Gogh)
6bd23f40aa refactor: pass CDeterministicMNManager by ref to CGovernanceManager (Kittywhiskers Van Gogh)
055dbba1fa refactor: move GetListAtChainTip() calls out of llmq::utils::*, misc changes (Kittywhiskers Van Gogh)
da39b73f01 refactor: move GetListAtChainTip() calls out of CGovernanceVote (Kittywhiskers Van Gogh)
e9de972982 refactor: move GetListAtChainTip() calls out of CGovernanceObject (Kittywhiskers Van Gogh)

Pull request description:

  ## Additional Information

  * Dependent on https://github.com/dashpay/dash/pull/5929

  ## Breaking Changes

  None. Changes are limited to refactoring, no logical changes have been made.

  ## Checklist:

  - [x] I have performed a self-review of my own code
  - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)**
  - [x] I have added or updated relevant unit/integration/functional/e2e tests
  - [x] I have made corresponding changes to the documentation **(note: N/A)**
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  PastaPastaPasta:
    (self) utACK fa6847d2fb
  knst:
    utACK fa6847d2fb

Tree-SHA512: f1acf44bad25789d03c48788a3ac1807d7c553ee45164276ffa6f0dc39dc02e5d29d364469633aa84b341e8c4c13508e0e7a114de6e01fb624f256acfd97199b
2024-03-20 12:45:06 -05:00
Konstantin Akimov
fa6847d2fb
refactor: drop circular dependencies over deterministicmns in validationinterface 2024-03-20 12:37:03 -05:00
pasta
b8fdf67887
Merge #5944: backport: merge bitcoin#20864 (Move SocketSendData lock annotation to header)
140e91fdca merge bitcoin#20864: Move SocketSendData lock annotation to header (Kittywhiskers Van Gogh)
e432122cbd net: Move CConnman/NetEventsInterface after CNode in header file (Kittywhiskers Van Gogh)

Pull request description:

  ## Additional Information

  Broken off from upcoming backport PR relating to networking due to primarily move-only large diff.

  Review large-diff commit using `git diff develop..e432122cbd1cc9bec45cc01c3eb4194a05af1d0e --color-moved=dimmed-zebra --patience` ([source](fa0a71781a))

  ## Breaking Changes

  None. Changes are primarily move-only with minor changes.

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)**
  - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)**
  - [x] I have made corresponding changes to the documentation **(note: N/A)**
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  PastaPastaPasta:
    utACK 140e91fdca

Tree-SHA512: f2a42532819085aa8d0908b7b102f8d777681d247cd5cecf7f46f71435df2408f39fddd52382ed55ccee686a185092b0dd7f5029b2610be56d3a57b309466238
2024-03-20 09:06:47 -05:00
Kittywhiskers Van Gogh
140e91fdca
merge bitcoin#20864: Move SocketSendData lock annotation to header
includes:
- fa210689e27b0d78b2fe894e51e364179db7a3ce
2024-03-20 07:21:16 +00:00
Kittywhiskers Van Gogh
e432122cbd
net: Move CConnman/NetEventsInterface after CNode in header file 2024-03-19 18:54:38 +00:00
Kittywhiskers Van Gogh
f8d1853903
refactor: even more passing CDeterministicMNManager by ref 2024-03-19 15:21:01 +00:00
Kittywhiskers Van Gogh
d4aa891735
refactor: more passing CDeterministicMNManager by ref 2024-03-19 15:21:00 +00:00
Kittywhiskers Van Gogh
e628d7517a
refactor: pass CDeterministicMNManager by ref to CJContext members 2024-03-19 15:21:00 +00:00
Kittywhiskers Van Gogh
d731f4127e
refactor: pass CDeterministicMNManager by ref to LLMQContext members 2024-03-19 15:21:00 +00:00
Kittywhiskers Van Gogh
6bd23f40aa
refactor: pass CDeterministicMNManager by ref to CGovernanceManager 2024-03-19 15:20:59 +00:00
Kittywhiskers Van Gogh
055dbba1fa
refactor: move GetListAtChainTip() calls out of llmq::utils::*, misc changes 2024-03-19 15:20:59 +00:00
Kittywhiskers Van Gogh
da39b73f01
refactor: move GetListAtChainTip() calls out of CGovernanceVote 2024-03-19 15:20:59 +00:00
Kittywhiskers Van Gogh
e9de972982
refactor: move GetListAtChainTip() calls out of CGovernanceObject 2024-03-19 15:20:58 +00:00
pasta
c90fd21378
Merge #5930: backport: bitcoin#14582, #16404, #17445, #19507, #19538, #19743, #19756, #19773, #19830, partial bitcoin#27053
5a6b8b6b1f partial Merge bitcoin/bitcoin#27053: wallet: reuse change dest when re-creating TX with avoidpartialspends (fanquake)
2f788aa76d fix: change port to use for zmq in interface_zmq_dash.py (Konstantin Akimov)
0ce66fd477 Merge #19507: Expand functional zmq transaction tests (Wladimir J. van der Laan)
a1c2386153 Merge #17445: zmq: Fix due to invalid argument and multiple notifiers (Wladimir J. van der Laan)
44929bad82 Merge #16404: qa: Test ZMQ notification after chain reorg (MarcoFalke)
1707f01309 fix: follow-up changes from bitcoin/bitcoin#22220 for maxapsfee (Konstantin Akimov)
eb4270deae Merge #19743: -maxapsfee follow-up (Samuel Dobson)
6a6d379711 Merge #19756: tests: add sync_all to fix race condition in wallet groups test (MarcoFalke)
5821a1d23a Merge #14582: wallet: always do avoid partial spends if fees are within a specified range (Samuel Dobson)
59d5a4ef39 Merge #19773: wallet: Avoid recursive lock in IsTrusted (Samuel Dobson)
2489f29f0e Merge #19830: test: Add tsan supp for leveldb::DBImpl::DeleteObsoleteFiles (fanquake)
10fa7a66b6 Merge #19538: ci: Add tsan suppression for race in DatabaseBatch (MarcoFalke)

Pull request description:

  ## Issue being fixed or feature implemented
  Regular backports from bitcoin v21

  ## What was done?
   - bitcoin/bitcoin#19538
   - bitcoin/bitcoin#19830
   - bitcoin/bitcoin#19773
   - bitcoin/bitcoin#14582
   - bitcoin/bitcoin#19756
   - bitcoin/bitcoin#19743
   - bitcoin/bitcoin#16404
   - bitcoin/bitcoin#17445
   - bitcoin/bitcoin#19507
   - partial bitcoin/bitcoin#27053

  +some extra fixes and missing changes from bitcoin/bitcoin#22220 for `maxapsfee`

  +changed port for zmq in `interface_zmq_dash.py` to prevent intermittent error in `interface_zmq.py`

  ## How Has This Been Tested?
  Run unit & functional tests

  ## Breaking Changes
  `CreateTransaction` now uses sometime 2 private keys for one transaction instead one

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [ ] I have commented my code, particularly in hard-to-understand areas
  - [ ] 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:
  PastaPastaPasta:
    utACK 5a6b8b6b1f

Tree-SHA512: 7efd8a31808f155c08035d0fb7ceaac369e3e44e68d2c91a88e52815a60efba5fe9458f41d93352627c2c062d414fb0207dcf216fa75b54af210b503f9123de6
2024-03-19 10:12:39 -05:00
pasta
ada0cf2b25
Merge #5929: refactor: move special transaction processing to helper, move C{CreditPool, NetFulfilledRequest}Manager to NodeContext, CDSTXManager to CJContext
991c9ec1a2 refactor: accept NodeContext arg into BlockAssembler instead of managers (Kittywhiskers Van Gogh)
c427305805 refactor: remove CNetFulfilledRequestManager global, move to NodeContext (Kittywhiskers Van Gogh)
a53046c4a9 refactor: remove CDSTXManager global and alias, move to CJContext (Kittywhiskers Van Gogh)
f0451fb98d refactor: remove CCreditPoolManager global, move to NodeContext (Kittywhiskers Van Gogh)
67cfee70f8 refactor: remove CMNHFManager::GetSignalsStage alias from CChainState (Kittywhiskers Van Gogh)
667852c851 refactor: cleanup CDSNotificationInterface member names, add asserts (Kittywhiskers Van Gogh)
0d6f736a19 fix: add missing entity for destruction in DashTestSetupClose (Kittywhiskers Van Gogh)
2dd6082e54 refactor: move special transaction processing into helper class (Kittywhiskers Van Gogh)

Pull request description:

  ## Additional Information

  * Dependent on https://github.com/dashpay/dash/pull/5908

  ## Breaking Changes

  None. Changes are limited to refactoring, no logical changes have been made.

  ## Checklist:

  - [x] I have performed a self-review of my own code
  - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)**
  - [x] I have added or updated relevant unit/integration/functional/e2e tests
  - [x] I have made corresponding changes to the documentation **(note: N/A)**
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  PastaPastaPasta:
    utACK 991c9ec1a2

Tree-SHA512: 7a8d90416b6de4915639908b5f6bd59caee73e26462864d12a14a5d74af300a3733d8d9b0863e267b82d2807a8a5753acf5574306a0493bb7f3d83d8f0a7da4f
2024-03-19 08:45:20 -05:00
pasta
26e886a3fe
Merge #5939: fix: avoid hSocket double lock
c9ffb72fb5 fix: avoid `hSocket` double lock (UdjinM6)

Pull request description:

  ## Issue being fixed or feature implemented
  It's is locked in `CloseSocketDisconnect()` already.

  To be merged before #5511 or 19915 backport is going to cause issues otherwise.

  ## What was done?
  Assert the lock is held already, instead of locking it again.

  ## How Has This Been Tested?
  Run tests, run a node on testnet and drop connections to peers

  ## Breaking Changes
  n/a

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [ ] I have commented my code, particularly in hard-to-understand areas
  - [ ] 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 _(for repository code-owners and collaborators only)_

ACKs for top commit:
  PastaPastaPasta:
    utACK c9ffb72fb5

Tree-SHA512: 6042d0683bf9b1326a74d73b5b44896a0470865b88e1c686d6eefe55c0d419b11a134474499bb6c9c308af69b2f7c4a60070d4535072304330cb640f91f5e367
2024-03-18 19:39:12 -05:00
Kittywhiskers Van Gogh
991c9ec1a2
refactor: accept NodeContext arg into BlockAssembler instead of managers
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
2024-03-18 21:36:35 +00:00
Kittywhiskers Van Gogh
c427305805
refactor: remove CNetFulfilledRequestManager global, move to NodeContext
Decoupling initialization from loading the database means we need to
assert if the database is actually loaded before performing any operations
on it (i.e. check if the manager is "valid")
2024-03-18 21:36:34 +00:00
Kittywhiskers Van Gogh
a53046c4a9
refactor: remove CDSTXManager global and alias, move to CJContext
We don't need to run `GetDSTX` in `HandleNewRecoveredSig` since we know
for sure the transaction being handled is for enhanced hard forking
2024-03-18 21:36:34 +00:00
Kittywhiskers Van Gogh
f0451fb98d
refactor: remove CCreditPoolManager global, move to NodeContext 2024-03-18 21:36:34 +00:00
Kittywhiskers Van Gogh
67cfee70f8
refactor: remove CMNHFManager::GetSignalsStage alias from CChainState
GetMNHFSignalsStage doesn't actually probe anything from CChainState
nor is necessary for CChainState members.
2024-03-18 21:36:34 +00:00
Kittywhiskers Van Gogh
667852c851
refactor: cleanup CDSNotificationInterface member names, add asserts 2024-03-18 21:36:33 +00:00
Kittywhiskers Van Gogh
0d6f736a19
fix: add missing entity for destruction in DashTestSetupClose 2024-03-18 21:36:33 +00:00
Kittywhiskers Van Gogh
2dd6082e54
refactor: move special transaction processing into helper class 2024-03-18 21:36:32 +00:00
pasta
1c20180271
Merge #5936: backport: bitcoin#19528, #19455, #19717, #19849, #19994 - assert for RPCArg names
c5031685bc fix: rename arguments for 'voteraw' (Konstantin Akimov)
3621966f12 feat: add todo to drop Throw() from rpc/util.h (Konstantin Akimov)
b54f03a0c1 fix: wrong name of argument for coinjoin (Konstantin Akimov)
d0163543d9 refactor: use new format CPCCommand for rpc/coinjoin (Konstantin Akimov)
0e1a31159f Merge #19994: Assert that RPCArg names are equal to CRPCCommand ones (net, rpcwallet) (MarcoFalke)
af9eb81e56 fix: wrong name of arguments for RPC (Konstantin Akimov)
c30c8f22dd Merge #19849: Assert that RPCArg names are equal to CRPCCommand ones (blockchain,rawtransaction) (MarcoFalke)
f525f574b0 fix: follow-up missing changes from Merge #18607: rpc: Fix named arguments in documentation (Konstantin Akimov)
7ac1ee0fb4 Merge #19717: rpc: Assert that RPCArg names are equal to CRPCCommand ones (mining,zmq,rpcdump) (MarcoFalke)
860d31f504 Merge #19455: rpc generate: print useful help and error message (Wladimir J. van der Laan)
41c35fd8dc fix: adjust missing arguments and help for misc rpc: debug, echo, mnsync (Konstantin Akimov)
58d923cd5b Merge #19528: rpc: Assert that RPCArg names are equal to CRPCCommand ones (misc) (MarcoFalke)

Pull request description:

  ## Issue being fixed or feature implemented
  This batch of backports asserts that RPCArg names are equal to CRPCCommand ones.

  ## What was done?
  done backports:
   - bitcoin/bitcoin#19994
   - bitcoin/bitcoin#19849
   - bitcoin/bitcoin#19717
   - bitcoin/bitcoin#19455
   - bitcoin/bitcoin#19528

  Beside that same changes are applied for src/coinjoin's rpc.

  There's also applied multiple fixes for various rpcs for cases when RPCArg names are mismatched with CPCCommand

  **Please, note, that this PR is not final fix for all RPCArgs**. There's a lot of dash's rpc that is not refactored that.
  That it is not easy to implement for `quorum command` because the list of arguments (and even their numbers) are different for each sub-command. This fixes are out-of scope of this PR and should be done before bitcoin#18531 is backported.

  See also relevant bitcoin#21035.

  ## How Has This Been Tested?
  I used this helper to see which exactly args are specified wrongly:
  ```cpp
  diff --git a/src/rpc/server.h b/src/rpc/server.h
  index d4a7ba60eb..cdfd741f54 100644
  --- a/src/rpc/server.h
  +++ b/src/rpc/server.h
  @@ -16,6 +16,7 @@
   #include <string>

   #include <univalue.h>
  +#include <logging.h>

   class CRPCCommand;

  @@ -110,6 +111,19 @@ public:
                 fn().GetArgNames(),
                 intptr_t(fn))
       {
  +        if (fn().m_name != name_in || fn().GetArgNames() != args_in) {
  +            std::cerr << "names:  " << fn().m_name << ' ' << name_in << std::endl;
  +            std::cerr << "arg names: " << fn().GetArgNames().size() << std::endl;
  +            for (const auto& i : fn().GetArgNames()) {
  +                std::cerr << "arg: " << i << std::endl;
  +            }
  +            std::cerr << "FIASCO FIASCO FIASCO FIASCO FIASCO FIASCO" << std::endl;
  +        }
           CHECK_NONFATAL(fn().m_name == name_in);
           CHECK_NONFATAL(fn().GetArgNames() == args_in);
       }
  ```

  ## Breaking Changes
  N/A

  Some arguments are renamed in RPC but they have been broken (used incorrect name not same as in docs)

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [ ] I have commented my code, particularly in hard-to-understand areas
  - [ ] 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:
  PastaPastaPasta:
    (self)utACK c5031685bc

Tree-SHA512: e885a8f8fa8bc282dae092fe8df65a37e2ab6ca559cd0598d54bfc06cacddb3bd6f3c74fa2d9c1551f8a4fbdfdeabb8d065649df66d5809e792aec6f51d0df14
2024-03-18 15:12:34 -05:00
pasta
857a27916d
Merge #5938: ci: adjust amount of parallel jobs from 4 to variable
86dd0eabb4 chore: increase amount of build jobs from 4 to 8 for depends (Konstantin Akimov)

Pull request description:

  ## What was done?
  Bump CI yaml to use 8 threads for build depends

  ## How Has This Been Tested?
  Builds logs says:
  ```
  $ make -j$(nproc) -C depends HOST=$HOST $DEP_OPTS
  make: Entering directory '/builds/dashpay/dash/depends'
  ```
  https://gitlab.com/dashpay/dash/-/jobs/6409522172

  ## Breaking Changes
  N/A

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [ ] I have commented my code, particularly in hard-to-understand areas
  - [ ] 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:
  PastaPastaPasta:
    utACK 86dd0eabb4

Tree-SHA512: dfdcae5473a5315d3fc64721f432d671a14cab9811305334f948a73ddc13e5f3e58be433988030ef6019cddd3f383c87722eaed40d8b3ab570e5c224c20191e0
2024-03-18 15:07:34 -05:00
pasta
4c06535f83
Merge #5941: trivial: remove unneeded header, enumerate circular dependencies
dfddfd09a4 trivial: remove unneeded header, enumerate circular dependencies (Kittywhiskers Van Gogh)

Pull request description:

  ## Additional Information

  As found in https://github.com/dashpay/dash/pull/5929#discussion_r1526663050, `validation.h` is not needed for `specialtxman.cpp` and removing the header uncovers other circular dependencies that were obscured by the shortest circular path (see https://github.com/dashpay/dash/pull/5929#discussion_r1527594636).

  ## Breaking Changes

  None.

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)**
  - [x] I have added or updated relevant unit/integration/functional/e2e tests
  - [x] I have made corresponding changes to the documentation **(note: N/A)**
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  PastaPastaPasta:
    utACK dfddfd09a4

Tree-SHA512: c3e74c1a381c0b69985a29f57da3565ec7681548389f09ab8b9907386f0a9f221db92a39409eb46595f3546edffa389774b96b0c9dd8f4fedff46f2d3bd635f1
2024-03-18 14:31:12 -05:00
fanquake
5a6b8b6b1f
partial Merge bitcoin/bitcoin#27053: wallet: reuse change dest when re-creating TX with avoidpartialspends
14b4921a91920df25b19ff420bfe2bff8c56f71e wallet: reuse change dest when recreating TX with avoidpartialspends (Matthew Zipkin)

Pull request description:

  Closes https://github.com/bitcoin/bitcoin/issues/27051

  When the wallet creates a transaction internally, it will also create an alternative that spends using destination groups and see if the fee difference is negligible. If it costs the user the same to send the grouped version, we send it (even if the user has `avoidpartialspends` set to `false` which is default). This patch ensures that the second transaction creation attempt re-uses the change destination selected by the first attempt. Otherwise, the first change address remains reserved, will not be used in the second attempt, and then will never be used by the wallet, leaving gaps in the BIP44 chain.

  If the user had `avoidpartialspends` set to true, there is no second version of the created transaction and the change addresses are not affected.

  I believe this behavior was introduced in https://github.com/bitcoin/bitcoin/pull/14582

ACKs for top commit:
  achow101:
    ACK 14b4921a91920df25b19ff420bfe2bff8c56f71e

Tree-SHA512: a3d56f251ff4b333fc11325f30d05513e34ab0a2eb703fadd0ad98d167ae074493df1a24068298336c6ed2da6b31aa2befa490bc790bbc260ed357c8f2397659
2024-03-18 16:30:45 +07:00
Kittywhiskers Van Gogh
dfddfd09a4
trivial: remove unneeded header, enumerate circular dependencies
As found in a review comment in #5908[1], validation.h is not needed for
specialtxman.cpp and removing the header uncovers other circular
dependencies that were obscured by the shortest circular path[2].

[1] - https://github.com/dashpay/dash/pull/5929#discussion_r1526663050
[2] - https://github.com/dashpay/dash/pull/5929#discussion_r1527594636
2024-03-18 09:09:53 +00:00
Konstantin Akimov
2f788aa76d
fix: change port to use for zmq in interface_zmq_dash.py
It resolves a conflict with interface_zmq.py and intermittent failure
2024-03-18 16:01:41 +07:00
Wladimir J. van der Laan
0ce66fd477
Merge #19507: Expand functional zmq transaction tests
7356292e1d7a44da8a2bd31c02c58d550bf38009 Have zmq reorg test cover mempool txns (Gregory Sanders)
a0f4f9c983e57cc97ecbc56d0177eaf1854c842c Add zmq test for transaction pub during reorg (Gregory Sanders)
2399a0600ca9c4b676fa2f97520b8ecc44642246 Add test case for mempool->block zmq notification (Gregory Sanders)
e70512a83c69bc85e96b08ade725594eda3e230f Make ordering of zmq consumption irrelevant to functional test (Gregory Sanders)

Pull request description:

  Tests written to better define what messages are sent when. Also did a bit of refactoring to make sure the exact notification channel ordering doesn't matter.

  Confusions below aside, I believe having these more descriptive tests helps describe what behavior we expect from ZMQ notificaitons.

  Remaining confusion:
  1) Notification patterns seem to vary wildly with the inclusion of mempool transactions being reorg'ed. See difference between "Add zmq test for transaction pub during reorg" and "Have zmq reorg test cover mempool txns" commits for specifics.
  2) Why does a reorg'ed transaction get announced 3 times? From what I understand it can get announced once for disconnected block, once for mempool entry. What's the third? It occurs a 4th time when included in a block(not added in test)

ACKs for top commit:
  laanwj:
    code review ACK 7356292e1d7a44da8a2bd31c02c58d550bf38009
  promag:
    Code review ACK 7356292e1d7a44da8a2bd31c02c58d550bf38009.

Tree-SHA512: 573662429523fd6a1af23dd907117320bc68cb51a93fba9483c9a2160bdce51fb590fcd97bcd2b2751d543d5c1148efa4e22e1c3901144f882b990ed2b450038
2024-03-18 16:01:41 +07:00
Wladimir J. van der Laan
a1c2386153
Merge #17445: zmq: Fix due to invalid argument and multiple notifiers
3e730bf90aaf53c41ff3a778f6aac15d163d1c0c zmq: Fix due to invalid argument and multiple notifiers (João Barbosa)

Pull request description:

  ZMQ initialization is interrupted if any notifier fails, and in that case all notifiers are destroyed. The notifier shutdown assumes that the initialization had occurred. This is not valid when there are multiple notifiers and any except the last fails to initialize.

  Can be tested by running test/functional/interface_zmq.py from this branch with bitcoind from master.

  Closes #17185.

ACKs for top commit:
  laanwj:
    Code review ACK 3e730bf90aaf53c41ff3a778f6aac15d163d1c0c, thanks for adding a test

Tree-SHA512: 5da710e97dcbaa94896d019e75162d470f6d381ee07c60e5b3e9db93d11e8f7ca9bf2c509efa4486199e88c96c3e720cc96b4e35b62725d4c7db8e8e9bf6e09d
2024-03-18 16:01:40 +07:00
MarcoFalke
44929bad82
Merge #16404: qa: Test ZMQ notification after chain reorg
abdfc5e89b687f73de4ab97e924c29cc27e71c15 qa: Test ZMQ notification after chain reorg (João Barbosa)
aa2622a726bc0f02152d79c888a332694678a989 qa: Refactor ZMQ test (João Barbosa)
6bc1ff915dd495f05985d3402a34dbfc3b6a08b4 doc: Add note regarding ZMQ block notification (João Barbosa)

Pull request description:

Top commit has no ACKs.

Tree-SHA512: b93237adc8c84b3aa72ccc28097090eabcb006cf408083218bebf6fec703bd0de2ded80b6879e77096872e14ba9402a6d3f923b146a54d4c4e41dcb862c3e765
2024-03-18 16:01:40 +07:00
Konstantin Akimov
1707f01309
fix: follow-up changes from bitcoin/bitcoin#22220 for maxapsfee 2024-03-18 16:01:39 +07:00
Samuel Dobson
eb4270deae
Merge #19743: -maxapsfee follow-up
7e31ea9fa0a59ced2293057acb14c71ec97db689 -maxapsfee: follow-up fixes (Karl-Johan Alm)
9f77b821764dcaebc97a5ae76c3052936418308d doc: release notes for -maxapsfee (Karl-Johan Alm)

Pull request description:

  Addresses feedback from jonatack and meshcollider in #14582.

ACKs for top commit:
  jonatack:
    ACK 7e31ea9fa0a
  meshcollider:
    re-ACK 7e31ea9fa0a59ced2293057acb14c71ec97db689

Tree-SHA512: 5d159d78e917e41140e1394bef05e821430dbeac585e9bd708f897041dd7104c2a6b563bfab8b2c85e6d923441160a3880d7864d768aa8e0e66860e0a2c4f56b
2024-03-18 16:01:39 +07:00
MarcoFalke
6a6d379711
Merge #19756: tests: add sync_all to fix race condition in wallet groups test
72ae20fc142457a200278cb2fedc5e32a3766b58 tests: add sync_all to fix race condition in wallet groups test (Karl-Johan Alm)

Pull request description:

  This most likely fixes #19749, the intermittent CI issues with wallet_groups.

  This fix is also included in #19743.

Top commit has no ACKs.

Tree-SHA512: dd6ef7f89829483e2278191c21fe0912b51fd2187c10a0fa158339c5ab9f22d93b733ae10f17ef25d8b64f44e596e66dba8d7db5c009343472f422ce4cd67d8f
2024-03-18 16:01:39 +07:00
Samuel Dobson
5821a1d23a
Merge #14582: wallet: always do avoid partial spends if fees are within a specified range
7f13dfb587dd6a7a5b7dfbfe689ae0ce818fe5c9 test: test the implicit avoid partial spends functionality (Karl-Johan Alm)
b82067bf696c53f22536f9ca2e51949c164f6b06 wallet: try -avoidpartialspends mode and use its result if fees are below threshold (Karl-Johan Alm)

Pull request description:

  The `-avoidpartialspends` feature is normally disabled, as it may affect the optimal fee for payments. This PR introduces a new parameter `-maxapsfee` (max avoid partial spends fee) which acts on the following values:
  * -1: disable partial spend avoidance completely (do not even try it)
  * 0: only do partial spend avoidance if fees are the same or better as the regular coin selection
  * 1..∞: use APS variant if the absolute fee difference is less than or equal to the max APS fee

  For values other than -1, the code will now try partial spend avoidance once, and if that gives a value within the accepted range, it will use that.

  Example: -maxapsfee=0.00001000 means the wallet will do regular coin select, APS coin select, and then pick AKS iff the absolute fee difference is <= 1000 satoshi.

  Edit: updated this to reflect the fact we are now using a max fee.

ACKs for top commit:
  fjahr:
    tested ACK 7f13dfb587dd6a7a5b7dfbfe689ae0ce818fe5c9
  achow101:
    ACK 7f13dfb587dd6a7a5b7dfbfe689ae0ce818fe5c9
  jonatack:
    ACK 7f13dfb58, code review, debug build, verified the test fails with `AssertionError: not(2 == 1)` for the number of vouts when `-maxapsfee=0.0001` is changed to 0, and verified the new logging with an added assertion.
  meshcollider:
    Code review ACK 7f13dfb587dd6a7a5b7dfbfe689ae0ce818fe5c9

Tree-SHA512: 475929df57f6191bb4e36bfbcad5a280a64bb0ecd8767b76cb2e44e2301235d0eb294a3f2fac5bbf15d35d7ecfba47acb2285feadb883c9ce31c08377e3afb3c
2024-03-18 16:01:38 +07:00
Samuel Dobson
59d5a4ef39
Merge #19773: wallet: Avoid recursive lock in IsTrusted
772ea4844c34ad70d02fd0bd6c0945baa8fff85c wallet: Avoid recursive lock in IsTrusted (João Barbosa)
819f10f6718659eeeec13af2ce831df3a0984090 wallet, refactor: Immutable CWalletTx::pwallet (João Barbosa)

Pull request description:

  This change moves `CWalletTx::IsTrusted` to `CWallet` in order to have TSAN. So now `CWallet::IsTrusted` requires `cs_wallet` and the recursive lock no longer happens.

  Motivated by https://github.com/bitcoin/bitcoin/pull/19289/files#r473308226.

ACKs for top commit:
  meshcollider:
    utACK 772ea4844c34ad70d02fd0bd6c0945baa8fff85c
  hebasto:
    ACK 772ea4844c34ad70d02fd0bd6c0945baa8fff85c, reviewed and tested on Linux Mint 20 (x86_64).

Tree-SHA512: 702ffd928b2f42a8b90de398790649a5fd04e1ac3877558da928e94cdeb19134883f06c3a73a6826c11c912facf199173375a70200737e164ccaea1bec515b2a
2024-03-18 16:01:38 +07:00
fanquake
2489f29f0e
Merge #19830: test: Add tsan supp for leveldb::DBImpl::DeleteObsoleteFiles
fa1fc536bb26471fd2a6fe8d12f98cf53c646306 test: Add tsan supp for leveldb::DBImpl::DeleteObsoleteFiles (MarcoFalke)

Pull request description:

  Fixes #19712

ACKs for top commit:
  practicalswift:
    ACK fa1fc536bb26471fd2a6fe8d12f98cf53c646306 -- patch looks correct
  hebasto:
    ACK fa1fc536bb26471fd2a6fe8d12f98cf53c646306

Tree-SHA512: 24d6a4e871fda11196a9f88e2ddbd1c1461d895c503a04b103791233e46638421836200eaaa7d70689564e51dee0d68d32b880dd90a5c259fb6a906f21d07853
2024-03-18 16:01:38 +07:00
MarcoFalke
10fa7a66b6
Merge #19538: ci: Add tsan suppression for race in DatabaseBatch
0cdf2a77ddfa1d53c6fbd830d557a3f20d7fc365 ci: add tsan debug symbols option (Russell Yanofsky)
9a2f12680b3f00a207f1cdd4e0c50a3c7613aefc ci: Add tsan suppression for race in DatabaseBatch (Hennadii Stepanov)

Pull request description:

  Since #19325 was merged, the corresponding change in TSan suppression file gets required.

  This PR is:
  - an analogous to #19226 and #19450, and
  - a temporary workaround for CI fail like https://cirrus-ci.com/task/5741795508224000?command=ci#L4993

ACKs for top commit:
  MarcoFalke:
    ACK 0cdf2a77ddfa1d53c6fbd830d557a3f20d7fc365

Tree-SHA512: 7832f143887c8a0df99dea03e00694621710378fbe923e3592185fcd3658546a590693b513abffc5ab96e9ef76c9c4bff3330eeee69a0c5dbe7574f34c417220
2024-03-18 16:01:37 +07:00
Konstantin Akimov
c5031685bc
fix: rename arguments for 'voteraw' 2024-03-17 13:03:19 -05:00
Konstantin Akimov
3621966f12
feat: add todo to drop Throw() from rpc/util.h 2024-03-17 13:03:18 -05:00
Konstantin Akimov
b54f03a0c1
fix: wrong name of argument for coinjoin 2024-03-17 13:03:18 -05:00
Konstantin Akimov
d0163543d9
refactor: use new format CPCCommand for rpc/coinjoin 2024-03-17 13:03:18 -05:00
MarcoFalke
0e1a31159f
Merge #19994: Assert that RPCArg names are equal to CRPCCommand ones (net, rpcwallet)
fa14f57fbc3c1fa2b9eea5df687f0fb36d452bd5 Assert that RPCArg names are equal to CRPCCommand ones (net, rpcwallet) (MarcoFalke)

Pull request description:

  This is the last part split out from #18531 to just touch some RPC methods. Description from the main pr:

  ### Motivation

  RPCArg names in the rpc help are currently only used for documentation. However, in the future they could be used to teach the server the named arguments. Named arguments are currently registered by the `CRPCCommand`s and duplicate the RPCArg names from the documentation. This redundancy is fragile, and has lead to errors in the past (despite having linters to catch those kind of errors). See section "bugs found" for a list of bugs that have been found as a result of the changes here.

  ### Changes

  The changes here add an assert in the `CRPCCommand` constructor that the RPCArg names are identical to the ones in the `CRPCCommand`.

  ### Future work

  > Here or follow up, makes sense to also assert type of returned UniValue?

  Sure, but let's not get ahead of ourselves. I am going to submit any further works as follow-ups, including:

  * Removing the CRPCCommand arguments, now that they are asserted to be equal and thus redundant
  * Removing all python regex linters on the args, now that RPCMan can be used to generate any output, including the cli.cpp table
  * Auto-formatting and sanity checking the RPCExamples with RPCMan
  * Checking passed-in json in self-check. Removing redundant checks
  * Checking returned json against documentation to avoid regressions or false documentation
  * Compile the RPC documentation at compile-time to ensure it doesn't change at runtime and is completely static

  ### Bugs found

  * The assert identified issue #18607
  * The changes itself fixed bug #19250

ACKs for top commit:
  fjahr:
    tACK fa14f57fbc3c1fa2b9eea5df687f0fb36d452bd5
  ryanofsky:
    Code review ACK fa14f57fbc3c1fa2b9eea5df687f0fb36d452bd5. Just straightforward replacements except code moved in `addnode`, and displatching updated in `bumpfee_helper`

Tree-SHA512: e07af150f1d95a88e558256ce197a6b7dc6cd722a6d6c13c75d944c49c2e2441f8b8237e9f94b03db69fa18f9bda627b0781d5e1da70bf5415e09b38728a8cb1
2024-03-17 13:03:15 -05:00