2025-05-28 21:53:03 +00:00

66 lines
2.4 KiB
Python

from datetime import datetime
from sqlalchemy import (Boolean, Column, DateTime, Float, ForeignKey, Integer,
String, Text)
from sqlalchemy.orm import relationship
from app.db.session import Base
class Block(Base):
__tablename__ = "blocks"
id = Column(Integer, primary_key=True, index=True)
slot = Column(Integer, unique=True, index=True)
blockhash = Column(String, unique=True, index=True)
parent_blockhash = Column(String, index=True)
timestamp = Column(DateTime, default=datetime.utcnow)
processed = Column(Boolean, default=False)
transactions = relationship("Transaction", back_populates="block")
class Transaction(Base):
__tablename__ = "transactions"
id = Column(Integer, primary_key=True, index=True)
signature = Column(String, unique=True, index=True)
block_id = Column(Integer, ForeignKey("blocks.slot"))
timestamp = Column(DateTime, default=datetime.utcnow)
fee = Column(Integer)
status = Column(String)
raw_data = Column(Text)
block = relationship("Block", back_populates="transactions")
token_transfers = relationship("TokenTransfer", back_populates="transaction")
arbitrage_events = relationship("ArbitrageEvent", back_populates="transaction")
class TokenTransfer(Base):
__tablename__ = "token_transfers"
id = Column(Integer, primary_key=True, index=True)
transaction_id = Column(Integer, ForeignKey("transactions.id"))
token_address = Column(String, index=True)
from_address = Column(String, index=True)
to_address = Column(String, index=True)
amount = Column(Float)
program_id = Column(String, index=True)
timestamp = Column(DateTime, default=datetime.utcnow)
transaction = relationship("Transaction", back_populates="token_transfers")
class ArbitrageEvent(Base):
__tablename__ = "arbitrage_events"
id = Column(Integer, primary_key=True, index=True)
transaction_id = Column(Integer, ForeignKey("transactions.id"))
profit_token_address = Column(String, index=True)
profit_amount = Column(Float)
profit_usd = Column(Float, nullable=True)
path = Column(Text) # JSON string of token paths
confidence_score = Column(Float) # 0.0 to 1.0
detected_at = Column(DateTime, default=datetime.utcnow)
transaction = relationship("Transaction", back_populates="arbitrage_events")