code: def sign(self, key, network_id=None):
          
          if network_id is None:
              rawhash = utils.sha3(rlp.encode(unsigned_tx_from_tx(self), UnsignedTransaction))
          else:
              assert 1 <= network_id < 2**63 - 18
              rlpdata = rlp.encode(rlp.infer_sedes(self).serialize(self)[
                                   :-3] + [network_id, b'', b''])
              rawhash = utils.sha3(rlpdata)
  
          key = normalize_key(key)
  
          v, r, s = ecsign(rawhash, key)
          if network_id is not None:
              v += 8 + network_id * 2
  
          ret = self.copy(
              v=v, r=r, s=s
          )
          ret._sender = utils.privtoaddr(key)
          return ret
docs: Sign this transaction with a private key.
  
          A potentially already existing signature would be overridden.