def sender_property_patched(self: Transaction): if self._sender: return self._sender if self.v and self.v >= 35: v = bytes([self.v]) r = self.r.to_bytes(32, byteorder='big') s = self.s.to_bytes(32, byteorder='big') raw_tx = Transaction(self.nonce, self.gasprice, self.startgas, self.to, self.value, self.data, (self.v - 35) // 2, 0, 0) msg = keccak256(rlp.encode(raw_tx)) self._sender = decode_hex(addr_from_sig(r + s + v, msg)) return self._sender else: return sender_property_original(self)
def test_sign_v0(): msg = sha3('hello v=0') sig = sign(SENDER_PRIVATE_KEY, msg) assert sig[-1] == 1 assert addr_from_sig(sig, msg) == SENDER_ADDR