def get_total_length(msg: EthereumSignTxEIP1559, data_total: int) -> int: length = 0 fields: tuple[rlp.RLPItem, ...] = ( msg.nonce, msg.gas_limit, bytes_from_address(msg.to), msg.value, msg.chain_id, msg.max_gas_fee, msg.max_priority_fee, ) for field in fields: length += rlp.length(field) length += rlp.header_length(data_total, msg.data_initial_chunk) length += data_total length += access_list_length(msg.access_list) return length
def get_total_length(msg: EthereumSignTx, data_total: int) -> int: length = 0 if msg.tx_type is not None: length += rlp.length(msg.tx_type) fields: tuple[rlp.RLPItem, ...] = ( msg.nonce, msg.gas_price, msg.gas_limit, bytes_from_address(msg.to), msg.value, msg.chain_id, 0, 0, ) for field in fields: length += rlp.length(field) length += rlp.header_length(data_total, msg.data_initial_chunk) length += data_total return length
def access_list_length(access_list: list[EthereumAccessList]) -> int: payload_length = sum(access_list_item_length(i) for i in access_list) return rlp.header_length(payload_length) + payload_length
def access_list_item_length(item: EthereumAccessList) -> int: address_length = rlp.length(bytes_from_address(item.address)) keys_length = rlp.length(item.storage_keys) return (rlp.header_length(address_length + keys_length) + address_length + keys_length)