Commit Graph

3938 Commits

Author SHA1 Message Date
Sean Gilligan
d347ef996e BlockFileLoader: stream() call streamBuffers()
`stream()` is `streamBuffers()` with a `map()` operation to
read a buffer into a Block. Make this more clear by removing
duplicated code.
2023-10-24 12:13:50 +02:00
Sean Gilligan
03d6d4cf87 build.gradle: update equalsverifier to 3.15.2 2023-10-24 11:57:41 +02:00
Sean Gilligan
e650f0f160 build.gradle: update Jackson to 2.15.3 2023-10-24 11:52:39 +02:00
Sean Gilligan
b8b64a339a build.gradle: update SLF4J to 2.0.9 2023-10-24 11:48:23 +02:00
Sean Gilligan
1b16d0b87f build.gradle: update Guava to 32.1.3-android 2023-10-24 11:46:11 +02:00
Andreas Schildbach
d326fadda0 WalletTool, BitcoinURITest: update fictious example URLs
- Use a subdomain of `example.com`
- Use HTTPS, though not strictly necessary with BIP-70
- Strip the `.php` suffix
2023-10-11 10:35:32 +02:00
Andreas Schildbach
432fa51168 EncryptedData, KeyCrypter, KeyCrypterScrypt: update links to MIT license 2023-10-09 10:11:33 +02:00
Sean Gilligan
f190f589e6 TransactionBroadcast: allow interrupt in dropPeerAfterBroadcastHandler()
If an `InterruptedException` occurs while sleeping in `dropPeerAfterBroadcastHandler()`,
close the peer immediately instead of delaying the exception to preserve a full 1-second
delay.

Peers/PeerGroups can be shut down, and they should shut down as quickly as possible.
2023-10-03 23:03:02 +02:00
Sean Gilligan
5513f7dff0 InternalUtils: new helper getUninterruptibly() to replace Guava method
Update usages in `PeerGroup` and `PeerTest`.
2023-10-02 20:44:46 +02:00
Sean Gilligan
04a783282d FakeTxBuilder: make BlockPair fields immutable 2023-10-02 20:38:48 +02:00
Sean Gilligan
fea737b39b Address, AddressParser: improve JavaDoc regarding network normalization 2023-10-02 20:35:12 +02:00
Sean Gilligan
3dd29e2d3a build.gradle: apply artifact normalization to all subprojects
Normalization is needed for reproducibility. Previously it was
applied only to `core`.
2023-10-01 09:41:06 +02:00
Andreas Schildbach
a9b9af8102 PeerGroup: check required services on discovered addresses via addr/addrv2
If the discovered peer has the required services, mark it with a slightly
higher priority than peers discovered via `PeerDiscovery`.
2023-10-01 09:27:43 +02:00
Sean Gilligan
2526f5c78a BitcoinSerializer: use Network not NetworkParameters
Also deprecate (unused) method `getParameters()`.
2023-09-30 18:27:28 +02:00
Andreas Schildbach
8bf4f57888 BitcoinSerializer: remove a whitespace at EOL 2023-09-30 18:23:37 +02:00
Andreas Schildbach
6686782ffa ECKey: remove native interface to libsecp256k1
Of course, Bouncy Castle is still used.
2023-09-30 18:06:55 +02:00
Sean Gilligan
576adf229b PBKDF2SHA512: remove redundant Mac.reset() calls
Calls to `Mac.reset()` are not needed after `Mac.doFinal(input)`.
2023-09-25 15:21:13 +02:00
Sean Gilligan
3023188541 PBKDF2SHA512: simplify F() by using ByteUtils.concat() 2023-09-25 15:14:07 +02:00
Sean Gilligan
053cd60dc5 PBKDF2SHA512: chain methods in INT()
Simplify slightly by using a more functional-style approach.
2023-09-25 15:11:15 +02:00
Sean Gilligan
e67401d7a5 PBKDF2SHA512: add JavaDoc comment to derive() method 2023-09-25 15:08:00 +02:00
Andreas Schildbach
0d57e1ece1 MnemonicCode: fix comment about iteration count 2023-09-25 15:04:17 +02:00
Sean Gilligan
56658e44de build.gradle: normalize file/directory permissions within JARs
This aims to make our build reprodicible.
2023-09-19 14:00:38 +02:00
Andreas Schildbach
f41b495610 build.gradle: strip timestamps from JavaDoc HTMLs
This aims to make our build reprodicible.
2023-09-16 22:09:51 +02:00
Andreas Schildbach
7605fa9535 build.gradle: strip timestamps from JARs
This aims to make our build reprodicible.
2023-09-16 22:08:45 +02:00
Sean Gilligan
81b78292e2 PeerGroup, FilterMerger: deprecate setting false-positive rate
In the bitcoinj code itself, the false-positive rate is never changed
after constructing a `PeerGroup` or a `FilterMerger`.

* Deprecate methods for setting Bloom Filter FP rate in both methods
* Add constructor params to `PeerGroup` so they can be set at construction
  time, if non-default values are needed
2023-09-16 11:42:24 +02:00
Sean Gilligan
5955eee4c8 Wallet: replace Interables.concat() with Stream.concat() in getWatchedOutputs()
This simplifies the code and removes a Guava dependency.
2023-09-16 11:31:32 +02:00
Sean Gilligan
68e61d9507 Wallet: refactor getWatchedOutputs() to use streams
1. Get a spliterator from the concatenated iterator
2. Use streams instead of nested loops
3. Extract `isWatchedScriptPubKey()` helper function
2023-09-16 11:28:56 +02:00
Sean Gilligan
bce4475aaf replace Guava Bytes.concat() with own ByteUtils.concat() 2023-09-16 11:22:11 +02:00
Sean Gilligan
daa4da8d9f remove use of Guava @VisibleForTesting on all package-private members
From now on we will only use this annotation on `public` or `protected` members.
2023-09-16 11:13:22 +02:00
Sean Gilligan
57b3649e55 PBKDF2SHA512: replace unneeded check for max dkLen with comment
Since the check for `dkLen > (2^32 - 1) * H_LEN` is effectively a no-op,
replace it with a comment.
2023-09-16 09:07:50 +02:00
Sean Gilligan
b4f7deaba5 PBKDF2SHA512: calculate l with integer math 2023-09-14 22:46:25 +02:00
Sean Gilligan
5a11957eb3 PBKDF2SHA512: declare/catch specific exceptions
Make it more clear which exceptions are thrown by `F` and caught by
the `try` in `derive()`.
2023-09-14 22:39:58 +02:00
Sean Gilligan
ee23c2d6ff PBKDF2SHA512: don't allow negative count or dkLen 2023-09-14 22:37:09 +02:00
Sean Gilligan
140deb0669 PBKDF2SHA512: move dkLen check out of try/catch
It throws an exception so doesn't need an if/else
and it also doesn't need to be in the try.
2023-09-14 22:34:12 +02:00
Sean Gilligan
4e039df446 PBKDF2SHA512: make hLen a constant 2023-09-14 18:25:31 +02:00
Sean Gilligan
c830107bce PBKDF2SHA512: set hLen to correct value of 64
This is a bugfix to the API, but since `MnemonicCode` always
passes `dkLen` of 64 and the `System.arraycopy()` on line 66 truncates
`baos.toByteArray()` to `dkLen` length, the call to `derive()` works
correctly for our use-case.
2023-09-14 18:21:53 +02:00
Andreas Schildbach
4b987cb172 PBKDF2SHA512: remove comment about SHA-1 test vectors
They won't pass against our SHA-512 based code, and we have
our tests now.
2023-09-14 17:07:23 +02:00
Andreas Schildbach
040e2f4b3e PBKDF2SHA512Test: tests for PBKDF2SHA512.derive() 2023-09-14 08:17:53 +02:00
Sean Gilligan
b90af12aea PBKDF2SHA512: update URLs in JavaDoc
The IETF `https:` URLs are what the previous `http:` URLs redirect to.
The Cryptofreak URL is the same but with `https:`.
2023-09-12 22:18:19 +02:00
Sean Gilligan
f7d2b38aae PBKDF2SHA512: properly format JavaDoc 2023-09-12 22:16:48 +02:00
Sean Gilligan
7af3124f65 FilteringCoinSelector: use stream in select()
Note: this also prevents mutation of the candidate list which isn't
a problem as used within bitcoinj, but could be a problem if used
externally.
2023-09-12 19:01:41 +02:00
Sean Gilligan
0597c3383f CoinSelector: mark as functional interface
The `@FunctionalInterface` annotation doesn't change behavior of `CoinSelector`
in any way. It just declares our intention that it be used as a functional
interface and will generate compiler errors if someone changes the code so that
it is no longer a SAM type.
2023-09-12 18:46:18 +02:00
Sean Gilligan
bd52545fb7 DefaultCoinSelector: use List.sort() instead of Collections.sort() 2023-09-12 18:36:24 +02:00
Sean Gilligan
2be7ee33f8 DefaultCoinSelector: extract compareByDepth() comparator 2023-09-12 18:34:24 +02:00
Sean Gilligan
9eaff37897 FilteringCoinSelector: make immutable
This is an API-breaking change because it requires a list of
`TransactionOutPoint` to be passed to the constructor and remove the
`excludesOutputsSpentBy(tx)` method.

`Wallet` is updated to use the new constructor.
2023-09-12 18:30:30 +02:00
Sean Gilligan
82feb7b831 CoinSelection: add defensive copy in constructor 2023-09-12 18:22:34 +02:00
Sean Gilligan
e8491bbd88 KeyTimeCoinSelector: use a stream in select()
Note that this removes the warning about exceeding the limit.
2023-09-12 18:19:14 +02:00
Sean Gilligan
339e0d0450 KeyTimeCoinSelector: factor out method isKeyBeforeCutoff() 2023-09-12 18:12:56 +02:00
Sean Gilligan
0c7e1aec3b KeyTimeCoinSelector: use Wallet.getConfidence(parent) in isConfirmed()
Also make `Wallet.getConfidence(parent)` package-private.
2023-09-12 18:09:06 +02:00
Sean Gilligan
bbe7f088ca KeyTimeCoinSelector: check for parent is non-null in isConfirmed() 2023-09-12 18:05:07 +02:00
Sean Gilligan
110da96911 Wallet: use getAbsoluteFile() when checking if parent directory exists
This fixes a NPE when using wallet-tool to create a new wallet on a path
without directory, e.g. `wallet-tool create --wallet=test.wallet`.
2023-09-07 17:44:04 +02:00
Andreas Schildbach
929088cde8 Sha256Hash: add back accessor getReversedBytes() as deprecated 2023-09-07 10:55:34 +02:00
Andreas Schildbach
2cdbc986a8 VersionMessage: add back helper toStringServices() as deprecated 2023-09-07 10:53:06 +02:00
Andreas Schildbach
e2b1c81b60 TransactionOutput: add back a constructor as deprecated 2023-09-07 10:49:58 +02:00
Sean Gilligan
c8bf030824 build.gradle: update EasyMock to 5.2.0 2023-09-02 18:09:47 +02:00
Andreas Schildbach
21549306ad build.gradle: generate protobuf classes into the build directory 2023-09-02 16:31:26 +02:00
Sean Gilligan
4b2a5893ff Peer: improve use of generics for GetDataRequest
This gets rid of several warnings including two that had been suppressed.
2023-09-02 00:58:26 +02:00
Sean Gilligan
0033918f82 Transaction: reduce visibility of two methodsn
This is a minor breaking change to anything relying on the methods that
now have package visibility, but that should be very rare.
2023-09-01 19:02:07 +02:00
Sean Gilligan
5ff114b7b8 TxConfidenceTable: new method getConfidence(Transaction)
Use it in `Wallet`.
2023-09-01 18:59:07 +02:00
Sean Gilligan
dfcaa97b6e Wallet: use getConfidence(Transaction) not Transaction.getConfidence() 2023-09-01 18:55:08 +02:00
Sean Gilligan
d45cccc8d6 CoinSelector: new static method fromPredicate() to create CoinSelector
Use it in `ForwardingService`.
2023-09-01 18:38:14 +02:00
Sean Gilligan
111a8b8a37 ListMessage, InventoryMessage, GetDataMessage: make immutable (after deprecations removed)
Make `ListMessage` and its subclasses "almost" immutable. When the deprecated
`addItem()`, `removeItem()`, etc. methods are removed and the constructors are
changed to create an ummodifiable `List`, they will be immutable.
2023-09-01 18:24:58 +02:00
Sean Gilligan
9d78d2bd9e Wallet: add getConfidence(tx) method and use it in waitForConfirmations()
The other `getConfidence()` methods in `Transaction` eventually call the one that
takes a `TxConfidenceTable`, so we call that one directly.

Also prepares for not using `Transaction` to find the `TransactionConfidence`.
2023-09-01 18:15:52 +02:00
Sean Gilligan
19fcdcdd5b TestFeeLevel, WalletTest: use Wallet.waitForConfirmations() instead of Transaction.getConfidence().getDepthFuture() 2023-08-25 23:42:39 +02:00
Sean Gilligan
c4714f64f8 TransactionConfidence: store overriding txId, rather than transaction reference
This is a breaking change as `getOverridingTransaction()` has been removed with a replacement
of `getOverridingTxId()`.

Note that ProtoBuf serialization only stores the txId, so this change does not affect
serialization/deserialization.
2023-08-25 23:39:17 +02:00
Sean Gilligan
14eb9ebf00 TxConfidenceTable: reduce access to fields of WeakConfidenceReference inner class
* Remove unneeded public modifier from `hash` member and constructor
* Make `hash` member final
2023-08-25 23:34:06 +02:00
Sean Gilligan
9da2182415 ListenerRegistration: use streams and Optional in removeFromList() 2023-08-25 23:28:37 +02:00
Sean Gilligan
027037c8d5 TransactionFuture: make 2-arg getDepthFuture() private
Hopefully we can deprecate or make private the 1-arg variant soon.
2023-08-25 23:26:00 +02:00
Sean Gilligan
624df43ada DnsDiscovery: remove Linux gethostbyname bug workaround from 2015 2023-08-25 23:23:18 +02:00
Sean Gilligan
07ca73cce7 ByteArray: add defensive copy in bytes() getter 2023-08-25 23:17:04 +02:00
Sean Gilligan
59ab13680d BlockFileLoader: make stream of ByteBuffer available
* Inner class `BlockFileIterator` now iterates `ByteBuffer`
* `stream()` method calls `MessageSerializer.makeBlock()`
* `streamBuffers()` method makes raw `ByteBuffer` blocks available
* Add integration test `streamEntireBitcoindBlockChainAsBuffers()`
2023-08-23 18:21:01 +02:00
Sean Gilligan
47129b91e5 BlockFileLoader: buffer reading of block files
For now, use 16MB of buffer. That's enough to hold 16 "full" 1MB blocks.
2023-08-23 18:03:18 +02:00
Sean Gilligan
c5cbff1e47 BlockFileLoader: fix end-of-file handling issue
When reads return fewer bytes than requested, it's either an end-of-file
or an error. For now, we'll treat it as end-of-file.
2023-08-23 17:58:35 +02:00
Sean Gilligan
2248513489 BlockFileLoader: effectively final sizeBytes, dataBytes
When reading blocks from the file stream use two effectively final
`byte[]` rather than reuse a single `byte[]`. This also makes the code
more readable by using more meaningful variable names.
2023-08-23 10:44:40 +02:00
Sean Gilligan
7776f7c907 BlockFileLoader: refactor to use single-file Block iterator internally
* Replace iterator that iterates all blocks in a file list with iterator
  that iterates all blocks in a single file
* Rewrite stream() to use flatMap() on a stream of blocks in a file (internally
  using BlockFileIterator)
* Rewrite iterator() to use stream()

This is a step towards a standalone capability to iterate/stream the blocks
in a single .dat file. It also is a step towards higher-performance
implementations that can use multiple threads.
2023-08-23 10:41:45 +02:00
Sean Gilligan
18126e368b BlockFileLoader: add stream() 2023-08-23 10:37:19 +02:00
Sean Gilligan
46b2704f79 BlockFileLoader: correct Iterable implementation
To be iterable, `iterator()` must be able to be called twice.

This is a breaking change, as users will no longer be able to use
`BlockFileLoader` directly as an `Iterator` and must call
`.iterator()` first. See the change in `BitcoindComparisonTool`.

Also adds tests.
2023-08-23 10:35:32 +02:00
Sean Gilligan
9d81529eaa TransactionConfidence: convert Factory to interface 2023-08-23 10:24:22 +02:00
Sean Gilligan
dd401ec04a TransactionConfidence: make Factory package private
Also mark as `@VisibleForTesting`.
2023-08-23 10:20:24 +02:00
Sean Gilligan
512a71d342 TransactionConfidence: make fields broadcastBy, listeners final 2023-08-23 10:13:46 +02:00
Sean Gilligan
f998802df7 TxConfidenceTable: extract private methods getConfidence() and newConfidence()
This makes the code more functional and more readable.
2023-08-23 10:10:25 +02:00
Sean Gilligan
0a4592f189 BloomFilter: make hashFuncs, nTweak, and nFlags final 2023-08-23 10:02:29 +02:00
Sean Gilligan
9bc0140910 Wallet: use Set interface (instead of HashSet) in internal declarations 2023-08-23 09:57:36 +02:00
Sean Gilligan
6de5c2b9a8 Wallet: declare CompletionException on methods that complete transactions
Adjust the signature of these methods to match the actual behavior
and the JavaDoc.

Note: `BadWalletEncryptionKeyException` is a subclass
of `CompletionException` which is unchecked.
2023-08-11 14:11:38 +02:00
Sean Gilligan
5d708b62d4 Wallet: document return value of adjustOutputDownwardsForFee() in JavaDoc 2023-08-10 19:39:57 +02:00
Sean Gilligan
cc88c3a9d4 Wallet: use functional style in method calcBloomOutPointsLocked() 2023-08-10 19:31:30 +02:00
Andreas Schildbach
7c1209db51 Wallet: use messageSize() not serialize().length 2023-08-10 19:24:24 +02:00
Sean Gilligan
60a37657d5 TransactionOutput: use messageSize() not serialize().length 2023-08-10 19:20:28 +02:00
Andreas Schildbach
6b38774a38 PartialMerkleTree: rename method messageSize() from getMessageSize()
Keep the old method as deprecated.
2023-08-10 18:59:58 +02:00
Andreas Schildbach
e7b11c0713 TransactionWitness: rename method messageSize() from getMessageSize()
Keep the old method as deprecated.
2023-08-10 18:57:20 +02:00
Andreas Schildbach
c58232ef75 TransactionInput: rename method messageSize() from getMessageSize()
Keep the old method as deprecated.
2023-08-10 18:54:15 +02:00
Sean Gilligan
210eaf91b3 TransactionOutput: rename method messageSize() from getMessageSize()
Keep the old method as deprecated.
2023-08-10 18:49:25 +02:00
Andreas Schildbach
591ff3a027 TorUtils: new utility for Tor/Onion addresses
Move Tor/Onion related code there.

Also adds tests.
2023-08-10 18:11:47 +02:00
Sean Gilligan
16ac8751bb Block: add new constructors to reduce mutability
* New constructors and static factory methods
* Update code to use the new constructors
* Remove `public` from `@VisibleForTesting` setters where possible
2023-08-09 16:55:24 +02:00
Sean Gilligan
734993db68 TransactionWitness: use non-deprecated Script.program() 2023-08-09 16:50:48 +02:00
Sean Gilligan
90427cd7cd WalletAppKit: use non-deprecated Wallet.autosaveToFile() 2023-08-09 16:48:02 +02:00
Sean Gilligan
87a8383aae TransactionOutput: clarify isDust() JavaDoc 2023-08-09 16:46:15 +02:00
Andreas Schildbach
041f394a8a DnsDiscovery, BtcFixedFormat: fix some JavaDoc links 2023-08-09 16:45:03 +02:00
Andreas Schildbach
1e4b633161 Wallet, SPVBlockStore: fix misspelled "whether" in JavaDocs 2023-08-09 16:42:11 +02:00
Sean Gilligan
370c5d382c Wallet: add more diagnostic info to InsufficientMoneyException
Add a new constructor that provides more information about available funds, total
outputs, and fee in addition to amount missing. Use it in `Wallet.calculatFee` to
provide more information when the exception occurs.
2023-08-09 11:19:42 +02:00