Script Program apply method refactor part 7 (#760) (#804)

This commit is contained in:
Ben Carman 2019-10-13 09:17:28 -05:00 committed by Chris Stewart
parent e7ce9cd157
commit f475808dbd
2 changed files with 13 additions and 14 deletions

View file

@ -67,7 +67,7 @@ class LockTimeInterpreterTest extends FlatSpec with MustMatchers {
)
val baseProgram = PreExecutionScriptProgram(t)
val program = ScriptProgramTestUtil.toPreExecutionScriptProgram(
ScriptProgram(baseProgram, stack, script))
baseProgram.updateStackAndScript(stack, script))
val newProgram = ScriptProgramTestUtil.toExecutedScriptProgram(
LTI.opCheckLockTimeVerify(ScriptProgram.toExecutionInProgress(program)))
newProgram.error must be(Some(ScriptErrorNegativeLockTime))
@ -94,7 +94,7 @@ class LockTimeInterpreterTest extends FlatSpec with MustMatchers {
val t = buildTxSigComponent(adjustedLockTimeTx)
val baseProgram = PreExecutionScriptProgram(t)
val program = ScriptProgramTestUtil.toPreExecutionScriptProgram(
ScriptProgram(baseProgram, stack, script))
baseProgram.updateStackAndScript(stack, script))
val newProgram = ScriptProgramTestUtil.toExecutedScriptProgram(
LTI.opCheckLockTimeVerify(ScriptProgram.toExecutionInProgress(program)))
newProgram.error must be(Some(ScriptErrorUnsatisfiedLocktime))
@ -121,7 +121,7 @@ class LockTimeInterpreterTest extends FlatSpec with MustMatchers {
val t = buildTxSigComponent(adjustedLockTimeTx)
val baseProgram = PreExecutionScriptProgram(t)
val program = ScriptProgramTestUtil.toPreExecutionScriptProgram(
ScriptProgram(baseProgram, stack, script))
baseProgram.updateStackAndScript(stack, script))
val newProgram = ScriptProgramTestUtil.toExecutedScriptProgram(
LTI.opCheckLockTimeVerify(ScriptProgram.toExecutionInProgress(program)))
newProgram.error must be(Some(ScriptErrorUnsatisfiedLocktime))

View file

@ -88,6 +88,16 @@ case class PreExecutionScriptProgram(
tokens: Seq[ScriptToken]): PreExecutionScriptProgram = {
this.copy(originalScript = tokens.toList)
}
def updateStackAndScript(
stackTokens: Seq[ScriptToken],
scriptTokens: Seq[ScriptToken]): PreExecutionScriptProgram = {
val updatedStack = this.updateStack(stackTokens)
val updatedScript = updatedStack.updateScript(scriptTokens)
require(updatedStack.stack == stackTokens)
require(updatedScript.script == scriptTokens)
updatedScript
}
}
object PreExecutionScriptProgram {
@ -237,17 +247,6 @@ object ScriptProgram extends BitcoinSLogger {
}
}
def apply(
oldProgram: PreExecutionScriptProgram,
stackTokens: Seq[ScriptToken],
scriptTokens: Seq[ScriptToken]): PreExecutionScriptProgram = {
val updatedStack = oldProgram.updateStack(stackTokens)
val updatedScript = updatedStack.updateScript(scriptTokens)
require(updatedStack.stack == stackTokens)
require(updatedScript.script == scriptTokens)
updatedScript
}
def apply(
oldProgram: ExecutionInProgressScriptProgram,
stackTokens: Seq[ScriptToken],