diff --git a/crypto_dev_signer/eth/signer/defaultsigner.py b/crypto_dev_signer/eth/signer/defaultsigner.py index ff3a6d2..566dc05 100644 --- a/crypto_dev_signer/eth/signer/defaultsigner.py +++ b/crypto_dev_signer/eth/signer/defaultsigner.py @@ -40,10 +40,17 @@ class ReferenceSigner(Signer): tx.v = v.to_bytes(int(byts), 'big') tx.r = z[:32] tx.s = z[32:64] - if tx.r[0] == 0: - tx.r = tx.r[1:] - if tx.s[0] == 0: - tx.s = tx.s[1:] + + for i in range(len(tx.r)): + if tx.r[i] > 0: + tx.r = tx.r[i:] + break + + for i in range(len(tx.s)): + if tx.s[i] > 0: + tx.s = tx.s[i:] + break + return z diff --git a/crypto_dev_signer/eth/transaction.py b/crypto_dev_signer/eth/transaction.py index 8a29e05..10c3fda 100644 --- a/crypto_dev_signer/eth/transaction.py +++ b/crypto_dev_signer/eth/transaction.py @@ -78,7 +78,7 @@ class EIP155Transaction: self.sender = strip_hex_prefix(tx['from']) - def rlp_serialize(self): + def __canonical_order(self): s = [ self.nonce, self.gas_price, @@ -90,8 +90,22 @@ class EIP155Transaction: self.r, self.s, ] + + return s + + def bytes_serialize(self): + s = self.__canonical_order() + b = b'' + for e in s: + b += e + return b + + + def rlp_serialize(self): + s = self.__canonical_order() return rlp_encode(s) + def serialize(self): tx = { 'nonce': add_hex_prefix(self.nonce.hex()), diff --git a/setup.py b/setup.py index f5d1403..9851b8b 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ f.close() setup( name="crypto-dev-signer", - version="0.4.13rc3", + version="0.4.13rc4", description="A signer and keystore daemon and library for cryptocurrency software development", author="Louis Holbrook", author_email="dev@holbrook.no",