mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-02-23 14:50:42 +01:00
Added sequence parameter to coinbase and removed fruitless type test
This commit is contained in:
parent
7e951e8ca9
commit
6368642d09
5 changed files with 8 additions and 13 deletions
|
@ -17,7 +17,7 @@ class ChainParamsTest extends FlatSpec with MustMatchers {
|
||||||
val genesisTransaction = genesisBlock.transactions.head
|
val genesisTransaction = genesisBlock.transactions.head
|
||||||
|
|
||||||
val expectedGenesisScriptSig = ScriptSignature("4D04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73".toLowerCase())
|
val expectedGenesisScriptSig = ScriptSignature("4D04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73".toLowerCase())
|
||||||
val expectedGenesisInput = CoinbaseInput(expectedGenesisScriptSig)
|
val expectedGenesisInput = CoinbaseInput(expectedGenesisScriptSig, TransactionConstants.sequence)
|
||||||
val expectedGenesisScriptPubKey = ScriptPubKey("434104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC".toLowerCase)
|
val expectedGenesisScriptPubKey = ScriptPubKey("434104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC".toLowerCase)
|
||||||
val expectedGenesisOutput = TransactionOutput(Satoshis(Int64(5000000000L)), expectedGenesisScriptPubKey)
|
val expectedGenesisOutput = TransactionOutput(Satoshis(Int64(5000000000L)), expectedGenesisScriptPubKey)
|
||||||
"ChainParams" must "generate correct block hex for genesis block" in {
|
"ChainParams" must "generate correct block hex for genesis block" in {
|
||||||
|
|
|
@ -36,7 +36,7 @@ class TransactionInputTest extends FlatSpec with MustMatchers {
|
||||||
}
|
}
|
||||||
|
|
||||||
it must "serialize and deserialize a coinbase input" in {
|
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)
|
TransactionInput(c.previousOutput, c.scriptSignature, c.sequence) must be(c)
|
||||||
c.hex must be(TransactionInput(c.previousOutput, c.scriptSignature, c.sequence).hex)
|
c.hex must be(TransactionInput(c.previousOutput, c.scriptSignature, c.sequence).hex)
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,7 +82,7 @@ sealed abstract class ChainParams {
|
||||||
val const = ScriptConstant(timestampBytes)
|
val const = ScriptConstant(timestampBytes)
|
||||||
val scriptSignature = ScriptSignature.fromAsm(Seq(BytesToPushOntoStack(4), ScriptNumber(486604799),
|
val scriptSignature = ScriptSignature.fromAsm(Seq(BytesToPushOntoStack(4), ScriptNumber(486604799),
|
||||||
BytesToPushOntoStack(1), ScriptNumber(4)) ++ BitcoinScriptUtil.calculatePushOp(const) ++ Seq(const))
|
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 output = TransactionOutput(amount, scriptPubKey)
|
||||||
val tx = BaseTransaction(TransactionConstants.version, Seq(input), Seq(output), TransactionConstants.lockTime)
|
val tx = BaseTransaction(TransactionConstants.version, Seq(input), Seq(output), TransactionConstants.lockTime)
|
||||||
val prevBlockHash = DoubleSha256Digest("0000000000000000000000000000000000000000000000000000000000000000")
|
val prevBlockHash = DoubleSha256Digest("0000000000000000000000000000000000000000000000000000000000000000")
|
||||||
|
|
|
@ -31,7 +31,6 @@ case object EmptyTransactionInput extends TransactionInput {
|
||||||
*/
|
*/
|
||||||
sealed abstract class CoinbaseInput extends TransactionInput {
|
sealed abstract class CoinbaseInput extends TransactionInput {
|
||||||
override def previousOutput = EmptyTransactionOutPoint
|
override def previousOutput = EmptyTransactionOutPoint
|
||||||
override def sequence = TransactionConstants.sequence
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object TransactionInput extends Factory[TransactionInput] {
|
object TransactionInput extends Factory[TransactionInput] {
|
||||||
|
@ -44,7 +43,7 @@ object TransactionInput extends Factory[TransactionInput] {
|
||||||
|
|
||||||
def apply(outPoint: TransactionOutPoint, scriptSignature: ScriptSignature,
|
def apply(outPoint: TransactionOutPoint, scriptSignature: ScriptSignature,
|
||||||
sequenceNumber: UInt32): TransactionInput = outPoint match {
|
sequenceNumber: UInt32): TransactionInput = outPoint match {
|
||||||
case EmptyTransactionOutPoint => CoinbaseInput(scriptSignature)
|
case EmptyTransactionOutPoint => CoinbaseInput(scriptSignature, sequenceNumber)
|
||||||
case _: TransactionOutPoint => TransactionInputImpl(outPoint, scriptSignature, sequenceNumber)
|
case _: TransactionOutPoint => TransactionInputImpl(outPoint, scriptSignature, sequenceNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,13 +51,13 @@ object TransactionInput extends Factory[TransactionInput] {
|
||||||
|
|
||||||
object CoinbaseInput {
|
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
|
* 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
|
* @param scriptSignature this can contain anything, miners use this to signify support for various protocol BIPs
|
||||||
* @return the coinbase input
|
* @return the coinbase input
|
||||||
*/
|
*/
|
||||||
def apply(scriptSignature: ScriptSignature): CoinbaseInput = {
|
def apply(scriptSignature: ScriptSignature, sequence: UInt32): CoinbaseInput = {
|
||||||
CoinbaseInputImpl(scriptSignature)
|
CoinbaseInputImpl(scriptSignature, sequence)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -563,11 +563,7 @@ sealed abstract class ScriptInterpreter {
|
||||||
case w: WitnessTxSigComponentP2SH =>
|
case w: WitnessTxSigComponentP2SH =>
|
||||||
!w.scriptSignature.redeemScript.isInstanceOf[WitnessScriptPubKey]
|
!w.scriptSignature.redeemScript.isInstanceOf[WitnessScriptPubKey]
|
||||||
case r: WitnessTxSigComponentRebuilt =>
|
case r: WitnessTxSigComponentRebuilt =>
|
||||||
r.transaction match {
|
r.transaction.witness.witnesses(txSigComponent.inputIndex.toInt).stack.nonEmpty
|
||||||
case wtx: WitnessTransaction =>
|
|
||||||
wtx.witness.witnesses(txSigComponent.inputIndex.toInt).stack.nonEmpty
|
|
||||||
case _: BaseTransaction => false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unexpectedWitness) logger.error("Found unexpected witness that was not used by the ScriptProgram: " + program)
|
if (unexpectedWitness) logger.error("Found unexpected witness that was not used by the ScriptProgram: " + program)
|
||||||
|
|
Loading…
Add table
Reference in a new issue