mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-14 11:15:51 +00:00
Persist TransactionConfidence to protobuf
This commit is contained in:
parent
3d470ec3f2
commit
1c28bd3972
@ -53,6 +53,20 @@ message TransactionOutput {
|
|||||||
// if spent, the index of the transaction output of the transaction doing the spend
|
// if spent, the index of the transaction output of the transaction doing the spend
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message TransactionConfidence {
|
||||||
|
enum Type {
|
||||||
|
UNKNOWN = 0;
|
||||||
|
BUILDING = 1;
|
||||||
|
NOT_SEEN_IN_CHAIN = 2;
|
||||||
|
NOT_IN_BEST_CHAIN = 3;
|
||||||
|
OVERRIDDEN_BY_DOUBLE_SPEND = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
required Type type = 1;
|
||||||
|
optional int32 appeared_at_height = 2;
|
||||||
|
optional bytes overriding_transaction = 3;
|
||||||
|
}
|
||||||
|
|
||||||
message Transaction {
|
message Transaction {
|
||||||
/**
|
/**
|
||||||
* This is a bitfield oriented enum, with the following bits:
|
* This is a bitfield oriented enum, with the following bits:
|
||||||
@ -88,6 +102,8 @@ message Transaction {
|
|||||||
|
|
||||||
|
|
||||||
repeated bytes block_hash = 8;
|
repeated bytes block_hash = 8;
|
||||||
|
|
||||||
|
optional TransactionConfidence confidence = 9;
|
||||||
// Sha256Hash of block in block chain in which this transaction appears
|
// Sha256Hash of block in block chain in which this transaction appears
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -707,6 +707,11 @@ public class Transaction extends ChildMessage implements Serializable {
|
|||||||
return confidence;
|
return confidence;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean hasConfidence() {
|
||||||
|
return confidence != null && confidence.getConfidenceType() != TransactionConfidence.ConfidenceType.UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object other) {
|
public boolean equals(Object other) {
|
||||||
if (!(other instanceof Transaction)) return false;
|
if (!(other instanceof Transaction)) return false;
|
||||||
|
@ -95,7 +95,7 @@ public class TransactionConfidence implements Serializable {
|
|||||||
/** Describes the state of the transaction in general terms. Properties can be read to learn specifics. */
|
/** Describes the state of the transaction in general terms. Properties can be read to learn specifics. */
|
||||||
public enum ConfidenceType {
|
public enum ConfidenceType {
|
||||||
/** If BUILDING, then the transaction is included in the best chain and your confidence in it is increasing. */
|
/** If BUILDING, then the transaction is included in the best chain and your confidence in it is increasing. */
|
||||||
BUILDING,
|
BUILDING(1),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If NOT_SEEN_IN_CHAIN, then the transaction is pending and should be included shortly. You can estimate how
|
* If NOT_SEEN_IN_CHAIN, then the transaction is pending and should be included shortly. You can estimate how
|
||||||
@ -103,26 +103,47 @@ public class TransactionConfidence implements Serializable {
|
|||||||
* it, using {@link com.google.bitcoin.core.TransactionConfidence#numBroadcastPeers()}. Or if you saw it from
|
* it, using {@link com.google.bitcoin.core.TransactionConfidence#numBroadcastPeers()}. Or if you saw it from
|
||||||
* a trusted peer, you can assume it's valid and will get mined sooner or later as well.
|
* a trusted peer, you can assume it's valid and will get mined sooner or later as well.
|
||||||
*/
|
*/
|
||||||
NOT_SEEN_IN_CHAIN,
|
NOT_SEEN_IN_CHAIN(2),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If NOT_IN_BEST_CHAIN, then the transaction has been included in a block, but that block is on a fork. A
|
* If NOT_IN_BEST_CHAIN, then the transaction has been included in a block, but that block is on a fork. A
|
||||||
* transaction can change from BUILDING to NOT_IN_BEST_CHAIN and vice versa if a reorganization takes place,
|
* transaction can change from BUILDING to NOT_IN_BEST_CHAIN and vice versa if a reorganization takes place,
|
||||||
* due to a split in the consensus.
|
* due to a split in the consensus.
|
||||||
*/
|
*/
|
||||||
NOT_IN_BEST_CHAIN,
|
NOT_IN_BEST_CHAIN(3),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If OVERRIDDEN_BY_DOUBLE_SPEND, then it means the transaction won't confirm unless there is another re-org,
|
* If OVERRIDDEN_BY_DOUBLE_SPEND, then it means the transaction won't confirm unless there is another re-org,
|
||||||
* because some other transaction is spending one of its inputs. Such transactions should be alerted to the user
|
* because some other transaction is spending one of its inputs. Such transactions should be alerted to the user
|
||||||
* so they can take action, eg, suspending shipment of goods if they are a merchant.
|
* so they can take action, eg, suspending shipment of goods if they are a merchant.
|
||||||
*/
|
*/
|
||||||
OVERRIDDEN_BY_DOUBLE_SPEND,
|
OVERRIDDEN_BY_DOUBLE_SPEND(4),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If a transaction hasn't been broadcast yet, or there's no record of it, its confidence is UNKNOWN.
|
* If a transaction hasn't been broadcast yet, or there's no record of it, its confidence is UNKNOWN.
|
||||||
*/
|
*/
|
||||||
UNKNOWN
|
UNKNOWN(0);
|
||||||
|
|
||||||
|
private int value;
|
||||||
|
ConfidenceType(int value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ConfidenceType valueOf(int value) {
|
||||||
|
switch (value) {
|
||||||
|
case 0: return UNKNOWN;
|
||||||
|
case 1: return BUILDING;
|
||||||
|
case 2: return NOT_SEEN_IN_CHAIN;
|
||||||
|
case 3: return NOT_IN_BEST_CHAIN;
|
||||||
|
case 4: return OVERRIDDEN_BY_DOUBLE_SPEND;
|
||||||
|
default: return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -139,7 +160,7 @@ public class TransactionConfidence implements Serializable {
|
|||||||
private int appearedAtChainHeight = -1;
|
private int appearedAtChainHeight = -1;
|
||||||
private Transaction overridingTransaction;
|
private Transaction overridingTransaction;
|
||||||
|
|
||||||
TransactionConfidence(Transaction tx) {
|
public TransactionConfidence(Transaction tx) {
|
||||||
// Assume a default number of peers for our set.
|
// Assume a default number of peers for our set.
|
||||||
broadcastBy = new HashSet<PeerAddress>(10);
|
broadcastBy = new HashSet<PeerAddress>(10);
|
||||||
transaction = tx;
|
transaction = tx;
|
||||||
@ -311,7 +332,7 @@ public class TransactionConfidence implements Serializable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the transaction becomes newly dead, that is, we learn that one of its inputs has already been spent
|
* Called when the transaction becomes newly dead, that is, we learn that one of its inputs has already been spent
|
||||||
* in such a way that the double-spending transaction takes precence over this one. It will not become valid now
|
* in such a way that the double-spending transaction takes precedence over this one. It will not become valid now
|
||||||
* unless there is a re-org. Automatically sets the confidence type to OVERRIDDEN_BY_DOUBLE_SPEND.
|
* unless there is a re-org. Automatically sets the confidence type to OVERRIDDEN_BY_DOUBLE_SPEND.
|
||||||
*/
|
*/
|
||||||
public synchronized void setOverridingTransaction(Transaction overridingTransaction) {
|
public synchronized void setOverridingTransaction(Transaction overridingTransaction) {
|
||||||
|
@ -25,7 +25,6 @@ import java.io.*;
|
|||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
|
||||||
|
|
||||||
import static com.google.bitcoin.core.Utils.bitcoinValueToFriendlyString;
|
import static com.google.bitcoin.core.Utils.bitcoinValueToFriendlyString;
|
||||||
|
|
||||||
|
@ -20,11 +20,13 @@ import com.google.bitcoin.core.ECKey;
|
|||||||
import com.google.bitcoin.core.NetworkParameters;
|
import com.google.bitcoin.core.NetworkParameters;
|
||||||
import com.google.bitcoin.core.Sha256Hash;
|
import com.google.bitcoin.core.Sha256Hash;
|
||||||
import com.google.bitcoin.core.Transaction;
|
import com.google.bitcoin.core.Transaction;
|
||||||
|
import com.google.bitcoin.core.TransactionConfidence;
|
||||||
import com.google.bitcoin.core.TransactionInput;
|
import com.google.bitcoin.core.TransactionInput;
|
||||||
import com.google.bitcoin.core.TransactionOutPoint;
|
import com.google.bitcoin.core.TransactionOutPoint;
|
||||||
import com.google.bitcoin.core.TransactionOutput;
|
import com.google.bitcoin.core.TransactionOutput;
|
||||||
import com.google.bitcoin.core.Wallet;
|
import com.google.bitcoin.core.Wallet;
|
||||||
import com.google.bitcoin.core.WalletTransaction;
|
import com.google.bitcoin.core.WalletTransaction;
|
||||||
|
import com.google.bitcoin.core.TransactionConfidence.ConfidenceType;
|
||||||
import com.google.protobuf.ByteString;
|
import com.google.protobuf.ByteString;
|
||||||
import com.google.protobuf.TextFormat;
|
import com.google.protobuf.TextFormat;
|
||||||
|
|
||||||
@ -138,6 +140,22 @@ public class WalletProtobufSerializer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tx.hasConfidence()) {
|
||||||
|
TransactionConfidence confidence = tx.getConfidence();
|
||||||
|
Protos.TransactionConfidence.Builder confidenceBuilder =
|
||||||
|
Protos.TransactionConfidence.newBuilder();
|
||||||
|
|
||||||
|
confidenceBuilder.setType(Protos.TransactionConfidence.Type.valueOf(confidence.getConfidenceType().getValue()));
|
||||||
|
if (confidence.getConfidenceType() == ConfidenceType.BUILDING) {
|
||||||
|
confidenceBuilder.setAppearedAtHeight(confidence.getAppearedAtChainHeight());
|
||||||
|
}
|
||||||
|
if (confidence.getConfidenceType() == ConfidenceType.OVERRIDDEN_BY_DOUBLE_SPEND) {
|
||||||
|
confidenceBuilder.setOverridingTransaction(ByteString.copyFrom(confidence.getOverridingTransaction().getHash().getBytes()));
|
||||||
|
}
|
||||||
|
|
||||||
|
txBuilder.setConfidence(confidenceBuilder);
|
||||||
|
}
|
||||||
|
|
||||||
return txBuilder.build();
|
return txBuilder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,6 +266,20 @@ public class WalletProtobufSerializer {
|
|||||||
output.markAsSpent(spendingTx.getInputs().get(spendingIndex));
|
output.markAsSpent(spendingTx.getInputs().get(spendingIndex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(txProto.hasConfidence()) {
|
||||||
|
Protos.TransactionConfidence confidenceProto = txProto.getConfidence();
|
||||||
|
TransactionConfidence confidence = tx.getConfidence();
|
||||||
|
confidence.setConfidenceType(TransactionConfidence.ConfidenceType.valueOf(confidenceProto.getType().getNumber()));
|
||||||
|
if (confidenceProto.hasAppearedAtHeight()) {
|
||||||
|
assert confidence.getConfidenceType() == ConfidenceType.BUILDING;
|
||||||
|
confidence.setAppearedAtChainHeight(confidenceProto.getAppearedAtHeight());
|
||||||
|
}
|
||||||
|
if (confidenceProto.hasOverridingTransaction()) {
|
||||||
|
assert confidence.getConfidenceType() == ConfidenceType.OVERRIDDEN_BY_DOUBLE_SPEND;
|
||||||
|
confidence.setOverridingTransaction(txMap.get(confidenceProto.getOverridingTransaction()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new WalletTransaction(pool, tx);
|
return new WalletTransaction(pool, tx);
|
||||||
}
|
}
|
||||||
|
@ -1718,6 +1718,556 @@ public final class Protos {
|
|||||||
// @@protoc_insertion_point(class_scope:wallet.TransactionOutput)
|
// @@protoc_insertion_point(class_scope:wallet.TransactionOutput)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface TransactionConfidenceOrBuilder
|
||||||
|
extends com.google.protobuf.MessageOrBuilder {
|
||||||
|
|
||||||
|
// required .wallet.TransactionConfidence.Type type = 1;
|
||||||
|
boolean hasType();
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence.Type getType();
|
||||||
|
|
||||||
|
// optional int32 appeared_at_height = 2;
|
||||||
|
boolean hasAppearedAtHeight();
|
||||||
|
int getAppearedAtHeight();
|
||||||
|
|
||||||
|
// optional bytes overriding_transaction = 3;
|
||||||
|
boolean hasOverridingTransaction();
|
||||||
|
com.google.protobuf.ByteString getOverridingTransaction();
|
||||||
|
}
|
||||||
|
public static final class TransactionConfidence extends
|
||||||
|
com.google.protobuf.GeneratedMessage
|
||||||
|
implements TransactionConfidenceOrBuilder {
|
||||||
|
// Use TransactionConfidence.newBuilder() to construct.
|
||||||
|
private TransactionConfidence(Builder builder) {
|
||||||
|
super(builder);
|
||||||
|
}
|
||||||
|
private TransactionConfidence(boolean noInit) {}
|
||||||
|
|
||||||
|
private static final TransactionConfidence defaultInstance;
|
||||||
|
public static TransactionConfidence getDefaultInstance() {
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TransactionConfidence getDefaultInstanceForType() {
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final com.google.protobuf.Descriptors.Descriptor
|
||||||
|
getDescriptor() {
|
||||||
|
return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionConfidence_descriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
|
||||||
|
internalGetFieldAccessorTable() {
|
||||||
|
return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionConfidence_fieldAccessorTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum Type
|
||||||
|
implements com.google.protobuf.ProtocolMessageEnum {
|
||||||
|
UNKNOWN(0, 0),
|
||||||
|
BUILDING(1, 1),
|
||||||
|
NOT_SEEN_IN_CHAIN(2, 2),
|
||||||
|
NOT_IN_BEST_CHAIN(3, 3),
|
||||||
|
OVERRIDDEN_BY_DOUBLE_SPEND(4, 4),
|
||||||
|
;
|
||||||
|
|
||||||
|
public static final int UNKNOWN_VALUE = 0;
|
||||||
|
public static final int BUILDING_VALUE = 1;
|
||||||
|
public static final int NOT_SEEN_IN_CHAIN_VALUE = 2;
|
||||||
|
public static final int NOT_IN_BEST_CHAIN_VALUE = 3;
|
||||||
|
public static final int OVERRIDDEN_BY_DOUBLE_SPEND_VALUE = 4;
|
||||||
|
|
||||||
|
|
||||||
|
public final int getNumber() { return value; }
|
||||||
|
|
||||||
|
public static Type valueOf(int value) {
|
||||||
|
switch (value) {
|
||||||
|
case 0: return UNKNOWN;
|
||||||
|
case 1: return BUILDING;
|
||||||
|
case 2: return NOT_SEEN_IN_CHAIN;
|
||||||
|
case 3: return NOT_IN_BEST_CHAIN;
|
||||||
|
case 4: return OVERRIDDEN_BY_DOUBLE_SPEND;
|
||||||
|
default: return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static com.google.protobuf.Internal.EnumLiteMap<Type>
|
||||||
|
internalGetValueMap() {
|
||||||
|
return internalValueMap;
|
||||||
|
}
|
||||||
|
private static com.google.protobuf.Internal.EnumLiteMap<Type>
|
||||||
|
internalValueMap =
|
||||||
|
new com.google.protobuf.Internal.EnumLiteMap<Type>() {
|
||||||
|
public Type findValueByNumber(int number) {
|
||||||
|
return Type.valueOf(number);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public final com.google.protobuf.Descriptors.EnumValueDescriptor
|
||||||
|
getValueDescriptor() {
|
||||||
|
return getDescriptor().getValues().get(index);
|
||||||
|
}
|
||||||
|
public final com.google.protobuf.Descriptors.EnumDescriptor
|
||||||
|
getDescriptorForType() {
|
||||||
|
return getDescriptor();
|
||||||
|
}
|
||||||
|
public static final com.google.protobuf.Descriptors.EnumDescriptor
|
||||||
|
getDescriptor() {
|
||||||
|
return org.bitcoinj.wallet.Protos.TransactionConfidence.getDescriptor().getEnumTypes().get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final Type[] VALUES = {
|
||||||
|
UNKNOWN, BUILDING, NOT_SEEN_IN_CHAIN, NOT_IN_BEST_CHAIN, OVERRIDDEN_BY_DOUBLE_SPEND,
|
||||||
|
};
|
||||||
|
|
||||||
|
public static Type valueOf(
|
||||||
|
com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
|
||||||
|
if (desc.getType() != getDescriptor()) {
|
||||||
|
throw new java.lang.IllegalArgumentException(
|
||||||
|
"EnumValueDescriptor is not for this type.");
|
||||||
|
}
|
||||||
|
return VALUES[desc.getIndex()];
|
||||||
|
}
|
||||||
|
|
||||||
|
private final int index;
|
||||||
|
private final int value;
|
||||||
|
|
||||||
|
private Type(int index, int value) {
|
||||||
|
this.index = index;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @@protoc_insertion_point(enum_scope:wallet.TransactionConfidence.Type)
|
||||||
|
}
|
||||||
|
|
||||||
|
private int bitField0_;
|
||||||
|
// required .wallet.TransactionConfidence.Type type = 1;
|
||||||
|
public static final int TYPE_FIELD_NUMBER = 1;
|
||||||
|
private org.bitcoinj.wallet.Protos.TransactionConfidence.Type type_;
|
||||||
|
public boolean hasType() {
|
||||||
|
return ((bitField0_ & 0x00000001) == 0x00000001);
|
||||||
|
}
|
||||||
|
public org.bitcoinj.wallet.Protos.TransactionConfidence.Type getType() {
|
||||||
|
return type_;
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional int32 appeared_at_height = 2;
|
||||||
|
public static final int APPEARED_AT_HEIGHT_FIELD_NUMBER = 2;
|
||||||
|
private int appearedAtHeight_;
|
||||||
|
public boolean hasAppearedAtHeight() {
|
||||||
|
return ((bitField0_ & 0x00000002) == 0x00000002);
|
||||||
|
}
|
||||||
|
public int getAppearedAtHeight() {
|
||||||
|
return appearedAtHeight_;
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional bytes overriding_transaction = 3;
|
||||||
|
public static final int OVERRIDING_TRANSACTION_FIELD_NUMBER = 3;
|
||||||
|
private com.google.protobuf.ByteString overridingTransaction_;
|
||||||
|
public boolean hasOverridingTransaction() {
|
||||||
|
return ((bitField0_ & 0x00000004) == 0x00000004);
|
||||||
|
}
|
||||||
|
public com.google.protobuf.ByteString getOverridingTransaction() {
|
||||||
|
return overridingTransaction_;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initFields() {
|
||||||
|
type_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Type.UNKNOWN;
|
||||||
|
appearedAtHeight_ = 0;
|
||||||
|
overridingTransaction_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
|
}
|
||||||
|
private byte memoizedIsInitialized = -1;
|
||||||
|
public final boolean isInitialized() {
|
||||||
|
byte isInitialized = memoizedIsInitialized;
|
||||||
|
if (isInitialized != -1) return isInitialized == 1;
|
||||||
|
|
||||||
|
if (!hasType()) {
|
||||||
|
memoizedIsInitialized = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
memoizedIsInitialized = 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeTo(com.google.protobuf.CodedOutputStream output)
|
||||||
|
throws java.io.IOException {
|
||||||
|
getSerializedSize();
|
||||||
|
if (((bitField0_ & 0x00000001) == 0x00000001)) {
|
||||||
|
output.writeEnum(1, type_.getNumber());
|
||||||
|
}
|
||||||
|
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
||||||
|
output.writeInt32(2, appearedAtHeight_);
|
||||||
|
}
|
||||||
|
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||||
|
output.writeBytes(3, overridingTransaction_);
|
||||||
|
}
|
||||||
|
getUnknownFields().writeTo(output);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int memoizedSerializedSize = -1;
|
||||||
|
public int getSerializedSize() {
|
||||||
|
int size = memoizedSerializedSize;
|
||||||
|
if (size != -1) return size;
|
||||||
|
|
||||||
|
size = 0;
|
||||||
|
if (((bitField0_ & 0x00000001) == 0x00000001)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeEnumSize(1, type_.getNumber());
|
||||||
|
}
|
||||||
|
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeInt32Size(2, appearedAtHeight_);
|
||||||
|
}
|
||||||
|
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeBytesSize(3, overridingTransaction_);
|
||||||
|
}
|
||||||
|
size += getUnknownFields().getSerializedSize();
|
||||||
|
memoizedSerializedSize = size;
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 0L;
|
||||||
|
@java.lang.Override
|
||||||
|
protected java.lang.Object writeReplace()
|
||||||
|
throws java.io.ObjectStreamException {
|
||||||
|
return super.writeReplace();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
|
||||||
|
com.google.protobuf.ByteString data)
|
||||||
|
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||||
|
return newBuilder().mergeFrom(data).buildParsed();
|
||||||
|
}
|
||||||
|
public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
|
||||||
|
com.google.protobuf.ByteString data,
|
||||||
|
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||||
|
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||||
|
return newBuilder().mergeFrom(data, extensionRegistry)
|
||||||
|
.buildParsed();
|
||||||
|
}
|
||||||
|
public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(byte[] data)
|
||||||
|
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||||
|
return newBuilder().mergeFrom(data).buildParsed();
|
||||||
|
}
|
||||||
|
public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
|
||||||
|
byte[] data,
|
||||||
|
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||||
|
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||||
|
return newBuilder().mergeFrom(data, extensionRegistry)
|
||||||
|
.buildParsed();
|
||||||
|
}
|
||||||
|
public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(java.io.InputStream input)
|
||||||
|
throws java.io.IOException {
|
||||||
|
return newBuilder().mergeFrom(input).buildParsed();
|
||||||
|
}
|
||||||
|
public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
|
||||||
|
java.io.InputStream input,
|
||||||
|
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||||
|
throws java.io.IOException {
|
||||||
|
return newBuilder().mergeFrom(input, extensionRegistry)
|
||||||
|
.buildParsed();
|
||||||
|
}
|
||||||
|
public static org.bitcoinj.wallet.Protos.TransactionConfidence parseDelimitedFrom(java.io.InputStream input)
|
||||||
|
throws java.io.IOException {
|
||||||
|
Builder builder = newBuilder();
|
||||||
|
if (builder.mergeDelimitedFrom(input)) {
|
||||||
|
return builder.buildParsed();
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static org.bitcoinj.wallet.Protos.TransactionConfidence parseDelimitedFrom(
|
||||||
|
java.io.InputStream input,
|
||||||
|
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||||
|
throws java.io.IOException {
|
||||||
|
Builder builder = newBuilder();
|
||||||
|
if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
|
||||||
|
return builder.buildParsed();
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
|
||||||
|
com.google.protobuf.CodedInputStream input)
|
||||||
|
throws java.io.IOException {
|
||||||
|
return newBuilder().mergeFrom(input).buildParsed();
|
||||||
|
}
|
||||||
|
public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
|
||||||
|
com.google.protobuf.CodedInputStream input,
|
||||||
|
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||||
|
throws java.io.IOException {
|
||||||
|
return newBuilder().mergeFrom(input, extensionRegistry)
|
||||||
|
.buildParsed();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Builder newBuilder() { return Builder.create(); }
|
||||||
|
public Builder newBuilderForType() { return newBuilder(); }
|
||||||
|
public static Builder newBuilder(org.bitcoinj.wallet.Protos.TransactionConfidence prototype) {
|
||||||
|
return newBuilder().mergeFrom(prototype);
|
||||||
|
}
|
||||||
|
public Builder toBuilder() { return newBuilder(this); }
|
||||||
|
|
||||||
|
@java.lang.Override
|
||||||
|
protected Builder newBuilderForType(
|
||||||
|
com.google.protobuf.GeneratedMessage.BuilderParent parent) {
|
||||||
|
Builder builder = new Builder(parent);
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
public static final class Builder extends
|
||||||
|
com.google.protobuf.GeneratedMessage.Builder<Builder>
|
||||||
|
implements org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder {
|
||||||
|
public static final com.google.protobuf.Descriptors.Descriptor
|
||||||
|
getDescriptor() {
|
||||||
|
return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionConfidence_descriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
|
||||||
|
internalGetFieldAccessorTable() {
|
||||||
|
return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionConfidence_fieldAccessorTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Construct using org.bitcoinj.wallet.Protos.TransactionConfidence.newBuilder()
|
||||||
|
private Builder() {
|
||||||
|
maybeForceBuilderInitialization();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Builder(BuilderParent parent) {
|
||||||
|
super(parent);
|
||||||
|
maybeForceBuilderInitialization();
|
||||||
|
}
|
||||||
|
private void maybeForceBuilderInitialization() {
|
||||||
|
if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private static Builder create() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder clear() {
|
||||||
|
super.clear();
|
||||||
|
type_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Type.UNKNOWN;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000001);
|
||||||
|
appearedAtHeight_ = 0;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000002);
|
||||||
|
overridingTransaction_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000004);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder clone() {
|
||||||
|
return create().mergeFrom(buildPartial());
|
||||||
|
}
|
||||||
|
|
||||||
|
public com.google.protobuf.Descriptors.Descriptor
|
||||||
|
getDescriptorForType() {
|
||||||
|
return org.bitcoinj.wallet.Protos.TransactionConfidence.getDescriptor();
|
||||||
|
}
|
||||||
|
|
||||||
|
public org.bitcoinj.wallet.Protos.TransactionConfidence getDefaultInstanceForType() {
|
||||||
|
return org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
public org.bitcoinj.wallet.Protos.TransactionConfidence build() {
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence result = buildPartial();
|
||||||
|
if (!result.isInitialized()) {
|
||||||
|
throw newUninitializedMessageException(result);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private org.bitcoinj.wallet.Protos.TransactionConfidence buildParsed()
|
||||||
|
throws com.google.protobuf.InvalidProtocolBufferException {
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence result = buildPartial();
|
||||||
|
if (!result.isInitialized()) {
|
||||||
|
throw newUninitializedMessageException(
|
||||||
|
result).asInvalidProtocolBufferException();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public org.bitcoinj.wallet.Protos.TransactionConfidence buildPartial() {
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence result = new org.bitcoinj.wallet.Protos.TransactionConfidence(this);
|
||||||
|
int from_bitField0_ = bitField0_;
|
||||||
|
int to_bitField0_ = 0;
|
||||||
|
if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
|
||||||
|
to_bitField0_ |= 0x00000001;
|
||||||
|
}
|
||||||
|
result.type_ = type_;
|
||||||
|
if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
|
||||||
|
to_bitField0_ |= 0x00000002;
|
||||||
|
}
|
||||||
|
result.appearedAtHeight_ = appearedAtHeight_;
|
||||||
|
if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
|
||||||
|
to_bitField0_ |= 0x00000004;
|
||||||
|
}
|
||||||
|
result.overridingTransaction_ = overridingTransaction_;
|
||||||
|
result.bitField0_ = to_bitField0_;
|
||||||
|
onBuilt();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder mergeFrom(com.google.protobuf.Message other) {
|
||||||
|
if (other instanceof org.bitcoinj.wallet.Protos.TransactionConfidence) {
|
||||||
|
return mergeFrom((org.bitcoinj.wallet.Protos.TransactionConfidence)other);
|
||||||
|
} else {
|
||||||
|
super.mergeFrom(other);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder mergeFrom(org.bitcoinj.wallet.Protos.TransactionConfidence other) {
|
||||||
|
if (other == org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance()) return this;
|
||||||
|
if (other.hasType()) {
|
||||||
|
setType(other.getType());
|
||||||
|
}
|
||||||
|
if (other.hasAppearedAtHeight()) {
|
||||||
|
setAppearedAtHeight(other.getAppearedAtHeight());
|
||||||
|
}
|
||||||
|
if (other.hasOverridingTransaction()) {
|
||||||
|
setOverridingTransaction(other.getOverridingTransaction());
|
||||||
|
}
|
||||||
|
this.mergeUnknownFields(other.getUnknownFields());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final boolean isInitialized() {
|
||||||
|
if (!hasType()) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder mergeFrom(
|
||||||
|
com.google.protobuf.CodedInputStream input,
|
||||||
|
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
|
||||||
|
throws java.io.IOException {
|
||||||
|
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
|
||||||
|
com.google.protobuf.UnknownFieldSet.newBuilder(
|
||||||
|
this.getUnknownFields());
|
||||||
|
while (true) {
|
||||||
|
int tag = input.readTag();
|
||||||
|
switch (tag) {
|
||||||
|
case 0:
|
||||||
|
this.setUnknownFields(unknownFields.build());
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
default: {
|
||||||
|
if (!parseUnknownField(input, unknownFields,
|
||||||
|
extensionRegistry, tag)) {
|
||||||
|
this.setUnknownFields(unknownFields.build());
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 8: {
|
||||||
|
int rawValue = input.readEnum();
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence.Type value = org.bitcoinj.wallet.Protos.TransactionConfidence.Type.valueOf(rawValue);
|
||||||
|
if (value == null) {
|
||||||
|
unknownFields.mergeVarintField(1, rawValue);
|
||||||
|
} else {
|
||||||
|
bitField0_ |= 0x00000001;
|
||||||
|
type_ = value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 16: {
|
||||||
|
bitField0_ |= 0x00000002;
|
||||||
|
appearedAtHeight_ = input.readInt32();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 26: {
|
||||||
|
bitField0_ |= 0x00000004;
|
||||||
|
overridingTransaction_ = input.readBytes();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int bitField0_;
|
||||||
|
|
||||||
|
// required .wallet.TransactionConfidence.Type type = 1;
|
||||||
|
private org.bitcoinj.wallet.Protos.TransactionConfidence.Type type_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Type.UNKNOWN;
|
||||||
|
public boolean hasType() {
|
||||||
|
return ((bitField0_ & 0x00000001) == 0x00000001);
|
||||||
|
}
|
||||||
|
public org.bitcoinj.wallet.Protos.TransactionConfidence.Type getType() {
|
||||||
|
return type_;
|
||||||
|
}
|
||||||
|
public Builder setType(org.bitcoinj.wallet.Protos.TransactionConfidence.Type value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
bitField0_ |= 0x00000001;
|
||||||
|
type_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public Builder clearType() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000001);
|
||||||
|
type_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Type.UNKNOWN;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional int32 appeared_at_height = 2;
|
||||||
|
private int appearedAtHeight_ ;
|
||||||
|
public boolean hasAppearedAtHeight() {
|
||||||
|
return ((bitField0_ & 0x00000002) == 0x00000002);
|
||||||
|
}
|
||||||
|
public int getAppearedAtHeight() {
|
||||||
|
return appearedAtHeight_;
|
||||||
|
}
|
||||||
|
public Builder setAppearedAtHeight(int value) {
|
||||||
|
bitField0_ |= 0x00000002;
|
||||||
|
appearedAtHeight_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public Builder clearAppearedAtHeight() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000002);
|
||||||
|
appearedAtHeight_ = 0;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// optional bytes overriding_transaction = 3;
|
||||||
|
private com.google.protobuf.ByteString overridingTransaction_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
|
public boolean hasOverridingTransaction() {
|
||||||
|
return ((bitField0_ & 0x00000004) == 0x00000004);
|
||||||
|
}
|
||||||
|
public com.google.protobuf.ByteString getOverridingTransaction() {
|
||||||
|
return overridingTransaction_;
|
||||||
|
}
|
||||||
|
public Builder setOverridingTransaction(com.google.protobuf.ByteString value) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
bitField0_ |= 0x00000004;
|
||||||
|
overridingTransaction_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public Builder clearOverridingTransaction() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000004);
|
||||||
|
overridingTransaction_ = getDefaultInstance().getOverridingTransaction();
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @@protoc_insertion_point(builder_scope:wallet.TransactionConfidence)
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
defaultInstance = new TransactionConfidence(true);
|
||||||
|
defaultInstance.initFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
// @@protoc_insertion_point(class_scope:wallet.TransactionConfidence)
|
||||||
|
}
|
||||||
|
|
||||||
public interface TransactionOrBuilder
|
public interface TransactionOrBuilder
|
||||||
extends com.google.protobuf.MessageOrBuilder {
|
extends com.google.protobuf.MessageOrBuilder {
|
||||||
|
|
||||||
@ -1765,6 +2315,11 @@ public final class Protos {
|
|||||||
java.util.List<com.google.protobuf.ByteString> getBlockHashList();
|
java.util.List<com.google.protobuf.ByteString> getBlockHashList();
|
||||||
int getBlockHashCount();
|
int getBlockHashCount();
|
||||||
com.google.protobuf.ByteString getBlockHash(int index);
|
com.google.protobuf.ByteString getBlockHash(int index);
|
||||||
|
|
||||||
|
// optional .wallet.TransactionConfidence confidence = 9;
|
||||||
|
boolean hasConfidence();
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence getConfidence();
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder getConfidenceOrBuilder();
|
||||||
}
|
}
|
||||||
public static final class Transaction extends
|
public static final class Transaction extends
|
||||||
com.google.protobuf.GeneratedMessage
|
com.google.protobuf.GeneratedMessage
|
||||||
@ -1982,6 +2537,19 @@ public final class Protos {
|
|||||||
return blockHash_.get(index);
|
return blockHash_.get(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional .wallet.TransactionConfidence confidence = 9;
|
||||||
|
public static final int CONFIDENCE_FIELD_NUMBER = 9;
|
||||||
|
private org.bitcoinj.wallet.Protos.TransactionConfidence confidence_;
|
||||||
|
public boolean hasConfidence() {
|
||||||
|
return ((bitField0_ & 0x00000020) == 0x00000020);
|
||||||
|
}
|
||||||
|
public org.bitcoinj.wallet.Protos.TransactionConfidence getConfidence() {
|
||||||
|
return confidence_;
|
||||||
|
}
|
||||||
|
public org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder getConfidenceOrBuilder() {
|
||||||
|
return confidence_;
|
||||||
|
}
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
version_ = 0;
|
version_ = 0;
|
||||||
hash_ = com.google.protobuf.ByteString.EMPTY;
|
hash_ = com.google.protobuf.ByteString.EMPTY;
|
||||||
@ -1991,6 +2559,7 @@ public final class Protos {
|
|||||||
transactionInput_ = java.util.Collections.emptyList();
|
transactionInput_ = java.util.Collections.emptyList();
|
||||||
transactionOutput_ = java.util.Collections.emptyList();
|
transactionOutput_ = java.util.Collections.emptyList();
|
||||||
blockHash_ = java.util.Collections.emptyList();;
|
blockHash_ = java.util.Collections.emptyList();;
|
||||||
|
confidence_ = org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance();
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
@ -2021,6 +2590,12 @@ public final class Protos {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (hasConfidence()) {
|
||||||
|
if (!getConfidence().isInitialized()) {
|
||||||
|
memoizedIsInitialized = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
memoizedIsInitialized = 1;
|
memoizedIsInitialized = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2052,6 +2627,9 @@ public final class Protos {
|
|||||||
for (int i = 0; i < blockHash_.size(); i++) {
|
for (int i = 0; i < blockHash_.size(); i++) {
|
||||||
output.writeBytes(8, blockHash_.get(i));
|
output.writeBytes(8, blockHash_.get(i));
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000020) == 0x00000020)) {
|
||||||
|
output.writeMessage(9, confidence_);
|
||||||
|
}
|
||||||
getUnknownFields().writeTo(output);
|
getUnknownFields().writeTo(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2098,6 +2676,10 @@ public final class Protos {
|
|||||||
size += dataSize;
|
size += dataSize;
|
||||||
size += 1 * getBlockHashList().size();
|
size += 1 * getBlockHashList().size();
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000020) == 0x00000020)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeMessageSize(9, confidence_);
|
||||||
|
}
|
||||||
size += getUnknownFields().getSerializedSize();
|
size += getUnknownFields().getSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
@ -2216,6 +2798,7 @@ public final class Protos {
|
|||||||
if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
|
if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
|
||||||
getTransactionInputFieldBuilder();
|
getTransactionInputFieldBuilder();
|
||||||
getTransactionOutputFieldBuilder();
|
getTransactionOutputFieldBuilder();
|
||||||
|
getConfidenceFieldBuilder();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private static Builder create() {
|
private static Builder create() {
|
||||||
@ -2248,6 +2831,12 @@ public final class Protos {
|
|||||||
}
|
}
|
||||||
blockHash_ = java.util.Collections.emptyList();;
|
blockHash_ = java.util.Collections.emptyList();;
|
||||||
bitField0_ = (bitField0_ & ~0x00000080);
|
bitField0_ = (bitField0_ & ~0x00000080);
|
||||||
|
if (confidenceBuilder_ == null) {
|
||||||
|
confidence_ = org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance();
|
||||||
|
} else {
|
||||||
|
confidenceBuilder_.clear();
|
||||||
|
}
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000100);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2329,6 +2918,14 @@ public final class Protos {
|
|||||||
bitField0_ = (bitField0_ & ~0x00000080);
|
bitField0_ = (bitField0_ & ~0x00000080);
|
||||||
}
|
}
|
||||||
result.blockHash_ = blockHash_;
|
result.blockHash_ = blockHash_;
|
||||||
|
if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
|
||||||
|
to_bitField0_ |= 0x00000020;
|
||||||
|
}
|
||||||
|
if (confidenceBuilder_ == null) {
|
||||||
|
result.confidence_ = confidence_;
|
||||||
|
} else {
|
||||||
|
result.confidence_ = confidenceBuilder_.build();
|
||||||
|
}
|
||||||
result.bitField0_ = to_bitField0_;
|
result.bitField0_ = to_bitField0_;
|
||||||
onBuilt();
|
onBuilt();
|
||||||
return result;
|
return result;
|
||||||
@ -2422,6 +3019,9 @@ public final class Protos {
|
|||||||
}
|
}
|
||||||
onChanged();
|
onChanged();
|
||||||
}
|
}
|
||||||
|
if (other.hasConfidence()) {
|
||||||
|
mergeConfidence(other.getConfidence());
|
||||||
|
}
|
||||||
this.mergeUnknownFields(other.getUnknownFields());
|
this.mergeUnknownFields(other.getUnknownFields());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -2451,6 +3051,12 @@ public final class Protos {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (hasConfidence()) {
|
||||||
|
if (!getConfidence().isInitialized()) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2525,6 +3131,15 @@ public final class Protos {
|
|||||||
blockHash_.add(input.readBytes());
|
blockHash_.add(input.readBytes());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 74: {
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence.Builder subBuilder = org.bitcoinj.wallet.Protos.TransactionConfidence.newBuilder();
|
||||||
|
if (hasConfidence()) {
|
||||||
|
subBuilder.mergeFrom(getConfidence());
|
||||||
|
}
|
||||||
|
input.readMessage(subBuilder, extensionRegistry);
|
||||||
|
setConfidence(subBuilder.buildPartial());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3065,6 +3680,96 @@ public final class Protos {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional .wallet.TransactionConfidence confidence = 9;
|
||||||
|
private org.bitcoinj.wallet.Protos.TransactionConfidence confidence_ = org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance();
|
||||||
|
private com.google.protobuf.SingleFieldBuilder<
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence, org.bitcoinj.wallet.Protos.TransactionConfidence.Builder, org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder> confidenceBuilder_;
|
||||||
|
public boolean hasConfidence() {
|
||||||
|
return ((bitField0_ & 0x00000100) == 0x00000100);
|
||||||
|
}
|
||||||
|
public org.bitcoinj.wallet.Protos.TransactionConfidence getConfidence() {
|
||||||
|
if (confidenceBuilder_ == null) {
|
||||||
|
return confidence_;
|
||||||
|
} else {
|
||||||
|
return confidenceBuilder_.getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public Builder setConfidence(org.bitcoinj.wallet.Protos.TransactionConfidence value) {
|
||||||
|
if (confidenceBuilder_ == null) {
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
confidence_ = value;
|
||||||
|
onChanged();
|
||||||
|
} else {
|
||||||
|
confidenceBuilder_.setMessage(value);
|
||||||
|
}
|
||||||
|
bitField0_ |= 0x00000100;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public Builder setConfidence(
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence.Builder builderForValue) {
|
||||||
|
if (confidenceBuilder_ == null) {
|
||||||
|
confidence_ = builderForValue.build();
|
||||||
|
onChanged();
|
||||||
|
} else {
|
||||||
|
confidenceBuilder_.setMessage(builderForValue.build());
|
||||||
|
}
|
||||||
|
bitField0_ |= 0x00000100;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public Builder mergeConfidence(org.bitcoinj.wallet.Protos.TransactionConfidence value) {
|
||||||
|
if (confidenceBuilder_ == null) {
|
||||||
|
if (((bitField0_ & 0x00000100) == 0x00000100) &&
|
||||||
|
confidence_ != org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance()) {
|
||||||
|
confidence_ =
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence.newBuilder(confidence_).mergeFrom(value).buildPartial();
|
||||||
|
} else {
|
||||||
|
confidence_ = value;
|
||||||
|
}
|
||||||
|
onChanged();
|
||||||
|
} else {
|
||||||
|
confidenceBuilder_.mergeFrom(value);
|
||||||
|
}
|
||||||
|
bitField0_ |= 0x00000100;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public Builder clearConfidence() {
|
||||||
|
if (confidenceBuilder_ == null) {
|
||||||
|
confidence_ = org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance();
|
||||||
|
onChanged();
|
||||||
|
} else {
|
||||||
|
confidenceBuilder_.clear();
|
||||||
|
}
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000100);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public org.bitcoinj.wallet.Protos.TransactionConfidence.Builder getConfidenceBuilder() {
|
||||||
|
bitField0_ |= 0x00000100;
|
||||||
|
onChanged();
|
||||||
|
return getConfidenceFieldBuilder().getBuilder();
|
||||||
|
}
|
||||||
|
public org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder getConfidenceOrBuilder() {
|
||||||
|
if (confidenceBuilder_ != null) {
|
||||||
|
return confidenceBuilder_.getMessageOrBuilder();
|
||||||
|
} else {
|
||||||
|
return confidence_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private com.google.protobuf.SingleFieldBuilder<
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence, org.bitcoinj.wallet.Protos.TransactionConfidence.Builder, org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder>
|
||||||
|
getConfidenceFieldBuilder() {
|
||||||
|
if (confidenceBuilder_ == null) {
|
||||||
|
confidenceBuilder_ = new com.google.protobuf.SingleFieldBuilder<
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence, org.bitcoinj.wallet.Protos.TransactionConfidence.Builder, org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder>(
|
||||||
|
confidence_,
|
||||||
|
getParentForChildren(),
|
||||||
|
isClean());
|
||||||
|
confidence_ = null;
|
||||||
|
}
|
||||||
|
return confidenceBuilder_;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(builder_scope:wallet.Transaction)
|
// @@protoc_insertion_point(builder_scope:wallet.Transaction)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4905,6 +5610,11 @@ public final class Protos {
|
|||||||
private static
|
private static
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable
|
||||||
internal_static_wallet_TransactionOutput_fieldAccessorTable;
|
internal_static_wallet_TransactionOutput_fieldAccessorTable;
|
||||||
|
private static com.google.protobuf.Descriptors.Descriptor
|
||||||
|
internal_static_wallet_TransactionConfidence_descriptor;
|
||||||
|
private static
|
||||||
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable
|
||||||
|
internal_static_wallet_TransactionConfidence_fieldAccessorTable;
|
||||||
private static com.google.protobuf.Descriptors.Descriptor
|
private static com.google.protobuf.Descriptors.Descriptor
|
||||||
internal_static_wallet_Transaction_descriptor;
|
internal_static_wallet_Transaction_descriptor;
|
||||||
private static
|
private static
|
||||||
@ -4939,22 +5649,29 @@ public final class Protos {
|
|||||||
"(\r\"\177\n\021TransactionOutput\022\r\n\005value\030\001 \002(\003\022\024" +
|
"(\r\"\177\n\021TransactionOutput\022\r\n\005value\030\001 \002(\003\022\024" +
|
||||||
"\n\014script_bytes\030\002 \002(\014\022!\n\031spent_by_transac" +
|
"\n\014script_bytes\030\002 \002(\014\022!\n\031spent_by_transac" +
|
||||||
"tion_hash\030\003 \001(\014\022\"\n\032spent_by_transaction_",
|
"tion_hash\030\003 \001(\014\022\"\n\032spent_by_transaction_",
|
||||||
"index\030\004 \001(\005\"\326\002\n\013Transaction\022\017\n\007version\030\001" +
|
"index\030\004 \001(\005\"\366\001\n\025TransactionConfidence\0220\n" +
|
||||||
" \002(\005\022\014\n\004hash\030\002 \002(\014\022&\n\004pool\030\003 \002(\0162\030.walle" +
|
"\004type\030\001 \002(\0162\".wallet.TransactionConfiden" +
|
||||||
"t.Transaction.Pool\022\021\n\tlock_time\030\004 \001(\r\022\022\n" +
|
"ce.Type\022\032\n\022appeared_at_height\030\002 \001(\005\022\036\n\026o" +
|
||||||
"\nupdated_at\030\005 \001(\003\0223\n\021transaction_input\030\006" +
|
"verriding_transaction\030\003 \001(\014\"o\n\004Type\022\013\n\007U" +
|
||||||
" \003(\0132\030.wallet.TransactionInput\0225\n\022transa" +
|
"NKNOWN\020\000\022\014\n\010BUILDING\020\001\022\025\n\021NOT_SEEN_IN_CH" +
|
||||||
"ction_output\030\007 \003(\0132\031.wallet.TransactionO" +
|
"AIN\020\002\022\025\n\021NOT_IN_BEST_CHAIN\020\003\022\036\n\032OVERRIDD" +
|
||||||
"utput\022\022\n\nblock_hash\030\010 \003(\014\"Y\n\004Pool\022\013\n\007UNS" +
|
"EN_BY_DOUBLE_SPEND\020\004\"\211\003\n\013Transaction\022\017\n\007" +
|
||||||
"PENT\020\004\022\t\n\005SPENT\020\005\022\014\n\010INACTIVE\020\002\022\010\n\004DEAD\020" +
|
"version\030\001 \002(\005\022\014\n\004hash\030\002 \002(\014\022&\n\004pool\030\003 \002(" +
|
||||||
"\n\022\013\n\007PENDING\020\020\022\024\n\020PENDING_INACTIVE\020\022\"8\n\t" +
|
"\0162\030.wallet.Transaction.Pool\022\021\n\tlock_time" +
|
||||||
"Extension\022\n\n\002id\030\001 \002(\t\022\014\n\004data\030\002 \002(\014\022\021\n\tm",
|
"\030\004 \001(\r\022\022\n\nupdated_at\030\005 \001(\003\0223\n\021transactio",
|
||||||
"andatory\030\003 \002(\010\"\254\001\n\006Wallet\022\032\n\022network_ide" +
|
"n_input\030\006 \003(\0132\030.wallet.TransactionInput\022" +
|
||||||
"ntifier\030\001 \002(\t\022\034\n\024last_seen_block_hash\030\002 " +
|
"5\n\022transaction_output\030\007 \003(\0132\031.wallet.Tra" +
|
||||||
"\001(\014\022\030\n\003key\030\003 \003(\0132\013.wallet.Key\022(\n\013transac" +
|
"nsactionOutput\022\022\n\nblock_hash\030\010 \003(\014\0221\n\nco" +
|
||||||
"tion\030\004 \003(\0132\023.wallet.Transaction\022$\n\texten" +
|
"nfidence\030\t \001(\0132\035.wallet.TransactionConfi" +
|
||||||
"sion\030\n \003(\0132\021.wallet.ExtensionB\035\n\023org.bit" +
|
"dence\"Y\n\004Pool\022\013\n\007UNSPENT\020\004\022\t\n\005SPENT\020\005\022\014\n" +
|
||||||
"coinj.walletB\006Protos"
|
"\010INACTIVE\020\002\022\010\n\004DEAD\020\n\022\013\n\007PENDING\020\020\022\024\n\020PE" +
|
||||||
|
"NDING_INACTIVE\020\022\"8\n\tExtension\022\n\n\002id\030\001 \002(" +
|
||||||
|
"\t\022\014\n\004data\030\002 \002(\014\022\021\n\tmandatory\030\003 \002(\010\"\254\001\n\006W" +
|
||||||
|
"allet\022\032\n\022network_identifier\030\001 \002(\t\022\034\n\024las" +
|
||||||
|
"t_seen_block_hash\030\002 \001(\014\022\030\n\003key\030\003 \003(\0132\013.w",
|
||||||
|
"allet.Key\022(\n\013transaction\030\004 \003(\0132\023.wallet." +
|
||||||
|
"Transaction\022$\n\textension\030\n \003(\0132\021.wallet." +
|
||||||
|
"ExtensionB\035\n\023org.bitcoinj.walletB\006Protos"
|
||||||
};
|
};
|
||||||
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
||||||
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
||||||
@ -4985,16 +5702,24 @@ public final class Protos {
|
|||||||
new java.lang.String[] { "Value", "ScriptBytes", "SpentByTransactionHash", "SpentByTransactionIndex", },
|
new java.lang.String[] { "Value", "ScriptBytes", "SpentByTransactionHash", "SpentByTransactionIndex", },
|
||||||
org.bitcoinj.wallet.Protos.TransactionOutput.class,
|
org.bitcoinj.wallet.Protos.TransactionOutput.class,
|
||||||
org.bitcoinj.wallet.Protos.TransactionOutput.Builder.class);
|
org.bitcoinj.wallet.Protos.TransactionOutput.Builder.class);
|
||||||
internal_static_wallet_Transaction_descriptor =
|
internal_static_wallet_TransactionConfidence_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(3);
|
getDescriptor().getMessageTypes().get(3);
|
||||||
|
internal_static_wallet_TransactionConfidence_fieldAccessorTable = new
|
||||||
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
|
internal_static_wallet_TransactionConfidence_descriptor,
|
||||||
|
new java.lang.String[] { "Type", "AppearedAtHeight", "OverridingTransaction", },
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence.class,
|
||||||
|
org.bitcoinj.wallet.Protos.TransactionConfidence.Builder.class);
|
||||||
|
internal_static_wallet_Transaction_descriptor =
|
||||||
|
getDescriptor().getMessageTypes().get(4);
|
||||||
internal_static_wallet_Transaction_fieldAccessorTable = new
|
internal_static_wallet_Transaction_fieldAccessorTable = new
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_wallet_Transaction_descriptor,
|
internal_static_wallet_Transaction_descriptor,
|
||||||
new java.lang.String[] { "Version", "Hash", "Pool", "LockTime", "UpdatedAt", "TransactionInput", "TransactionOutput", "BlockHash", },
|
new java.lang.String[] { "Version", "Hash", "Pool", "LockTime", "UpdatedAt", "TransactionInput", "TransactionOutput", "BlockHash", "Confidence", },
|
||||||
org.bitcoinj.wallet.Protos.Transaction.class,
|
org.bitcoinj.wallet.Protos.Transaction.class,
|
||||||
org.bitcoinj.wallet.Protos.Transaction.Builder.class);
|
org.bitcoinj.wallet.Protos.Transaction.Builder.class);
|
||||||
internal_static_wallet_Extension_descriptor =
|
internal_static_wallet_Extension_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(4);
|
getDescriptor().getMessageTypes().get(5);
|
||||||
internal_static_wallet_Extension_fieldAccessorTable = new
|
internal_static_wallet_Extension_fieldAccessorTable = new
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_wallet_Extension_descriptor,
|
internal_static_wallet_Extension_descriptor,
|
||||||
@ -5002,7 +5727,7 @@ public final class Protos {
|
|||||||
org.bitcoinj.wallet.Protos.Extension.class,
|
org.bitcoinj.wallet.Protos.Extension.class,
|
||||||
org.bitcoinj.wallet.Protos.Extension.Builder.class);
|
org.bitcoinj.wallet.Protos.Extension.Builder.class);
|
||||||
internal_static_wallet_Wallet_descriptor =
|
internal_static_wallet_Wallet_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(5);
|
getDescriptor().getMessageTypes().get(6);
|
||||||
internal_static_wallet_Wallet_fieldAccessorTable = new
|
internal_static_wallet_Wallet_fieldAccessorTable = new
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_wallet_Wallet_descriptor,
|
internal_static_wallet_Wallet_descriptor,
|
||||||
|
@ -12,6 +12,7 @@ import com.google.bitcoin.core.NetworkParameters;
|
|||||||
import com.google.bitcoin.core.Transaction;
|
import com.google.bitcoin.core.Transaction;
|
||||||
import com.google.bitcoin.core.Utils;
|
import com.google.bitcoin.core.Utils;
|
||||||
import com.google.bitcoin.core.Wallet;
|
import com.google.bitcoin.core.Wallet;
|
||||||
|
import com.google.bitcoin.core.TransactionConfidence.ConfidenceType;
|
||||||
|
|
||||||
import org.bitcoinj.wallet.Protos;
|
import org.bitcoinj.wallet.Protos;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@ -73,12 +74,20 @@ public class WalletProtobufSerializerTest {
|
|||||||
ECKey k2 = new ECKey();
|
ECKey k2 = new ECKey();
|
||||||
BigInteger v2 = toNanoCoins(0, 50);
|
BigInteger v2 = toNanoCoins(0, 50);
|
||||||
Transaction t2 = wallet.sendCoinsOffline(k2.toAddress(params), v2);
|
Transaction t2 = wallet.sendCoinsOffline(k2.toAddress(params), v2);
|
||||||
|
t2.getConfidence().setConfidenceType(ConfidenceType.OVERRIDDEN_BY_DOUBLE_SPEND);
|
||||||
|
t2.getConfidence().setOverridingTransaction(t1);
|
||||||
|
t1.getConfidence().setConfidenceType(ConfidenceType.BUILDING);
|
||||||
|
t1.getConfidence().setAppearedAtChainHeight(123);
|
||||||
wallet1 = roundTrip(wallet);
|
wallet1 = roundTrip(wallet);
|
||||||
Transaction t1r = wallet1.getTransaction(t1.getHash());
|
Transaction t1r = wallet1.getTransaction(t1.getHash());
|
||||||
Transaction t2r = wallet1.getTransaction(t2.getHash());
|
Transaction t2r = wallet1.getTransaction(t2.getHash());
|
||||||
assertArrayEquals(t2.bitcoinSerialize(), t2r.bitcoinSerialize());
|
assertArrayEquals(t2.bitcoinSerialize(), t2r.bitcoinSerialize());
|
||||||
assertArrayEquals(t1.bitcoinSerialize(), t1r.bitcoinSerialize());
|
assertArrayEquals(t1.bitcoinSerialize(), t1r.bitcoinSerialize());
|
||||||
assertEquals(t1r.getOutputs().get(0).getSpentBy(), t2r.getInputs().get(0));
|
assertEquals(t1r.getOutputs().get(0).getSpentBy(), t2r.getInputs().get(0));
|
||||||
|
assertEquals(ConfidenceType.OVERRIDDEN_BY_DOUBLE_SPEND, t2r.getConfidence().getConfidenceType());
|
||||||
|
assertEquals(t1r, t2r.getConfidence().getOverridingTransaction());
|
||||||
|
assertEquals(ConfidenceType.BUILDING, t1r.getConfidence().getConfidenceType());
|
||||||
|
assertEquals(123, t1r.getConfidence().getAppearedAtChainHeight());
|
||||||
|
|
||||||
assertEquals(1, wallet1.getPendingTransactions().size());
|
assertEquals(1, wallet1.getPendingTransactions().size());
|
||||||
assertEquals(2, wallet1.getTransactions(true, true).size());
|
assertEquals(2, wallet1.getTransactions(true, true).size());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user