DCIPs/assets/eip-6404/tests/union/convert_transactions.py

119 lines
4.5 KiB
Python

from ssz_tx_types import *
from create_transactions import *
def normalize_signed_transaction(encoded_signed_tx: bytes, cfg: ExecutionConfig) -> Transaction:
eip2718_type = encoded_signed_tx[0]
if eip2718_type == 0x05: # EIP-4844
signed_tx = BlobTransactionNetworkWrapper.decode_bytes(encoded_signed_tx[1:]).tx
return Transaction(
selector=3,
value=signed_tx,
)
if eip2718_type == 0x02: # EIP-1559
signed_tx = decode(encoded_signed_tx[1:], EIP1559SignedTransaction)
return Transaction(
selector=2,
value=EIP1559SignedSSZTransaction(
message=EIP1559SSZTransaction(
chain_id=signed_tx.chain_id,
nonce=signed_tx.nonce,
max_priority_fee_per_gas=signed_tx.max_priority_fee_per_gas,
max_fee_per_gas=signed_tx.max_fee_per_gas,
gas_limit=signed_tx.gas_limit,
destination=Union[None, ExecutionAddress](
selector=1,
value=ExecutionAddress(signed_tx.destination),
) if len(signed_tx.destination) > 0 else Union[None, ExecutionAddress](),
amount=signed_tx.amount,
data=signed_tx.data,
access_list=[AccessTuple(
address=access_tuple[0],
storage_keys=access_tuple[1],
) for access_tuple in signed_tx.access_list],
),
signature=ECDSASignature(
y_parity=signed_tx.signature_y_parity,
r=signed_tx.signature_r,
s=signed_tx.signature_s,
),
),
)
if eip2718_type == 0x01: # EIP-2930
signed_tx = decode(encoded_signed_tx[1:], EIP2930SignedTransaction)
return Transaction(
selector=1,
value=EIP2930SignedSSZTransaction(
message=EIP2930SSZTransaction(
chain_id=signed_tx.chainId,
nonce=signed_tx.nonce,
gas_price=signed_tx.gasPrice,
gas_limit=signed_tx.gasLimit,
to=Union[None, ExecutionAddress](
selector=1,
value=ExecutionAddress(signed_tx.to),
) if len(signed_tx.to) > 0 else Union[None, ExecutionAddress](),
value=signed_tx.value,
data=signed_tx.data,
access_list=[AccessTuple(
address=access_tuple[0],
storage_keys=access_tuple[1],
) for access_tuple in signed_tx.accessList],
),
signature=ECDSASignature(
y_parity=signed_tx.signatureYParity,
r=signed_tx.signatureR,
s=signed_tx.signatureS,
),
),
)
if 0xc0 <= eip2718_type <= 0xfe:
signed_tx = decode(encoded_signed_tx, LegacySignedTransaction)
return Transaction(
selector=0,
value=LegacySignedSSZTransaction(
message=LegacySSZTransaction(
nonce=signed_tx.nonce,
gasprice=signed_tx.gasprice,
startgas=signed_tx.startgas,
to=Union[None, ExecutionAddress](
selector=1,
value=ExecutionAddress(signed_tx.to),
) if len(signed_tx.to) > 0 else Union[None, ExecutionAddress](),
value=signed_tx.value,
data=signed_tx.data,
),
signature=LegacyECDSASignature(
v=signed_tx.v,
r=signed_tx.r,
s=signed_tx.s,
),
),
)
assert False
transactions = Transactions(*[
normalize_signed_transaction(encoded_signed_tx, cfg)
for encoded_signed_tx in encoded_signed_txs
])
transactions_root = transactions.hash_tree_root()
if __name__ == '__main__':
print('transactions_root')
print(f'0x{transactions_root.hex()}')
for tx_index in range(len(transactions)):
tx = transactions[tx_index]
encoded = tx.encode_bytes()
print(f'{tx_index} - {len(encoded)} bytes (Snappy: {len(compress(encoded))})')
print(f'0x{tx.get_backing().getter(2).merkle_root().hex()}')
print(encoded.hex())