diff --git a/core/src/main/scala/org/bitcoins/core/crypto/TxSigComponent.scala b/core/src/main/scala/org/bitcoins/core/crypto/TxSigComponent.scala index a67e787efc..40d01a4465 100644 --- a/core/src/main/scala/org/bitcoins/core/crypto/TxSigComponent.scala +++ b/core/src/main/scala/org/bitcoins/core/crypto/TxSigComponent.scala @@ -448,12 +448,8 @@ case class TaprootTxSigComponent( override val witnessVersion: WitnessVersion1.type = WitnessVersion1 - override def sigVersion: SigVersionTaproot = { - witness match { - case _: TaprootKeyPath => SigVersionTaprootKeySpend - case _: TaprootScriptPath | _: TaprootUnknownPath => SigVersionTapscript - } - } + override def sigVersion: SigVersionTaproot = witness.sigVersion + } object BaseTxSigComponent { diff --git a/core/src/main/scala/org/bitcoins/core/protocol/script/ScriptWitness.scala b/core/src/main/scala/org/bitcoins/core/protocol/script/ScriptWitness.scala index 99e34127b3..a622eaf980 100644 --- a/core/src/main/scala/org/bitcoins/core/protocol/script/ScriptWitness.scala +++ b/core/src/main/scala/org/bitcoins/core/protocol/script/ScriptWitness.scala @@ -1,6 +1,7 @@ package org.bitcoins.core.protocol.script import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.protocol.script.LeafVersion.UnknownLeafVersion import org.bitcoins.core.script.constant.{OP_0, ScriptNumberOperation} import org.bitcoins.core.serializers.script.{ RawScriptWitnessParser, @@ -236,6 +237,8 @@ sealed trait TaprootWitness extends ScriptWitness { CryptoUtil.sha256(cmpct.bytes ++ annex) } } + + def sigVersion: SigVersionTaproot } object TaprootWitness extends Factory[TaprootWitness] { @@ -277,6 +280,9 @@ case class TaprootKeyPath( Vector(signature.bytes) } } + + override def sigVersion: SigVersionTaprootKeySpend.type = + SigVersionTaprootKeySpend } object TaprootKeyPath extends Factory[TaprootKeyPath] { @@ -401,6 +407,14 @@ case class TaprootScriptPath(stack: Vector[ByteVector]) extends TaprootWitness { * defined as in BIP340. Fail if this point is not on the curve. */ def p: XOnlyPubKey = controlBlock.p + + def leafVersion: LeafVersion = controlBlock.leafVersion + + override def sigVersion: SigVersionTapscript.type = leafVersion match { + case LeafVersion.Tapscript => SigVersionTapscript + case UnknownLeafVersion(toByte) => + sys.error(s"Unknown leaf version=$toByte, cannot determine sigVersion") + } } object TaprootScriptPath extends Factory[TaprootScriptPath] { @@ -567,4 +581,9 @@ case class TaprootUnknownPath(stack: Vector[ByteVector]) None } } + + override def sigVersion: SigVersionTaproot = { + // default to tapscript for unknown leafver and sigversion? + SigVersionTapscript + } }