more tx method refactoring.

This commit is contained in:
Christopher Jeffrey 2016-07-02 00:18:52 -07:00
parent 9e4e6c8242
commit 727dc66252
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
2 changed files with 19 additions and 20 deletions

View File

@ -691,11 +691,11 @@ Mempool.prototype.addTX = function addTX(tx, callback, force) {
} }
if (this.requireStandard) { if (this.requireStandard) {
if (!tx.isStandard(flags, ret)) { if (!tx.isStandard(ret)) {
return callback(new VerifyError(tx, return callback(new VerifyError(tx,
'nonstandard', 'nonstandard',
ret.reason, ret.reason,
0)); ret.score));
} }
if (!this.chain.csvActive && tx.version >= 2) { if (!this.chain.csvActive && tx.version >= 2) {
@ -981,7 +981,7 @@ Mempool.prototype.verify = function verify(entry, callback) {
0)); 0));
} }
if (self.requireStandard && !tx.hasStandardInputs(flags)) { if (self.requireStandard && !tx.hasStandardInputs()) {
return callback(new VerifyError(tx, return callback(new VerifyError(tx,
'nonstandard', 'nonstandard',
'bad-txns-nonstandard-inputs', 'bad-txns-nonstandard-inputs',

View File

@ -1300,23 +1300,22 @@ TX.prototype.isSane = function isSane(ret) {
* @returns {Boolean} * @returns {Boolean}
*/ */
TX.prototype.isStandard = function isStandard(flags, ret) { TX.prototype.isStandard = function isStandard(ret) {
var i, input, output; var i, input, output;
var nulldata = 0; var nulldata = 0;
if (!ret) if (!ret)
ret = {}; ret = {};
if (flags == null)
flags = constants.flags.STANDARD_VERIFY_FLAGS;
if (this.version < 1 || this.version > constants.tx.MAX_VERSION) { if (this.version < 1 || this.version > constants.tx.MAX_VERSION) {
ret.reason = 'version'; ret.reason = 'version';
ret.score = 0;
return false; return false;
} }
if (this.getCost() > constants.tx.MAX_COST) { if (this.getCost() >= constants.tx.MAX_COST) {
ret.reason = 'tx-size'; ret.reason = 'tx-size';
ret.score = 0;
return false; return false;
} }
@ -1325,14 +1324,14 @@ TX.prototype.isStandard = function isStandard(flags, ret) {
if (input.script.getSize() > 1650) { if (input.script.getSize() > 1650) {
ret.reason = 'scriptsig-size'; ret.reason = 'scriptsig-size';
ret.score = 0;
return false; return false;
} }
if (flags & constants.flags.VERIFY_SIGPUSHONLY) { if (!input.script.isPushOnly()) {
if (!input.script.isPushOnly()) { ret.reason = 'scriptsig-not-pushonly';
ret.reason = 'scriptsig-not-pushonly'; ret.score = 0;
return false; return false;
}
} }
} }
@ -1341,6 +1340,7 @@ TX.prototype.isStandard = function isStandard(flags, ret) {
if (!output.script.isStandard()) { if (!output.script.isStandard()) {
ret.reason = 'scriptpubkey'; ret.reason = 'scriptpubkey';
ret.score = 0;
return false; return false;
} }
@ -1351,17 +1351,20 @@ TX.prototype.isStandard = function isStandard(flags, ret) {
if (output.script.isMultisig() && !constants.tx.BARE_MULTISIG) { if (output.script.isMultisig() && !constants.tx.BARE_MULTISIG) {
ret.reason = 'bare-multisig'; ret.reason = 'bare-multisig';
ret.score = 0;
return false; return false;
} }
if (output.isDust(constants.tx.MIN_RELAY)) { if (output.isDust(constants.tx.MIN_RELAY)) {
ret.reason = 'dust'; ret.reason = 'dust';
ret.score = 0;
return false; return false;
} }
} }
if (nulldata > 1) { if (nulldata > 1) {
ret.reason = 'multi-op-return'; ret.reason = 'multi-op-return';
ret.score = 0;
return false; return false;
} }
@ -1372,18 +1375,15 @@ TX.prototype.isStandard = function isStandard(flags, ret) {
* Perform contextual checks to verify coin and input * Perform contextual checks to verify coin and input
* script standardness (including the redeem script). * script standardness (including the redeem script).
* @see AreInputsStandard() * @see AreInputsStandard()
* @param {VerifyFlags?} * @param {VerifyFlags?} flags
* @returns {Boolean} * @returns {Boolean}
*/ */
TX.prototype.hasStandardInputs = function hasStandardInputs(flags) { TX.prototype.hasStandardInputs = function hasStandardInputs() {
var maxSigops = constants.script.MAX_SCRIPTHASH_SIGOPS; var maxSigops = constants.script.MAX_SCRIPTHASH_SIGOPS;
var VERIFY_NONE = constants.flags.VERIFY_NONE; var VERIFY_NONE = constants.flags.VERIFY_NONE;
var i, input, stack, redeem; var i, input, stack, redeem;
if (flags == null)
flags = constants.flags.STANDARD_VERIFY_FLAGS;
if (this.isCoinbase()) if (this.isCoinbase())
return true; return true;
@ -1396,8 +1396,7 @@ TX.prototype.hasStandardInputs = function hasStandardInputs(flags) {
if (input.coin.script.isUnknown()) if (input.coin.script.isUnknown())
return false; return false;
if ((flags & constants.flags.VERIFY_P2SH) if (input.coin.script.isScripthash()) {
&& input.coin.script.isScripthash()) {
stack = new Stack(); stack = new Stack();
try { try {