rename colored coin check. all input script tests.

This commit is contained in:
Christopher Jeffrey 2015-12-17 15:18:32 -08:00
parent 3e608c2cc6
commit 0c8168c697
2 changed files with 78 additions and 28 deletions

View File

@ -788,7 +788,7 @@ script.standard = function standard(s) {
|| (script.isPubkeyhash(s) && 'pubkeyhash')
|| (script.isMultisig(s) && 'multisig')
|| (script.isScripthash(s) && 'scripthash')
|| (script.isNullData(s) && 'colored')
|| (script.isColored(s) && 'colored')
|| 'nonstandard';
};
@ -800,6 +800,23 @@ script.lockTime = function lockTime(s) {
&& new bn(s[0]);
};
script.isPubkey = function isPubkey(s, hash) {
if (script.lockTime(s))
s = s.slice(3);
if (s.length !== 2)
return false;
var match = Array.isArray(s[0]) && s[1] === 'checksig';
if (!match)
return false;
if (hash)
return utils.isEqual(s[0], hash);
else
return s[0];
};
script.isPubkeyhash = function isPubkeyhash(s, hash) {
if (script.lockTime(s))
s = s.slice(3);
@ -821,23 +838,6 @@ script.isPubkeyhash = function isPubkeyhash(s, hash) {
return s[2];
};
script.isPubkey = function isPubkey(s, hash) {
if (script.lockTime(s))
s = s.slice(3);
if (s.length !== 2)
return false;
var match = Array.isArray(s[0]) && s[1] === 'checksig';
if (!match)
return false;
if (hash)
return utils.isEqual(s[0], hash);
else
return s[0];
};
script.isMultisig = function isMultisig(s, key) {
if (script.lockTime(s))
s = s.slice(3);
@ -880,14 +880,6 @@ script.isMultisig = function isMultisig(s, key) {
}).length;
};
script.isPubkeyhashInput = function isPubkeyhashInput(s) {
if (s.length !== 2)
return false;
return 9 <= s[0].length && s[0].length <= 73 &&
33 <= s[1].length && s[1].length <= 65;
};
script.isScripthash = function isScripthash(s, hash) {
if (script.lockTime(s))
s = s.slice(3);
@ -909,7 +901,7 @@ script.isScripthash = function isScripthash(s, hash) {
return true;
};
script.isNullData = function isNullData(s) {
script.isColored = function isColored(s) {
if (s.length !== 2)
return false;
@ -918,6 +910,64 @@ script.isNullData = function isNullData(s) {
s[1].length <= 40;
};
script.colored = function colored(s) {
if (!script.isColored(s))
return false;
return s[1];
};
script.isPubkeyInput = function isPubkeyInput(s) {
if (s.length !== 1 || !Array.isArray(s[0]))
return false;
return 9 <= s[0].length && s[0].length <= 73;
};
script.isPubkeyhashInput = function isPubkeyhashInput(s) {
if (s.length !== 2 || !Array.isArray(s[0]) || !Array.isArray(s[1]))
return false;
return 9 <= s[0].length && s[0].length <= 73 &&
33 <= s[1].length && s[1].length <= 65;
};
script.isMultisigInput = function isMultisigInput(s) {
if (s.length < 3)
return false;
if (!Array.isArray(s[0]) || s[0].length !== 0)
return false;
for (var i = 1; i < s.length; i++) {
var ret = 9 <= s[i].length && s[i].length <= 73;
if (!ret)
return false;
}
return true;
};
script.isScripthashInput = function isScripthashInput(s) {
if (s.length < 4)
return false;
if (!Array.isArray(s[0]) || s[0].length !== 0)
return false;
for (var i = 1; i < s.length - 1; i++) {
var ret = Array.isArray(s[i]) && 9 <= s[i].length && s[i].length <= 73;
if (!ret)
return false;
}
var r = Array.isArray(s[s.length - 1]) && s[s.length - 1];
if (r[r.length - 1] !== constants.opcodes.checkmultisig)
return false;
return true;
};
// https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
/**
* A canonical signature exists of: <30> <total len> <02> <len R> <R> <02> <len S> <S> <hashtype>

View File

@ -42,7 +42,7 @@ describe('Script', function() {
var hex = '6a28590c080112220a1b353930632e6f7267282a5f5e294f7665726c6179404f7261636c65103b1a010c'
var encoded = bcoin.utils.toArray(hex, 'hex')
var decoded = bcoin.script.decode(encoded);
assert(bcoin.script.isNullData(decoded))
assert(bcoin.script.isColored(decoded))
})
it('should handle if statements correctly', function () {