def test_make_result_bls_enabled(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client): reqs = sdk_json_couples_to_request_list( sdk_send_random_requests(looper, sdk_pool_handle, sdk_wallet_client, 1)) wait_for_requests_ordered(looper, txnPoolNodeSet, reqs) req = reqs[0] assert req.protocolVersion assert req.protocolVersion >= PlenumProtocolVersion.STATE_PROOF_SUPPORT.value check_result(txnPoolNodeSet, req, True)
def test_make_proof_committed_head_used(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client): reqs = sdk_json_couples_to_request_list( sdk_send_random_requests(looper, sdk_pool_handle, sdk_wallet_client, 1)) wait_for_requests_ordered(looper, txnPoolNodeSet, reqs) req = reqs[0] req_handler = txnPoolNodeSet[0].get_req_handler(DOMAIN_LEDGER_ID) key = req_handler.prepare_buy_key(req.identifier, req.reqId) for node in txnPoolNodeSet: node.states[DOMAIN_LEDGER_ID].set(key, b'somevalue') check_result(txnPoolNodeSet, req, True)
def test_nodes_removes_request_keys_for_ordered(setup, looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client): """ A node does not order requests since it is missing some 3PC messages, gets them from catchup. It then clears them from its request queues """ slow_node, fast_nodes = setup reqs = sdk_json_couples_to_request_list( send_reqs_batches_and_get_suff_replies(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client, 10, 5)) ensure_all_nodes_have_same_data(looper, fast_nodes) assert slow_node.master_replica.last_ordered_3pc != \ fast_nodes[0].master_replica.last_ordered_3pc def chk(key, nodes, present): for node in nodes: assert (key in node.master_replica._ordering_service. requestQueues[DOMAIN_LEDGER_ID]) == present for req in reqs: chk(req.digest, fast_nodes, False) chk(req.digest, [slow_node], True) # Reset catchup reply delay so that catchup can complete slow_node.nodeIbStasher.reset_delays_and_process_delayeds( CatchupRep.typename) old_last_ordered = fast_nodes[0].master_replica.last_ordered_3pc ensure_view_change(looper, txnPoolNodeSet) ensureElectionsDone(looper, txnPoolNodeSet) ensure_all_nodes_have_same_data(looper, fast_nodes) assert slow_node.master_replica.last_ordered_3pc == old_last_ordered for req in reqs: chk(req.digest, txnPoolNodeSet, False) # Needed for the next run due to the parametrised fixture slow_node.reset_delays_and_process_delayeds()
def test_nodes_removes_request_keys_for_ordered(setup, looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client): """ A node does not order requests since it is missing some 3PC messages, gets them from catchup. It then clears them from its request queues """ slow_node, fast_nodes = setup reqs = sdk_json_couples_to_request_list( send_reqs_batches_and_get_suff_replies( looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client, 10, 5)) ensure_all_nodes_have_same_data(looper, fast_nodes) assert slow_node.master_replica.last_ordered_3pc != \ fast_nodes[0].master_replica.last_ordered_3pc def chk(key, nodes, present): for node in nodes: assert ( key in node.master_replica.requestQueues[DOMAIN_LEDGER_ID]) == present for req in reqs: chk(req.digest, fast_nodes, False) chk(req.digest, [slow_node], True) # Reset catchup reply delay so that catchup can complete slow_node.nodeIbStasher.reset_delays_and_process_delayeds(CatchupRep.typename) ensure_view_change(looper, txnPoolNodeSet) ensureElectionsDone(looper, txnPoolNodeSet) ensure_all_nodes_have_same_data(looper, txnPoolNodeSet) for req in reqs: chk(req.digest, txnPoolNodeSet, False) # Needed for the next run due to the parametrised fixture slow_node.reset_delays_and_process_delayeds()
def test_make_proof_bls_enabled(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client): reqs = sdk_json_couples_to_request_list( sdk_send_random_requests(looper, sdk_pool_handle, sdk_wallet_client, 1)) wait_for_requests_ordered(looper, txnPoolNodeSet, reqs) req = reqs[0] for node in txnPoolNodeSet: req_handler = node.get_req_handler(DOMAIN_LEDGER_ID) key = req_handler.prepare_buy_key(req.identifier, req.reqId) _, proof = req_handler.get_value_from_state(key, with_proof=True) assert proof assert ROOT_HASH in proof assert MULTI_SIGNATURE in proof assert PROOF_NODES in proof multi_sig = proof[MULTI_SIGNATURE] assert MULTI_SIGNATURE_SIGNATURE in multi_sig assert MULTI_SIGNATURE_PARTICIPANTS in multi_sig assert MULTI_SIGNATURE_VALUE in multi_sig multi_sig_value = multi_sig[MULTI_SIGNATURE_VALUE] assert MULTI_SIGNATURE_VALUE_LEDGER_ID in multi_sig_value assert MULTI_SIGNATURE_VALUE_STATE_ROOT in multi_sig_value assert MULTI_SIGNATURE_VALUE_TXN_ROOT in multi_sig_value assert MULTI_SIGNATURE_VALUE_POOL_STATE_ROOT in multi_sig_value assert MULTI_SIGNATURE_VALUE_TIMESTAMP in multi_sig_value # check that multi sig values are in order value_keys = list(multi_sig_value.keys()) assert [ MULTI_SIGNATURE_VALUE_LEDGER_ID, MULTI_SIGNATURE_VALUE_POOL_STATE_ROOT, MULTI_SIGNATURE_VALUE_STATE_ROOT, MULTI_SIGNATURE_VALUE_TIMESTAMP, MULTI_SIGNATURE_VALUE_TXN_ROOT ] == value_keys assert validate_multi_signature(proof, txnPoolNodeSet)
def test_make_proof_bls_enabled(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client): reqs = sdk_json_couples_to_request_list( sdk_send_random_requests( looper, sdk_pool_handle, sdk_wallet_client, 1)) wait_for_requests_ordered(looper, txnPoolNodeSet, reqs) req = reqs[0] for node in txnPoolNodeSet: req_handler = node.get_req_handler(DOMAIN_LEDGER_ID) key = req_handler.prepare_buy_key(req.identifier, req.reqId) _, proof = req_handler.get_value_from_state(key, with_proof=True) assert proof assert ROOT_HASH in proof assert MULTI_SIGNATURE in proof assert PROOF_NODES in proof multi_sig = proof[MULTI_SIGNATURE] assert MULTI_SIGNATURE_SIGNATURE in multi_sig assert MULTI_SIGNATURE_PARTICIPANTS in multi_sig assert MULTI_SIGNATURE_VALUE in multi_sig multi_sig_value = multi_sig[MULTI_SIGNATURE_VALUE] assert MULTI_SIGNATURE_VALUE_LEDGER_ID in multi_sig_value assert MULTI_SIGNATURE_VALUE_STATE_ROOT in multi_sig_value assert MULTI_SIGNATURE_VALUE_TXN_ROOT in multi_sig_value assert MULTI_SIGNATURE_VALUE_POOL_STATE_ROOT in multi_sig_value assert MULTI_SIGNATURE_VALUE_TIMESTAMP in multi_sig_value # check that multi sig values are in order value_keys = list(multi_sig_value.keys()) assert [MULTI_SIGNATURE_VALUE_LEDGER_ID, MULTI_SIGNATURE_VALUE_POOL_STATE_ROOT, MULTI_SIGNATURE_VALUE_STATE_ROOT, MULTI_SIGNATURE_VALUE_TIMESTAMP, MULTI_SIGNATURE_VALUE_TXN_ROOT] == value_keys assert validate_multi_signature(proof, txnPoolNodeSet)