def sign_p2pkh(tx, i, priv, pub, hashtype = SIGHASH_ALL): assert isinstance(tx, dict) i = int(i) assert isinstance(priv, int) assert isinstance(pub, bytes) address = hashes.hash160(pub) prev_script = script.make_p2pkh(address) txhash = sighash(tx, i, prev_script, hashtype) sig = ecdsa.sign(txhash, priv) sig = ecdsa.serialize_sig(sig) + convert.int_to_byte(hashtype) tx["ins"][i]["script"] = script.serialize([sig, pub])
def test_build(self): self.assertEqual( script.make_p2pk(b'\x02\x8dO@#`d\x9c\x9e"\xec\x8f\xd2\x01\xa3\xcc\xe5\x8c|aL\xc4d\xb0\xd8b}\xed\xe2\xa9G\xb1\xd7'), b'!\x02\x8dO@#`d\x9c\x9e"\xec\x8f\xd2\x01\xa3\xcc\xe5\x8c|aL\xc4d\xb0\xd8b}\xed\xe2\xa9G\xb1\xd7\xac' ) self.assertEqual( script.make_p2pkh(b'\xf5\x8e:\xac\xc8BO\x04)\\\x14\xacfu\x11\x8b\x7f\n8\r'), b'v\xa9\x14\xf5\x8e:\xac\xc8BO\x04)\\\x14\xacfu\x11\x8b\x7f\n8\r\x88\xac' ) self.assertEqual( script.make_p2sh(b'\xf5\x8e:\xac\xc8BO\x04)\\\x14\xacfu\x11\x8b\x7f\n8\r'), b'\xa9\x14\xf5\x8e:\xac\xc8BO\x04)\\\x14\xacfu\x11\x8b\x7f\n8\r\x87' ) self.assertEqual( script.make_data(b'g\x8b\xe5\xdc\x96m\x10\xed\xf1\xaf\xe6\xf9\x1e\xce\x8b\xd8Gt\xad3'), b'j\x14g\x8b\xe5\xdc\x96m\x10\xed\xf1\xaf\xe6\xf9\x1e\xce\x8b\xd8Gt\xad3' )