Implement transaction handling
This commit is contained in:
@@ -1,20 +1,21 @@
|
||||
# Project imports
|
||||
from core.lib import db # , notify
|
||||
# from core.lib import db # , notify
|
||||
from core.util import logs
|
||||
|
||||
log = logs.get_logger("antifraud")
|
||||
|
||||
|
||||
class AntiFraud(object):
|
||||
async def add_bank_sender(self, platform, platform_buyer, bank_sender):
|
||||
async def add_bank_sender(self, platform_buyer, bank_sender):
|
||||
"""
|
||||
Add the bank senders into Redis.
|
||||
:param platform: name of the platform - freeform
|
||||
:param platform_buyer: the username of the buyer on the platform
|
||||
:param bank_sender: the sender name from the bank
|
||||
"""
|
||||
key = f"namemap.{platform}.{platform_buyer}"
|
||||
await db.r.sadd(key, bank_sender)
|
||||
# key = f"namemap.{platform}.{platform_buyer}"
|
||||
# await db.r.sadd(key, bank_sender)
|
||||
# TODO
|
||||
|
||||
async def get_previous_senders(self, platform, platform_buyer):
|
||||
"""
|
||||
@@ -24,12 +25,13 @@ class AntiFraud(object):
|
||||
:return: set of previous buyers
|
||||
:rtype: set
|
||||
"""
|
||||
key = f"namemap.{platform}.{platform_buyer}"
|
||||
senders = await db.r.smembers(key)
|
||||
if not senders:
|
||||
return None
|
||||
senders = db.convert(senders)
|
||||
return senders
|
||||
# key = f"namemap.{platform}.{platform_buyer}"
|
||||
# senders = await db.r.smembers(key)
|
||||
# if not senders:
|
||||
# return None
|
||||
# senders = db.convert(senders)
|
||||
# return senders
|
||||
# TODO
|
||||
|
||||
async def check_valid_sender(
|
||||
self, reference, platform, bank_sender, platform_buyer
|
||||
@@ -45,22 +47,23 @@ class AntiFraud(object):
|
||||
:return: whether the sender is valid
|
||||
:rtype: bool
|
||||
"""
|
||||
senders = await self.get_previous_senders(platform, platform_buyer)
|
||||
if senders is None: # no senders yet, assume it's valid
|
||||
return True
|
||||
if platform_buyer in senders:
|
||||
return True
|
||||
self.ux.notify.notify_sender_name_mismatch(
|
||||
reference, platform_buyer, bank_sender
|
||||
)
|
||||
# title = "Sender name mismatch"
|
||||
# message = (
|
||||
# f"Sender name mismatch for {reference}:\n"
|
||||
# f"Platform buyer: {platform_buyer}"
|
||||
# f"Bank sender: {bank_sender}"
|
||||
# senders = await self.get_previous_senders(platform, platform_buyer)
|
||||
# if senders is None: # no senders yet, assume it's valid
|
||||
# return True
|
||||
# if platform_buyer in senders:
|
||||
# return True
|
||||
# self.ux.notify.notify_sender_name_mismatch(
|
||||
# reference, platform_buyer, bank_sender
|
||||
# )
|
||||
# await notify.sendmsg(self.instance.) # TODO
|
||||
return False
|
||||
# # title = "Sender name mismatch"
|
||||
# # message = (
|
||||
# # f"Sender name mismatch for {reference}:\n"
|
||||
# # f"Platform buyer: {platform_buyer}"
|
||||
# # f"Bank sender: {bank_sender}"
|
||||
# # )
|
||||
# # await notify.sendmsg(self.instance.) # TODO
|
||||
# return False
|
||||
# TODO
|
||||
|
||||
async def check_tx_sender(self, tx, reference):
|
||||
"""
|
||||
@@ -69,21 +72,22 @@ class AntiFraud(object):
|
||||
:param tx: the transaction ID
|
||||
:param reference: the trade reference
|
||||
"""
|
||||
stored_trade = await db.get_ref(reference)
|
||||
if not stored_trade:
|
||||
return None
|
||||
stored_tx = await db.get_tx(tx)
|
||||
if not stored_tx:
|
||||
return None
|
||||
bank_sender = stored_tx["sender"]
|
||||
platform_buyer = stored_trade["buyer"]
|
||||
platform = stored_trade["subclass"]
|
||||
is_allowed = await self.check_valid_sender(
|
||||
reference, platform, bank_sender, platform_buyer
|
||||
)
|
||||
if is_allowed is True:
|
||||
return True
|
||||
return False
|
||||
# stored_trade = await db.get_ref(reference)
|
||||
# if not stored_trade:
|
||||
# return None
|
||||
# stored_tx = await db.get_tx(tx)
|
||||
# if not stored_tx:
|
||||
# return None
|
||||
# bank_sender = stored_tx["sender"]
|
||||
# platform_buyer = stored_trade["buyer"]
|
||||
# platform = stored_trade["subclass"]
|
||||
# is_allowed = await self.check_valid_sender(
|
||||
# reference, platform, bank_sender, platform_buyer
|
||||
# )
|
||||
# if is_allowed is True:
|
||||
# return True
|
||||
# return False
|
||||
# TODO
|
||||
|
||||
# def user_verification_successful(self, uid):
|
||||
# """
|
||||
|
||||
@@ -111,26 +111,25 @@ class Money(object):
|
||||
return rates
|
||||
|
||||
# TODO: pass platform
|
||||
# async def get_acceptable_margins(self, platform, currency, amount):
|
||||
# """
|
||||
# Get the minimum and maximum amounts we would accept a trade for.
|
||||
# :param currency: currency code
|
||||
# :param amount: amount
|
||||
# :return: (min, max)
|
||||
# :rtype: tuple
|
||||
# """
|
||||
# sets = util.get_settings(platform)
|
||||
# rates = await self.get_rates_all()
|
||||
# if currency == "USD":
|
||||
# min_amount = amount - float(sets.AcceptableUSDMargin)
|
||||
# max_amount = amount + float(sets.AcceptableUSDMargin)
|
||||
# return (min_amount, max_amount)
|
||||
# amount_usd = amount / rates[currency]
|
||||
# min_usd = amount_usd - float(sets.AcceptableUSDMargin)
|
||||
# max_usd = amount_usd + float(sets.AcceptableUSDMargin)
|
||||
# min_local = min_usd * rates[currency]
|
||||
# max_local = max_usd * rates[currency]
|
||||
# return (min_local, max_local)
|
||||
async def get_acceptable_margins(self, platform, currency, amount):
|
||||
"""
|
||||
Get the minimum and maximum amounts we would accept a trade for.
|
||||
:param currency: currency code
|
||||
:param amount: amount
|
||||
:return: (min, max)
|
||||
:rtype: tuple
|
||||
"""
|
||||
rates = await self.get_rates_all()
|
||||
if currency == "USD":
|
||||
min_amount = amount - platform.accept_within_usd
|
||||
max_amount = amount + platform.accept_within_usd
|
||||
return (min_amount, max_amount)
|
||||
amount_usd = amount / rates[currency]
|
||||
min_usd = amount_usd - platform.accept_within_usd
|
||||
max_usd = amount_usd + platform.accept_within_usd
|
||||
min_local = min_usd * rates[currency]
|
||||
max_local = max_usd * rates[currency]
|
||||
return (min_local, max_local)
|
||||
|
||||
async def get_minmax(self, min_usd, max_usd, asset, currency):
|
||||
rates = await self.get_rates_all()
|
||||
|
||||
Reference in New Issue
Block a user