DCIPs/assets/eip-6466/helpers/convert_receipts.py

70 lines
2.2 KiB
Python

from rlp import decode
from ssz_receipt_types import *
from eip2718_receipt_types import *
def normalize_receipt(encoded_receipt: bytes) -> Receipt:
eip2718_type = encoded_receipt[0]
if eip2718_type == 0x05: # EIP-4844
receipt = decode(encoded_receipt[1:], EIP4844Receipt)
return Receipt(
status=receipt.status,
cumulative_gas_used=receipt.cumulative_gas_used,
logs_bloom=receipt.logs_bloom,
logs=[ReceiptLog(
address=log[0],
topics=log[1],
data=log[2]
) for log in receipt.logs],
tx_type=TRANSACTION_TYPE_EIP4844,
cumulative_data_gas_used=Optional[uint64](receipt.cumulative_data_gas_used),
)
if eip2718_type == 0x02: # EIP-1559
receipt = decode(encoded_receipt[1:], EIP1559Receipt)
return Receipt(
status=receipt.status,
cumulative_gas_used=receipt.cumulative_transaction_gas_used,
logs_bloom=receipt.logs_bloom,
logs=[ReceiptLog(
address=log[0],
topics=log[1],
data=log[2]
) for log in receipt.logs],
tx_type=TRANSACTION_TYPE_EIP1559,
)
if eip2718_type == 0x01: # EIP-2930
receipt = decode(encoded_receipt[1:], EIP2930Receipt)
return Receipt(
status=receipt.status,
cumulative_gas_used=receipt.cumulativeGasUsed,
logs_bloom=receipt.logsBloom,
logs=[ReceiptLog(
address=log[0],
topics=log[1],
data=log[2]
) for log in receipt.logs],
tx_type=TRANSACTION_TYPE_EIP2930,
)
if 0xc0 <= eip2718_type <= 0xfe: # Legacy
receipt = decode(encoded_receipt, LegacyReceipt)
return Receipt(
status=receipt.status,
cumulative_gas_used=receipt.cumulativeGasUsed,
logs_bloom=receipt.logsBloom,
logs=[ReceiptLog(
address=log[0],
topics=log[1],
data=log[2]
) for log in receipt.logs],
tx_type=TRANSACTION_TYPE_LEGACY,
)
assert False