1
0
Fork 0
mirror of https://github.com/bitcoin-s/bitcoin-s.git synced 2025-03-26 21:42:48 +01:00

Made P2SHScriptSignature.isP2SHScriptSig less forgiving ()

* Made P2SHScriptSignature.isP2SHScriptSig less forgiving

* Allow P2SHScriptSig(UnassignedWitnessSPK) and P2SHScriptSig(NestingSPK(EmptyScriptPubKey))
This commit is contained in:
Nadav Kohen 2020-06-23 06:26:11 -05:00 committed by GitHub
parent ac21e0418d
commit 1eadf098c9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -248,16 +248,32 @@ object P2SHScriptSignature extends ScriptFactory[P2SHScriptSignature] {
/** Detects if the given script token is a redeem script */
def isRedeemScript(token: ScriptToken): Boolean = {
val redeemScript: ScriptPubKey = parseRedeemScript(token)
redeemScript match {
case _: P2PKHScriptPubKey | _: MultiSignatureScriptPubKey |
_: P2SHScriptPubKey | _: P2PKScriptPubKey |
_: P2PKWithTimeoutScriptPubKey | _: ConditionalScriptPubKey |
_: CLTVScriptPubKey | _: CSVScriptPubKey | _: WitnessScriptPubKeyV0 |
_: UnassignedWitnessScriptPubKey =>
true
case _: NonStandardScriptPubKey | _: WitnessCommitment => false
case EmptyScriptPubKey => false
def isStandardNonP2SH(
spk: ScriptPubKey,
isRecursiveCall: Boolean): Boolean = {
spk match {
case _: P2PKHScriptPubKey | _: MultiSignatureScriptPubKey |
_: P2PKScriptPubKey | _: P2PKWithTimeoutScriptPubKey |
_: WitnessScriptPubKeyV0 | _: UnassignedWitnessScriptPubKey =>
true
case EmptyScriptPubKey => isRecursiveCall // Fine if nested
case conditional: ConditionalScriptPubKey =>
isStandardNonP2SH(conditional.firstSPK,
isRecursiveCall = true) && isStandardNonP2SH(
conditional.secondSPK,
isRecursiveCall = true)
case locktime: LockTimeScriptPubKey =>
Try(locktime.locktime).isSuccess &&
isStandardNonP2SH(locktime.nestedScriptPubKey,
isRecursiveCall = true)
case _: NonStandardScriptPubKey | _: WitnessCommitment |
_: P2SHScriptPubKey =>
false
}
}
isStandardNonP2SH(redeemScript, isRecursiveCall = false)
}
/** Parses a redeem script from the given script token */