mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-02-23 14:50:42 +01:00
Parsing scriptSigs and scriptPubKeys for both p2sh and p2pkh
This commit is contained in:
parent
731648ece1
commit
a55b7b64ce
3 changed files with 21 additions and 30 deletions
|
@ -7,30 +7,20 @@ import scala.annotation.tailrec
|
|||
/**
|
||||
* Created by chris on 1/7/16.
|
||||
*/
|
||||
trait ScriptParser extends {
|
||||
|
||||
|
||||
/**
|
||||
* Parses a script inside of a transaction
|
||||
* @param str
|
||||
* @tparam T
|
||||
* @return
|
||||
*/
|
||||
def parseInputScript(str : String) : List[ScriptToken] = ???
|
||||
|
||||
trait ScriptParser {
|
||||
/**
|
||||
* Parses an output script of a transaction
|
||||
* @param str
|
||||
* @return
|
||||
*/
|
||||
def parseOutputScript(str : String) : List[ScriptToken] = {
|
||||
def parse(str : String) : List[ScriptToken] = {
|
||||
@tailrec
|
||||
def loop(operations : List[String], accum : List[ScriptToken]) : List[ScriptToken] = {
|
||||
operations match {
|
||||
case h :: t if (h == "0") => loop(t, OP_0 :: accum)
|
||||
case h :: t if (ScriptOperationFactory.fromString(h).isDefined) =>
|
||||
loop(t,ScriptOperationFactory.fromString(h).get :: accum)
|
||||
case h :: t => loop(t, ScriptConstantImpl(h) :: accum)
|
||||
case h :: t if (h == "0") => loop(t, OP_0 :: accum)
|
||||
case Nil => accum
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,22 +10,23 @@ class ScriptParserTest extends FlatSpec with MustMatchers with ScriptParser {
|
|||
|
||||
|
||||
"ScriptParser" must "parse an input script" in {
|
||||
/* val parsedInput = parseInputScript(TestUtil.p2pkhInputScriptNotParsedAsm)
|
||||
parsedInput must be (TestUtil.p2pkhInputScriptAsm)*/
|
||||
val parsedInput = parse(TestUtil.p2pkhInputScriptNotParsedAsm)
|
||||
parsedInput must be (TestUtil.p2pkhInputScriptAsm)
|
||||
}
|
||||
|
||||
it must "parse a pay-to-pubkey-hash output script" in {
|
||||
val parsedOutput = parseOutputScript(TestUtil.p2pkhOutputScriptNotParsedAsm)
|
||||
val parsedOutput = parse(TestUtil.p2pkhOutputScriptNotParsedAsm)
|
||||
parsedOutput must be (TestUtil.p2pkhOutputScriptAsm)
|
||||
}
|
||||
|
||||
it must "parse a pay-to-script-hash output script" in {
|
||||
val parsedOutput = parseOutputScript(TestUtil.p2shOutputScriptNotParsedAsm)
|
||||
val parsedOutput = parse(TestUtil.p2shOutputScriptNotParsedAsm)
|
||||
parsedOutput must be (TestUtil.p2shOutputScriptAsm)
|
||||
}
|
||||
|
||||
/* it must "parse a pay-to-script-hash input script" in {
|
||||
val parsedInput = parseInput
|
||||
}*/
|
||||
it must "parse a pay-to-script-hash input script" in {
|
||||
val parsedInput = parse(TestUtil.p2shInputScriptNotParsedAsm)
|
||||
parsedInput must be (TestUtil.p2shInputScriptAsm)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package org.scalacoin.util
|
||||
|
||||
import org.scalacoin.protocol.{AssetAddress, BitcoinAddress}
|
||||
import org.scalacoin.script.ScriptConstantImpl
|
||||
import org.scalacoin.script.{OP_0, ScriptConstantImpl}
|
||||
import org.scalacoin.script.bitwise.{OP_EQUAL, OP_EQUALVERIFY}
|
||||
import org.scalacoin.script.crypto.{OP_CHECKSIG, OP_HASH160}
|
||||
import org.scalacoin.script.stack.OP_DUP
|
||||
|
@ -20,21 +20,21 @@ object TestUtil {
|
|||
val p2pkhInputScriptNotParsedAsm =
|
||||
"3044022016ffdbb7c57634903c5e018fcfc48d59f4e37dc4bc3bbc9ba4e6ee39150bca030220119c2241a931819bc1a75d3596e4029d803d1cd6de123bf8a1a1a2c3665e1fac01" +
|
||||
" 02af7dad03e682fcd0427b5c24140c220ac9d8abe286c15f8cf5bf77eed19c3652"
|
||||
val p2pkhInputScriptAsm = List("3044022016ffdbb7c57634903c5e018fcfc48d59f4e37dc4bc3bbc9ba4e6ee39150bca030220119c2241a931819bc1a75d3596e4029d803d1cd6de123bf8a1a1a2c3665e1fac01",
|
||||
"02af7dad03e682fcd0427b5c24140c220ac9d8abe286c15f8cf5bf77eed19c3652")
|
||||
val p2pkhInputScriptAsm = List(
|
||||
ScriptConstantImpl("3044022016ffdbb7c57634903c5e018fcfc48d59f4e37dc4bc3bbc9ba4e6ee39150bca030220119c2241a931819bc1a75d3596e4029d803d1cd6de123bf8a1a1a2c3665e1fac01"),
|
||||
ScriptConstantImpl("02af7dad03e682fcd0427b5c24140c220ac9d8abe286c15f8cf5bf77eed19c3652"))
|
||||
val p2pkhOutputScriptNotParsedAsm = "OP_DUP OP_HASH160 e2e7c1ab3f807151e832dd1accb3d4f5d7d19b4b OP_EQUALVERIFY OP_CHECKSIG"
|
||||
val p2pkhOutputScriptAsm = List(OP_DUP,OP_HASH160,ScriptConstantImpl("e2e7c1ab3f807151e832dd1accb3d4f5d7d19b4b"),OP_EQUALVERIFY, OP_CHECKSIG)
|
||||
|
||||
|
||||
val p2shInputScriptNotParsedAsm =
|
||||
"""0
|
||||
|3045022100884c8a4776f4aa2a70f25f6bc0071929ade0ff4987844347e051e018c267aae402201fcec5dd052e7b01198bb57e1b58696c38ccd9d0b408c55047cac89b47287b4101
|
||||
|3045022100b064d492712a080b726ecf37de2957b783fa411edae33bd13005e62d6a45d02302201b82b632df54cf1204758c2b5a3599f1f9a80da3d508951695bfcf8d2c2cce0f01
|
||||
|522102632178d046673c9729d828cfee388e121f497707f810c131e0d3fc0fe0bd66d62103a0951ec7d3a9da9de171617026442fcd30f34d66100fab539853b43f508787d452ae
|
||||
|""".stripMargin
|
||||
|
||||
val p2shInputScript = List(
|
||||
"""0 3045022100884c8a4776f4aa2a70f25f6bc0071929ade0ff4987844347e051e018c267aae402201fcec5dd052e7b01198bb57e1b58696c38ccd9d0b408c55047cac89b47287b4101 3045022100b064d492712a080b726ecf37de2957b783fa411edae33bd13005e62d6a45d02302201b82b632df54cf1204758c2b5a3599f1f9a80da3d508951695bfcf8d2c2cce0f01 522102632178d046673c9729d828cfee388e121f497707f810c131e0d3fc0fe0bd66d62103a0951ec7d3a9da9de171617026442fcd30f34d66100fab539853b43f508787d452ae"""
|
||||
|
||||
val p2shInputScriptAsm = List(
|
||||
OP_0,
|
||||
ScriptConstantImpl("3045022100884c8a4776f4aa2a70f25f6bc0071929ade0ff4987844347e051e018c267aae402201fcec5dd052e7b01198bb57e1b58696c38ccd9d0b408c55047cac89b47287b4101"),
|
||||
ScriptConstantImpl("3045022100b064d492712a080b726ecf37de2957b783fa411edae33bd13005e62d6a45d02302201b82b632df54cf1204758c2b5a3599f1f9a80da3d508951695bfcf8d2c2cce0f01"),
|
||||
ScriptConstantImpl("522102632178d046673c9729d828cfee388e121f497707f810c131e0d3fc0fe0bd66d62103a0951ec7d3a9da9de171617026442fcd30f34d66100fab539853b43f508787d452ae")
|
||||
)
|
||||
val p2shOutputScriptNotParsedAsm = "OP_HASH160 8ce5408cfeaddb7ccb2545ded41ef47810945484 OP_EQUAL"
|
||||
val p2shOutputScriptAsm = List(OP_HASH160, ScriptConstantImpl("8ce5408cfeaddb7ccb2545ded41ef47810945484"), OP_EQUAL)
|
||||
|
|
Loading…
Add table
Reference in a new issue