diff --git a/.gitignore b/.gitignore
index 625d168..f2239b2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,4 @@ cache/*
crypto/sol/logs/error.log
crypto/sol/logs/token_info.json
crypto/sol/logs/transation_details.json
+.env
diff --git a/crypto/sol/app.py b/crypto/sol/app.py
index e3627de..51af546 100644
--- a/crypto/sol/app.py
+++ b/crypto/sol/app.py
@@ -228,7 +228,7 @@ async def follow_move(move):
token_info = SAPI.dex.TOKENS_INFO.get(move['token_in'])
token_name_in = token_info.get('symbol') or await SAPI.get_token_metadata(move['token_in'])
- token_name_out = SAPI.dex.TOKENS_INFO[move['token_out']].get('symbol') or await solanaAPI.get_token_metadata_symbol(move['token_out'])
+ token_name_out = SAPI.dex.TOKENS_INFO[move['token_out']].get('symbol') or await SAPI.get_token_metadata_symbol(move['token_out'])
if not your_balance:
msg = f"Move not followed:\nNo balance found for token {move['symbol_in']}. Cannot follow move."
@@ -406,7 +406,7 @@ app = init_app()
asgi_app = WsgiToAsgi(app)
async def main():
- global solanaAPI, bot, PROCESSING_LOG, pk
+ global bot, PROCESSING_LOG, pk
pk = await get_pk()
await telegram_utils.initialize()
diff --git a/crypto/sol/modules/storage.py b/crypto/sol/modules/storage.py
index 26ea7e2..e372a54 100644
--- a/crypto/sol/modules/storage.py
+++ b/crypto/sol/modules/storage.py
@@ -24,6 +24,7 @@ async def init_db():
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
address TEXT NOT NULL,
+ secret TEXT NOT NULL,
name TEXT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
@@ -39,7 +40,6 @@ async def init_db():
buy_currency TEXT,
buy_amount REAL,
buy_value REAL,
- closed BOOLEAN DEFAULT 0,
details TEXT,
solana_signature TEXT UNIQUE,
FOREIGN KEY (wallet_id) REFERENCES wallets(id)
@@ -51,6 +51,7 @@ async def init_db():
currency TEXT,
amount REAL,
last_updated TEXT,
+ is_base BOOLEAN DEFAULT 0,
FOREIGN KEY (wallet_id) REFERENCES wallets(id)
);
@@ -257,72 +258,3 @@ def store_api_key(user_id, api_key):
# In a real application, you would store this in a database
# For this example, we'll just print it
print(f"Storing API key {api_key} for user {user_id}")
-
-
-
-
-
-# async def get_new_transactions(wallet_address, rpc_url):
-# async with AsyncClient(rpc_url) as client:
-# last_tx = await get_last_stored_transaction(wallet_address)
-
-# if last_tx:
-# last_signature, last_timestamp = last_tx
-# else:
-# # If no transactions are stored, we'll fetch all transactions
-# last_signature = None
-# last_timestamp = None
-
-# new_transactions = []
-
-# # Get the transaction history for the wallet
-# tx_history = await client.get_signatures_for_address(wallet_address, before=last_signature)
-
-# for tx in tx_history.value:
-# # Check if the transaction is newer than the last stored one
-# if not last_timestamp or tx.block_time > datetime.fromisoformat(last_timestamp).timestamp():
-# # Fetch the full transaction details
-# tx_details = await client.get_transaction(tx.signature, commitment=Confirmed)
-# new_transactions.append(tx_details)
-
-# return new_transactions
-
-# async def process_new_transactions(wallet_id, wallet_address, rpc_url):
-# new_transactions = await get_new_transactions(wallet_address, rpc_url)
-
-# for tx in new_transactions:
-# # Process the transaction and extract relevant information
-# # This is a placeholder - you'll need to implement the actual logic based on your requirements
-# transaction_type = "swap" # Determine the type based on the transaction data
-# sell_currency = "SOL" # Extract from transaction data
-# sell_amount = 1.0 # Extract from transaction data
-# sell_value = 100.0 # Extract from transaction data
-# buy_currency = "USDC" # Extract from transaction data
-# buy_amount = 100.0 # Extract from transaction data
-# buy_value = 100.0 # Extract from transaction data
-# solana_signature = tx.transaction.signatures[0]
-
-# # Store the transaction in the database
-# await store_transaction(
-# wallet_id, transaction_type, sell_currency, sell_amount, sell_value,
-# buy_currency, buy_amount, buy_value, solana_signature
-# )
-
-# # Update holdings
-# await update_holdings(wallet_id, sell_currency, -sell_amount)
-# await update_holdings(wallet_id, buy_currency, buy_amount)
-
-# # After processing all new transactions, close completed transactions
-# await close_completed_transactions(wallet_id)
-
-
-
-# Example usage
-if __name__ == "__main__":
- import asyncio
-
- async def main():
- await init_db()
- # Add more test functions here
-
- asyncio.run(main())
\ No newline at end of file
diff --git a/crypto/sol/modules/webui.py b/crypto/sol/modules/webui.py
index bc6b9ff..79a2391 100644
--- a/crypto/sol/modules/webui.py
+++ b/crypto/sol/modules/webui.py
@@ -4,7 +4,7 @@ from flask_login import LoginManager, UserMixin, login_user, login_required, log
import secrets
from modules import storage, utils, SolanaAPI
import os
-
+import logging
def init_app():
app = Flask(__name__, template_folder='../templates', static_folder='../static')
@@ -31,6 +31,54 @@ def init_app():
login_manager = LoginManager()
login_manager.init_app(app)
+ logger = logging.getLogger(__name__)
+
+ # API
+ @app.route('/tr//', methods=['GET', 'POST'])
+ async def transaction_notified(wallet, tx_signature):
+ try:
+ logger.info(f"Processing transaction notification for wallet: {wallet}, tx: {tx_signature}")
+ request_data = request.get_json()
+ if not request_data:
+ # Process the transaction
+ # tr = await get_swap_transaction_details(tx_signature)
+ tr = await SolanaAPI.SAPI.get_transaction_details_info(tx_signature, [])
+ else:
+ tr = request_data
+
+
+ # ToDo - probably optimize
+ tr['symbol_in'] = await SolanaAPI.SAPI.get_token_metadata_symbol(tr['token_in'])
+ tr['symbol_out'] = await SolanaAPI.SAPI.get_token_metadata_symbol(tr['token_out'])
+
+ notification = (
+ f"Got TXN notification:: {tr['amount_in']} {tr['symbol_in']} swapped for {tr['symbol_out']} \n"
+ )
+ logging.info(notification)
+ await utils.telegram_utils.send_telegram_message(notification)
+
+ # Store the notified transaction in the database
+ storage.store_transaction(tr)
+
+ # Attempt to execute the copytrade transaction
+ try:
+ await SolanaAPI.SAPI.follow_move(tr)
+ # Store the successful copytrade transaction
+ storage.store_copytrade_transaction(tr, success=True)
+ except Exception as e:
+ # Store the failed copytrade transaction
+ storage.store_copytrade_transaction(tr, success=False, error=str(e))
+ logging.error(f"Copytrade transaction failed: {e}")
+ # ToDo - probably optimize
+ await SolanaAPI.SAPI.save_token_info()
+ return jsonify(tr), 200
+ except Exception as e:
+ logging.error(f"Error processing transaction: {e}")
+ return jsonify({"error": "Failed to process transaction"}), 500
+
+
+
+
@app.route('/login/google/authorized')
def authorized():
# resp = google.authorized_response()
@@ -135,33 +183,6 @@ def init_app():
return jsonify({"error": "Failed to process log"}), 500
-
-
-
- #const webhookPath = `/tr/${followedWallet.toBase58()}/${logs.signature}`;
- @app.route('/tr//', methods=['GET', 'POST'])
- async def transaction_notified(wallet, tx_signature):
- try:
- utils.log.info(f"Processing transaction notification for wallet: {wallet}, tx: {tx_signature}")
- # Process the transaction
- # tr = await get_swap_transaction_details(tx_signature)
- tr = await get_transaction_details_info(tx_signature, [])
- # ToDo - probably optimize
- await get_token_metadata_symbol(tr['token_in'])
- await get_token_metadata_symbol(tr['token_out'])
- await follow_move(tr)
- await save_token_info()
- return jsonify(tr), 200
- except Exception as e:
- utils.log.error(f"Error processing transaction: {e}")
- return jsonify({"error": "Failed to process transaction"}), 500
-
-
-
-
-
-
-
return app
# Function to find the latest log file
diff --git a/trading b/trading
index 78e4a08..9d71f27 160000
--- a/trading
+++ b/trading
@@ -1 +1 @@
-Subproject commit 78e4a087f0f71c8b8b1b743fa8bd79ef5d6ae5af
+Subproject commit 9d71f274f8e1e71daef697bed753bd44944d0f97