Added sequence parameter to coinbase and removed fruitless type test

This commit is contained in:
Nadav Kohen 2018-05-31 10:57:36 -05:00
parent 7e951e8ca9
commit 6368642d09
5 changed files with 8 additions and 13 deletions

View file

@ -17,7 +17,7 @@ class ChainParamsTest extends FlatSpec with MustMatchers {
val genesisTransaction = genesisBlock.transactions.head
val expectedGenesisScriptSig = ScriptSignature("4D04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73".toLowerCase())
val expectedGenesisInput = CoinbaseInput(expectedGenesisScriptSig)
val expectedGenesisInput = CoinbaseInput(expectedGenesisScriptSig, TransactionConstants.sequence)
val expectedGenesisScriptPubKey = ScriptPubKey("434104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC".toLowerCase)
val expectedGenesisOutput = TransactionOutput(Satoshis(Int64(5000000000L)), expectedGenesisScriptPubKey)
"ChainParams" must "generate correct block hex for genesis block" in {

View file

@ -36,7 +36,7 @@ class TransactionInputTest extends FlatSpec with MustMatchers {
}
it must "serialize and deserialize a coinbase input" in {
val c = CoinbaseInput(P2PKScriptSignature("4847304502210092d4e6183970b5e082d87563afbcfb3e1f38e801d89f036fd2935c394d6cc364022032b2a419e19f00b6f32f88c4427cf5e2a97f298b7d4e45efb5f723d84257ca03"))
val c = CoinbaseInput(P2PKScriptSignature("4847304502210092d4e6183970b5e082d87563afbcfb3e1f38e801d89f036fd2935c394d6cc364022032b2a419e19f00b6f32f88c4427cf5e2a97f298b7d4e45efb5f723d84257ca03"), TransactionConstants.sequence)
TransactionInput(c.previousOutput, c.scriptSignature, c.sequence) must be(c)
c.hex must be(TransactionInput(c.previousOutput, c.scriptSignature, c.sequence).hex)
}

View file

@ -82,7 +82,7 @@ sealed abstract class ChainParams {
val const = ScriptConstant(timestampBytes)
val scriptSignature = ScriptSignature.fromAsm(Seq(BytesToPushOntoStack(4), ScriptNumber(486604799),
BytesToPushOntoStack(1), ScriptNumber(4)) ++ BitcoinScriptUtil.calculatePushOp(const) ++ Seq(const))
val input = CoinbaseInput(scriptSignature)
val input = CoinbaseInput(scriptSignature, TransactionConstants.sequence)
val output = TransactionOutput(amount, scriptPubKey)
val tx = BaseTransaction(TransactionConstants.version, Seq(input), Seq(output), TransactionConstants.lockTime)
val prevBlockHash = DoubleSha256Digest("0000000000000000000000000000000000000000000000000000000000000000")

View file

@ -31,7 +31,6 @@ case object EmptyTransactionInput extends TransactionInput {
*/
sealed abstract class CoinbaseInput extends TransactionInput {
override def previousOutput = EmptyTransactionOutPoint
override def sequence = TransactionConstants.sequence
}
object TransactionInput extends Factory[TransactionInput] {
@ -44,7 +43,7 @@ object TransactionInput extends Factory[TransactionInput] {
def apply(outPoint: TransactionOutPoint, scriptSignature: ScriptSignature,
sequenceNumber: UInt32): TransactionInput = outPoint match {
case EmptyTransactionOutPoint => CoinbaseInput(scriptSignature)
case EmptyTransactionOutPoint => CoinbaseInput(scriptSignature, sequenceNumber)
case _: TransactionOutPoint => TransactionInputImpl(outPoint, scriptSignature, sequenceNumber)
}
@ -52,13 +51,13 @@ object TransactionInput extends Factory[TransactionInput] {
object CoinbaseInput {
private case class CoinbaseInputImpl(scriptSignature: ScriptSignature) extends CoinbaseInput
private case class CoinbaseInputImpl(scriptSignature: ScriptSignature, sequence: UInt32) extends CoinbaseInput
/**
* Creates a coinbase input - coinbase inputs always have an empty outpoint
* @param scriptSignature this can contain anything, miners use this to signify support for various protocol BIPs
* @return the coinbase input
*/
def apply(scriptSignature: ScriptSignature): CoinbaseInput = {
CoinbaseInputImpl(scriptSignature)
def apply(scriptSignature: ScriptSignature, sequence: UInt32): CoinbaseInput = {
CoinbaseInputImpl(scriptSignature, sequence)
}
}

View file

@ -563,11 +563,7 @@ sealed abstract class ScriptInterpreter {
case w: WitnessTxSigComponentP2SH =>
!w.scriptSignature.redeemScript.isInstanceOf[WitnessScriptPubKey]
case r: WitnessTxSigComponentRebuilt =>
r.transaction match {
case wtx: WitnessTransaction =>
wtx.witness.witnesses(txSigComponent.inputIndex.toInt).stack.nonEmpty
case _: BaseTransaction => false
}
r.transaction.witness.witnesses(txSigComponent.inputIndex.toInt).stack.nonEmpty
}
if (unexpectedWitness) logger.error("Found unexpected witness that was not used by the ScriptProgram: " + program)