@@ -8,6 +8,9 @@ var ops = require('bitcoin-ops')
88
99var fixtures = require ( './fixtures/templates.json' )
1010
11+ function fromHex ( x ) { return Buffer . from ( x , 'hex' ) }
12+ function toHex ( x ) { return x . toString ( 'hex' ) }
13+
1114describe ( 'script-templates' , function ( ) {
1215 describe ( 'classifyInput' , function ( ) {
1316 fixtures . valid . forEach ( function ( f ) {
@@ -296,8 +299,8 @@ describe('script-templates', function () {
296299 fixtures . valid . forEach ( function ( f ) {
297300 if ( f . type !== 'scripthash' ) return
298301
299- var redeemScript = bscript . fromASM ( f . redeemScript )
300302 var redeemScriptSig = bscript . fromASM ( f . redeemScriptSig )
303+ var redeemScript = bscript . fromASM ( f . redeemScript )
301304 var input = btemplates . scriptHash . input . encode ( redeemScriptSig , redeemScript )
302305
303306 it ( 'encodes to ' + f . output , function ( ) {
@@ -347,6 +350,31 @@ describe('script-templates', function () {
347350 } )
348351 } )
349352
353+ describe ( 'witnessPubKeyHash.input' , function ( ) {
354+ fixtures . valid . forEach ( function ( f ) {
355+ if ( f . type !== 'pubkeyhash' && f . type !== 'witnesspubkeyhash' ) return
356+ if ( ! f . inputStack ) return
357+
358+ var pubKey = Buffer . from ( f . pubKey , 'hex' )
359+ var signature = Buffer . from ( f . signature , 'hex' )
360+
361+ it ( 'encodes to ' + f . input , function ( ) {
362+ var inputStack = btemplates . witnessPubKeyHash . input . encodeStack ( signature , pubKey )
363+
364+ assert . deepEqual ( inputStack . map ( toHex ) , f . inputStack )
365+ } )
366+
367+ it ( 'decodes to original arguments' , function ( ) {
368+ var fInputStack = f . inputStack . map ( fromHex )
369+
370+ assert . deepEqual ( btemplates . witnessPubKeyHash . input . decodeStack ( fInputStack ) , {
371+ signature : signature ,
372+ pubKey : pubKey
373+ } )
374+ } )
375+ } )
376+ } )
377+
350378 describe ( 'witnessPubKeyHash.output' , function ( ) {
351379 fixtures . valid . forEach ( function ( f ) {
352380 if ( f . type !== 'witnesspubkeyhash' ) return
@@ -377,12 +405,35 @@ describe('script-templates', function () {
377405 } )
378406 } )
379407
408+ describe ( 'witnessScriptHash.input' , function ( ) {
409+ fixtures . valid . forEach ( function ( f ) {
410+ if ( f . type !== 'witnessscripthash' ) return
411+ if ( ! f . inputStack || ! f . witnessData ) return
412+
413+ var witnessData = f . witnessData . map ( fromHex )
414+ var witnessScript = bscript . fromASM ( f . witnessScript || f . redeemScript )
415+
416+ it ( 'encodes to ' + f . input , function ( ) {
417+ var inputStack = btemplates . witnessScriptHash . input . encodeStack ( witnessData , witnessScript )
418+
419+ assert . deepEqual ( inputStack . map ( toHex ) , f . inputStack )
420+ } )
421+
422+ it ( 'decodes to original arguments' , function ( ) {
423+ var result = btemplates . witnessScriptHash . input . decodeStack ( f . inputStack . map ( fromHex ) )
424+
425+ assert . deepEqual ( result . witnessData . map ( toHex ) , f . witnessData )
426+ assert . strictEqual ( bscript . toASM ( result . witnessScript ) , f . witnessScript )
427+ } )
428+ } )
429+ } )
430+
380431 describe ( 'witnessScriptHash.output' , function ( ) {
381432 fixtures . valid . forEach ( function ( f ) {
382433 if ( f . type !== 'witnessscripthash' ) return
383434 if ( ! f . output ) return
384435
385- var witnessScriptPubKey = bscript . fromASM ( f . witnessScriptPubKey )
436+ var witnessScriptPubKey = bscript . fromASM ( f . witnessScript )
386437 var scriptHash = bcrypto . hash256 ( witnessScriptPubKey )
387438 var output = btemplates . witnessScriptHash . output . encode ( scriptHash )
388439
0 commit comments