def transfer(self, opensea_logs: List[OpenseaLog]):
for opensea_log in opensea_logs:
yield OpenseaOrder(
order_hash=opensea_log.orderHash,
zone=opensea_log.zone,
offerer=opensea_log.offerer,
recipient=opensea_log.recipient,
offer=opensea_log.offer,
consideration=opensea_log.consideration,
block_timestamp=opensea_log.block_timestamp,
block_hash=opensea_log.block_hash,
transaction_hash=opensea_log.transaction_hash,
block_number=opensea_log.block_number,
log_index=opensea_log.log_index,
protocol_version=opensea_log.protocol_version,
)
offer = calculate_total_amount(opensea_log.offer)
consideration = calculate_total_amount(opensea_log.consideration)
fee = calculate_fee_amount(opensea_log.consideration, opensea_log.fee_addresses)
opensea_transaciton_type = get_opensea_transaction_type(opensea_log.offer, opensea_log.consideration)
if opensea_log.offerer == opensea_log.recipient:
continue
yield AddressOpenseaTransaction(
address=opensea_log.offerer,
related_address=opensea_log.recipient,
is_offer=True,
transaction_type=opensea_transaciton_type.value,
order_hash=opensea_log.orderHash,
zone=opensea_log.zone,
offer=offer,
consideration=consideration,
fee=fee,
transaction_hash=opensea_log.transaction_hash,
block_number=opensea_log.block_number,
log_index=opensea_log.log_index,
block_timestamp=opensea_log.block_timestamp,
block_hash=opensea_log.block_hash,
protocol_version=opensea_log.protocol_version,
)
yield AddressOpenseaTransaction(
address=opensea_log.recipient,
related_address=opensea_log.offerer,
is_offer=False,
transaction_type=(
1 - opensea_transaciton_type.value
if opensea_transaciton_type.value <= 1
else opensea_transaciton_type.value
),
order_hash=opensea_log.orderHash,
zone=opensea_log.zone,
offer=offer,
consideration=consideration,
fee=fee,
transaction_hash=opensea_log.transaction_hash,
block_number=opensea_log.block_number,
log_index=opensea_log.log_index,
block_timestamp=opensea_log.block_timestamp,
block_hash=opensea_log.block_hash,
protocol_version=opensea_log.protocol_version,
)