templates: add encode/decode* stack functions

This commit is contained in:
Daniel Cousens 2016-12-14 15:52:38 +11:00 committed by Daniel Cousens
parent b862a62867
commit 80762543e7
9 changed files with 98 additions and 40 deletions
src/templates/scripthash

View file

@ -25,28 +25,39 @@ function check (script, allowIncomplete) {
}
check.toJSON = function () { return 'scriptHash input' }
function encode (redeemScriptSig, redeemScript) {
var scriptSigChunks = bscript.decompile(redeemScriptSig)
function encodeStack (redeemScriptStack, redeemScript) {
var serializedScriptPubKey = bscript.compile(redeemScript)
return bscript.compile([].concat(
scriptSigChunks,
serializedScriptPubKey
))
return [].concat(redeemScriptStack, serializedScriptPubKey)
}
function encode (redeemScriptSig, redeemScript) {
var redeemScriptStack = bscript.decompile(redeemScriptSig)
return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
}
function decodeStack (stack) {
typeforce(check, stack)
return {
redeemScriptStack: stack.slice(0, -1),
redeemScript: stack[stack.length - 1]
}
}
function decode (buffer) {
var chunks = bscript.decompile(buffer)
typeforce(check, chunks)
return {
redeemScriptSig: bscript.compile(chunks.slice(0, -1)),
redeemScript: chunks[chunks.length - 1]
}
var stack = bscript.decompile(buffer)
var result = decodeStack(stack)
result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
delete result.redeemScriptStack
return result
}
module.exports = {
check: check,
decode: decode,
encode: encode
decodeStack: decodeStack,
encode: encode,
encodeStack: encodeStack
}