Merge pull request #160 from flashbots/add-transaction-position-crud
Write transaction position for swaps and traces
This commit is contained in:
		@@ -41,6 +41,7 @@ def create_swap_from_pool_transfers(
 | 
			
		||||
    return Swap(
 | 
			
		||||
        abi_name=trace.abi_name,
 | 
			
		||||
        transaction_hash=trace.transaction_hash,
 | 
			
		||||
        transaction_position=trace.transaction_position,
 | 
			
		||||
        block_number=trace.block_number,
 | 
			
		||||
        trace_address=trace.trace_address,
 | 
			
		||||
        contract_address=pool_address,
 | 
			
		||||
@@ -78,6 +79,7 @@ def create_swap_from_recipient_transfers(
 | 
			
		||||
    return Swap(
 | 
			
		||||
        abi_name=trace.abi_name,
 | 
			
		||||
        transaction_hash=trace.transaction_hash,
 | 
			
		||||
        transaction_position=trace.transaction_position,
 | 
			
		||||
        block_number=trace.block_number,
 | 
			
		||||
        trace_address=trace.trace_address,
 | 
			
		||||
        contract_address=pool_address,
 | 
			
		||||
 
 | 
			
		||||
@@ -40,6 +40,7 @@ class ZeroExSwapClassifier(SwapClassifier):
 | 
			
		||||
        return Swap(
 | 
			
		||||
            abi_name=trace.abi_name,
 | 
			
		||||
            transaction_hash=trace.transaction_hash,
 | 
			
		||||
            transaction_position=trace.transaction_position,
 | 
			
		||||
            block_number=trace.block_number,
 | 
			
		||||
            trace_address=trace.trace_address,
 | 
			
		||||
            contract_address=trace.to_address,
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@ def write_classified_traces(
 | 
			
		||||
        models.append(
 | 
			
		||||
            ClassifiedTraceModel(
 | 
			
		||||
                transaction_hash=trace.transaction_hash,
 | 
			
		||||
                transaction_position=trace.transaction_position,
 | 
			
		||||
                block_number=trace.block_number,
 | 
			
		||||
                classification=trace.classification.value,
 | 
			
		||||
                trace_type=trace.type.value,
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ class SwapModel(Base):
 | 
			
		||||
 | 
			
		||||
    abi_name = Column(String, nullable=False)
 | 
			
		||||
    transaction_hash = Column(String, primary_key=True)
 | 
			
		||||
    transaction_position = Column(Numeric, nullable=True)
 | 
			
		||||
    block_number = Column(Numeric, nullable=False)
 | 
			
		||||
    trace_address = Column(ARRAY(Integer), nullable=False)
 | 
			
		||||
    protocol = Column(String, nullable=True)
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ class ClassifiedTraceModel(Base):
 | 
			
		||||
    __tablename__ = "classified_traces"
 | 
			
		||||
 | 
			
		||||
    transaction_hash = Column(String, primary_key=True)
 | 
			
		||||
    transaction_position = Column(Numeric, nullable=True)
 | 
			
		||||
    block_number = Column(Numeric, nullable=False)
 | 
			
		||||
    classification = Column(String, nullable=False)
 | 
			
		||||
    trace_type = Column(String, nullable=False)
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ from mev_inspect.schemas.traces import Protocol
 | 
			
		||||
class Swap(BaseModel):
 | 
			
		||||
    abi_name: str
 | 
			
		||||
    transaction_hash: str
 | 
			
		||||
    transaction_position: int
 | 
			
		||||
    block_number: int
 | 
			
		||||
    trace_address: List[int]
 | 
			
		||||
    contract_address: str
 | 
			
		||||
 
 | 
			
		||||
@@ -58,6 +58,7 @@ class ClassifiedTrace(Trace):
 | 
			
		||||
    value: Optional[int]
 | 
			
		||||
    gas_used: Optional[int]
 | 
			
		||||
    transaction_hash: str
 | 
			
		||||
    transaction_position: int
 | 
			
		||||
    protocol: Optional[Protocol]
 | 
			
		||||
    function_name: Optional[str]
 | 
			
		||||
    function_signature: Optional[str]
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,7 @@ def make_transfer_trace(
 | 
			
		||||
):
 | 
			
		||||
    return DecodedCallTrace(
 | 
			
		||||
        transaction_hash=transaction_hash,
 | 
			
		||||
        transaction_position=0,
 | 
			
		||||
        block_number=block_number,
 | 
			
		||||
        type=TraceType.call,
 | 
			
		||||
        trace_address=trace_address,
 | 
			
		||||
@@ -53,6 +54,7 @@ def make_swap_trace(
 | 
			
		||||
):
 | 
			
		||||
    return DecodedCallTrace(
 | 
			
		||||
        transaction_hash=transaction_hash,
 | 
			
		||||
        transaction_position=0,
 | 
			
		||||
        block_number=block_number,
 | 
			
		||||
        type=TraceType.call,
 | 
			
		||||
        trace_address=trace_address,
 | 
			
		||||
@@ -78,6 +80,7 @@ def make_unknown_trace(
 | 
			
		||||
    return ClassifiedTrace(
 | 
			
		||||
        block_number=block_number,
 | 
			
		||||
        transaction_hash=transaction_hash,
 | 
			
		||||
        transaction_position=0,
 | 
			
		||||
        trace_address=trace_address,
 | 
			
		||||
        action={},
 | 
			
		||||
        subtraces=0,
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@ def test_fillLimitOrder_swap(trace_classifier: TraceClassifier):
 | 
			
		||||
    swap = Swap(
 | 
			
		||||
        abi_name="INativeOrdersFeature",
 | 
			
		||||
        transaction_hash=transaction_hash,
 | 
			
		||||
        transaction_position=2,
 | 
			
		||||
        block_number=block_number,
 | 
			
		||||
        trace_address=[0, 2, 0, 1],
 | 
			
		||||
        contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
 | 
			
		||||
@@ -43,6 +44,7 @@ def test__fillLimitOrder_swap(trace_classifier: TraceClassifier):
 | 
			
		||||
    swap = Swap(
 | 
			
		||||
        abi_name="INativeOrdersFeature",
 | 
			
		||||
        transaction_hash=transaction_hash,
 | 
			
		||||
        transaction_position=8,
 | 
			
		||||
        block_number=block_number,
 | 
			
		||||
        trace_address=[0, 1],
 | 
			
		||||
        contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
 | 
			
		||||
@@ -72,6 +74,7 @@ def test_RfqLimitOrder_swap(trace_classifier: TraceClassifier):
 | 
			
		||||
    swap = Swap(
 | 
			
		||||
        abi_name="INativeOrdersFeature",
 | 
			
		||||
        transaction_hash=transaction_hash,
 | 
			
		||||
        transaction_position=9,
 | 
			
		||||
        block_number=block_number,
 | 
			
		||||
        trace_address=[0, 1, 13, 0, 1],
 | 
			
		||||
        contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
 | 
			
		||||
@@ -101,6 +104,7 @@ def test__RfqLimitOrder_swap(trace_classifier: TraceClassifier):
 | 
			
		||||
    swap = Swap(
 | 
			
		||||
        abi_name="INativeOrdersFeature",
 | 
			
		||||
        transaction_hash=transaction_hash,
 | 
			
		||||
        transaction_position=168,
 | 
			
		||||
        block_number=block_number,
 | 
			
		||||
        trace_address=[1, 0, 1, 0, 1],
 | 
			
		||||
        contract_address="0xdef1c0ded9bec7f1a1670819833240f027b25eff",
 | 
			
		||||
 
 | 
			
		||||
@@ -25,11 +25,13 @@ def test_two_pool_arbitrage(get_transaction_hashes, get_addresses):
 | 
			
		||||
    first_token_in_amount = 10
 | 
			
		||||
    first_token_out_amount = 11
 | 
			
		||||
    second_token_amount = 15
 | 
			
		||||
    transaction_position = 0
 | 
			
		||||
 | 
			
		||||
    arb_swaps = [
 | 
			
		||||
        Swap(
 | 
			
		||||
            abi_name=UNISWAP_V2_PAIR_ABI_NAME,
 | 
			
		||||
            transaction_hash=transaction_hash,
 | 
			
		||||
            transaction_position=transaction_position,
 | 
			
		||||
            block_number=block_number,
 | 
			
		||||
            trace_address=[0],
 | 
			
		||||
            contract_address=first_pool_address,
 | 
			
		||||
@@ -43,6 +45,7 @@ def test_two_pool_arbitrage(get_transaction_hashes, get_addresses):
 | 
			
		||||
        Swap(
 | 
			
		||||
            abi_name=UNISWAP_V3_POOL_ABI_NAME,
 | 
			
		||||
            transaction_hash=transaction_hash,
 | 
			
		||||
            transaction_position=transaction_position,
 | 
			
		||||
            block_number=block_number,
 | 
			
		||||
            trace_address=[1],
 | 
			
		||||
            contract_address=second_pool_address,
 | 
			
		||||
@@ -58,6 +61,7 @@ def test_two_pool_arbitrage(get_transaction_hashes, get_addresses):
 | 
			
		||||
    unrelated_swap = Swap(
 | 
			
		||||
        abi_name=UNISWAP_V3_POOL_ABI_NAME,
 | 
			
		||||
        transaction_hash=transaction_hash,
 | 
			
		||||
        transaction_position=transaction_position,
 | 
			
		||||
        block_number=block_number,
 | 
			
		||||
        trace_address=[2, 0],
 | 
			
		||||
        contract_address=unrelated_pool_address,
 | 
			
		||||
@@ -106,11 +110,13 @@ def test_three_pool_arbitrage(get_transaction_hashes, get_addresses):
 | 
			
		||||
    first_token_out_amount = 11
 | 
			
		||||
    second_token_amount = 15
 | 
			
		||||
    third_token_amount = 40
 | 
			
		||||
    transaction_position = 0
 | 
			
		||||
 | 
			
		||||
    swaps = [
 | 
			
		||||
        Swap(
 | 
			
		||||
            abi_name=UNISWAP_V2_PAIR_ABI_NAME,
 | 
			
		||||
            transaction_hash=transaction_hash,
 | 
			
		||||
            transaction_position=transaction_position,
 | 
			
		||||
            block_number=block_number,
 | 
			
		||||
            trace_address=[0],
 | 
			
		||||
            contract_address=first_pool_address,
 | 
			
		||||
@@ -124,6 +130,7 @@ def test_three_pool_arbitrage(get_transaction_hashes, get_addresses):
 | 
			
		||||
        Swap(
 | 
			
		||||
            abi_name=UNISWAP_V3_POOL_ABI_NAME,
 | 
			
		||||
            transaction_hash=transaction_hash,
 | 
			
		||||
            transaction_position=transaction_position,
 | 
			
		||||
            block_number=block_number,
 | 
			
		||||
            trace_address=[1],
 | 
			
		||||
            contract_address=second_pool_address,
 | 
			
		||||
@@ -137,6 +144,7 @@ def test_three_pool_arbitrage(get_transaction_hashes, get_addresses):
 | 
			
		||||
        Swap(
 | 
			
		||||
            abi_name=UNISWAP_V3_POOL_ABI_NAME,
 | 
			
		||||
            transaction_hash=transaction_hash,
 | 
			
		||||
            transaction_position=transaction_position,
 | 
			
		||||
            block_number=block_number,
 | 
			
		||||
            trace_address=[2],
 | 
			
		||||
            contract_address=third_pool_address,
 | 
			
		||||
@@ -218,6 +226,7 @@ def create_generic_swap(
 | 
			
		||||
    return Swap(
 | 
			
		||||
        abi_name=UNISWAP_V3_POOL_ABI_NAME,
 | 
			
		||||
        transaction_hash="0xfake",
 | 
			
		||||
        transaction_position=0,
 | 
			
		||||
        block_number=0,
 | 
			
		||||
        trace_address=trace_address,
 | 
			
		||||
        contract_address="0xfake",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user