Пример #1
0
    def get_result(self, request: Request):
        version = request.operation.get(GET_TXN_AUTHOR_AGREEMENT_VERSION)
        digest = request.operation.get(GET_TXN_AUTHOR_AGREEMENT_DIGEST)
        timestamp = request.operation.get(GET_TXN_AUTHOR_AGREEMENT_TIMESTAMP)

        if version is not None:
            path = StaticTAAHelper.state_path_taa_version(version)
            digest, proof = self._get_value_from_state(path, with_proof=True)
            return self._return_txn_author_agreement(request,
                                                     proof,
                                                     digest=digest)

        if digest is not None:
            path = StaticTAAHelper.state_path_taa_digest(digest)
            data, proof = self._get_value_from_state(path, with_proof=True)
            return self._return_txn_author_agreement(request, proof, data=data)

        if timestamp is not None:
            head_hash = self.database_manager.ts_store.get_equal_or_prev(
                timestamp, CONFIG_LEDGER_ID)
            if head_hash is None:
                return self._return_txn_author_agreement(request, None)
            path = StaticTAAHelper.state_path_taa_latest()
            digest, proof = self._get_value_from_state(path,
                                                       head_hash,
                                                       with_proof=True)
            return self._return_txn_author_agreement(request,
                                                     proof,
                                                     head_hash=head_hash,
                                                     digest=digest)

        path = StaticTAAHelper.state_path_taa_latest()
        digest, proof = self._get_value_from_state(path, with_proof=True)
        return self._return_txn_author_agreement(request, proof, digest=digest)
def test_update_state(txn_author_agreement_disable_handler,
                      taa_disable_request, txn_author_agreement_handler, tconf,
                      domain_state, taa_pp_time):
    # create TAAs
    taa_txns = []
    taa_digests = []
    taa_state_datas = []
    for _ in list(range(5)):
        txn, digest, state_data = create_taa_txn(
            taa_request(tconf, domain_state, taa_pp_time), taa_pp_time)
        taa_txns.append(txn)
        taa_digests.append(digest)
        taa_state_datas.append(state_data)
    assert taa_txns

    # create a disable txn
    disable_seq_no = 1
    disable_txn_time = get_utc_epoch()
    taa_disable_txn = reqToTxn(taa_disable_request)
    append_txn_metadata(taa_disable_txn, disable_seq_no, disable_txn_time)

    # set a TAAs
    for index, taa_txn in enumerate(taa_txns):
        txn_author_agreement_handler.update_state(taa_txn, None, None)

        check_taa_in_state(
            handler=txn_author_agreement_handler,
            digest=taa_digests[index],
            version=taa_state_datas[index][0][TXN_AUTHOR_AGREEMENT_VERSION],
            state_data=taa_state_datas[index])
        assert txn_author_agreement_disable_handler.state.get(
            StaticTAAHelper.state_path_taa_latest(),
            isCommitted=False) == taa_digests[index].encode()

    # disable TAAs
    txn_author_agreement_disable_handler.update_state(taa_disable_txn, None,
                                                      None)

    assert txn_author_agreement_disable_handler.state.get(
        StaticTAAHelper.state_path_taa_latest(), isCommitted=False) is None

    # set a TAAs
    for index, state_data in enumerate(taa_state_datas):
        state_value = state_data[0]
        state_value[TXN_AUTHOR_AGREEMENT_RETIREMENT_TS] = disable_txn_time
        check_taa_in_state(handler=txn_author_agreement_handler,
                           digest=taa_digests[index],
                           version=state_value[TXN_AUTHOR_AGREEMENT_VERSION],
                           state_data=(state_data[0], disable_seq_no,
                                       disable_txn_time))
def test_update_state(txn_author_agreement_handler, taa_request):
    seq_no = 1
    txn_time = 1560241033
    txn_id = "id"
    txn = reqToTxn(taa_request)
    payload = get_payload_data(txn)
    text = payload[TXN_AUTHOR_AGREEMENT_TEXT]
    version = payload[TXN_AUTHOR_AGREEMENT_VERSION]
    digest = StaticTAAHelper.taa_digest(text, version)
    append_txn_metadata(txn, seq_no, txn_time, txn_id)

    state_value = {
        TXN_AUTHOR_AGREEMENT_TEXT: text,
        TXN_AUTHOR_AGREEMENT_VERSION: version
    }

    txn_author_agreement_handler.update_state(txn, None, taa_request)

    assert txn_author_agreement_handler.get_from_state(
        StaticTAAHelper.state_path_taa_digest(digest)) == (state_value, seq_no,
                                                           txn_time)
    assert txn_author_agreement_handler.state.get(
        StaticTAAHelper.state_path_taa_latest()) == digest
    assert txn_author_agreement_handler.state.get(
        StaticTAAHelper.state_path_taa_version(version)) == digest
    def _add_taa_to_state(self, digest, seq_no, txn_time, text, version,
                          ratification_ts):
        self._set_taa_to_state(digest, seq_no, txn_time, text, version,
                               ratification_ts)

        self.state.set(StaticTAAHelper.state_path_taa_version(version), digest)
        self.state.set(StaticTAAHelper.state_path_taa_latest(), digest)
Пример #5
0
 def update_state(self, txn, prev_result, request, is_committed=False):
     self._validate_txn_type(txn)
     seq_no = get_seq_no(txn)
     txn_time = get_txn_time(txn)
     _, taa_list = self.state.generate_state_proof_for_keys_with_prefix(
         StaticTAAHelper.state_path_taa_digest(""),
         serialize=False,
         get_value=True)
     for encode_key, encode_data in taa_list.items():
         taa = rlp_decode(encode_data)
         taa, last_seq_no, last_update_time = self._decode_state_value(
             taa[0])
         digest = StaticTAAHelper.get_digest_from_state_key(encode_key)
         if TXN_AUTHOR_AGREEMENT_RETIREMENT_TS not in taa or taa.get(
                 TXN_AUTHOR_AGREEMENT_RETIREMENT_TS, 0) > txn_time:
             self._set_taa_to_state(
                 digest,
                 seq_no,
                 txn_time,
                 taa[TXN_AUTHOR_AGREEMENT_TEXT],
                 taa[TXN_AUTHOR_AGREEMENT_VERSION],
                 taa.get(TXN_AUTHOR_AGREEMENT_RATIFICATION_TS,
                         last_update_time),
                 retirement_ts=txn_time)
     self.state.remove(StaticTAAHelper.state_path_taa_latest())
Пример #6
0
 def additional_dynamic_validation(self, request: Request,
                                   req_pp_time: Optional[int]):
     if not self.state.get(StaticTAAHelper.state_path_taa_latest(),
                           isCommitted=False):
         raise InvalidClientRequest(
             request.identifier, request.reqId,
             "Transaction author agreement is already disabled.")
def test_update_state(txn_author_agreement_handler, taa_request, taa_pp_time):
    txn, digest, state_data = create_taa_txn(taa_request, taa_pp_time)

    txn_author_agreement_handler.update_state(txn, None, taa_request)

    check_taa_in_state(handler=txn_author_agreement_handler,
                       digest=digest,
                       version=state_data[0][TXN_AUTHOR_AGREEMENT_VERSION],
                       state_data=state_data)
    assert txn_author_agreement_handler.state.get(
        StaticTAAHelper.state_path_taa_latest(),
        isCommitted=False) == digest.encode()
Пример #8
0
    def _update_txn_author_agreement(self, seq_no, txn_time, text, version):
        digest = StaticTAAHelper.taa_digest(text, version)
        data = encode_state_value(
            {
                TXN_AUTHOR_AGREEMENT_TEXT: text,
                TXN_AUTHOR_AGREEMENT_VERSION: version
            },
            seq_no,
            txn_time,
            serializer=config_state_serializer)

        self.state.set(StaticTAAHelper.state_path_taa_digest(digest), data)
        self.state.set(StaticTAAHelper.state_path_taa_latest(), digest)
        self.state.set(StaticTAAHelper.state_path_taa_version(version), digest)
Пример #9
0
    def update_state(self, txn, prev_result, request, is_committed=False):
        self._validate_txn_type(txn)
        payload = get_payload_data(txn)
        text = payload[TXN_AUTHOR_AGREEMENT_TEXT]
        version = payload[TXN_AUTHOR_AGREEMENT_VERSION]
        seq_no = get_seq_no(txn)
        txn_time = get_txn_time(txn)
        digest = StaticTAAHelper.taa_digest(text, version)
        data = encode_state_value({
            TXN_AUTHOR_AGREEMENT_TEXT: text,
            TXN_AUTHOR_AGREEMENT_VERSION: version
        }, seq_no, txn_time, serializer=config_state_serializer)

        self.state.set(StaticTAAHelper.state_path_taa_digest(digest), data)
        self.state.set(StaticTAAHelper.state_path_taa_latest(), digest)
        self.state.set(StaticTAAHelper.state_path_taa_version(version), digest)
def test_dynamic_validation_update_with_retired_taa_off(
        txn_author_agreement_handler, domain_state, taa_request, taa_pp_time,
        set_aml, retired_time):

    txn, digest, state_data = create_taa_txn(taa_request, taa_pp_time)
    txn_author_agreement_handler.update_state(txn, None, taa_request)
    txn_author_agreement_handler.state.remove(
        StaticTAAHelper.state_path_taa_latest())
    if retired_time != "without":
        taa_request.operation[
            TXN_AUTHOR_AGREEMENT_RETIREMENT_TS] = retired_time
    with pytest.raises(
            InvalidClientRequest,
            match=
            "Retirement date cannot be changed when TAA enforcement is disabled."
    ):
        txn_author_agreement_handler.dynamic_validation(
            taa_request, taa_pp_time)
def test_dynamic_validation(txn_author_agreement_disable_handler,
                            taa_disable_request):
    txn_author_agreement_disable_handler.state.set(
        StaticTAAHelper.state_path_taa_latest(), "{}")
    txn_author_agreement_disable_handler.dynamic_validation(
        taa_disable_request, 0)