From 4c42407faf200ad2ec9574e719863dcb890418e1 Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Thu, 5 Aug 2021 12:36:37 -0400 Subject: [PATCH] Add Transfer schema + parse from trace --- mev_inspect/schemas/transfers.py | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 mev_inspect/schemas/transfers.py diff --git a/mev_inspect/schemas/transfers.py b/mev_inspect/schemas/transfers.py new file mode 100644 index 0000000..dc55aaa --- /dev/null +++ b/mev_inspect/schemas/transfers.py @@ -0,0 +1,38 @@ +from typing import List + +from pydantic import BaseModel + +from .classified_traces import Classification, ClassifiedTrace, Protocol + + +class Transfer(BaseModel): + transaction_hash: str + trace_address: List[int] + from_address: str + to_address: str + amount: int + token_address: str + + @classmethod + def from_trace(cls, trace: ClassifiedTrace) -> "Transfer": + if trace.classification != Classification.transfer or trace.inputs is None: + raise ValueError("Invalid transfer") + + if trace.protocol == Protocol.weth: + return cls( + transaction_hash=trace.transaction_hash, + trace_address=trace.trace_address, + amount=trace.inputs["wad"], + to_address=trace.inputs["dst"], + from_address=trace.from_address, + token_address=trace.to_address, + ) + else: + return cls( + transaction_hash=trace.transaction_hash, + trace_address=trace.trace_address, + amount=trace.inputs["amount"], + to_address=trace.inputs["recipient"], + from_address=trace.inputs.get("sender", trace.from_address), + token_address=trace.to_address, + )