def dynamic_validation(self, request: Request):
     self._validate_request_type(request)
     self.authorize(request)
     operation, identifier, req_id = request.operation, request.identifier, request.reqId
     if self.state.get(StaticTAAHelper.state_path_taa_aml_latest()) is None:
         raise InvalidClientRequest(identifier, req_id,
                                    "TAA txn is forbidden until TAA AML is set. Send TAA AML first.")
     version = operation[TXN_AUTHOR_AGREEMENT_VERSION]
     if StaticTAAHelper.get_taa_digest(self.state, version, isCommitted=False) is not None:
         raise InvalidClientRequest(identifier, req_id,
                                    "Changing existing version of transaction author agreement is forbidden")
 def authorize(self, request):
     version = request.operation.get(TXN_AUTHOR_AGREEMENT_VERSION)
     if StaticTAAHelper.get_taa_digest(self.state, version, isCommitted=False) is None:
         self.write_req_validator.validate(request,
                                           [AuthActionAdd(txn_type=self.txn_type,
                                                          field='*',
                                                          value='*')])
     else:
         self.write_req_validator.validate(request,
                                           [AuthActionEdit(txn_type=self.txn_type,
                                                           field='*',
                                                           old_value='*',
                                                           new_value='*')])
Exemplo n.º 3
0
 def update_state(self, txn, prev_result, request, is_committed=False):
     self._validate_txn_type(txn)
     payload = get_payload_data(txn)
     text = payload.get(TXN_AUTHOR_AGREEMENT_TEXT)
     version = payload[TXN_AUTHOR_AGREEMENT_VERSION]
     retired = payload.get(TXN_AUTHOR_AGREEMENT_RETIREMENT_TS)
     ratified = payload.get(TXN_AUTHOR_AGREEMENT_RATIFICATION_TS)
     seq_no = get_seq_no(txn)
     txn_time = get_txn_time(txn)
     digest = StaticTAAHelper.get_taa_digest(self.state, version, isCommitted=False)
     if digest is None:
         digest = StaticTAAHelper.taa_digest(text, version)
         self._add_taa_to_state(digest, seq_no, txn_time, text, version, ratified)
     else:
         self._update_taa_to_state(digest, seq_no, txn_time, retired)
Exemplo n.º 4
0
 def dynamic_validation(self, request: Request, req_pp_time: Optional[int]):
     self._validate_request_type(request)
     self.authorize(request)
     operation, identifier, req_id = request.operation, request.identifier, request.reqId
     aml_latest, _, _ = self.get_from_state(StaticTAAHelper.state_path_taa_aml_latest())
     if aml_latest is None:
         raise InvalidClientRequest(identifier, req_id,
                                    "TAA txn is forbidden until TAA AML is set. Send TAA AML first.")
     version = operation[TXN_AUTHOR_AGREEMENT_VERSION]
     digest = StaticTAAHelper.get_taa_digest(self.state, version, isCommitted=False)
     if digest is None:
         if req_pp_time is None:
             raise LogicError("Cannot validate TAA transaction outside of normal ordering")
         self._validate_add_taa(request, req_pp_time)
     else:
         self._validate_update_taa(request, digest)
def test_fill_ts_store_for_config_after_catchup(txnPoolNodeSet, looper,
                                                sdk_pool_handle,
                                                sdk_wallet_trustee, tconf,
                                                tdir, allPluginsPath,
                                                set_txn_author_agreement_aml):
    sdk_send_txn_author_agreement(looper,
                                  sdk_pool_handle,
                                  sdk_wallet_trustee,
                                  *create_random_taa(),
                                  ratified=get_utc_epoch() - 600)
    node_to_disconnect = txnPoolNodeSet[-1]

    disconnect_node_and_ensure_disconnected(looper, txnPoolNodeSet,
                                            node_to_disconnect)
    looper.removeProdable(name=node_to_disconnect.name)
    sdk_reply = sdk_send_txn_author_agreement(looper,
                                              sdk_pool_handle,
                                              sdk_wallet_trustee,
                                              *create_random_taa(),
                                              ratified=get_utc_epoch() - 600)

    node_to_disconnect = start_stopped_node(node_to_disconnect, looper, tconf,
                                            tdir, allPluginsPath)
    txnPoolNodeSet[-1] = node_to_disconnect
    looper.run(checkNodesConnected(txnPoolNodeSet))

    waitNodeDataEquality(looper,
                         node_to_disconnect,
                         *txnPoolNodeSet,
                         exclude_from_check=['check_last_ordered_3pc_backup'])
    req_handler = node_to_disconnect.read_manager.request_handlers[
        GET_TXN_AUTHOR_AGREEMENT]
    last_digest = StaticTAAHelper.get_taa_digest(req_handler.state)
    key = StaticTAAHelper.state_path_taa_digest(last_digest)
    root_hash = req_handler.database_manager.ts_store.get_equal_or_prev(
        get_txn_time(sdk_reply[1]['result']))
    assert root_hash
    from_state = req_handler.state.get_for_root_hash(root_hash=root_hash,
                                                     key=key)
    assert config_state_serializer.deserialize(from_state)['val']['text'] == \
           get_payload_data(sdk_reply[1]['result'])['text']