I'm try to get to grips with verifying the signature of a P2PKH transaction.
I have an example transaction:
9ec4bc49e828d924af1d1029cacf709431abbde46d59554b62bc270e3b29c4b1
I am trying to verify the signature of the first input in this transaction using OP_CHECKSIG
. The JSON is:
{
"txid":"9ec4bc49e828d924af1d1029cacf709431abbde46d59554b62bc270e3b29c4b1",
"hash":"9ec4bc49e828d924af1d1029cacf709431abbde46d59554b62bc270e3b29c4b1",
"version":1,
"size":402,
"vsize":402,
"weight":1608,
"locktime":0,
"vin":[
{
"txid":"01f7ba55e5baac3d9cbc38722b19c07cb0cd2d2b25f4c270af4d9f2f3e604cf6",
"vout":1,
"scriptSig":{
"asm":"30440220d47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad1022044e1ff2dfd8102cf7a47c21d5c9fd5701610d04953c6836596b4fe9dd2f53e3e01 04dbd0c61532279cf72981c3584fc32216e0127699635c2789f549e0730c059b81ae133016a69c21e23f1859a95f06d52b7bf149a8f2fe4e8535c8a829b449c5ff",
"hex":"4730440220d47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad1022044e1ff2dfd8102cf7a47c21d5c9fd5701610d04953c6836596b4fe9dd2f53e3e014104dbd0c61532279cf72981c3584fc32216e0127699635c2789f549e0730c059b81ae133016a69c21e23f1859a95f06d52b7bf149a8f2fe4e8535c8a829b449c5ff"
},
"sequence":4294967295
},
{
"txid":"4a85d9c86ba415f489be1ec68f67e862e9c3d8d13c892a3afacaa02bdb41f829",
"vout":1,
"scriptSig":{
"asm":"30440220d47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad102209a5f1c75e461d7ceb1cf3cab9013eb2dc85b6d0da8c3c6e27e3a5a5b3faa5bab01 04dbd0c61532279cf72981c3584fc32216e0127699635c2789f549e0730c059b81ae133016a69c21e23f1859a95f06d52b7bf149a8f2fe4e8535c8a829b449c5ff",
"hex":"4730440220d47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad102209a5f1c75e461d7ceb1cf3cab9013eb2dc85b6d0da8c3c6e27e3a5a5b3faa5bab014104dbd0c61532279cf72981c3584fc32216e0127699635c2789f549e0730c059b81ae133016a69c21e23f1859a95f06d52b7bf149a8f2fe4e8535c8a829b449c5ff"
},
"sequence":4294967295
}
],
"vout":[
{
"value":0.001,
"n":0,
"scriptPubKey":{
"asm":"OP_DUP OP_HASH160 70792fb74a5df745bac07df6fe020f871cbb293b OP_EQUALVERIFY OP_CHECKSIG",
"hex":"76a91470792fb74a5df745bac07df6fe020f871cbb293b88ac",
"reqSigs":1,
"type":"pubkeyhash",
"addresses":[
"1BFhrfTTZP3Nw4BNy4eX4KFLsn9ZeijcMm"
]
}
}
]
}
From this I have defined the script to do the OP_CHECKSIG
as:
OP_PUSHDATA1 71 0x30440220d47ce4c025c35ec440bc81d99834a624875161a26bf56ef7fdc0f5d52f843ad1022044e1ff2dfd8102cf7a47c21d5c9fd5701610d04953c6836596b4fe9dd2f53e3e01
OP_PUSHDATA1 65 0x04dbd0c61532279cf72981c3584fc32216e0127699635c2789f549e0730c059b81ae133016a69c21e23f1859a95f06d52b7bf149a8f2fe4e8535c8a829b449c5ff
OP_DUP OP_HASH160 20 0x70792fb74a5df745bac07df6fe020f871cbb293b OP_EQUALVERIFY OP_CHECKSIG
Everything runs correctly up until the OP_CHECKSIG
. The HASH160 is correct (70792fb74a5df745bac07df6fe020f871cbb293b
== 70792fb74a5df745bac07df6fe020f871cbb293b
) and OP_EQUALVERIFY
completes as expected.
The OP_CHECKSIG
fails, but I don't understand why. Please can someone shed some light on what I've got wrong here?
OP_CHECKSIG
needs the whole tx