Change NestedTrace to use ClassifiedTraces
This commit is contained in:
parent
9bb79f7001
commit
d33179d267
@ -1,2 +1,2 @@
|
|||||||
from .abi import ABI
|
from .abi import ABI
|
||||||
from .blocks import Block, NestedTrace, Trace, TraceType
|
from .blocks import Block, Trace, TraceType
|
||||||
|
@ -68,9 +68,3 @@ class Block(Web3Model):
|
|||||||
return [trace for trace in self.traces if trace.transaction_hash == hash]
|
return [trace for trace in self.traces if trace.transaction_hash == hash]
|
||||||
|
|
||||||
|
|
||||||
class NestedTrace(BaseModel):
|
|
||||||
trace: Trace
|
|
||||||
subtraces: List["NestedTrace"]
|
|
||||||
|
|
||||||
|
|
||||||
NestedTrace.update_forward_refs()
|
|
||||||
|
@ -50,3 +50,11 @@ class ClassifierSpec(BaseModel):
|
|||||||
protocol: Optional[Protocol] = None
|
protocol: Optional[Protocol] = None
|
||||||
valid_contract_addresses: Optional[List[str]] = None
|
valid_contract_addresses: Optional[List[str]] = None
|
||||||
classifications: Dict[str, Classification] = {}
|
classifications: Dict[str, Classification] = {}
|
||||||
|
|
||||||
|
|
||||||
|
class NestedTrace(BaseModel):
|
||||||
|
trace: ClassifiedTrace
|
||||||
|
subtraces: List["NestedTrace"]
|
||||||
|
|
||||||
|
|
||||||
|
NestedTrace.update_forward_refs()
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
from typing import Iterable, List
|
from typing import Iterable, List
|
||||||
|
|
||||||
from mev_inspect.schemas import Trace, NestedTrace
|
from mev_inspect.schemas.classified_traces import ClassifiedTrace, NestedTrace
|
||||||
|
|
||||||
|
|
||||||
def as_nested_traces(traces: Iterable[Trace]) -> List[NestedTrace]:
|
def as_nested_traces(traces: Iterable[ClassifiedTrace]) -> List[NestedTrace]:
|
||||||
nested_traces = []
|
nested_traces = []
|
||||||
|
|
||||||
sorted_by_transaction_hash = sorted(traces, key=_get_transaction_hash)
|
sorted_by_transaction_hash = sorted(traces, key=_get_transaction_hash)
|
||||||
@ -20,7 +20,7 @@ def _get_transaction_hash(trace) -> str:
|
|||||||
return trace.transaction_hash
|
return trace.transaction_hash
|
||||||
|
|
||||||
|
|
||||||
def _as_nested_traces_by_transaction(traces: Iterable[Trace]) -> List[NestedTrace]:
|
def _as_nested_traces_by_transaction(traces: Iterable[ClassifiedTrace]) -> List[NestedTrace]:
|
||||||
"""
|
"""
|
||||||
Turns a list of Traces into a a tree of NestedTraces
|
Turns a list of Traces into a a tree of NestedTraces
|
||||||
using their trace addresses
|
using their trace addresses
|
||||||
@ -35,7 +35,7 @@ def _as_nested_traces_by_transaction(traces: Iterable[Trace]) -> List[NestedTrac
|
|||||||
nested_traces = []
|
nested_traces = []
|
||||||
|
|
||||||
parent = None
|
parent = None
|
||||||
children: List[Trace] = []
|
children: List[ClassifiedTrace] = []
|
||||||
|
|
||||||
sorted_traces = sorted(traces, key=lambda t: t.trace_address)
|
sorted_traces = sorted(traces, key=lambda t: t.trace_address)
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ def _as_nested_traces_by_transaction(traces: Iterable[Trace]) -> List[NestedTrac
|
|||||||
return nested_traces
|
return nested_traces
|
||||||
|
|
||||||
|
|
||||||
def _is_subtrace(trace: Trace, parent: Trace):
|
def _is_subtrace(trace: ClassifiedTrace, parent: ClassifiedTrace):
|
||||||
parent_trace_length = len(parent.trace_address)
|
parent_trace_length = len(parent.trace_address)
|
||||||
|
|
||||||
if len(trace.trace_address) > parent_trace_length:
|
if len(trace.trace_address) > parent_trace_length:
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import unittest
|
import unittest
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from mev_inspect.schemas import Trace, TraceType, NestedTrace
|
from mev_inspect.schemas import TraceType
|
||||||
|
from mev_inspect.schemas.classified_traces import ClassifiedTrace, Classification, NestedTrace
|
||||||
from mev_inspect.traces import as_nested_traces
|
from mev_inspect.traces import as_nested_traces
|
||||||
|
|
||||||
|
|
||||||
@ -82,20 +83,13 @@ class TestTraces(unittest.TestCase):
|
|||||||
def build_trace_at_address(
|
def build_trace_at_address(
|
||||||
transaction_hash: str,
|
transaction_hash: str,
|
||||||
trace_address: List[int],
|
trace_address: List[int],
|
||||||
) -> Trace:
|
) -> ClassifiedTrace:
|
||||||
return Trace(
|
return ClassifiedTrace(
|
||||||
# real values
|
|
||||||
transaction_hash=transaction_hash,
|
transaction_hash=transaction_hash,
|
||||||
trace_address=trace_address,
|
trace_address=trace_address,
|
||||||
# placeholders
|
|
||||||
action={},
|
|
||||||
block_hash="",
|
|
||||||
block_number=DEFAULT_BLOCK_NUMBER,
|
block_number=DEFAULT_BLOCK_NUMBER,
|
||||||
result=None,
|
trace_type=TraceType.call,
|
||||||
subtraces=0,
|
classification=Classification.unknown,
|
||||||
transaction_position=None,
|
|
||||||
type=TraceType.call,
|
|
||||||
error=None,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user