mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-12 10:15:52 +00:00
TransactionOutput
class private value
member changed to type long
from Coin
.
This commit is contained in:
parent
e8048cb672
commit
b7cb4d8c47
@ -1265,13 +1265,17 @@ public class Transaction extends ChildMessage implements Serializable {
|
|||||||
throw new VerificationException("Transaction larger than MAX_BLOCK_SIZE");
|
throw new VerificationException("Transaction larger than MAX_BLOCK_SIZE");
|
||||||
|
|
||||||
Coin valueOut = Coin.ZERO;
|
Coin valueOut = Coin.ZERO;
|
||||||
for (TransactionOutput output : outputs) {
|
try {
|
||||||
if (output.getValue().signum() < 0)
|
for (TransactionOutput output : outputs) {
|
||||||
throw new VerificationException("Transaction output negative");
|
if (output.getValue().signum() < 0)
|
||||||
valueOut = valueOut.add(output.getValue());
|
throw new VerificationException("Transaction output negative");
|
||||||
}
|
valueOut = valueOut.add(output.getValue());
|
||||||
if (valueOut.compareTo(NetworkParameters.MAX_MONEY) > 0)
|
}
|
||||||
|
} catch (IllegalStateException e) {
|
||||||
|
throw new VerificationException("A transaction output value exceeds maximum possible");
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
throw new VerificationException("Total transaction output value greater than possible");
|
throw new VerificationException("Total transaction output value greater than possible");
|
||||||
|
}
|
||||||
|
|
||||||
if (isCoinBase()) {
|
if (isCoinBase()) {
|
||||||
if (inputs.get(0).getScriptBytes().length < 2 || inputs.get(0).getScriptBytes().length > 100)
|
if (inputs.get(0).getScriptBytes().length < 2 || inputs.get(0).getScriptBytes().length > 100)
|
||||||
|
@ -44,7 +44,7 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
|||||||
|
|
||||||
// A transaction output has some value and a script used for authenticating that the redeemer is allowed to spend
|
// A transaction output has some value and a script used for authenticating that the redeemer is allowed to spend
|
||||||
// this output.
|
// this output.
|
||||||
private Coin value;
|
private long value;
|
||||||
private byte[] scriptBytes;
|
private byte[] scriptBytes;
|
||||||
|
|
||||||
// The script bytes are parsed and turned into a Script on demand.
|
// The script bytes are parsed and turned into a Script on demand.
|
||||||
@ -114,7 +114,7 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
|||||||
// SIGHASH_SINGLE signatures, so unfortunately we have to allow that here.
|
// SIGHASH_SINGLE signatures, so unfortunately we have to allow that here.
|
||||||
checkArgument(value.signum() >= 0 || value.equals(Coin.NEGATIVE_SATOSHI), "Negative values not allowed");
|
checkArgument(value.signum() >= 0 || value.equals(Coin.NEGATIVE_SATOSHI), "Negative values not allowed");
|
||||||
checkArgument(value.compareTo(NetworkParameters.MAX_MONEY) < 0, "Values larger than MAX_MONEY not allowed");
|
checkArgument(value.compareTo(NetworkParameters.MAX_MONEY) < 0, "Values larger than MAX_MONEY not allowed");
|
||||||
this.value = value;
|
this.value = value.value;
|
||||||
this.scriptBytes = scriptBytes;
|
this.scriptBytes = scriptBytes;
|
||||||
parentTransaction = parent;
|
parentTransaction = parent;
|
||||||
availableForSpending = true;
|
availableForSpending = true;
|
||||||
@ -137,11 +137,7 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void parseLite() throws ProtocolException {
|
protected void parseLite() throws ProtocolException {
|
||||||
// TODO: There is no reason to use Coin for values, they are always smaller than 21 million * COIN
|
value = readInt64();
|
||||||
// The only reason to use Coin would be to properly read values from the reference implementation, however
|
|
||||||
// the reference implementation uses signed 64-bit integers for its values as well (though it probably shouldn't)
|
|
||||||
long outputValue = readInt64();
|
|
||||||
value = Coin.valueOf(outputValue);
|
|
||||||
scriptLen = (int) readVarInt();
|
scriptLen = (int) readVarInt();
|
||||||
length = cursor - offset + scriptLen;
|
length = cursor - offset + scriptLen;
|
||||||
}
|
}
|
||||||
@ -154,7 +150,8 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
|||||||
@Override
|
@Override
|
||||||
protected void bitcoinSerializeToStream(OutputStream stream) throws IOException {
|
protected void bitcoinSerializeToStream(OutputStream stream) throws IOException {
|
||||||
checkNotNull(scriptBytes);
|
checkNotNull(scriptBytes);
|
||||||
Utils.int64ToByteStreamLE(getValue().value, stream);
|
maybeParse();
|
||||||
|
Utils.int64ToByteStreamLE(value, stream);
|
||||||
// TODO: Move script serialization into the Script class, where it belongs.
|
// TODO: Move script serialization into the Script class, where it belongs.
|
||||||
stream.write(new VarInt(scriptBytes.length).encode());
|
stream.write(new VarInt(scriptBytes.length).encode());
|
||||||
stream.write(scriptBytes);
|
stream.write(scriptBytes);
|
||||||
@ -166,7 +163,11 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
|||||||
*/
|
*/
|
||||||
public Coin getValue() {
|
public Coin getValue() {
|
||||||
maybeParse();
|
maybeParse();
|
||||||
return value;
|
try {
|
||||||
|
return Coin.valueOf(value);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
throw new IllegalStateException(e.getMessage(), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -175,7 +176,7 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
|||||||
public void setValue(Coin value) {
|
public void setValue(Coin value) {
|
||||||
checkNotNull(value);
|
checkNotNull(value);
|
||||||
unCache();
|
unCache();
|
||||||
this.value = value;
|
this.value = value.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getIndex() {
|
int getIndex() {
|
||||||
@ -309,7 +310,7 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
|||||||
try {
|
try {
|
||||||
Script script = getScriptPubKey();
|
Script script = getScriptPubKey();
|
||||||
StringBuilder buf = new StringBuilder("TxOut of ");
|
StringBuilder buf = new StringBuilder("TxOut of ");
|
||||||
buf.append(value.toFriendlyString());
|
buf.append(Coin.valueOf(value).toFriendlyString());
|
||||||
if (script.isSentToAddress() || script.isPayToScriptHash())
|
if (script.isSentToAddress() || script.isPayToScriptHash())
|
||||||
buf.append(" to ").append(script.getToAddress(params));
|
buf.append(" to ").append(script.getToAddress(params));
|
||||||
else if (script.isSentToRawPubKey())
|
else if (script.isSentToRawPubKey())
|
||||||
@ -361,7 +362,7 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
|||||||
|
|
||||||
/** Returns a copy of the output detached from its containing transaction, if need be. */
|
/** Returns a copy of the output detached from its containing transaction, if need be. */
|
||||||
public TransactionOutput duplicateDetached() {
|
public TransactionOutput duplicateDetached() {
|
||||||
return new TransactionOutput(params, null, value, org.spongycastle.util.Arrays.clone(scriptBytes));
|
return new TransactionOutput(params, null, Coin.valueOf(value), org.spongycastle.util.Arrays.clone(scriptBytes));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -372,7 +373,7 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
|||||||
TransactionOutput other = (TransactionOutput) o;
|
TransactionOutput other = (TransactionOutput) o;
|
||||||
|
|
||||||
if (!Arrays.equals(scriptBytes, other.scriptBytes)) return false;
|
if (!Arrays.equals(scriptBytes, other.scriptBytes)) return false;
|
||||||
if (value != null ? !value.equals(other.value) : other.value != null) return false;
|
if (value != other.value) return false;
|
||||||
if (parentTransaction != null && parentTransaction != other.parentTransaction) return false;
|
if (parentTransaction != null && parentTransaction != other.parentTransaction) return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -380,8 +381,7 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
int result = value != null ? value.hashCode() : 0;
|
int result = 31 * (int) value + (scriptBytes != null ? Arrays.hashCode(scriptBytes) : 0);
|
||||||
result = 31 * result + (scriptBytes != null ? Arrays.hashCode(scriptBytes) : 0);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user