From 78c6328b36b7d345a4fc292e791ff2d0923f4c18 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Wed, 10 Aug 2016 18:13:05 +0200 Subject: [PATCH] fix ethereum_sign_tx --- trezorlib/client.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/trezorlib/client.py b/trezorlib/client.py index af2411e..c56f06c 100644 --- a/trezorlib/client.py +++ b/trezorlib/client.py @@ -423,7 +423,7 @@ class ProtocolMixin(object): n = self._convert_prime(n) return self.call(proto.EthereumGetAddress(address_n=n, show_display=show_display)) - def ethereum_sign_tx(self, n, nonce, gas_price, gas_limit, to, value, data=''): + def ethereum_sign_tx(self, n, nonce, gas_price, gas_limit, to, value, data=None): from rlp.utils import int_to_big_endian n = self._convert_prime(n) @@ -431,23 +431,28 @@ class ProtocolMixin(object): try: self.transport.session_begin() - response = self.call(proto.EthereumSignTx( + msg = proto.EthereumSignTx( address_n=n, nonce=int_to_big_endian(nonce), gas_price=int_to_big_endian(gas_price), gas_limit=int_to_big_endian(gas_limit), to=to, - value=int_to_big_endian(value))) + value=int_to_big_endian(value)) + if data: + msg.data_length = len(data) data, chunk = data[1024:], data[:1024] - response.data_initial_chunk = chunk - response.data_length = len(data) + msg.data_initial_chunk = chunk + + response = self.call(msg) while response.HasField('data_length'): - data, chunk = data[1024:], data[:1024] + data_length = response.data_length + data, chunk = data[data_length:], data[:data_length] response = self.call(proto.EthereumTxAck(data_chunk=chunk)) return response.signature_v, response.signature_r, response.signature_s + finally: self.transport.session_end()