Added pydantic serialization, naming changes

This commit is contained in:
Gui Heise 2021-09-16 11:08:16 -04:00
parent 170ab07e2f
commit 71b7c99c17
4 changed files with 8 additions and 33 deletions

View File

@ -1,6 +1,6 @@
import json
from typing import List
from mev_inspect.schemas.utils import to_json
from mev_inspect.models.classified_traces import ClassifiedTraceModel
from mev_inspect.schemas.classified_traces import ClassifiedTrace
@ -36,7 +36,7 @@ def write_classified_traces(
"abi_name": trace.abi_name,
"function_name": trace.function_name,
"function_signature": trace.function_signature,
"inputs": to_json(trace.inputs),
"inputs": json.loads(trace.json(include={"inputs"}))["inputs"],
"from_address": trace.from_address,
"to_address": trace.to_address,
"gas": trace.gas,

View File

@ -25,13 +25,10 @@ class Protocol(Enum):
class ClassifiedTrace(Trace):
transaction_hash: str
block_number: int
trace_address: List[int]
classification: Classification
# Optional
error: Optional[str]
to_address: Optional[str]
from_address: Optional[str]
@ -54,7 +51,6 @@ class ClassifiedTrace(Trace):
class CallTrace(ClassifiedTrace):
to_address: str
from_address: str
@ -62,8 +58,6 @@ class CallTrace(ClassifiedTrace):
class DecodedCallTrace(CallTrace):
inputs: Dict[str, Any]
abi_name: str
# Optional
protocol: Optional[Protocol]
gas: Optional[int]
gas_used: Optional[int]

View File

@ -15,25 +15,6 @@ def to_original_json_dict(model: BaseModel) -> dict:
return json.loads(model.json(by_alias=True, exclude_unset=True))
def to_json(d):
if isinstance(d, dict):
tmp = {}
for key, value in d.items():
if isinstance(value, bytes):
tmp[key] = value.hex()
if isinstance(value, tuple):
res = []
for val in value:
if isinstance(val, bytes):
res.append(val.hex())
else:
res.append(val)
tmp[key] = res
d.update(tmp)
return json.dumps(d)
class Web3Model(BaseModel):
"""BaseModel that handles web3's unserializable objects"""

View File

@ -17,8 +17,8 @@ def make_transfer_trace(
to_address: str,
token_address: str,
amount: int,
action: dict = {},
subtraces: int = 0,
action={},
subtraces=0,
):
return CallTrace(
transaction_hash=transaction_hash,
@ -47,8 +47,8 @@ def make_swap_trace(
abi_name: str,
recipient_address: str,
recipient_input_key: str,
action: dict = {},
subtraces: int = 0,
action={},
subtraces=0,
):
return DecodedCallTrace(
transaction_hash=transaction_hash,
@ -89,8 +89,8 @@ def make_many_unknown_traces(
block_number: int,
transaction_hash: str,
trace_addresses: List[List[int]],
action: dict = {},
subtraces: int = 0,
action={},
subtraces=0,
) -> List[ClassifiedTrace]:
return [