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.
|
* Created by chris on 1/7/16.
|
||||||
*/
|
*/
|
||||||
trait ScriptParser extends {
|
trait ScriptParser {
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses a script inside of a transaction
|
|
||||||
* @param str
|
|
||||||
* @tparam T
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
def parseInputScript(str : String) : List[ScriptToken] = ???
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses an output script of a transaction
|
* Parses an output script of a transaction
|
||||||
* @param str
|
* @param str
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
def parseOutputScript(str : String) : List[ScriptToken] = {
|
def parse(str : String) : List[ScriptToken] = {
|
||||||
@tailrec
|
@tailrec
|
||||||
def loop(operations : List[String], accum : List[ScriptToken]) : List[ScriptToken] = {
|
def loop(operations : List[String], accum : List[ScriptToken]) : List[ScriptToken] = {
|
||||||
operations match {
|
operations match {
|
||||||
|
case h :: t if (h == "0") => loop(t, OP_0 :: accum)
|
||||||
case h :: t if (ScriptOperationFactory.fromString(h).isDefined) =>
|
case h :: t if (ScriptOperationFactory.fromString(h).isDefined) =>
|
||||||
loop(t,ScriptOperationFactory.fromString(h).get :: accum)
|
loop(t,ScriptOperationFactory.fromString(h).get :: accum)
|
||||||
case h :: t => loop(t, ScriptConstantImpl(h) :: accum)
|
case h :: t => loop(t, ScriptConstantImpl(h) :: accum)
|
||||||
case h :: t if (h == "0") => loop(t, OP_0 :: accum)
|
|
||||||
case Nil => accum
|
case Nil => accum
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,22 +10,23 @@ class ScriptParserTest extends FlatSpec with MustMatchers with ScriptParser {
|
||||||
|
|
||||||
|
|
||||||
"ScriptParser" must "parse an input script" in {
|
"ScriptParser" must "parse an input script" in {
|
||||||
/* val parsedInput = parseInputScript(TestUtil.p2pkhInputScriptNotParsedAsm)
|
val parsedInput = parse(TestUtil.p2pkhInputScriptNotParsedAsm)
|
||||||
parsedInput must be (TestUtil.p2pkhInputScriptAsm)*/
|
parsedInput must be (TestUtil.p2pkhInputScriptAsm)
|
||||||
}
|
}
|
||||||
|
|
||||||
it must "parse a pay-to-pubkey-hash output script" in {
|
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)
|
parsedOutput must be (TestUtil.p2pkhOutputScriptAsm)
|
||||||
}
|
}
|
||||||
|
|
||||||
it must "parse a pay-to-script-hash output script" in {
|
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)
|
parsedOutput must be (TestUtil.p2shOutputScriptAsm)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* it must "parse a pay-to-script-hash input script" in {
|
it must "parse a pay-to-script-hash input script" in {
|
||||||
val parsedInput = parseInput
|
val parsedInput = parse(TestUtil.p2shInputScriptNotParsedAsm)
|
||||||
}*/
|
parsedInput must be (TestUtil.p2shInputScriptAsm)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package org.scalacoin.util
|
package org.scalacoin.util
|
||||||
|
|
||||||
import org.scalacoin.protocol.{AssetAddress, BitcoinAddress}
|
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.bitwise.{OP_EQUAL, OP_EQUALVERIFY}
|
||||||
import org.scalacoin.script.crypto.{OP_CHECKSIG, OP_HASH160}
|
import org.scalacoin.script.crypto.{OP_CHECKSIG, OP_HASH160}
|
||||||
import org.scalacoin.script.stack.OP_DUP
|
import org.scalacoin.script.stack.OP_DUP
|
||||||
|
@ -20,21 +20,21 @@ object TestUtil {
|
||||||
val p2pkhInputScriptNotParsedAsm =
|
val p2pkhInputScriptNotParsedAsm =
|
||||||
"3044022016ffdbb7c57634903c5e018fcfc48d59f4e37dc4bc3bbc9ba4e6ee39150bca030220119c2241a931819bc1a75d3596e4029d803d1cd6de123bf8a1a1a2c3665e1fac01" +
|
"3044022016ffdbb7c57634903c5e018fcfc48d59f4e37dc4bc3bbc9ba4e6ee39150bca030220119c2241a931819bc1a75d3596e4029d803d1cd6de123bf8a1a1a2c3665e1fac01" +
|
||||||
" 02af7dad03e682fcd0427b5c24140c220ac9d8abe286c15f8cf5bf77eed19c3652"
|
" 02af7dad03e682fcd0427b5c24140c220ac9d8abe286c15f8cf5bf77eed19c3652"
|
||||||
val p2pkhInputScriptAsm = List("3044022016ffdbb7c57634903c5e018fcfc48d59f4e37dc4bc3bbc9ba4e6ee39150bca030220119c2241a931819bc1a75d3596e4029d803d1cd6de123bf8a1a1a2c3665e1fac01",
|
val p2pkhInputScriptAsm = List(
|
||||||
"02af7dad03e682fcd0427b5c24140c220ac9d8abe286c15f8cf5bf77eed19c3652")
|
ScriptConstantImpl("3044022016ffdbb7c57634903c5e018fcfc48d59f4e37dc4bc3bbc9ba4e6ee39150bca030220119c2241a931819bc1a75d3596e4029d803d1cd6de123bf8a1a1a2c3665e1fac01"),
|
||||||
|
ScriptConstantImpl("02af7dad03e682fcd0427b5c24140c220ac9d8abe286c15f8cf5bf77eed19c3652"))
|
||||||
val p2pkhOutputScriptNotParsedAsm = "OP_DUP OP_HASH160 e2e7c1ab3f807151e832dd1accb3d4f5d7d19b4b OP_EQUALVERIFY OP_CHECKSIG"
|
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 p2pkhOutputScriptAsm = List(OP_DUP,OP_HASH160,ScriptConstantImpl("e2e7c1ab3f807151e832dd1accb3d4f5d7d19b4b"),OP_EQUALVERIFY, OP_CHECKSIG)
|
||||||
|
|
||||||
|
|
||||||
val p2shInputScriptNotParsedAsm =
|
val p2shInputScriptNotParsedAsm =
|
||||||
"""0
|
"""0 3045022100884c8a4776f4aa2a70f25f6bc0071929ade0ff4987844347e051e018c267aae402201fcec5dd052e7b01198bb57e1b58696c38ccd9d0b408c55047cac89b47287b4101 3045022100b064d492712a080b726ecf37de2957b783fa411edae33bd13005e62d6a45d02302201b82b632df54cf1204758c2b5a3599f1f9a80da3d508951695bfcf8d2c2cce0f01 522102632178d046673c9729d828cfee388e121f497707f810c131e0d3fc0fe0bd66d62103a0951ec7d3a9da9de171617026442fcd30f34d66100fab539853b43f508787d452ae"""
|
||||||
|3045022100884c8a4776f4aa2a70f25f6bc0071929ade0ff4987844347e051e018c267aae402201fcec5dd052e7b01198bb57e1b58696c38ccd9d0b408c55047cac89b47287b4101
|
|
||||||
|3045022100b064d492712a080b726ecf37de2957b783fa411edae33bd13005e62d6a45d02302201b82b632df54cf1204758c2b5a3599f1f9a80da3d508951695bfcf8d2c2cce0f01
|
|
||||||
|522102632178d046673c9729d828cfee388e121f497707f810c131e0d3fc0fe0bd66d62103a0951ec7d3a9da9de171617026442fcd30f34d66100fab539853b43f508787d452ae
|
|
||||||
|""".stripMargin
|
|
||||||
|
|
||||||
val p2shInputScript = List(
|
|
||||||
|
|
||||||
|
val p2shInputScriptAsm = List(
|
||||||
|
OP_0,
|
||||||
|
ScriptConstantImpl("3045022100884c8a4776f4aa2a70f25f6bc0071929ade0ff4987844347e051e018c267aae402201fcec5dd052e7b01198bb57e1b58696c38ccd9d0b408c55047cac89b47287b4101"),
|
||||||
|
ScriptConstantImpl("3045022100b064d492712a080b726ecf37de2957b783fa411edae33bd13005e62d6a45d02302201b82b632df54cf1204758c2b5a3599f1f9a80da3d508951695bfcf8d2c2cce0f01"),
|
||||||
|
ScriptConstantImpl("522102632178d046673c9729d828cfee388e121f497707f810c131e0d3fc0fe0bd66d62103a0951ec7d3a9da9de171617026442fcd30f34d66100fab539853b43f508787d452ae")
|
||||||
)
|
)
|
||||||
val p2shOutputScriptNotParsedAsm = "OP_HASH160 8ce5408cfeaddb7ccb2545ded41ef47810945484 OP_EQUAL"
|
val p2shOutputScriptNotParsedAsm = "OP_HASH160 8ce5408cfeaddb7ccb2545ded41ef47810945484 OP_EQUAL"
|
||||||
val p2shOutputScriptAsm = List(OP_HASH160, ScriptConstantImpl("8ce5408cfeaddb7ccb2545ded41ef47810945484"), OP_EQUAL)
|
val p2shOutputScriptAsm = List(OP_HASH160, ScriptConstantImpl("8ce5408cfeaddb7ccb2545ded41ef47810945484"), OP_EQUAL)
|
||||||
|
|
Loading…
Add table
Reference in a new issue