From 782edd8ea88d72808240b28f1e4033147fa3f285 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Mon, 7 Apr 2014 17:41:04 +0200 Subject: [PATCH] TransactionOutput: add equals/hashcode/duplicateDetached methods. --- .../bitcoin/core/TransactionOutput.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/core/src/main/java/com/google/bitcoin/core/TransactionOutput.java b/core/src/main/java/com/google/bitcoin/core/TransactionOutput.java index 8f000ac92de..7ec2cb83b41 100644 --- a/core/src/main/java/com/google/bitcoin/core/TransactionOutput.java +++ b/core/src/main/java/com/google/bitcoin/core/TransactionOutput.java @@ -28,6 +28,7 @@ import java.io.Serializable; import java.lang.ref.WeakReference; import java.math.BigInteger; +import java.util.Arrays; import static com.google.common.base.Preconditions.*; @@ -332,4 +333,30 @@ private void writeObject(ObjectOutputStream out) throws IOException { maybeParse(); out.defaultWriteObject(); } + + /** Returns a copy of the output detached from its containing transaction, if need be. */ + public TransactionOutput duplicateDetached() { + return new TransactionOutput(params, null, value, org.spongycastle.util.Arrays.clone(scriptBytes)); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + TransactionOutput output = (TransactionOutput) o; + + if (!Arrays.equals(scriptBytes, output.scriptBytes)) return false; + if (value != null ? !value.equals(output.value) : output.value != null) return false; + if (parentTransaction != null && parentTransaction != output.parentTransaction) return false; + + return true; + } + + @Override + public int hashCode() { + int result = value != null ? value.hashCode() : 0; + result = 31 * result + (scriptBytes != null ? Arrays.hashCode(scriptBytes) : 0); + return result; + } }