Beispiel #1
0
    def get_transaction_response_object(
            cls, account_id: int, transaction: Transaction) -> Dict[str, str]:
        direction = get_transaction_direction(account_id=account_id,
                                              transaction=transaction)

        blockchain_tx = None

        if transaction.type == TransactionType.EXTERNAL:
            blockchain_tx = {
                "amount": transaction.amount,
                "source": transaction.source_address,
                "destination": transaction.destination_address,
                "expirationTime": "",
                "sequenceNumber": transaction.sequence,
                "status": transaction.status,
                "version": transaction.blockchain_version,
            }

        return {
            "id": transaction.id,
            "amount": transaction.amount,
            "currency": transaction.currency,
            "direction": direction.value.lower(),
            "status": transaction.status,
            "timestamp": transaction.created_timestamp.isoformat(),
            "source": {
                "vasp_name":
                transaction.source_address,
                "user_id":
                transaction.source_subaddress,
                "full_addr":
                identifier.encode_account(
                    transaction.source_address,
                    transaction.source_subaddress,
                    context.get().config.diem_address_hrp(),
                ),
            },
            "destination": {
                "vasp_name":
                transaction.destination_address,
                "user_id":
                transaction.destination_subaddress,
                "full_addr":
                identifier.encode_account(
                    transaction.destination_address,
                    transaction.destination_subaddress,
                    context.get().config.diem_address_hrp(),
                ),
            },
            "is_internal": transaction.type == TransactionType.INTERNAL,
            "blockchain_tx": blockchain_tx,
        }
Beispiel #2
0
def get_account_transactions(
    account_id: Optional[int] = None,
    account_name: Optional[str] = None,
    currency: Optional[DiemCurrency] = None,
    direction_filter: Optional[TransactionDirection] = None,
    limit: Optional[int] = None,
    sort: Optional[TransactionSortOption] = None,
    up_to_version=None,
) -> List[Transaction]:
    if not account_id:
        account = get_account(account_name=account_name)
        account_id = account.id

    txs = storage.get_account_transactions(account_id=account_id,
                                           currency=currency,
                                           up_to_version=up_to_version)

    if direction_filter:
        txs[:] = [
            tx for tx in txs if transaction_service.get_transaction_direction(
                account_id, tx) == direction_filter
        ]

    fiat_currency = None

    if sort:
        if (sort == TransactionSortOption.FIAT_AMOUNT_DESC
                or sort == TransactionSortOption.FIAT_AMOUNT_ASC):
            user = storage.get_user_by_account_id(account_id)
            fiat_currency = FiatCurrency[user.selected_fiat_currency]

        _sort_transactions(txs=txs,
                           sort_option=sort,
                           fiat_currency_to_sort_by=fiat_currency)

    return txs[:limit]
Beispiel #3
0
def test_transaction_direction(no_background_tasks) -> None:
    account_id, send_tx = send_fake_tx()
    assert get_transaction_direction(account_id,
                                     send_tx) == TransactionDirection.SENT