public class WalletProtobufSerializer
extends java.lang.Object
wallet.proto
file in the bitcoinj source distribution.
This class is used through its static methods. The most common operations are writeWallet and readWallet, which do
the obvious operations on Output/InputStreams. You can use a ByteArrayInputStream
and equivalent
ByteArrayOutputStream
if you'd like byte arrays instead. The protocol buffer can also be manipulated
in its object form if you'd like to modify the flattened data structure before serialization to binary.
You can extend the wallet format with additional fields specific to your application if you want, but make sure to either put the extra data in the provided extension areas, or select tag numbers that are unlikely to be used by anyone else.
Modifier and Type | Class and Description |
---|---|
static interface |
WalletProtobufSerializer.WalletFactory |
Modifier and Type | Field and Description |
---|---|
static int |
CURRENT_WALLET_VERSION
Current version used for serializing wallets.
|
protected java.util.Map<com.google.protobuf.ByteString,Transaction> |
txMap |
Constructor and Description |
---|
WalletProtobufSerializer() |
WalletProtobufSerializer(WalletProtobufSerializer.WalletFactory factory) |
Modifier and Type | Method and Description |
---|---|
static Sha256Hash |
byteStringToHash(com.google.protobuf.ByteString bs) |
static com.google.protobuf.ByteString |
hashToByteString(Sha256Hash hash) |
static boolean |
isWallet(java.io.InputStream is)
Cheap test to see if input stream is a wallet.
|
static Protos.Wallet |
parseToProto(java.io.InputStream input)
Returns the loaded protocol buffer from the given byte stream.
|
Wallet |
readWallet(java.io.InputStream input,
boolean forceReset,
WalletExtension[] extensions)
Loads wallet data from the given protocol buffer and inserts it into the given Wallet object.
|
Wallet |
readWallet(java.io.InputStream input,
WalletExtension... walletExtensions)
Loads wallet data from the given protocol buffer and inserts it into the given Wallet object.
|
Wallet |
readWallet(NetworkParameters params,
WalletExtension[] extensions,
Protos.Wallet walletProto)
Loads wallet data from the given protocol buffer and inserts it into the given Wallet object.
|
Wallet |
readWallet(NetworkParameters params,
WalletExtension[] extensions,
Protos.Wallet walletProto,
boolean forceReset)
Loads wallet data from the given protocol buffer and inserts it into the given Wallet object.
|
void |
setKeyChainFactory(KeyChainFactory keyChainFactory) |
void |
setRequireAllExtensionsKnown(boolean value)
If this property is set to true, the wallet will fail to load if any found extensions are unknown..
|
void |
setRequireMandatoryExtensions(boolean value)
If this property is set to false, then unknown mandatory extensions will be ignored instead of causing load
errors.
|
void |
setWalletWriteBufferSize(int walletWriteBufferSize)
Change buffer size for writing wallet to output stream.
|
Protos.Wallet |
walletToProto(Wallet wallet)
Converts the given wallet to the object representation of the protocol buffers.
|
java.lang.String |
walletToText(Wallet wallet)
Returns the given wallet formatted as text.
|
void |
writeWallet(Wallet wallet,
java.io.OutputStream output)
Formats the given wallet (transactions and keys) to the given output stream in protocol buffer format.
|
public static final int CURRENT_WALLET_VERSION
protected java.util.Map<com.google.protobuf.ByteString,Transaction> txMap
public WalletProtobufSerializer()
public WalletProtobufSerializer(WalletProtobufSerializer.WalletFactory factory)
public void setKeyChainFactory(KeyChainFactory keyChainFactory)
public void setRequireMandatoryExtensions(boolean value)
public void setRequireAllExtensionsKnown(boolean value)
public void setWalletWriteBufferSize(int walletWriteBufferSize)
CodedOutputStream.DEFAULT_BUFFER_SIZE
walletWriteBufferSize
- - buffer size in bytespublic void writeWallet(Wallet wallet, java.io.OutputStream output) throws java.io.IOException
Equivalent to walletToProto(wallet).writeTo(output);
java.io.IOException
public java.lang.String walletToText(Wallet wallet)
TextFormat.merge(CharSequence, Message.Builder)
,
it is designed more for debugging than storage. It is not well specified and wallets are largely binary data
structures anyway, consisting as they do of keys (large random numbers) and Transaction
s which also
mostly contain keys and hashes.public Protos.Wallet walletToProto(Wallet wallet)
public static com.google.protobuf.ByteString hashToByteString(Sha256Hash hash)
public static Sha256Hash byteStringToHash(com.google.protobuf.ByteString bs)
public Wallet readWallet(java.io.InputStream input, @Nullable WalletExtension... walletExtensions) throws UnreadableWalletException
Loads wallet data from the given protocol buffer and inserts it into the given Wallet object. This is primarily useful when you wish to pre-register extension objects. Note that if loading fails the provided Wallet object may be in an indeterminate state and should be thrown away.
A wallet can be unreadable for various reasons, such as inability to open the file, corrupt data, internally
inconsistent data, a wallet extension marked as mandatory that cannot be handled and so on. You should always
handle UnreadableWalletException
and communicate failure to the user in an appropriate manner.
UnreadableWalletException
- thrown in various error conditions (see description).public Wallet readWallet(java.io.InputStream input, boolean forceReset, @Nullable WalletExtension[] extensions) throws UnreadableWalletException
Loads wallet data from the given protocol buffer and inserts it into the given Wallet object. This is primarily
useful when you wish to pre-register extension objects. Note that if loading fails the provided Wallet object
may be in an indeterminate state and should be thrown away. Do not simply call this method again on the same
Wallet object with forceReset
set true
. It won't work.
If forceReset
is true
, then no transactions are loaded from the wallet, and it is configured
to replay transactions from the blockchain (as if the wallet had been loaded and Wallet.reset()
had been called immediately thereafter).
A wallet can be unreadable for various reasons, such as inability to open the file, corrupt data, internally
inconsistent data, a wallet extension marked as mandatory that cannot be handled and so on. You should always
handle UnreadableWalletException
and communicate failure to the user in an appropriate manner.
UnreadableWalletException
- thrown in various error conditions (see description).public Wallet readWallet(NetworkParameters params, @Nullable WalletExtension[] extensions, Protos.Wallet walletProto) throws UnreadableWalletException
Loads wallet data from the given protocol buffer and inserts it into the given Wallet object. This is primarily useful when you wish to pre-register extension objects. Note that if loading fails the provided Wallet object may be in an indeterminate state and should be thrown away.
A wallet can be unreadable for various reasons, such as inability to open the file, corrupt data, internally
inconsistent data, a wallet extension marked as mandatory that cannot be handled and so on. You should always
handle UnreadableWalletException
and communicate failure to the user in an appropriate manner.
UnreadableWalletException
- thrown in various error conditions (see description).public Wallet readWallet(NetworkParameters params, @Nullable WalletExtension[] extensions, Protos.Wallet walletProto, boolean forceReset) throws UnreadableWalletException
Loads wallet data from the given protocol buffer and inserts it into the given Wallet object. This is primarily
useful when you wish to pre-register extension objects. Note that if loading fails the provided Wallet object
may be in an indeterminate state and should be thrown away. Do not simply call this method again on the same
Wallet object with forceReset
set true
. It won't work.
If forceReset
is true
, then no transactions are loaded from the wallet, and it is configured
to replay transactions from the blockchain (as if the wallet had been loaded and Wallet.reset()
had been called immediately thereafter).
A wallet can be unreadable for various reasons, such as inability to open the file, corrupt data, internally
inconsistent data, a wallet extension marked as mandatory that cannot be handled and so on. You should always
handle UnreadableWalletException
and communicate failure to the user in an appropriate manner.
UnreadableWalletException
- thrown in various error conditions (see description).public static Protos.Wallet parseToProto(java.io.InputStream input) throws java.io.IOException
Wallet.loadFromFile(File, WalletExtension...)
instead - this method is designed for low level
work involving the wallet file format itself.java.io.IOException
public static boolean isWallet(java.io.InputStream is)
is
- input stream to test