refactor script
This commit is contained in:
parent
81f1469f9a
commit
53f6a31e73
|
@ -202,13 +202,11 @@ Script.prototype.toString = function() {
|
||||||
* @returns true if this is a pay to pubkey hash output script
|
* @returns true if this is a pay to pubkey hash output script
|
||||||
*/
|
*/
|
||||||
Script.prototype.isPublicKeyHashOut = function() {
|
Script.prototype.isPublicKeyHashOut = function() {
|
||||||
return !!(this.chunks[0] && this.chunks[0].opcodenum === Opcode.OP_DUP &&
|
return !!(this.chunks.length === 5 &&
|
||||||
this.chunks[1] &&
|
this.chunks[0].opcodenum === Opcode.OP_DUP &&
|
||||||
this.chunks[1].opcodenum === Opcode.OP_HASH160 &&
|
this.chunks[1].opcodenum === Opcode.OP_HASH160 &&
|
||||||
this.chunks[2].buf &&
|
this.chunks[2].buf &&
|
||||||
this.chunks[3] &&
|
|
||||||
this.chunks[3].opcodenum === Opcode.OP_EQUALVERIFY &&
|
this.chunks[3].opcodenum === Opcode.OP_EQUALVERIFY &&
|
||||||
this.chunks[4] &&
|
|
||||||
this.chunks[4].opcodenum === Opcode.OP_CHECKSIG);
|
this.chunks[4].opcodenum === Opcode.OP_CHECKSIG);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -216,12 +214,11 @@ Script.prototype.isPublicKeyHashOut = function() {
|
||||||
* @returns true if this is a pay to public key hash input script
|
* @returns true if this is a pay to public key hash input script
|
||||||
*/
|
*/
|
||||||
Script.prototype.isPublicKeyHashIn = function() {
|
Script.prototype.isPublicKeyHashIn = function() {
|
||||||
return !!(this.chunks.length === 2 &&
|
return this.chunks.length === 2 &&
|
||||||
this.chunks[0].buf &&
|
this.chunks[0].buf &&
|
||||||
this.chunks[0].buf.length >= 0x47 &&
|
this.chunks[0].buf.length >= 0x47 &&
|
||||||
this.chunks[0].buf.length <= 0x49 &&
|
this.chunks[0].buf.length <= 0x49 &&
|
||||||
this.chunks[1].buf &&
|
PublicKey.isValid(this.chunks[1].buf);
|
||||||
PublicKey.isValid(this.chunks[1].buf));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -231,7 +228,7 @@ Script.prototype.isPublicKeyOut = function() {
|
||||||
return this.chunks.length === 2 &&
|
return this.chunks.length === 2 &&
|
||||||
bufferUtil.isBuffer(this.chunks[0].buf) &&
|
bufferUtil.isBuffer(this.chunks[0].buf) &&
|
||||||
PublicKey.isValid(this.chunks[0].buf) &&
|
PublicKey.isValid(this.chunks[0].buf) &&
|
||||||
this.chunks[1] === Opcode('OP_CHECKSIG').toNumber();
|
this.chunks[1].opcodenum === Opcode('OP_CHECKSIG').toNumber();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -249,10 +246,10 @@ Script.prototype.isPublicKeyIn = function() {
|
||||||
*/
|
*/
|
||||||
Script.prototype.isScriptHashOut = function() {
|
Script.prototype.isScriptHashOut = function() {
|
||||||
return this.chunks.length === 3 &&
|
return this.chunks.length === 3 &&
|
||||||
this.chunks[0] === Opcode('OP_HASH160').toNumber() &&
|
this.chunks[0].opcodenum === Opcode('OP_HASH160').toNumber() &&
|
||||||
this.chunks[1].buf &&
|
this.chunks[1].buf &&
|
||||||
this.chunks[1].buf.length === 20 &&
|
this.chunks[1].buf.length === 20 &&
|
||||||
this.chunks[2] === Opcode('OP_EQUAL').toNumber();
|
this.chunks[2].opcodenum === Opcode('OP_EQUAL').toNumber();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -272,9 +269,7 @@ Script.prototype.isScriptHashIn = function() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var redeemScript = new Script(scriptBuf);
|
var redeemScript = new Script(scriptBuf);
|
||||||
console.log(redeemScript.toString());
|
|
||||||
var type = redeemScript.classify();
|
var type = redeemScript.classify();
|
||||||
console.log('type='+type);
|
|
||||||
return type !== Script.types.UNKNOWN;
|
return type !== Script.types.UNKNOWN;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -288,15 +283,16 @@ Script.prototype.isMultisigOut = function() {
|
||||||
return obj.buf && bufferUtil.isBuffer(obj.buf);
|
return obj.buf && bufferUtil.isBuffer(obj.buf);
|
||||||
}) &&
|
}) &&
|
||||||
Opcode.isSmallIntOp(this.chunks[this.chunks.length - 2].opcodenum) &&
|
Opcode.isSmallIntOp(this.chunks[this.chunks.length - 2].opcodenum) &&
|
||||||
this.chunks[this.chunks.length - 1] === Opcode.map.OP_CHECKMULTISIG);
|
this.chunks[this.chunks.length - 1].opcodenum === Opcode.map.OP_CHECKMULTISIG);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns true if this is a mutlsig input script
|
* @returns true if this is a multisig input script
|
||||||
*/
|
*/
|
||||||
Script.prototype.isMultisigIn = function() {
|
Script.prototype.isMultisigIn = function() {
|
||||||
return this.chunks[0] === 0 &&
|
return this.chunks.length >= 2 &&
|
||||||
|
this.chunks[0].opcodenum === 0 &&
|
||||||
this.chunks.slice(1, this.chunks.length).every(function(obj) {
|
this.chunks.slice(1, this.chunks.length).every(function(obj) {
|
||||||
return obj.buf &&
|
return obj.buf &&
|
||||||
bufferUtil.isBuffer(obj.buf) &&
|
bufferUtil.isBuffer(obj.buf) &&
|
||||||
|
@ -308,12 +304,13 @@ Script.prototype.isMultisigIn = function() {
|
||||||
* @returns true if this is an OP_RETURN data script
|
* @returns true if this is an OP_RETURN data script
|
||||||
*/
|
*/
|
||||||
Script.prototype.isDataOut = function() {
|
Script.prototype.isDataOut = function() {
|
||||||
return (this.chunks[0].opcodenum === Opcode('OP_RETURN').toNumber() &&
|
return this.chunks.length >= 1 &&
|
||||||
|
this.chunks[0].opcodenum === Opcode('OP_RETURN').toNumber() &&
|
||||||
(this.chunks.length === 1 ||
|
(this.chunks.length === 1 ||
|
||||||
(this.chunks.length === 2 &&
|
(this.chunks.length === 2 &&
|
||||||
this.chunks[1].buf &&
|
this.chunks[1].buf &&
|
||||||
this.chunks[1].buf.length <= 40 &&
|
this.chunks[1].buf.length <= 40 &&
|
||||||
this.chunks[1].length === this.chunks.len)));
|
this.chunks[1].length === this.chunks.len));
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -322,8 +319,7 @@ Script.prototype.isDataOut = function() {
|
||||||
*/
|
*/
|
||||||
Script.prototype.isPushOnly = function() {
|
Script.prototype.isPushOnly = function() {
|
||||||
return _.every(this.chunks, function(chunk) {
|
return _.every(this.chunks, function(chunk) {
|
||||||
var opcodenum = chunk.opcodenum;
|
return chunk.opcodenum <= Opcode.map.OP_16;
|
||||||
return !_.isUndefined(opcodenum) || chunk <= Opcode.map.OP_16;
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -431,7 +427,9 @@ Script.prototype._addOpcode = function(opcode, prepend) {
|
||||||
} else {
|
} else {
|
||||||
op = Opcode(opcode).toNumber();
|
op = Opcode(opcode).toNumber();
|
||||||
}
|
}
|
||||||
this._insertAtPosition(op, prepend);
|
this._insertAtPosition({
|
||||||
|
opcodenum: op
|
||||||
|
}, prepend);
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -462,7 +460,7 @@ Script.prototype._addBuffer = function(buf, prepend) {
|
||||||
Script.prototype.removeCodeseparators = function() {
|
Script.prototype.removeCodeseparators = function() {
|
||||||
var chunks = [];
|
var chunks = [];
|
||||||
for (var i = 0; i < this.chunks.length; i++) {
|
for (var i = 0; i < this.chunks.length; i++) {
|
||||||
if (this.chunks[i] !== Opcode.OP_CODESEPARATOR) {
|
if (this.chunks[i].opcodenum !== Opcode.OP_CODESEPARATOR) {
|
||||||
chunks.push(this.chunks[i]);
|
chunks.push(this.chunks[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue