From a8f85d115894466ef0c2665da9abec9e248bb070 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Wed, 1 Oct 2014 15:54:31 +0200 Subject: [PATCH] DefaultRiskAnalysis: extract output testing into a separate method also, and add a (presently unused) new rule violation type. --- .../bitcoinj/wallet/DefaultRiskAnalysis.java | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/org/bitcoinj/wallet/DefaultRiskAnalysis.java b/core/src/main/java/org/bitcoinj/wallet/DefaultRiskAnalysis.java index 86e9e16f..da8a0116 100644 --- a/core/src/main/java/org/bitcoinj/wallet/DefaultRiskAnalysis.java +++ b/core/src/main/java/org/bitcoinj/wallet/DefaultRiskAnalysis.java @@ -107,7 +107,8 @@ public class DefaultRiskAnalysis implements RiskAnalysis { NONE, VERSION, DUST, - SHORTEST_POSSIBLE_PUSHDATA + SHORTEST_POSSIBLE_PUSHDATA, + NONEMPTY_STACK // Not yet implemented (for post 0.12) } /** @@ -126,16 +127,10 @@ public class DefaultRiskAnalysis implements RiskAnalysis { final List outputs = tx.getOutputs(); for (int i = 0; i < outputs.size(); i++) { TransactionOutput output = outputs.get(i); - if (MIN_ANALYSIS_NONDUST_OUTPUT.compareTo(output.getValue()) > 0) { - log.warn("TX considered non-standard due to output {} being dusty", i); - return RuleViolation.DUST; - } - for (ScriptChunk chunk : output.getScriptPubKey().getChunks()) { - if (chunk.isPushData() && !chunk.isShortestPossiblePushData()) { - log.warn("TX considered non-standard due to output {} having a longer than necessary data push: {}", - i, chunk); - return RuleViolation.SHORTEST_POSSIBLE_PUSHDATA; - } + RuleViolation violation = isOutputStandard(output); + if (violation != RuleViolation.NONE) { + log.warn("TX considered non-standard due to output {} violating rule {}", i, violation); + return violation; } } @@ -152,6 +147,19 @@ public class DefaultRiskAnalysis implements RiskAnalysis { return RuleViolation.NONE; } + /** + * Checks the output to see if the script violates a standardness rule. Not complete. + */ + public static RuleViolation isOutputStandard(TransactionOutput output) { + if (MIN_ANALYSIS_NONDUST_OUTPUT.compareTo(output.getValue()) > 0) + return RuleViolation.DUST; + for (ScriptChunk chunk : output.getScriptPubKey().getChunks()) { + if (chunk.isPushData() && !chunk.isShortestPossiblePushData()) + return RuleViolation.SHORTEST_POSSIBLE_PUSHDATA; + } + return RuleViolation.NONE; + } + /** Checks if the given input passes some of the AreInputsStandard checks. Not complete. */ public static RuleViolation isInputStandard(TransactionInput input) { for (ScriptChunk chunk : input.getScriptSig().getChunks()) {