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