fixes
This commit is contained in:
parent
a2b775029a
commit
d4a7c0b653
@ -187,11 +187,12 @@ def init_app(tr_handler=None):
|
||||
token_inputs = swap_event.get('tokenInputs', [])
|
||||
token_outputs = swap_event.get('tokenOutputs', [])
|
||||
|
||||
|
||||
usdcMint = LIQUIDITY_TOKENS[0]
|
||||
tr = {}
|
||||
wallet = data[0]['feePayer'] # Using feePayer as the wallet address
|
||||
tx_signature = data[0]['signature']
|
||||
usdcMint = LIQUIDITY_TOKENS[0]
|
||||
solMint = LIQUIDITY_TOKENS[1]
|
||||
|
||||
|
||||
try:
|
||||
# Determine transaction type
|
||||
@ -203,31 +204,39 @@ def init_app(tr_handler=None):
|
||||
else:
|
||||
tr["type"] = "SWAP"
|
||||
|
||||
|
||||
if swap_event.get('nativeInput', None):
|
||||
tr["token_in"] = solMint
|
||||
tr["amount_in"] = int(swap_event.get('nativeInput')["amount"])/ 10**6
|
||||
tr["type"] = "BUY"
|
||||
tr["token_in_decimals"] = 6
|
||||
|
||||
if swap_event.get('nativeOutput', None):
|
||||
tr["token_out"] = solMint
|
||||
tr["amount_out"] = int(swap_event.get('nativeOutput')["amount"]) / 10**6
|
||||
tr["type"] = "SELL"
|
||||
tr["token_out_decimals"] = 6
|
||||
|
||||
if not token_inputs or len(token_inputs) == 0:
|
||||
logging.info("Assumed USDC as first token. BUY transaction detected")
|
||||
tr["token_in"] = usdcMint
|
||||
tr["type"] = "BUY"
|
||||
prices = await SolanaAPI.DEX.get_token_prices([token_outputs[0]["mint"]])
|
||||
tr["amount_in"] = prices[token_outputs[0]["mint"]] * int(token_outputs[0]["rawTokenAmount"]["tokenAmount"]) / 10** int(token_outputs[0]["rawTokenAmount"]["decimals"])
|
||||
|
||||
tr["amount_in"] = await calculate_price_amount(token_outputs[0])
|
||||
else:
|
||||
token_in = token_inputs[0]
|
||||
tr["token_in"] = token_in["mint"]
|
||||
tr["token_in_decimals"] = token_in["rawTokenAmount"]["decimals"]
|
||||
tr["amount_in"] = float(int(token_in["rawTokenAmount"]["tokenAmount"]) / 10**token_in["rawTokenAmount"]["decimals"])
|
||||
tr["token_in_decimals"] = get_decimals(token_in)
|
||||
tr["amount_in"] = calculate_amount(token_in)
|
||||
|
||||
if not token_outputs or len(token_outputs) == 0:
|
||||
logging.info("Assumed USDC as second token. SELL transaction detected")
|
||||
tr["token_out"] = usdcMint
|
||||
tr["type"] = "SELL"
|
||||
prices = await SolanaAPI.DEX.get_token_prices([token_inputs[0]["mint"]])
|
||||
tr["amount_out"] = prices[token_inputs[0]["mint"]] * int(token_inputs[0]["rawTokenAmount"]["tokenAmount"]) / 10** int(token_inputs[0]["rawTokenAmount"]["decimals"])
|
||||
|
||||
tr["amount_out"] = await calculate_price_amount(token_inputs[0])
|
||||
else:
|
||||
token_out = token_outputs[0]
|
||||
tr["token_out"] = token_out["mint"]
|
||||
tr["token_out_decimals"] = token_out["rawTokenAmount"]["decimals"]
|
||||
tr["amount_out"] = float(int(token_out["rawTokenAmount"]["tokenAmount"]) / 10**token_out["rawTokenAmount"]["decimals"])
|
||||
tr["token_out_decimals"] = get_decimals(token_out)
|
||||
|
||||
# Store transaction in database
|
||||
if tr["type"] in ["BUY", "SELL"]:
|
||||
@ -287,7 +296,7 @@ def init_app(tr_handler=None):
|
||||
value_out_usd=tr.get("swap_amount_usd", 0) if not is_buy else 0,
|
||||
tx_signature=tx_signature
|
||||
)
|
||||
try: storage.store_transaction(copyTransaction)
|
||||
try: await storage.store_transaction(copyTransaction)
|
||||
except: logging.error(traceback.format_exc())
|
||||
|
||||
# Attempt to execute the copytrade transaction
|
||||
@ -298,10 +307,10 @@ def init_app(tr_handler=None):
|
||||
else:
|
||||
await SolanaAPI.SAPI.follow_move(tr)
|
||||
# Store the successful copytrade transaction
|
||||
storage.store_transaction(wallet, "SWAP", tr['symbol_in'] , tr['amount_in'], tr['value_in_USD'], tr['symbol_out'], tr['amount_out'], tr['value_out_USD'],tx_signature)
|
||||
await storage.store_transaction(wallet, "SWAP", tr['symbol_in'] , tr['amount_in'], tr['value_in_USD'], tr['symbol_out'], tr['amount_out'], tr['value_out_USD'],tx_signature)
|
||||
except Exception as e:
|
||||
# Store the failed copytrade transaction
|
||||
storage.store_transaction(wallet, "SWAP_FAIL", tr['symbol_in'] , tr['amount_in'], tr['value_in_USD'], tr['symbol_out'], tr['amount_out'], tr['value_out_USD'],tx_signature)
|
||||
# await storage.store_transaction(wallet, "SWAP_FAIL", tr['symbol_in'] , tr['amount_in'], tr['value_in_USD'], tr['symbol_out'], tr['amount_out'], tr['value_out_USD'],tx_signature)
|
||||
logging.error(f"Copytrade transaction failed: {e}")
|
||||
# ToDo - probably optimize
|
||||
await SolanaAPI.DEX.save_token_info()
|
||||
@ -312,6 +321,19 @@ def init_app(tr_handler=None):
|
||||
# Log the full traceback for debugging
|
||||
logging.error(traceback.format_exc())
|
||||
|
||||
def get_decimals(token_data):
|
||||
return token_data["rawTokenAmount"].get("decimals") or token_data["rawTokenAmount"].get("decimalFs", 0)
|
||||
def calculate_amount(token_data):
|
||||
decimals = get_decimals(token_data)
|
||||
token_amount = int(token_data["rawTokenAmount"]["tokenAmount"])
|
||||
return float(token_amount / 10**decimals)
|
||||
async def calculate_price_amount(token_data, prices=None):
|
||||
if not prices:
|
||||
prices = await SolanaAPI.DEX.get_token_prices([token_data["mint"]])
|
||||
decimals = get_decimals(token_data)
|
||||
token_amount = int(token_data["rawTokenAmount"]["tokenAmount"])
|
||||
return prices[token_data["mint"]] * token_amount / 10**decimals
|
||||
|
||||
@app.route('/replay_wh', methods=['POST'])
|
||||
async def replay_wh():
|
||||
try:
|
||||
|
Loading…
x
Reference in New Issue
Block a user