templates: add encode/decode* stack functions
This commit is contained in:
parent
b862a62867
commit
80762543e7
9 changed files with 98 additions and 40 deletions
|
@ -52,8 +52,8 @@ function classifyWitness (script, allowIncomplete) {
|
||||||
// XXX: optimization, below functions .decompile before use
|
// XXX: optimization, below functions .decompile before use
|
||||||
var chunks = decompile(script)
|
var chunks = decompile(script)
|
||||||
|
|
||||||
if (pubKeyHash.input.check(chunks)) return types.P2WPKH
|
if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
|
||||||
if (scriptHash.input.check(chunks)) return types.P2WSH
|
if (witnessScriptHash.input.check(chunks)) return types.P2WSH
|
||||||
|
|
||||||
return types.NONSTANDARD
|
return types.NONSTANDARD
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ function check (script, allowIncomplete) {
|
||||||
}
|
}
|
||||||
check.toJSON = function () { return 'multisig input' }
|
check.toJSON = function () { return 'multisig input' }
|
||||||
|
|
||||||
function encode (signatures, scriptPubKey) {
|
function encodeStack (signatures, scriptPubKey) {
|
||||||
typeforce([partialSignature], signatures)
|
typeforce([partialSignature], signatures)
|
||||||
|
|
||||||
if (scriptPubKey) {
|
if (scriptPubKey) {
|
||||||
|
@ -36,18 +36,27 @@ function encode (signatures, scriptPubKey) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return bscript.compile([].concat(OPS.OP_0, signatures))
|
return [].concat(OPS.OP_0, signatures)
|
||||||
|
}
|
||||||
|
|
||||||
|
function encode (signatures, scriptPubKey) {
|
||||||
|
return bscript.compile(encodeStack(signatures, scriptPubKey))
|
||||||
|
}
|
||||||
|
|
||||||
|
function decodeStack (stack, allowIncomplete) {
|
||||||
|
typeforce(check, stack, allowIncomplete)
|
||||||
|
return stack.slice(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
function decode (buffer, allowIncomplete) {
|
function decode (buffer, allowIncomplete) {
|
||||||
var chunks = bscript.decompile(buffer)
|
var stack = bscript.decompile(buffer)
|
||||||
typeforce(check, chunks, allowIncomplete)
|
return decodeStack(stack, allowIncomplete)
|
||||||
|
|
||||||
return chunks.slice(1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
check: check,
|
check: check,
|
||||||
decode: decode,
|
decode: decode,
|
||||||
encode: encode
|
decodeStack: decodeStack,
|
||||||
|
encode: encode,
|
||||||
|
encodeStack: encodeStack
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,21 +12,29 @@ function check (script) {
|
||||||
}
|
}
|
||||||
check.toJSON = function () { return 'pubKey input' }
|
check.toJSON = function () { return 'pubKey input' }
|
||||||
|
|
||||||
function encode (signature) {
|
function encodeStack (signature) {
|
||||||
typeforce(types.Buffer, signature)
|
typeforce(types.Buffer, signature)
|
||||||
|
return [signature]
|
||||||
|
}
|
||||||
|
|
||||||
return bscript.compile([signature])
|
function encode (signature) {
|
||||||
|
return bscript.compile(encodeStack(signature))
|
||||||
|
}
|
||||||
|
|
||||||
|
function decodeStack (stack) {
|
||||||
|
typeforce(check, stack)
|
||||||
|
return stack[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
function decode (buffer) {
|
function decode (buffer) {
|
||||||
var chunks = bscript.decompile(buffer)
|
var stack = bscript.decompile(buffer)
|
||||||
typeforce(check, chunks)
|
return decodeStack(stack)
|
||||||
|
|
||||||
return chunks[0]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
check: check,
|
check: check,
|
||||||
decode: decode,
|
decode: decode,
|
||||||
encode: encode
|
decodeStack: decodeStack,
|
||||||
|
encode: encode,
|
||||||
|
encodeStack: encodeStack
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,28 +13,38 @@ function check (script) {
|
||||||
}
|
}
|
||||||
check.toJSON = function () { return 'pubKeyHash input' }
|
check.toJSON = function () { return 'pubKeyHash input' }
|
||||||
|
|
||||||
function encode (signature, pubKey) {
|
function encodeStack (signature, pubKey) {
|
||||||
typeforce({
|
typeforce({
|
||||||
signature: types.Buffer, pubKey: types.Buffer
|
signature: types.Buffer, pubKey: types.Buffer
|
||||||
}, {
|
}, {
|
||||||
signature: signature, pubKey: pubKey
|
signature: signature, pubKey: pubKey
|
||||||
})
|
})
|
||||||
|
|
||||||
return bscript.compile([signature, pubKey])
|
return [signature, pubKey]
|
||||||
|
}
|
||||||
|
|
||||||
|
function encode (signature, pubKey) {
|
||||||
|
return bscript.compile(encodeStack(signature, pubKey))
|
||||||
|
}
|
||||||
|
|
||||||
|
function decodeStack (stack) {
|
||||||
|
typeforce(check, stack)
|
||||||
|
|
||||||
|
return {
|
||||||
|
signature: stack[0],
|
||||||
|
pubKey: stack[1]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function decode (buffer) {
|
function decode (buffer) {
|
||||||
var chunks = bscript.decompile(buffer)
|
var stack = bscript.decompile(buffer)
|
||||||
typeforce(check, chunks)
|
return decodeStack(stack)
|
||||||
|
|
||||||
return {
|
|
||||||
signature: chunks[0],
|
|
||||||
pubKey: chunks[1]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
check: check,
|
check: check,
|
||||||
decode: decode,
|
decode: decode,
|
||||||
encode: encode
|
decodeStack: decodeStack,
|
||||||
|
encode: encode,
|
||||||
|
encodeStack: encodeStack
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,28 +25,39 @@ function check (script, allowIncomplete) {
|
||||||
}
|
}
|
||||||
check.toJSON = function () { return 'scriptHash input' }
|
check.toJSON = function () { return 'scriptHash input' }
|
||||||
|
|
||||||
function encode (redeemScriptSig, redeemScript) {
|
function encodeStack (redeemScriptStack, redeemScript) {
|
||||||
var scriptSigChunks = bscript.decompile(redeemScriptSig)
|
|
||||||
var serializedScriptPubKey = bscript.compile(redeemScript)
|
var serializedScriptPubKey = bscript.compile(redeemScript)
|
||||||
|
|
||||||
return bscript.compile([].concat(
|
return [].concat(redeemScriptStack, serializedScriptPubKey)
|
||||||
scriptSigChunks,
|
}
|
||||||
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) {
|
function decode (buffer) {
|
||||||
var chunks = bscript.decompile(buffer)
|
var stack = bscript.decompile(buffer)
|
||||||
typeforce(check, chunks)
|
var result = decodeStack(stack)
|
||||||
|
result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
|
||||||
return {
|
delete result.redeemScriptStack
|
||||||
redeemScriptSig: bscript.compile(chunks.slice(0, -1)),
|
return result
|
||||||
redeemScript: chunks[chunks.length - 1]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
check: check,
|
check: check,
|
||||||
decode: decode,
|
decode: decode,
|
||||||
encode: encode
|
decodeStack: decodeStack,
|
||||||
|
encode: encode,
|
||||||
|
encodeStack: encodeStack
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
input: require('./input'),
|
||||||
output: require('./output')
|
output: require('./output')
|
||||||
}
|
}
|
||||||
|
|
9
src/templates/witnesspubkeyhash/input.js
Normal file
9
src/templates/witnesspubkeyhash/input.js
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
// {signature} {pubKey}
|
||||||
|
|
||||||
|
var pkh = require('../pubkeyhash/input')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
check: pkh.check,
|
||||||
|
decodeStack: pkh.decodeStack,
|
||||||
|
encodeStack: pkh.encodeStack
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
input: require('./input'),
|
||||||
output: require('./output')
|
output: require('./output')
|
||||||
}
|
}
|
||||||
|
|
9
src/templates/witnessscripthash/input.js
Normal file
9
src/templates/witnessscripthash/input.js
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
// {signature} {pubKey}
|
||||||
|
|
||||||
|
var p2sh = require('../scripthash/input')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
check: p2sh.check,
|
||||||
|
decodeStack: p2sh.decodeStack,
|
||||||
|
encodeStack: p2sh.encodeStack
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue