Mark PSBTs spending unspendable outputs as invalid in analysis
Github-Pull: #17524 Rebased-From: 773d4572a4864ab7b6380858d07d9579ff6dd9a2
This commit is contained in:
parent
551583398b
commit
ca5f8deefd
2 changed files with 11 additions and 0 deletions
|
@ -7,6 +7,7 @@
|
||||||
#include <node/psbt.h>
|
#include <node/psbt.h>
|
||||||
#include <policy/policy.h>
|
#include <policy/policy.h>
|
||||||
#include <policy/settings.h>
|
#include <policy/settings.h>
|
||||||
|
#include <tinyformat.h>
|
||||||
|
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
|
|
||||||
|
@ -39,6 +40,11 @@ PSBTAnalysis AnalyzePSBT(PartiallySignedTransaction psbtx)
|
||||||
calc_fee = false;
|
calc_fee = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!utxo.IsNull() && utxo.scriptPubKey.IsUnspendable()) {
|
||||||
|
result.SetInvalid(strprintf("PSBT is not valid. Input %u spends unspendable output", i));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
// Check if it is final
|
// Check if it is final
|
||||||
if (!utxo.IsNull() && !PSBTInputSigned(input)) {
|
if (!utxo.IsNull() && !PSBTInputSigned(input)) {
|
||||||
input_analysis.is_final = false;
|
input_analysis.is_final = false;
|
||||||
|
|
|
@ -416,5 +416,10 @@ class PSBTTest(BitcoinTestFramework):
|
||||||
analyzed = self.nodes[0].analyzepsbt(signed)
|
analyzed = self.nodes[0].analyzepsbt(signed)
|
||||||
assert analyzed['inputs'][0]['has_utxo'] and analyzed['inputs'][0]['is_final'] and analyzed['next'] == 'extractor'
|
assert analyzed['inputs'][0]['has_utxo'] and analyzed['inputs'][0]['is_final'] and analyzed['next'] == 'extractor'
|
||||||
|
|
||||||
|
self.log.info("PSBT spending unspendable outputs should have error message and Creator as next")
|
||||||
|
analysis = self.nodes[0].analyzepsbt('cHNidP8BAJoCAAAAAljoeiG1ba8MI76OcHBFbDNvfLqlyHV5JPVFiHuyq911AAAAAAD/////g40EJ9DsZQpoqka7CwmK6kQiwHGyyng1Kgd5WdB86h0BAAAAAP////8CcKrwCAAAAAAWAEHYXCtx0AYLCcmIauuBXlCZHdoSTQDh9QUAAAAAFv8/wADXYP/7//////8JxOh0LR2HAI8AAAAAAAEBIADC6wsAAAAAF2oUt/X69ELjeX2nTof+fZ10l+OyAokDAQcJAwEHEAABAACAAAEBIADC6wsAAAAAF2oUt/X69ELjeX2nTof+fZ10l+OyAokDAQcJAwEHENkMak8AAAAA')
|
||||||
|
assert_equal(analysis['next'], 'creator')
|
||||||
|
assert_equal(analysis['error'], 'PSBT is not valid. Input 0 spends unspendable output')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
PSBTTest().main()
|
PSBTTest().main()
|
||||||
|
|
Loading…
Reference in a new issue