core: Add TaprootWitness.sigVersion

This commit is contained in:
Chris Stewart 2025-03-07 10:12:33 -06:00
parent 6287e41281
commit e3a9ad2469
2 changed files with 20 additions and 2 deletions

View file

@ -450,8 +450,8 @@ case class TaprootTxSigComponent(
override def sigVersion: SigVersionTaproot = {
witness match {
case _: TaprootKeyPath => SigVersionTaprootKeySpend
case _: TaprootScriptPath | _: TaprootUnknownPath => SigVersionTapscript
case _: TaprootKeyPath => SigVersionTaprootKeySpend
case sp: TaprootWitness => sp.sigVersion
}
}
}

View file

@ -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,8 @@ case class TaprootKeyPath(
Vector(signature.bytes)
}
}
override def sigVersion: SigVersionTaproot = SigVersionTaprootKeySpend
}
object TaprootKeyPath extends Factory[TaprootKeyPath] {
@ -401,6 +406,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
def sigVersion: SigVersionTaproot = 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 +580,9 @@ case class TaprootUnknownPath(stack: Vector[ByteVector])
None
}
}
override def sigVersion: SigVersionTaproot = {
// default to tapscript for unknown leafver and sigversion?
SigVersionTapscript
}
}