add more extractor functions.

This commit is contained in:
Christopher Jeffrey 2016-02-12 16:01:15 -08:00
parent 4e34d3d0ca
commit a3fc9159a0

View File

@ -1201,10 +1201,22 @@ script.createNulldata = function createNulldata(flags) {
};
script.getRedeem = function getRedeem(s) {
if (!Array.isArray(s[s.length - 1]))
var raw, redeem;
raw = s[s.length - 1];
if (!Array.isArray(raw))
return;
return script.decode(s[s.length - 1]);
if (raw._redeem)
return raw._redeem;
redeem = script.decode(raw);
utils.hidden(redeem, '_raw', raw);
utils.hidden(raw, '_redeem', redeem);
return redeem;
};
script.getType =
@ -1521,6 +1533,71 @@ script.getUnknownData = function getUnknownData(s) {
};
};
script.getInputKeys = function getInputKeys(s, prev) {
if (script.isScripthashInput(s))
return script.getOutputKeys(script.getRedeem(s));
if (prev)
return script.getOutputKeys(prev);
if (script.isPubkeyhashInput(s))
return [s[1]];
return [];
};
script.getOutputKeys = function getOutputKeys(s) {
if (script.isPubkey(s))
return [s[0]];
if (script.isMultisig(s))
return s.slice(1, -2);
return [];
};
script.getInputKeyHashes = function getInputKeyHashes(s, prev) {
if (script.isScripthashInput(s))
return script.getOutputKeyHashes(script.getRedeem(s));
if (prev)
return script.getOuputKeyHashes(prev);
if (script.isPubkeyhashInput(s))
return [bcoin.address.hash160(s[1])];
return [];
};
script.getOuputKeyHashes = function getOuputKeyHashes(s) {
if (script.isPubkey(s))
return [bcoin.address.hash160(s[0])];
if (script.isPubkeyhash(s))
return [s[2]];
if (script.isMultisig(s)) {
return s.slice(1, -2).map(function(key) {
return bcoin.address.hash160(key);
});
}
return [];
};
script.getInputScripthash = function getInputScripthash(s, prev) {
if (prev)
return script.getOutputScripthash(prev);
if (script.isScripthashInput(s))
return bcoin.address.hash160(s[s.length - 1]);
};
script.getOutputScripthash = function getOutputScripthash(s) {
if (script.isScripthash(s))
return s[1];
};
script.getInputAddress = function getInputAddress(s, prev) {
if (prev)
return script.getOutputAddress(prev);
@ -1556,6 +1633,23 @@ script.getOutputAddress = function getOutputAddress(s) {
return bcoin.address.toAddress(s[1], 'scripthash');
};
script.getInputMN = function getInputMN(s, prev) {
if (script.isScripthashInput(s))
return script.getOutputMN(script.getRedeem(s));
if (prev)
return script.getOuputMN(prev);
return { m: 1, n: 1 };
};
script.getOuputMN = function getOuputMN(s) {
if (script.isMultisig(s))
return { m: s[0], n: s[s.length - 2] };
return { m: 1, n: 1 };
};
script.isPubkey = function isPubkey(s, key) {
var res;