Add support for any taker

This commit is contained in:
Gui Heise 2021-11-22 15:09:20 -05:00
parent 2f1a9bc751
commit e29c4fad72
2 changed files with 27 additions and 7 deletions

View File

@ -91,3 +91,12 @@ def get_amount_transferred_to_address(address: str, transfers: List[Transfer]) -
if transfer.to_address == address: if transfer.to_address == address:
return transfer.amount return transfer.amount
return 0 return 0
def get_amount_transferred_by_token_address(
token_address: str, transfers: List[Transfer]
) -> int:
for transfer in transfers:
if transfer.token_address == token_address:
return transfer.amount
return 0

View File

@ -9,7 +9,10 @@ from mev_inspect.schemas.classifiers import (
ClassifierSpec, ClassifierSpec,
SwapClassifier, SwapClassifier,
) )
from mev_inspect.classifiers.helpers import get_amount_transferred_to_address from mev_inspect.classifiers.helpers import (
get_amount_transferred_to_address,
get_amount_transferred_by_token_address,
)
class ZeroExSwapClassifier(SwapClassifier): class ZeroExSwapClassifier(SwapClassifier):
@ -38,21 +41,28 @@ class ZeroExSwapClassifier(SwapClassifier):
else: else:
raise NotImplementedError raise RuntimeError(
f"Unknown 0x orderbook function: {trace.function_signature}"
)
token_out_amount = trace.inputs["takerTokenFillAmount"] token_out_amount = trace.inputs["takerTokenFillAmount"]
token_in_amount = get_amount_transferred_to_address(
taker_address, child_transfers
)
contract_address = trace.to_address if taker_address == "0x0000000000000000000000000000000000000000":
token_in_amount = get_amount_transferred_by_token_address(
token_in_address, child_transfers
)
else:
token_in_amount = get_amount_transferred_to_address(
taker_address, child_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,
block_number=trace.block_number, block_number=trace.block_number,
trace_address=trace.trace_address, trace_address=trace.trace_address,
contract_address=contract_address, contract_address=trace.to_address,
protocol=Protocol.zero_ex, protocol=Protocol.zero_ex,
from_address=trace.from_address, from_address=trace.from_address,
to_address=trace.to_address, to_address=trace.to_address,
@ -183,6 +193,7 @@ ZEROX_GENERIC_SPECS = [
classifiers={ classifiers={
"fillOrKillLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": ZeroExSwapClassifier, "fillOrKillLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": ZeroExSwapClassifier,
"fillRfqOrder((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": ZeroExSwapClassifier, "fillRfqOrder((address,address,uint128,uint128,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": ZeroExSwapClassifier,
"fillLimitOrder((address,address,uint128,uint128,uint128,address,address,address,address,bytes32,uint64,uint256),(uint8,uint8,bytes32,bytes32),uint128)": ZeroExSwapClassifier,
}, },
), ),
ClassifierSpec( ClassifierSpec(