Automated Action 73b706f0eb Set up Solana Arbitrage Trading System
- Created Alembic migrations for SQLite database
- Set up database initialization on app startup
- Fixed linting issues with Ruff
- Updated README with comprehensive documentation
- Configured startup tasks and health checks
2025-06-05 19:34:12 +00:00

80 lines
3.1 KiB
Python

"""Initial schema
Revision ID: 001
Revises:
Create Date: 2023-06-05
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '001'
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
# Create arbitrage_opportunities table
op.create_table(
'arbitrage_opportunities',
sa.Column('id', sa.Integer(), primary_key=True, index=True),
sa.Column('created_at', sa.DateTime(), default=sa.func.current_timestamp(), index=True),
sa.Column('token_address', sa.String(), index=True),
sa.Column('token_symbol', sa.String(), index=True),
sa.Column('source_dex', sa.String(), index=True),
sa.Column('target_dex', sa.String(), index=True),
sa.Column('source_price', sa.Float()),
sa.Column('target_price', sa.Float()),
sa.Column('price_difference', sa.Float()),
sa.Column('price_difference_percent', sa.Float(), index=True),
sa.Column('estimated_profit_usd', sa.Float()),
sa.Column('estimated_profit_token', sa.Float()),
sa.Column('max_trade_amount_usd', sa.Float()),
sa.Column('max_trade_amount_token', sa.Float()),
sa.Column('slippage_estimate', sa.Float()),
sa.Column('fees_estimate', sa.Float()),
sa.Column('is_viable', sa.Boolean(), default=False, index=True),
sa.Column('was_executed', sa.Boolean(), default=False, index=True)
)
# Create trades table
op.create_table(
'trades',
sa.Column('id', sa.Integer(), primary_key=True, index=True),
sa.Column('created_at', sa.DateTime(), default=sa.func.current_timestamp(), index=True),
sa.Column('opportunity_id', sa.Integer(), sa.ForeignKey("arbitrage_opportunities.id"), index=True),
sa.Column('token_address', sa.String(), index=True),
sa.Column('token_symbol', sa.String(), index=True),
sa.Column('source_dex', sa.String()),
sa.Column('target_dex', sa.String()),
sa.Column('input_amount', sa.Float()),
sa.Column('input_amount_usd', sa.Float()),
sa.Column('output_amount', sa.Float()),
sa.Column('output_amount_usd', sa.Float()),
sa.Column('profit_amount', sa.Float()),
sa.Column('profit_amount_usd', sa.Float()),
sa.Column('profit_percent', sa.Float()),
sa.Column('tx_signature', sa.String(), unique=True, index=True, nullable=True),
sa.Column('tx_status', sa.String(), index=True),
sa.Column('tx_error', sa.Text(), nullable=True)
)
# Create system_events table
op.create_table(
'system_events',
sa.Column('id', sa.Integer(), primary_key=True, index=True),
sa.Column('timestamp', sa.DateTime(), default=sa.func.current_timestamp(), index=True),
sa.Column('event_type', sa.String(), index=True),
sa.Column('component', sa.String(), index=True),
sa.Column('message', sa.Text()),
sa.Column('details', sa.Text(), nullable=True)
)
def downgrade():
op.drop_table('trades')
op.drop_table('system_events')
op.drop_table('arbitrage_opportunities')