mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-03-26 21:42:48 +01:00
Made P2SHScriptSignature.isP2SHScriptSig less forgiving (#1594)
* Made P2SHScriptSignature.isP2SHScriptSig less forgiving * Allow P2SHScriptSig(UnassignedWitnessSPK) and P2SHScriptSig(NestingSPK(EmptyScriptPubKey))
This commit is contained in:
parent
ac21e0418d
commit
1eadf098c9
1 changed files with 25 additions and 9 deletions
|
@ -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 */
|
||||
|
|
Loading…
Add table
Reference in a new issue