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)
Example #3
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)
Example #4
0
def test_dynamic_validation_with_not_unique_version(
        txn_author_agreement_handler, taa_request, set_aml):
    version = taa_request.operation[TXN_AUTHOR_AGREEMENT_VERSION]
    txn_author_agreement_handler.state.set(
        StaticTAAHelper.state_path_taa_version(version), "{}".encode())
    with pytest.raises(
            InvalidClientRequest,
            match=
            "Changing existing version of transaction author agreement is forbidden"
    ):
        txn_author_agreement_handler.dynamic_validation(taa_request)
Example #5
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)
Example #6
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)
Example #7
0
def check_taa_in_state(handler, digest, version, state_data):
    assert handler.get_from_state(
        StaticTAAHelper.state_path_taa_digest(digest)) == state_data
    assert handler.state.get(StaticTAAHelper.state_path_taa_version(version),
                             isCommitted=False) == digest.encode()