def get_total_length(msg: EthereumSignTx, data_total: int) -> int: length = 0 if msg.tx_type is not None: length += rlp.field_length(1, [msg.tx_type]) length += rlp.field_length(len(msg.nonce), msg.nonce[:1]) length += rlp.field_length(len(msg.gas_price), msg.gas_price) length += rlp.field_length(len(msg.gas_limit), msg.gas_limit) to = address.bytes_from_address(msg.to) length += rlp.field_length(len(to), to) length += rlp.field_length(len(msg.value), msg.value) if msg.chain_id: # forks replay protection if msg.chain_id < 0x100: l = 1 elif msg.chain_id < 0x10000: l = 2 elif msg.chain_id < 0x1000000: l = 3 else: l = 4 length += rlp.field_length(l, [msg.chain_id]) length += rlp.field_length(0, 0) length += rlp.field_length(0, 0) length += rlp.field_length(data_total, msg.data_initial_chunk) return length
def get_total_length(msg: EthereumSignTx, data_total: int) -> int: length = 0 for field in [msg.nonce, msg.gas_price, msg.gas_limit, msg.to, msg.value]: length += rlp.field_length(len(field), field[:1]) if msg.chain_id: # forks replay protection length += rlp.field_length(1, [msg.chain_id]) length += rlp.field_length(0, 0) length += rlp.field_length(0, 0) length += rlp.field_length(data_total, msg.data_initial_chunk) return length
def get_total_length(msg: EthereumSignTx, data_total: int) -> int: length = 0 if msg.tx_type is not None: length += rlp.field_length(1, [msg.tx_type]) for field in [msg.nonce, msg.gas_price, msg.gas_limit, msg.to, msg.value]: length += rlp.field_length(len(field), field[:1]) if msg.chain_id: # forks replay protection if msg.chain_id < 0x100: l = 1 elif msg.chain_id < 0x10000: l = 2 elif msg.chain_id < 0x1000000: l = 3 else: l = 4 length += rlp.field_length(l, [msg.chain_id]) length += rlp.field_length(0, 0) length += rlp.field_length(0, 0) length += rlp.field_length(data_total, msg.data_initial_chunk) return length